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@usherbrooke.ca>2011-02-16 08:41:04 +0300
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>2011-02-16 08:41:04 +0300
commitca869b2ee46b294f9a8fecfefc9a67293bf97a57 (patch)
tree35483a7148cd8ee50bf3dd51dac511881abfda3d
parent73870719a2cceb4aeb5465eb2f5ee15f1c4b58c6 (diff)
Makes sure there's a PLC-only region in the mode transition
-rw-r--r--src/opus_decoder.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/opus_decoder.c b/src/opus_decoder.c
index e4f4d677..41671ebe 100644
--- a/src/opus_decoder.c
+++ b/src/opus_decoder.c
@@ -225,15 +225,17 @@ int opus_decode(OpusDecoder *st, const unsigned char *data,
if (transition)
{
- int tlength;
+ int plc_length, overlap;
if (mode == MODE_CELT_ONLY)
- tlength = IMIN(audiosize, 10+st->Fs/200);
+ plc_length = IMIN(audiosize, 10+st->Fs/200);
else
- tlength = IMIN(audiosize, 10+st->Fs/400);
- for (i=0;i<audiosize;i++)
- {
- pcm[i] = (i*pcm[i] + (audiosize-i)*pcm_transition[i])/audiosize;
- }
+ plc_length = IMIN(audiosize, 10+st->Fs/400);
+ for (i=0;i<plc_length;i++)
+ pcm[i] = pcm_transition[i];
+
+ overlap = IMIN(480, IMAX(0, audiosize-plc_length));
+ for (i=0;i<overlap;i++)
+ pcm[plc_length+i] = (i*pcm[plc_length+i] + (overlap-i)*pcm_transition[plc_length+i])/overlap;
}
#if OPUS_TEST_RANGE_CODER_STATE
st->rangeFinal = dec.rng;