summaryrefslogtreecommitdiff
path: root/silk/decoder_set_fs.c
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@jmvalin.ca>2011-09-27 17:12:23 -0400
committerJean-Marc Valin <jmvalin@jmvalin.ca>2011-09-27 17:12:23 -0400
commit9826ed99c36504ad466feeadacf5e2ced1518c4a (patch)
treea690b0c4b6bc3c06ad2ba9a674481f3f843f3b69 /silk/decoder_set_fs.c
parent9f90e57a9b785682bc52e3cacf0d9f85637ea5d1 (diff)
downloadopus-9826ed99c36504ad466feeadacf5e2ced1518c4a.tar.gz
Fixes a glitch on SILK frame size switching
We no longer reset the decoder predictors when switching only the frame size and not the sampling rate. The encoder already doesn't reset.
Diffstat (limited to 'silk/decoder_set_fs.c')
-rw-r--r--silk/decoder_set_fs.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/silk/decoder_set_fs.c b/silk/decoder_set_fs.c
index 02cdff00..be29a977 100644
--- a/silk/decoder_set_fs.c
+++ b/silk/decoder_set_fs.c
@@ -69,15 +69,18 @@ void silk_decoder_set_fs(
psDec->psNLSF_CB = &silk_NLSF_CB_WB;
}
- /* Reset part of the decoder state */
- silk_memset( psDec->sLPC_Q14, 0, sizeof( psDec->sLPC_Q14 ) );
- silk_memset( psDec->outBuf, 0, MAX_FRAME_LENGTH * sizeof( opus_int16 ) );
- silk_memset( psDec->prevNLSF_Q15, 0, sizeof( psDec->prevNLSF_Q15 ) );
-
+ if( psDec->fs_kHz != fs_kHz)
+ {
+ /* Reset part of the decoder state */
+ silk_memset( psDec->sLPC_Q14, 0, sizeof( psDec->sLPC_Q14 ) );
+ silk_memset( psDec->outBuf, 0, MAX_FRAME_LENGTH * sizeof( opus_int16 ) );
+ silk_memset( psDec->prevNLSF_Q15, 0, sizeof( psDec->prevNLSF_Q15 ) );
+ }
psDec->lagPrev = 100;
psDec->LastGainIndex = 10;
psDec->prevSignalType = TYPE_NO_VOICE_ACTIVITY;
- psDec->first_frame_after_reset = 1;
+ if( psDec->fs_kHz != fs_kHz)
+ psDec->first_frame_after_reset = 1;
if( fs_kHz == 16 ) {
psDec->pitch_lag_low_bits_iCDF = silk_uniform8_iCDF;