summaryrefslogtreecommitdiff
path: root/silk/dec_API.c
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2011-10-24 20:07:00 -0400
committerJean-Marc Valin <jmvalin@jmvalin.ca>2011-10-24 20:07:00 -0400
commitec1ebf8ad744f0e7060c839a019c0a9806bd3e85 (patch)
treec10850e1b48de689598db509cfa6db1d9a6ae151 /silk/dec_API.c
parenta7585a0dd1ad7cb668937e89d4334b36b8654684 (diff)
downloadopus-ec1ebf8ad744f0e7060c839a019c0a9806bd3e85.tar.gz
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.
Diffstat (limited to 'silk/dec_API.c')
-rw-r--r--silk/dec_API.c9
1 files changed, 8 insertions, 1 deletions
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;