diff options
author | Fraunhofer IIS FDK <audio-fdk@iis.fraunhofer.de> | 2019-11-13 16:09:34 +0100 |
---|---|---|
committer | Jean-Michel Trivi <jmtrivi@google.com> | 2020-01-16 12:15:04 -0800 |
commit | cee316ab3ebde92047b5e76d15c00768b92cb890 (patch) | |
tree | b3e70f7d8522d66bf0720b4111d9debcbfdd6e7c | |
parent | 86f7d2b69a00ae32d555f37fe687c001eaa99ddd (diff) | |
download | fdk-aac-cee316ab3ebde92047b5e76d15c00768b92cb890.tar.gz fdk-aac-cee316ab3ebde92047b5e76d15c00768b92cb890.tar.bz2 fdk-aac-cee316ab3ebde92047b5e76d15c00768b92cb890.zip |
Fix too large shift exponent in CConcealment_InterpolateBuffer().
Bug: 146938361
Test: atest DecoderTestXheAac ; atest DecoderTestAacDrc
Change-Id: Idb0a4e2c87962e453a991f0a573155ace6e9bf40
-rw-r--r-- | libAACdec/src/conceal.cpp | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/libAACdec/src/conceal.cpp b/libAACdec/src/conceal.cpp index ae98874..379e63a 100644 --- a/libAACdec/src/conceal.cpp +++ b/libAACdec/src/conceal.cpp @@ -1228,7 +1228,6 @@ static void CConcealment_InterpolateBuffer(FIXP_DBL *spectrum, int sfb, line = 0; int fac_shift; int fac_mod; - FIXP_DBL accu; for (sfb = 0; sfb < sfbCnt; sfb++) { fac_shift = @@ -1236,15 +1235,11 @@ static void CConcealment_InterpolateBuffer(FIXP_DBL *spectrum, fac_mod = fac_shift & 3; fac_shift = (fac_shift >> 2) + 1; fac_shift += *pSpecScalePrv - fixMax(*pSpecScalePrv, *pSpecScaleAct); + fac_shift = fMax(fMin(fac_shift, DFRACT_BITS - 1), -(DFRACT_BITS - 1)); for (; line < pSfbOffset[sfb + 1]; line++) { - accu = fMult(*(spectrum + line), facMod4Table[fac_mod]); - if (fac_shift < 0) { - accu >>= -fac_shift; - } else { - accu <<= fac_shift; - } - *(spectrum + line) = accu; + FIXP_DBL accu = fMult(*(spectrum + line), facMod4Table[fac_mod]); + *(spectrum + line) = scaleValue(accu, fac_shift); } } *pSpecScaleOut = fixMax(*pSpecScalePrv, *pSpecScaleAct); |