X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Faacdec_fixed.c;h=9b2145c729051bfaa968f66d5793318fc13d4e1f;hb=e1d993d829a6386d1b0514ea38f723d2b31b38fe;hp=1bdb93f5bc876669a2b3b406d71001fed8f6f1b7;hpb=ee96ab2db507b95a694f10b152481cf71842de28;p=ffmpeg diff --git a/libavcodec/aacdec_fixed.c b/libavcodec/aacdec_fixed.c index 1bdb93f5bc8..9b2145c7290 100644 --- a/libavcodec/aacdec_fixed.c +++ b/libavcodec/aacdec_fixed.c @@ -162,7 +162,7 @@ static void vector_pow43(int *coefs, int len) } } -static void subband_scale(int *dst, int *src, int scale, int offset, int len) +static void subband_scale(int *dst, int *src, int scale, int offset, int len, void *log_context) { int ssign = scale < 0 ? -1 : 1; int s = FFABS(scale); @@ -189,18 +189,18 @@ static void subband_scale(int *dst, int *src, int scale, int offset, int len) dst[i] = out * (unsigned)ssign; } } else { - av_log(NULL, AV_LOG_ERROR, "Overflow in subband_scale()\n"); + av_log(log_context, AV_LOG_ERROR, "Overflow in subband_scale()\n"); } } static void noise_scale(int *coefs, int scale, int band_energy, int len) { - int ssign = scale < 0 ? -1 : 1; - int s = FFABS(scale); + int s = -scale; unsigned int round; int i, out, c = exp2tab[s & 3]; int nlz = 0; + av_assert0(s >= 0); while (band_energy > 0x7fff) { band_energy >>= 1; nlz++; @@ -216,15 +216,20 @@ static void noise_scale(int *coefs, int scale, int band_energy, int len) round = s ? 1 << (s-1) : 0; for (i=0; i> 32); - coefs[i] = ((int)(out+round) >> s) * ssign; + coefs[i] = -((int)(out+round) >> s); } } else { s = s + 32; - round = 1 << (s-1); - for (i=0; i> s); - coefs[i] = out * ssign; + if (s > 0) { + round = 1 << (s-1); + for (i=0; i> s); + coefs[i] = -out; + } + } else { + for (i=0; i