Commit a84864de authored by Jean-Michel Trivi's avatar Jean-Michel Trivi

SBR header period

AAC encoder: Connect SBR and PS header repetition rate with AACENC_HEADER_PERIOD
     parameter of the encoder API.

Bug 9428126

Change-Id: Ia1ab965de9eaa2ac229d0c395a337cbd4d20cba1
parent 3c59acf1
...@@ -98,7 +98,7 @@ amm-info@iis.fraunhofer.de ...@@ -98,7 +98,7 @@ amm-info@iis.fraunhofer.de
/* Encoder library info */ /* Encoder library info */
#define AACENCODER_LIB_VL0 3 #define AACENCODER_LIB_VL0 3
#define AACENCODER_LIB_VL1 4 #define AACENCODER_LIB_VL1 4
#define AACENCODER_LIB_VL2 5 #define AACENCODER_LIB_VL2 6
#define AACENCODER_LIB_TITLE "AAC Encoder" #define AACENCODER_LIB_TITLE "AAC Encoder"
#define AACENCODER_LIB_BUILD_DATE __DATE__ #define AACENCODER_LIB_BUILD_DATE __DATE__
#define AACENCODER_LIB_BUILD_TIME __TIME__ #define AACENCODER_LIB_BUILD_TIME __TIME__
...@@ -122,6 +122,8 @@ amm-info@iis.fraunhofer.de ...@@ -122,6 +122,8 @@ amm-info@iis.fraunhofer.de
#define INPUTBUFFER_SIZE (1537+100+2048) #define INPUTBUFFER_SIZE (1537+100+2048)
#define DEFAULT_HEADER_PERIOD_REPETITION_RATE 10 /*!< Default header repetition rate used in transport library and for SBR header. */
//////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////
/** /**
* Flags to characterize encoder modules to be supported in present instance. * Flags to characterize encoder modules to be supported in present instance.
...@@ -335,7 +337,7 @@ void FDKaacEnc_MapConfig(CODER_CONFIG *cc, USER_PARAM *extCfg, HANDLE_AACENC_CON ...@@ -335,7 +337,7 @@ void FDKaacEnc_MapConfig(CODER_CONFIG *cc, USER_PARAM *extCfg, HANDLE_AACENC_CON
case TT_MP4_ADTS: case TT_MP4_ADTS:
case TT_MP4_LOAS: case TT_MP4_LOAS:
case TT_MP4_LATM_MCP1: case TT_MP4_LATM_MCP1:
cc->headerPeriod = 10; cc->headerPeriod = DEFAULT_HEADER_PERIOD_REPETITION_RATE;
break; break;
default: default:
cc->headerPeriod = 0; cc->headerPeriod = 0;
...@@ -876,6 +878,7 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder, ...@@ -876,6 +878,7 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder,
&hAacConfig->audioObjectType, &hAacConfig->audioObjectType,
&hAacEncoder->nDelay, &hAacEncoder->nDelay,
(hAacConfig->audioObjectType == AOT_ER_AAC_ELD) ? 1 : TRANS_FAC, (hAacConfig->audioObjectType == AOT_ER_AAC_ELD) ? 1 : TRANS_FAC,
(config->userTpHeaderPeriod!=0xFF) ? config->userTpHeaderPeriod : DEFAULT_HEADER_PERIOD_REPETITION_RATE,
initFlag initFlag
); );
......
...@@ -298,6 +298,9 @@ UINT sbrEncoder_LimitBitRate(UINT bitRate, UINT numChannels, UINT coreSampleRate ...@@ -298,6 +298,9 @@ UINT sbrEncoder_LimitBitRate(UINT bitRate, UINT numChannels, UINT coreSampleRate
* \param aot Input: Desired AOT. output AOT to be used after parameter checking. * \param aot Input: Desired AOT. output AOT to be used after parameter checking.
* \param delay Input: core encoder delay. Output: total delay because of SBR. * \param delay Input: core encoder delay. Output: total delay because of SBR.
* \param transformFactor The core encoder transform factor (blockswitching). * \param transformFactor The core encoder transform factor (blockswitching).
* \param headerPeriod Repetition rate of the SBR header:
* - (-1) means intern configuration.
* - (1-10) corresponds to header repetition rate in frames.
* \return 0 on success, and non-zero if failed. * \return 0 on success, and non-zero if failed.
*/ */
INT sbrEncoder_Init( HANDLE_SBR_ENCODER hSbrEncoder, INT sbrEncoder_Init( HANDLE_SBR_ENCODER hSbrEncoder,
...@@ -312,6 +315,7 @@ INT sbrEncoder_Init( HANDLE_SBR_ENCODER hSbrEncoder, ...@@ -312,6 +315,7 @@ INT sbrEncoder_Init( HANDLE_SBR_ENCODER hSbrEncoder,
AUDIO_OBJECT_TYPE *aot, AUDIO_OBJECT_TYPE *aot,
int *delay, int *delay,
int transformFactor, int transformFactor,
const int headerPeriod,
ULONG statesInitFlag ULONG statesInitFlag
); );
......
...@@ -227,6 +227,8 @@ FDK_PSENC_ERROR PSEnc_Init( ...@@ -227,6 +227,8 @@ FDK_PSENC_ERROR PSEnc_Init(
/* clear bs buffer */ /* clear bs buffer */
FDKmemclear(hParametricStereo->psOut, sizeof(hParametricStereo->psOut)); FDKmemclear(hParametricStereo->psOut, sizeof(hParametricStereo->psOut));
hParametricStereo->psOut[0].enablePSHeader = 1; /* write ps header in first frame */
/* clear scaling buffer */ /* clear scaling buffer */
FDKmemclear(hParametricStereo->dynBandScale, sizeof(UCHAR)*PS_MAX_BANDS); FDKmemclear(hParametricStereo->dynBandScale, sizeof(UCHAR)*PS_MAX_BANDS);
FDKmemclear(hParametricStereo->maxBandValue, sizeof(FIXP_QMF)*PS_MAX_BANDS); FDKmemclear(hParametricStereo->maxBandValue, sizeof(FIXP_QMF)*PS_MAX_BANDS);
......
...@@ -103,7 +103,7 @@ amm-info@iis.fraunhofer.de ...@@ -103,7 +103,7 @@ amm-info@iis.fraunhofer.de
#define SBRENCODER_LIB_VL0 3 #define SBRENCODER_LIB_VL0 3
#define SBRENCODER_LIB_VL1 3 #define SBRENCODER_LIB_VL1 3
#define SBRENCODER_LIB_VL2 1 #define SBRENCODER_LIB_VL2 2
...@@ -1462,6 +1462,7 @@ INT FDKsbrEnc_EnvInit ( ...@@ -1462,6 +1462,7 @@ INT FDKsbrEnc_EnvInit (
AUDIO_OBJECT_TYPE aot, AUDIO_OBJECT_TYPE aot,
int nBitstrDelay, int nBitstrDelay,
int nElement, int nElement,
const int headerPeriod,
ULONG statesInitFlag ULONG statesInitFlag
,UCHAR *dynamic_RAM ,UCHAR *dynamic_RAM
) )
...@@ -1521,10 +1522,17 @@ INT FDKsbrEnc_EnvInit ( ...@@ -1521,10 +1522,17 @@ INT FDKsbrEnc_EnvInit (
hSbrElement->sbrBitstreamData.CountSendHeaderData = 0; hSbrElement->sbrBitstreamData.CountSendHeaderData = 0;
if (params->SendHeaderDataTime > 0 ) { if (params->SendHeaderDataTime > 0 ) {
if (headerPeriod==-1) {
hSbrElement->sbrBitstreamData.NrSendHeaderData = (INT)(params->SendHeaderDataTime * hSbrElement->sbrConfigData.sampleFreq hSbrElement->sbrBitstreamData.NrSendHeaderData = (INT)(params->SendHeaderDataTime * hSbrElement->sbrConfigData.sampleFreq
/ (1000 * hSbrElement->sbrConfigData.frameSize)); / (1000 * hSbrElement->sbrConfigData.frameSize));
hSbrElement->sbrBitstreamData.NrSendHeaderData = fixMax(hSbrElement->sbrBitstreamData.NrSendHeaderData,1); hSbrElement->sbrBitstreamData.NrSendHeaderData = fixMax(hSbrElement->sbrBitstreamData.NrSendHeaderData,1);
} }
else {
/* assure header period at least once per second */
hSbrElement->sbrBitstreamData.NrSendHeaderData = fixMin(fixMax(headerPeriod,1),(hSbrElement->sbrConfigData.sampleFreq/hSbrElement->sbrConfigData.frameSize));
}
}
else { else {
hSbrElement->sbrBitstreamData.NrSendHeaderData = 0; hSbrElement->sbrBitstreamData.NrSendHeaderData = 0;
} }
...@@ -1723,6 +1731,7 @@ INT sbrEncoder_Init( ...@@ -1723,6 +1731,7 @@ INT sbrEncoder_Init(
AUDIO_OBJECT_TYPE *aot, AUDIO_OBJECT_TYPE *aot,
int *delay, int *delay,
int transformFactor, int transformFactor,
const int headerPeriod,
ULONG statesInitFlag ULONG statesInitFlag
) )
{ {
...@@ -1962,6 +1971,7 @@ INT sbrEncoder_Init( ...@@ -1962,6 +1971,7 @@ INT sbrEncoder_Init(
*aot, *aot,
nBitstrDelay, nBitstrDelay,
el, el,
headerPeriod,
statesInitFlag statesInitFlag
,hSbrEncoder->dynamicRam ,hSbrEncoder->dynamicRam
); );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment