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

gitlab.com/quite/celt.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy B. Terriberry <tterribe@xiph.org>2011-03-03 02:28:08 +0300
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>2011-03-03 05:14:04 +0300
commit115fa35a9db045aefe77686edc0468b060ec42df (patch)
tree7b945deb732d38dfe23caac263852c241ee688b0
parent168888f7a3c2892fecd90ee534a3404bd5ccf988 (diff)
Fix CNG when effEBands is less than nbEBands.
We were trying to normalize bands that didn't actually exist (e.g., the last band with 320-sample frames at 32kHz). Thanks to John Ridges for the report.
-rw-r--r--libcelt/celt.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/libcelt/celt.c b/libcelt/celt.c
index 31d35f8..ccab29d 100644
--- a/libcelt/celt.c
+++ b/libcelt/celt.c
@@ -1967,17 +1967,26 @@ static void celt_decode_lost(CELTDecoder * restrict st, celt_word16 * restrict p
log2Amp(st->mode, st->start, st->end, bandE, backgroundLogE, C);
seed = st->rng;
- for (i=0;i<C*N;i++)
+ for (c=0;c<C;c++)
{
- seed = lcg_rand(seed);
- X[i] = (celt_int32)(seed)>>20;
+ for (i=0;i<st->mode->effEBands;i++)
+ {
+ int j;
+ int boffs;
+ int blen;
+ boffs = N*c+(st->mode->eBands[i]<<LM);
+ blen = (st->mode->eBands[i+1]-st->mode->eBands[i])<<LM;
+ for (j=0;j<blen;j++)
+ {
+ seed = lcg_rand(seed);
+ X[boffs+j] = (celt_int32)(seed)>>20;
+ }
+ renormalise_vector(X+boffs, blen, Q15ONE);
+ }
}
st->rng = seed;
- for (c=0;c<C;c++)
- for (i=0;i<st->mode->nbEBands;i++)
- renormalise_vector(X+N*c+(st->mode->eBands[i]<<LM), (st->mode->eBands[i+1]-st->mode->eBands[i])<<LM, Q15ONE);
- denormalise_bands(st->mode, X, freq, bandE, st->mode->nbEBands, C, 1<<LM);
+ denormalise_bands(st->mode, X, freq, bandE, st->mode->effEBands, C, 1<<LM);
compute_inv_mdcts(st->mode, 0, freq, out_syn, overlap_mem, C, LM);
plc = 0;