diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2011-09-27 17:12:23 -0400 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2011-09-27 17:12:23 -0400 |
commit | 9826ed99c36504ad466feeadacf5e2ced1518c4a (patch) | |
tree | a690b0c4b6bc3c06ad2ba9a674481f3f843f3b69 /silk/decoder_set_fs.c | |
parent | 9f90e57a9b785682bc52e3cacf0d9f85637ea5d1 (diff) | |
download | opus-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.c | 15 |
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; |