| Index: celt/bands.c
|
| diff --git a/celt/bands.c b/celt/bands.c
|
| index 93bd0bc7220a86ed86f174fe02e5c2698d380df2..cce56e2f6ebe5978fbdae8bff75a74da3f1c7ba8 100644
|
| --- a/celt/bands.c
|
| +++ b/celt/bands.c
|
| @@ -214,7 +214,9 @@ void denormalise_bands(const CELTMode *m, const celt_norm * OPUS_RESTRICT X,
|
| j=M*eBands[i];
|
| band_end = M*eBands[i+1];
|
| lg = ADD16(bandLogE[i+c*m->nbEBands], SHL16((opus_val16)eMeans[i],6));
|
| -#ifdef FIXED_POINT
|
| +#ifndef FIXED_POINT
|
| + g = celt_exp2(lg);
|
| +#else
|
| /* Handle the integer part of the log energy */
|
| shift = 16-(lg>>DB_SHIFT);
|
| if (shift>31)
|
| @@ -225,9 +227,23 @@ void denormalise_bands(const CELTMode *m, const celt_norm * OPUS_RESTRICT X,
|
| /* Handle the fractional part. */
|
| g = celt_exp2_frac(lg&((1<<DB_SHIFT)-1));
|
| }
|
| -#else
|
| - g = celt_exp2(lg);
|
| + /* Handle extreme gains with negative shift. */
|
| + if (shift<0)
|
| + {
|
| + /* For shift < -2 we'd be likely to overflow, so we're capping
|
| + the gain here. This shouldn't happen unless the bitstream is
|
| + already corrupted. */
|
| + if (shift < -2)
|
| + {
|
| + g = 32767;
|
| + shift = -2;
|
| + }
|
| + do {
|
| + *f++ = SHL32(MULT16_16(*x++, g), -shift);
|
| + } while (++j<band_end);
|
| + } else
|
| #endif
|
| + /* Be careful of the fixed-point "else" just above when changing this code */
|
| do {
|
| *f++ = SHR32(MULT16_16(*x++, g), shift);
|
| } while (++j<band_end);
|
| @@ -492,7 +508,7 @@ int spreading_decision(const CELTMode *m, celt_norm *X, int *average,
|
| *tapset_decision=0;
|
| }
|
| /*printf("%d %d %d\n", hf_sum, *hf_average, *tapset_decision);*/
|
| - celt_assert(nbBands>0); /*M*(eBands[end]-eBands[end-1]) <= 8 assures this*/
|
| + celt_assert(nbBands>0); /* end has to be non-zero */
|
| sum /= nbBands;
|
| /* Recursive averaging */
|
| sum = (sum+*average)>>1;
|
| @@ -869,7 +885,6 @@ static unsigned quant_partition(struct band_ctx *ctx, celt_norm *X,
|
| int q;
|
| int curr_bits;
|
| int imid=0, iside=0;
|
| - int N_B=N;
|
| int B0=B;
|
| opus_val16 mid=0, side=0;
|
| unsigned cm=0;
|
| @@ -891,8 +906,6 @@ static unsigned quant_partition(struct band_ctx *ctx, celt_norm *X,
|
| spread = ctx->spread;
|
| ec = ctx->ec;
|
|
|
| - N_B /= B;
|
| -
|
| /* If we need 1.5 more bit than we can produce, split the band in two. */
|
| cache = m->cache.bits + m->cache.index[(LM+1)*m->nbEBands+i];
|
| if (LM != -1 && b > cache[cache[0]]+12 && N>2)
|
| @@ -1072,7 +1085,6 @@ static unsigned quant_band(struct band_ctx *ctx, celt_norm *X,
|
| longBlocks = B0==1;
|
|
|
| N_B /= B;
|
| - N_B0 = N_B;
|
|
|
| /* Special case for one sample */
|
| if (N==1)
|
|
|