aboutsummaryrefslogtreecommitdiffstats
path: root/fdk-aac/libSBRenc/src/env_est.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fdk-aac/libSBRenc/src/env_est.cpp')
-rw-r--r--fdk-aac/libSBRenc/src/env_est.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/fdk-aac/libSBRenc/src/env_est.cpp b/fdk-aac/libSBRenc/src/env_est.cpp
index 4af561b..3936d88 100644
--- a/fdk-aac/libSBRenc/src/env_est.cpp
+++ b/fdk-aac/libSBRenc/src/env_est.cpp
@@ -1,7 +1,7 @@
/* -----------------------------------------------------------------------------
Software License for The Fraunhofer FDK AAC Codec Library for Android
-© Copyright 1995 - 2018 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
@@ -637,8 +637,8 @@ static FIXP_DBL getEnvSfbEnergy(
for (; l < stop_pos; l++) {
nrg2 += YBuffer[l >> YBufferSzShift][k] >> sc1;
}
- accu1 += (nrg1 >> dynScale1);
- accu2 += (nrg2 >> dynScale2);
+ accu1 = fAddSaturate(accu1, (nrg1 >> dynScale1));
+ accu2 = fAddSaturate(accu2, (nrg2 >> dynScale2));
}
/* This shift factor is always positive. See comment above. */
nrgSum +=
@@ -1268,6 +1268,7 @@ void FDKsbrEnc_extractSbrEnvelope2(
sbrExtrEnv->pre_transient_info[1] = ed->transient_info[1]; /* tran_flag */
hEnvChan->encEnvData.noOfEnvelopes = ed->nEnvelopes =
ed->frame_info->nEnvelopes; /* number of envelopes of current frame */
+ hEnvChan->encEnvData.currentAmpResFF = (AMP_RES)h_con->initAmpResFF;
/*
Check if the current frame is divided into one envelope only. If so, set
@@ -1275,8 +1276,9 @@ void FDKsbrEnc_extractSbrEnvelope2(
*/
if ((hEnvChan->encEnvData.hSbrBSGrid->frameClass == FIXFIX) &&
(ed->nEnvelopes == 1)) {
+ AMP_RES currentAmpResFF = SBR_AMP_RES_1_5;
if (h_con->sbrSyntaxFlags & SBR_SYNTAX_LOW_DELAY) {
- /* Note: global_tonaliy_float_value ==
+ /* Note: global_tonality_float_value ==
((float)hEnvChan->encEnvData.global_tonality/((INT64)(1)<<(31-(19+2)))/0.524288*(2.0/3.0)));
threshold_float_value ==
((float)h_con->thresholdAmpResFF_m/((INT64)(1)<<(31-(h_con->thresholdAmpResFF_e)))/0.524288*(2.0/3.0)));
@@ -1290,14 +1292,13 @@ void FDKsbrEnc_extractSbrEnvelope2(
} else {
hEnvChan->encEnvData.currentAmpResFF = SBR_AMP_RES_3_0;
}
- } else
- hEnvChan->encEnvData.currentAmpResFF = SBR_AMP_RES_1_5;
+ currentAmpResFF = hEnvChan->encEnvData.currentAmpResFF;
+ }
- if (hEnvChan->encEnvData.currentAmpResFF !=
- hEnvChan->encEnvData.init_sbr_amp_res) {
+ if (currentAmpResFF != hEnvChan->encEnvData.init_sbr_amp_res) {
FDKsbrEnc_InitSbrHuffmanTables(
&hEnvChan->encEnvData, &hEnvChan->sbrCodeEnvelope,
- &hEnvChan->sbrCodeNoiseFloor, hEnvChan->encEnvData.currentAmpResFF);
+ &hEnvChan->sbrCodeNoiseFloor, currentAmpResFF);
}
} else {
if (sbrHeaderData->sbr_amp_res != hEnvChan->encEnvData.init_sbr_amp_res) {
@@ -1356,6 +1357,13 @@ void FDKsbrEnc_extractSbrEnvelope2(
}
}
+ if (h_con->sbrSyntaxFlags & SBR_SYNTAX_LOW_DELAY &&
+ stereoMode == SBR_SWITCH_LRC &&
+ h_envChan[0]->encEnvData.currentAmpResFF !=
+ h_envChan[1]->encEnvData.currentAmpResFF) {
+ stereoMode = SBR_LEFT_RIGHT;
+ }
+
/*
Extract envelope of current frame.
*/