mirror of https://github.com/mstorsjo/fdk-aac.git
Merge "Prevent overflow in MPEG-D DRC _setSelectionDataInfo()."
am: 652432830a
Change-Id: Ic2c58ee86f479f406d519418f52800618a6e80ff
This commit is contained in:
commit
692cb872b3
|
@ -1006,15 +1006,23 @@ static DRCDEC_SELECTION_PROCESS_RETURN _preSelectionRequirement7(
|
||||||
return DRCDEC_SELECTION_PROCESS_NO_ERROR;
|
return DRCDEC_SELECTION_PROCESS_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _setSelectionDataInfo(DRCDEC_SELECTION_DATA* pData,
|
static void _setSelectionDataInfo(
|
||||||
FIXP_DBL loudness,
|
DRCDEC_SELECTION_DATA* pData, FIXP_DBL loudness, /* e = 7 */
|
||||||
FIXP_DBL loudnessNormalizationGainDb,
|
FIXP_DBL loudnessNormalizationGainDb, /* e = 7 */
|
||||||
FIXP_DBL loudnessNormalizationGainDbMax,
|
FIXP_DBL loudnessNormalizationGainDbMax, /* e = 7 */
|
||||||
FIXP_DBL loudnessDeviationMax,
|
FIXP_DBL loudnessDeviationMax, /* e = 7 */
|
||||||
FIXP_DBL signalPeakLevel,
|
FIXP_DBL signalPeakLevel, /* e = 7 */
|
||||||
FIXP_DBL outputPeakLevelMax,
|
FIXP_DBL outputPeakLevelMax, /* e = 7 */
|
||||||
int applyAdjustment) {
|
int applyAdjustment) {
|
||||||
FIXP_DBL adjustment = 0;
|
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) {
|
if (applyAdjustment) {
|
||||||
adjustment =
|
adjustment =
|
||||||
|
@ -1028,6 +1036,14 @@ static void _setSelectionDataInfo(DRCDEC_SELECTION_DATA* pData,
|
||||||
pData->outputLoudness = loudness + pData->loudnessNormalizationGainDbAdjusted;
|
pData->outputLoudness = loudness + pData->loudnessNormalizationGainDbAdjusted;
|
||||||
pData->outputPeakLevel =
|
pData->outputPeakLevel =
|
||||||
signalPeakLevel + pData->loudnessNormalizationGainDbAdjusted;
|
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(
|
static int _targetLoudnessInRange(
|
||||||
|
|
Loading…
Reference in New Issue