Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.xiph.org/xiph/opus.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jean-marc.valin@octasic.com>2011-02-02 17:39:30 +0300
committerJean-Marc Valin <jean-marc.valin@octasic.com>2011-02-02 17:39:30 +0300
commit44cbe6ea0d032d842952dabbcb1d1900923afa89 (patch)
treef62d567ffbedb195f4bdf72e73a1f36c469ca2d3
parentd9ad6e113c5ca3b01543d7bccf0a98f8fc40d8c0 (diff)
PLC fix
-rw-r--r--src/opus_decoder.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/opus_decoder.c b/src/opus_decoder.c
index f8a1f979..5dd3b5ab 100644
--- a/src/opus_decoder.c
+++ b/src/opus_decoder.c
@@ -72,7 +72,6 @@ OpusDecoder *opus_decoder_create(int Fs, int channels)
st->celt_dec = celt_decoder_init(st->celt_dec, Fs, channels, NULL);
return st;
-
}
int opus_decode(OpusDecoder *st, const unsigned char *data,
int len, short *pcm, int frame_size)
@@ -118,6 +117,8 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
data += 1;
ec_byte_readinit(&buf,(unsigned char*)data,len);
ec_dec_init(&dec,&buf);
+ } else {
+ audiosize = frame_size;
}
if (audiosize > frame_size)
@@ -128,6 +129,7 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
frame_size = audiosize;
}
+ /* SILK processing */
if (st->mode != MODE_CELT_ONLY)
{
SKP_int16 *pcm_ptr = pcm;
@@ -148,9 +150,6 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
DecControl.internalSampleRate = 16000;
}
- /* FIXME: Add a check here to avoid a buffer overflow if there are more
- samples in the SILK frame. In fact the TOC byte should tell us how many
- frames there are */
do {
/* Call SILK decoder */
silk_ret = SKP_Silk_SDK_Decode( st->silk_dec, &DecControl, data == NULL, &dec, len, pcm_ptr, &silk_frame_size );
@@ -195,7 +194,7 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
celt_decoder_ctl(st->celt_dec, CELT_SET_END_BAND(endband));
celt_decoder_ctl(st->celt_dec, CELT_SET_CHANNELS(st->stream_channels));
- /* Encode high band with CELT */
+ /* Decode CELT */
celt_ret = celt_decode_with_ec(st->celt_dec, data, len, pcm_celt, frame_size, &dec);
for (i=0;i<frame_size*st->channels;i++)
pcm[i] = ADD_SAT16(pcm[i], pcm_celt[i]);