Limit smoothedNoise values to avoid integer overflows in adjustTimeSlotHQ() and adjustTimeSlotHQ_GainAndNoise().

Bug: 176246647
Test: atest DecoderTestXheAac DecoderTestAacDrc
Change-Id: Ib630d56a626ddd59a9155df38cda2011c3165346
This commit is contained in:
Fraunhofer IIS FDK 2020-04-09 17:53:51 +02:00 committed by Jean-Michel Trivi
parent 2b281bb5a3
commit 4305167ceb
1 changed files with 18 additions and 1 deletions

View File

@ -1,7 +1,7 @@
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
Software License for The Fraunhofer FDK AAC Codec Library for Android 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. Forschung e.V. All rights reserved.
1. INTRODUCTION 1. INTRODUCTION
@ -1398,6 +1398,17 @@ void calculateSbrEnvelope(
*/ */
noise_e = (start_pos < no_cols) ? adj_e : final_e; 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 Convert energies to amplitude levels
*/ */
@ -2741,6 +2752,9 @@ static void adjustTimeSlotHQ_GainAndNoise(
fMult(direct_ratio, noiseLevel[k]); 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 The next 2 multiplications constitute the actual envelope adjustment
of the signal and should be carried out with full accuracy of the signal and should be carried out with full accuracy
@ -2930,6 +2944,9 @@ static void adjustTimeSlotHQ(
fMult(direct_ratio, noiseLevel[k]); 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 The next 2 multiplications constitute the actual envelope adjustment
of the signal and should be carried out with full accuracy of the signal and should be carried out with full accuracy