Fix PLC-based mode transition code.

This commit is contained in:
Jean-Marc Valin 2011-03-03 15:50:08 -05:00
parent e2a09db92b
commit a93f501cfa
2 changed files with 10 additions and 5 deletions

View file

@ -84,7 +84,7 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
int mode;
int transition=0;
int start_band;
int redundancy;
int redundancy=0;
/* Payloads of 1 (2 including ToC) or 0 trigger the PLC/DTX */
if (len<=2)
@ -189,21 +189,23 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
}
start_band = 0;
if (mode == MODE_HYBRID)
if (mode == MODE_HYBRID && data != NULL)
{
/* Check if we have a redundant 0-8 kHz band */
redundancy = ec_dec_bit_logp(&dec, 12);
if (!redundancy)
start_band = 17;
}
celt_decoder_ctl(st->celt_dec, CELT_SET_START_BAND(start_band));
if (redundancy)
transition = 0;
if (transition && mode != MODE_CELT_ONLY)
opus_decode(st, NULL, 0, pcm_transition, IMAX(480, audiosize), 0);
/* MUST be after PLC */
celt_decoder_ctl(st->celt_dec, CELT_SET_START_BAND(start_band));
if (mode != MODE_SILK_ONLY)
{
int endband;

View file

@ -157,7 +157,10 @@ int opus_encode(OpusEncoder *st, const short *pcm, int frame_size,
/* Call SILK encoder for the low band */
nBytes = max_data_bytes-1;
if (prefill)
SKP_Silk_SDK_Encode( st->silk_enc, &st->silk_mode, st->delay_buffer, ENCODER_BUFFER, NULL, 0, 1 );
{
int zero=0;
SKP_Silk_SDK_Encode( st->silk_enc, &st->silk_mode, st->delay_buffer, ENCODER_BUFFER, NULL, &zero, 1 );
}
ret = SKP_Silk_SDK_Encode( st->silk_enc, &st->silk_mode, pcm, frame_size, &enc, &nBytes, 0 );
if( ret ) {