From ec1ebf8ad744f0e7060c839a019c0a9806bd3e85 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin Date: Mon, 24 Oct 2011 20:07:00 -0400 Subject: Fixes a bug on FEC+stereo When FEC is enabled in the decoder but not included in the bit-stream we could end up applying the PLC on a non-existant side. --- silk/dec_API.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'silk/dec_API.c') diff --git a/silk/dec_API.c b/silk/dec_API.c index a5510771..58cf59a8 100644 --- a/silk/dec_API.c +++ b/silk/dec_API.c @@ -89,6 +89,7 @@ opus_int silk_Decode( opus_int16 *resample_out_ptr; silk_decoder *psDec = ( silk_decoder * )decState; silk_decoder_state *channel_state = psDec->channel_state; + opus_int has_side; /**********************************/ /* Test if first frame in payload */ @@ -236,9 +237,15 @@ opus_int silk_Decode( psDec->channel_state[ 1 ].first_frame_after_reset = 1; } + if (lostFlag == FLAG_DECODE_NORMAL) { + has_side = !decode_only_middle; + } else { + has_side = !psDec->prev_decode_only_middle + || (decControl->nChannelsInternal == 2 && lostFlag == FLAG_DECODE_LBRR && channel_state[1].LBRR_flags[ channel_state[1].nFramesDecoded ] == 1 ); + } /* Call decoder for one frame */ for( n = 0; n < decControl->nChannelsInternal; n++ ) { - if( n == 0 || ( ( lostFlag != FLAG_PACKET_LOST ? decode_only_middle : psDec->prev_decode_only_middle ) == 0 ) ) { + if( n == 0 || has_side ) { opus_int FrameIndex; opus_int condCoding; -- cgit v1.2.1