mirror of https://github.com/mstorsjo/fdk-aac.git
Prevent overflow in MPEG-D DRC _setSelectionDataInfo().
Bug: 112661687 Test: atest DecoderTestXheAac ; atest DecoderTestAacDrc Change-Id: I3b90ef7a5168e20766a2574d57d81bb39d2a5fb9
This commit is contained in:
parent
78f80da872
commit
1ac4293f0b
|
@ -1006,15 +1006,23 @@ static DRCDEC_SELECTION_PROCESS_RETURN _preSelectionRequirement7(
|
|||
return DRCDEC_SELECTION_PROCESS_NO_ERROR;
|
||||
}
|
||||
|
||||
static void _setSelectionDataInfo(DRCDEC_SELECTION_DATA* pData,
|
||||
FIXP_DBL loudness,
|
||||
FIXP_DBL loudnessNormalizationGainDb,
|
||||
FIXP_DBL loudnessNormalizationGainDbMax,
|
||||
FIXP_DBL loudnessDeviationMax,
|
||||
FIXP_DBL signalPeakLevel,
|
||||
FIXP_DBL outputPeakLevelMax,
|
||||
int applyAdjustment) {
|
||||
FIXP_DBL adjustment = 0;
|
||||
static void _setSelectionDataInfo(
|
||||
DRCDEC_SELECTION_DATA* pData, FIXP_DBL loudness, /* e = 7 */
|
||||
FIXP_DBL loudnessNormalizationGainDb, /* e = 7 */
|
||||
FIXP_DBL loudnessNormalizationGainDbMax, /* e = 7 */
|
||||
FIXP_DBL loudnessDeviationMax, /* e = 7 */
|
||||
FIXP_DBL signalPeakLevel, /* e = 7 */
|
||||
FIXP_DBL outputPeakLevelMax, /* e = 7 */
|
||||
int applyAdjustment) {
|
||||
FIXP_DBL adjustment = 0; /* e = 8 */
|
||||
|
||||
/* use e = 8 for all function parameters to prevent overflow */
|
||||
loudness >>= 1;
|
||||
loudnessNormalizationGainDb >>= 1;
|
||||
loudnessNormalizationGainDbMax >>= 1;
|
||||
loudnessDeviationMax >>= 1;
|
||||
signalPeakLevel >>= 1;
|
||||
outputPeakLevelMax >>= 1;
|
||||
|
||||
if (applyAdjustment) {
|
||||
adjustment =
|
||||
|
@ -1028,6 +1036,14 @@ static void _setSelectionDataInfo(DRCDEC_SELECTION_DATA* pData,
|
|||
pData->outputLoudness = loudness + pData->loudnessNormalizationGainDbAdjusted;
|
||||
pData->outputPeakLevel =
|
||||
signalPeakLevel + pData->loudnessNormalizationGainDbAdjusted;
|
||||
|
||||
/* shift back to e = 7 using saturation */
|
||||
pData->loudnessNormalizationGainDbAdjusted = SATURATE_LEFT_SHIFT(
|
||||
pData->loudnessNormalizationGainDbAdjusted, 1, DFRACT_BITS);
|
||||
pData->outputLoudness =
|
||||
SATURATE_LEFT_SHIFT(pData->outputLoudness, 1, DFRACT_BITS);
|
||||
pData->outputPeakLevel =
|
||||
SATURATE_LEFT_SHIFT(pData->outputPeakLevel, 1, DFRACT_BITS);
|
||||
}
|
||||
|
||||
static int _targetLoudnessInRange(
|
||||
|
|
Loading…
Reference in New Issue