aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFraunhofer IIS FDK <audio-fdk@iis.fraunhofer.de>2019-11-13 16:09:34 +0100
committerJean-Michel Trivi <jmtrivi@google.com>2020-01-16 12:15:04 -0800
commitcee316ab3ebde92047b5e76d15c00768b92cb890 (patch)
treeb3e70f7d8522d66bf0720b4111d9debcbfdd6e7c
parent86f7d2b69a00ae32d555f37fe687c001eaa99ddd (diff)
downloadfdk-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.cpp11
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);