diff options
author | Jean-Michel Trivi <jmtrivi@google.com> | 2020-12-28 16:29:55 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-12-28 16:29:55 +0000 |
commit | f67a5bb99cfde3ba2c0c010982d5c99fea3f1325 (patch) | |
tree | 2fdd6ae215ebb052c872f7a48cf96dcc170efba0 | |
parent | 1e2fb8395c6fb2af8f9997fefee052465f369594 (diff) | |
parent | 4305167cebc29610cbfeb0295c06f0e94cfbf6a6 (diff) | |
download | fdk-aac-f67a5bb99cfde3ba2c0c010982d5c99fea3f1325.tar.gz fdk-aac-f67a5bb99cfde3ba2c0c010982d5c99fea3f1325.tar.bz2 fdk-aac-f67a5bb99cfde3ba2c0c010982d5c99fea3f1325.zip |
Merge "Limit smoothedNoise values to avoid integer overflows in adjustTimeSlotHQ() and adjustTimeSlotHQ_GainAndNoise()."
-rw-r--r-- | libSBRdec/src/env_calc.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/libSBRdec/src/env_calc.cpp b/libSBRdec/src/env_calc.cpp index 0b2f651..ad5edfe 100644 --- a/libSBRdec/src/env_calc.cpp +++ b/libSBRdec/src/env_calc.cpp @@ -1,7 +1,7 @@ /* ----------------------------------------------------------------------------- Software License for The Fraunhofer FDK AAC Codec Library for Android -© Copyright 1995 - 2019 Fraunhofer-Gesellschaft zur Förderung der angewandten +© Copyright 1995 - 2020 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. All rights reserved. 1. INTRODUCTION @@ -1398,6 +1398,17 @@ void calculateSbrEnvelope( */ noise_e = (start_pos < no_cols) ? adj_e : final_e; + if (start_pos >= no_cols) { + int diff = h_sbr_cal_env->filtBufferNoise_e - noise_e; + if (diff > 0) { + int s = getScalefactor(h_sbr_cal_env->filtBufferNoise, noSubbands); + if (diff > s) { + final_e += diff - s; + noise_e = final_e; + } + } + } + /* Convert energies to amplitude levels */ @@ -2741,6 +2752,9 @@ static void adjustTimeSlotHQ_GainAndNoise( fMult(direct_ratio, noiseLevel[k]); } + smoothedNoise = fMax(fMin(smoothedNoise, (FIXP_DBL)(MAXVAL_DBL / 2)), + (FIXP_DBL)(MINVAL_DBL / 2)); + /* The next 2 multiplications constitute the actual envelope adjustment of the signal and should be carried out with full accuracy @@ -2930,6 +2944,9 @@ static void adjustTimeSlotHQ( fMult(direct_ratio, noiseLevel[k]); } + smoothedNoise = fMax(fMin(smoothedNoise, (FIXP_DBL)(MAXVAL_DBL / 2)), + (FIXP_DBL)(MINVAL_DBL / 2)); + /* The next 2 multiplications constitute the actual envelope adjustment of the signal and should be carried out with full accuracy |