mirror of https://github.com/mstorsjo/fdk-aac.git
Overcome SBR encoder coupling quality issue in ELD.
Bug 177604812 Test: see SBR/PS encoder Change-Id: Ie7b9f8d1dec3708557d1e1189d45bc0e3bf5444c
This commit is contained in:
parent
91ec65f7c8
commit
4204c46665
|
@ -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 - 2018 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
|
||||||
|
@ -1267,6 +1267,7 @@ void FDKsbrEnc_extractSbrEnvelope2(
|
||||||
sbrExtrEnv->pre_transient_info[1] = ed->transient_info[1]; /* tran_flag */
|
sbrExtrEnv->pre_transient_info[1] = ed->transient_info[1]; /* tran_flag */
|
||||||
hEnvChan->encEnvData.noOfEnvelopes = ed->nEnvelopes =
|
hEnvChan->encEnvData.noOfEnvelopes = ed->nEnvelopes =
|
||||||
ed->frame_info->nEnvelopes; /* number of envelopes of current frame */
|
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
|
Check if the current frame is divided into one envelope only. If so, set
|
||||||
|
@ -1274,8 +1275,9 @@ void FDKsbrEnc_extractSbrEnvelope2(
|
||||||
*/
|
*/
|
||||||
if ((hEnvChan->encEnvData.hSbrBSGrid->frameClass == FIXFIX) &&
|
if ((hEnvChan->encEnvData.hSbrBSGrid->frameClass == FIXFIX) &&
|
||||||
(ed->nEnvelopes == 1)) {
|
(ed->nEnvelopes == 1)) {
|
||||||
|
AMP_RES currentAmpResFF = SBR_AMP_RES_1_5;
|
||||||
if (h_con->sbrSyntaxFlags & SBR_SYNTAX_LOW_DELAY) {
|
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)));
|
((float)hEnvChan->encEnvData.global_tonality/((INT64)(1)<<(31-(19+2)))/0.524288*(2.0/3.0)));
|
||||||
threshold_float_value ==
|
threshold_float_value ==
|
||||||
((float)h_con->thresholdAmpResFF_m/((INT64)(1)<<(31-(h_con->thresholdAmpResFF_e)))/0.524288*(2.0/3.0)));
|
((float)h_con->thresholdAmpResFF_m/((INT64)(1)<<(31-(h_con->thresholdAmpResFF_e)))/0.524288*(2.0/3.0)));
|
||||||
|
@ -1289,14 +1291,13 @@ void FDKsbrEnc_extractSbrEnvelope2(
|
||||||
} else {
|
} else {
|
||||||
hEnvChan->encEnvData.currentAmpResFF = SBR_AMP_RES_3_0;
|
hEnvChan->encEnvData.currentAmpResFF = SBR_AMP_RES_3_0;
|
||||||
}
|
}
|
||||||
} else
|
currentAmpResFF = hEnvChan->encEnvData.currentAmpResFF;
|
||||||
hEnvChan->encEnvData.currentAmpResFF = SBR_AMP_RES_1_5;
|
}
|
||||||
|
|
||||||
if (hEnvChan->encEnvData.currentAmpResFF !=
|
if (currentAmpResFF != hEnvChan->encEnvData.init_sbr_amp_res) {
|
||||||
hEnvChan->encEnvData.init_sbr_amp_res) {
|
|
||||||
FDKsbrEnc_InitSbrHuffmanTables(
|
FDKsbrEnc_InitSbrHuffmanTables(
|
||||||
&hEnvChan->encEnvData, &hEnvChan->sbrCodeEnvelope,
|
&hEnvChan->encEnvData, &hEnvChan->sbrCodeEnvelope,
|
||||||
&hEnvChan->sbrCodeNoiseFloor, hEnvChan->encEnvData.currentAmpResFF);
|
&hEnvChan->sbrCodeNoiseFloor, currentAmpResFF);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (sbrHeaderData->sbr_amp_res != hEnvChan->encEnvData.init_sbr_amp_res) {
|
if (sbrHeaderData->sbr_amp_res != hEnvChan->encEnvData.init_sbr_amp_res) {
|
||||||
|
@ -1355,6 +1356,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.
|
Extract envelope of current frame.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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 - 2018 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
|
||||||
|
@ -1450,8 +1450,6 @@ static INT initEnvChannel(HANDLE_SBR_CONFIG_DATA sbrConfigData,
|
||||||
params->deltaTAcrossFrames, 0, 0))
|
params->deltaTAcrossFrames, 0, 0))
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
sbrConfigData->initAmpResFF = params->init_amp_res_FF;
|
|
||||||
|
|
||||||
if (FDKsbrEnc_InitSbrHuffmanTables(&hEnv->encEnvData, &hEnv->sbrCodeEnvelope,
|
if (FDKsbrEnc_InitSbrHuffmanTables(&hEnv->encEnvData, &hEnv->sbrCodeEnvelope,
|
||||||
&hEnv->sbrCodeNoiseFloor,
|
&hEnv->sbrCodeNoiseFloor,
|
||||||
sbrHeaderData->sbr_amp_res))
|
sbrHeaderData->sbr_amp_res))
|
||||||
|
@ -1749,6 +1747,7 @@ static INT FDKsbrEnc_EnvInit(HANDLE_SBR_ELEMENT hSbrElement,
|
||||||
hSbrElement->sbrHeaderData.sbr_data_extra = 1;
|
hSbrElement->sbrHeaderData.sbr_data_extra = 1;
|
||||||
|
|
||||||
hSbrElement->sbrHeaderData.sbr_amp_res = (AMP_RES)params->amp_res;
|
hSbrElement->sbrHeaderData.sbr_amp_res = (AMP_RES)params->amp_res;
|
||||||
|
hSbrElement->sbrConfigData.initAmpResFF = params->init_amp_res_FF;
|
||||||
|
|
||||||
/* header_extra_1 */
|
/* header_extra_1 */
|
||||||
hSbrElement->sbrHeaderData.freqScale = params->freqScale;
|
hSbrElement->sbrHeaderData.freqScale = params->freqScale;
|
||||||
|
|
Loading…
Reference in New Issue