diff options
Diffstat (limited to 'fdk-aac/libSBRenc/src/env_est.cpp')
| -rw-r--r-- | fdk-aac/libSBRenc/src/env_est.cpp | 26 | 
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.    */ | 
