Misc bug fixes

- There was a bug where the decoder resampler was not properly initialized
when fs_kHz == API_fs_kHz. In that case the resampler would continue to
upsample, and the output was corrupt.

- The delay value in the decoder was taken from the state before it was
potentially updated. This caused the decoder to apply the new dalay value one
frame late

- The encoder and decoder states are now updated more consistently, when
the sampling rate changes (pesq liked these changes)

- Properly resetting the side channel encoder and decoder for the first
frame with side coding active again

- Faster updating the "ratio" value in the LR_to_MS() code for large
prediction values means that for certain extreme/artificial input
signals the output looks better
This commit is contained in:
Jean-Marc Valin 2011-10-11 21:09:14 -04:00
parent a4885a5fd5
commit b24e574627
15 changed files with 190 additions and 137 deletions

View file

@ -802,9 +802,7 @@ int opus_decoder_ctl(OpusDecoder *st, int request, ...)
if (st->prev_mode == MODE_CELT_ONLY)
celt_decoder_ctl(celt_dec, OPUS_GET_PITCH(value));
else
*value = ((silk_decoder_state*)silk_dec)->indices.signalType == TYPE_VOICED
? ((silk_decoder_state*)silk_dec)->lagPrev*48/((silk_decoder_state*)silk_dec)->fs_kHz
: 0;
*value = st->DecControl.prevPitchLag;
}
break;
default: