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:
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>2011-03-17 05:03:15 +0300
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>2011-03-17 05:03:15 +0300
commit1a8bf37dbaa461d410c101d1be302a67b4927035 (patch)
tree4aaa13fa08e5cbb578f4a809e3e64fcf257fa36a
parent37e788c185a98cde764f391f497d5dc76bd0599d (diff)
Taking into account the start and end bands in CNG
-rw-r--r--libcelt/celt.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/libcelt/celt.c b/libcelt/celt.c
index a0ac059..b6711ae 100644
--- a/libcelt/celt.c
+++ b/libcelt/celt.c
@@ -1988,6 +1988,11 @@ static void celt_decode_lost(CELTDecoder * restrict st, celt_word16 * restrict p
VARDECL(celt_norm, X);
VARDECL(celt_ener, bandE);
celt_uint32 seed;
+ int effEnd;
+
+ effEnd = st->end;
+ if (effEnd > st->mode->effEBands)
+ effEnd = st->mode->effEBands;
ALLOC(freq, C*N, celt_sig); /**< Interleaved signal MDCTs */
ALLOC(X, C*N, celt_norm); /**< Interleaved normalised MDCTs */
@@ -1998,6 +2003,8 @@ static void celt_decode_lost(CELTDecoder * restrict st, celt_word16 * restrict p
seed = st->rng;
for (c=0;c<C;c++)
{
+ for (i=0;i<(st->mode->eBands[st->start]<<LM);i++)
+ X[c*N+i] = 0;
for (i=0;i<st->mode->effEBands;i++)
{
int j;
@@ -2012,11 +2019,24 @@ static void celt_decode_lost(CELTDecoder * restrict st, celt_word16 * restrict p
}
renormalise_vector(X+boffs, blen, Q15ONE);
}
+ for (i=(st->mode->eBands[st->end]<<LM);i<N;i++)
+ X[c*N+i] = 0;
}
st->rng = seed;
denormalise_bands(st->mode, X, freq, bandE, st->mode->effEBands, C, 1<<LM);
+ c=0; do
+ for (i=0;i<st->mode->eBands[st->start]<<LM;i++)
+ freq[c*N+i] = 0;
+ while (++c<C);
+ c=0; do {
+ int bound = st->mode->eBands[effEnd]<<LM;
+ if (st->downsample!=1)
+ bound = IMIN(bound, N/st->downsample);
+ for (i=bound;i<N;i++)
+ freq[c*N+i] = 0;
+ } while (++c<C);
compute_inv_mdcts(st->mode, 0, freq, out_syn, overlap_mem, C, LM);
plc = 0;
} else if (st->loss_count == 0)