aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2020-01-18 04:29:58 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2020-01-18 04:29:58 +0000
commit7d1449b89a620a476a47ba3edf140dc9c66115b1 (patch)
treeb3e70f7d8522d66bf0720b4111d9debcbfdd6e7c
parent2dc3e5c1f26f578d4c09590cf3f1e01ec8c68105 (diff)
parentcee316ab3ebde92047b5e76d15c00768b92cb890 (diff)
downloadfdk-aac-7d1449b89a620a476a47ba3edf140dc9c66115b1.tar.gz
fdk-aac-7d1449b89a620a476a47ba3edf140dc9c66115b1.tar.bz2
fdk-aac-7d1449b89a620a476a47ba3edf140dc9c66115b1.zip
Snap for 6145313 from cee316ab3ebde92047b5e76d15c00768b92cb890 to rvc-release
Change-Id: I642e8bbffa03f9c9e718eb115125c1e0fa852556
-rw-r--r--libAACdec/src/conceal.cpp11
-rw-r--r--libSACdec/src/sac_reshapeBBEnv.cpp23
-rw-r--r--libSBRdec/src/env_calc.cpp13
3 files changed, 19 insertions, 28 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);
diff --git a/libSACdec/src/sac_reshapeBBEnv.cpp b/libSACdec/src/sac_reshapeBBEnv.cpp
index 588c866..b44ce4e 100644
--- a/libSACdec/src/sac_reshapeBBEnv.cpp
+++ b/libSACdec/src/sac_reshapeBBEnv.cpp
@@ -284,11 +284,14 @@ shapeBBEnv(FIXP_DBL *pHybOutputRealDry, FIXP_DBL *pHybOutputImagDry,
}
} else {
for (qs = 0; qs < cplxBands; qs++) {
- pHybOutputRealDry[qs] = fMultDiv2(pHybOutputRealDry[qs], dryFac) << scale;
- pHybOutputImagDry[qs] = fMultDiv2(pHybOutputImagDry[qs], dryFac) << scale;
+ pHybOutputRealDry[qs] = SATURATE_LEFT_SHIFT(
+ fMultDiv2(pHybOutputRealDry[qs], dryFac), scale, DFRACT_BITS);
+ pHybOutputImagDry[qs] = SATURATE_LEFT_SHIFT(
+ fMultDiv2(pHybOutputImagDry[qs], dryFac), scale, DFRACT_BITS);
}
for (; qs < hybBands; qs++) {
- pHybOutputRealDry[qs] = fMultDiv2(pHybOutputRealDry[qs], dryFac) << scale;
+ pHybOutputRealDry[qs] = SATURATE_LEFT_SHIFT(
+ fMultDiv2(pHybOutputRealDry[qs], dryFac), scale, DFRACT_BITS);
}
}
}
@@ -614,14 +617,16 @@ void SpatialDecReshapeBBEnv(spatialDec *self, const SPATIAL_BS_FRAME *frame,
fixMax(3, fixMax(dryFacSF, slotAmpSF)); /* scale is at least with 3
bits to avoid overflows
when calculating dryFac */
- dryFac = dryFac >> (scale - dryFacSF);
- slotAmp_ratio = slotAmp_ratio >> (scale - slotAmpSF);
+ dryFac = dryFac >> fixMin(scale - dryFacSF, DFRACT_BITS - 1);
+ slotAmp_ratio =
+ slotAmp_ratio >> fixMin(scale - slotAmpSF, DFRACT_BITS - 1);
/* limit dryFac */
dryFac = fixMax(
FL2FXCONST_DBL(0.25f) >> (INT)fixMin(2 * scale, DFRACT_BITS - 1),
- fMult(dryFac, slotAmp_ratio) - (slotAmp_ratio >> scale) +
- (dryFac >> scale));
+ fMult(dryFac, slotAmp_ratio) -
+ (slotAmp_ratio >> fixMin(scale, DFRACT_BITS - 1)) +
+ (dryFac >> fixMin(scale, DFRACT_BITS - 1)));
dryFac = fixMin(
FL2FXCONST_DBL(0.50f) >> (INT)fixMin(2 * scale - 3, DFRACT_BITS - 1),
dryFac); /* reduce shift bits by 3, because upper
@@ -635,8 +640,8 @@ void SpatialDecReshapeBBEnv(spatialDec *self, const SPATIAL_BS_FRAME *frame,
/* shaping */
shapeBBEnv(&self->hybOutputRealDry__FDK[ch][6],
- &self->hybOutputImagDry__FDK[ch][6], dryFac, scale, cplxBands,
- hybBands);
+ &self->hybOutputImagDry__FDK[ch][6], dryFac,
+ fixMin(scale, DFRACT_BITS - 1), cplxBands, hybBands);
}
}
}
diff --git a/libSBRdec/src/env_calc.cpp b/libSBRdec/src/env_calc.cpp
index 81f03f3..0b2f651 100644
--- a/libSBRdec/src/env_calc.cpp
+++ b/libSBRdec/src/env_calc.cpp
@@ -702,20 +702,11 @@ static void apply_inter_tes(FIXP_DBL **qmfReal, FIXP_DBL **qmfImag,
gain_sf[i] += gamma_sf + 1; /* +1 because of fMultDiv2() */
/* set gain to at least 0.2f */
- FIXP_DBL point_two = FL2FXCONST_DBL(0.8f); /* scaled up by 2 */
- int point_two_sf = -2;
-
- FIXP_DBL tmp = gain[i];
- if (point_two_sf < gain_sf[i]) {
- point_two >>= gain_sf[i] - point_two_sf;
- } else {
- tmp >>= point_two_sf - gain_sf[i];
- }
-
/* limit and calculate gain[i]^2 too */
FIXP_DBL gain_pow2;
int gain_pow2_sf;
- if (tmp < point_two) {
+
+ if (fIsLessThan(gain[i], gain_sf[i], FL2FXCONST_DBL(0.2f), 0)) {
gain[i] = FL2FXCONST_DBL(0.8f);
gain_sf[i] = -2;
gain_pow2 = FL2FXCONST_DBL(0.64f);