aboutsummaryrefslogtreecommitdiffstats
path: root/libSBRenc
diff options
context:
space:
mode:
authorJean-Michel Trivi <jmtrivi@google.com>2013-08-08 18:25:28 -0700
committerJean-Michel Trivi <jmtrivi@google.com>2013-08-20 15:30:07 -0700
commita84864deb7c36b88f104f3116552d52d1ce64045 (patch)
treea980a80acc1006418ca2dbda5433cb1ba72e94b3 /libSBRenc
parent3c59acf1280ed5cbbf45a53743ea0ff635568769 (diff)
downloadfdk-aac-a84864deb7c36b88f104f3116552d52d1ce64045.tar.gz
fdk-aac-a84864deb7c36b88f104f3116552d52d1ce64045.tar.bz2
fdk-aac-a84864deb7c36b88f104f3116552d52d1ce64045.zip
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
Diffstat (limited to 'libSBRenc')
-rw-r--r--libSBRenc/include/sbr_encoder.h4
-rw-r--r--libSBRenc/src/ps_main.cpp2
-rw-r--r--libSBRenc/src/sbr_encoder.cpp16
3 files changed, 19 insertions, 3 deletions
diff --git a/libSBRenc/include/sbr_encoder.h b/libSBRenc/include/sbr_encoder.h
index 5bbc197..f8f2a5c 100644
--- a/libSBRenc/include/sbr_encoder.h
+++ b/libSBRenc/include/sbr_encoder.h
@@ -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 delay Input: core encoder delay. Output: total delay because of SBR.
* \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.
*/
INT sbrEncoder_Init( HANDLE_SBR_ENCODER hSbrEncoder,
@@ -312,6 +315,7 @@ INT sbrEncoder_Init( HANDLE_SBR_ENCODER hSbrEncoder,
AUDIO_OBJECT_TYPE *aot,
int *delay,
int transformFactor,
+ const int headerPeriod,
ULONG statesInitFlag
);
diff --git a/libSBRenc/src/ps_main.cpp b/libSBRenc/src/ps_main.cpp
index 7e77a90..76b759a 100644
--- a/libSBRenc/src/ps_main.cpp
+++ b/libSBRenc/src/ps_main.cpp
@@ -227,6 +227,8 @@ FDK_PSENC_ERROR PSEnc_Init(
/* clear bs buffer */
FDKmemclear(hParametricStereo->psOut, sizeof(hParametricStereo->psOut));
+ hParametricStereo->psOut[0].enablePSHeader = 1; /* write ps header in first frame */
+
/* clear scaling buffer */
FDKmemclear(hParametricStereo->dynBandScale, sizeof(UCHAR)*PS_MAX_BANDS);
FDKmemclear(hParametricStereo->maxBandValue, sizeof(FIXP_QMF)*PS_MAX_BANDS);
diff --git a/libSBRenc/src/sbr_encoder.cpp b/libSBRenc/src/sbr_encoder.cpp
index ac0c869..d7ecae5 100644
--- a/libSBRenc/src/sbr_encoder.cpp
+++ b/libSBRenc/src/sbr_encoder.cpp
@@ -103,7 +103,7 @@ amm-info@iis.fraunhofer.de
#define SBRENCODER_LIB_VL0 3
#define SBRENCODER_LIB_VL1 3
-#define SBRENCODER_LIB_VL2 1
+#define SBRENCODER_LIB_VL2 2
@@ -1462,6 +1462,7 @@ INT FDKsbrEnc_EnvInit (
AUDIO_OBJECT_TYPE aot,
int nBitstrDelay,
int nElement,
+ const int headerPeriod,
ULONG statesInitFlag
,UCHAR *dynamic_RAM
)
@@ -1521,9 +1522,16 @@ INT FDKsbrEnc_EnvInit (
hSbrElement->sbrBitstreamData.CountSendHeaderData = 0;
if (params->SendHeaderDataTime > 0 ) {
- hSbrElement->sbrBitstreamData.NrSendHeaderData = (INT)(params->SendHeaderDataTime * hSbrElement->sbrConfigData.sampleFreq
+ if (headerPeriod==-1) {
+
+ hSbrElement->sbrBitstreamData.NrSendHeaderData = (INT)(params->SendHeaderDataTime * hSbrElement->sbrConfigData.sampleFreq
/ (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 {
hSbrElement->sbrBitstreamData.NrSendHeaderData = 0;
@@ -1723,6 +1731,7 @@ INT sbrEncoder_Init(
AUDIO_OBJECT_TYPE *aot,
int *delay,
int transformFactor,
+ const int headerPeriod,
ULONG statesInitFlag
)
{
@@ -1962,6 +1971,7 @@ INT sbrEncoder_Init(
*aot,
nBitstrDelay,
el,
+ headerPeriod,
statesInitFlag
,hSbrEncoder->dynamicRam
);