diff options
author | Jean-Michel Trivi <jmtrivi@google.com> | 2013-08-08 18:32:55 -0700 |
---|---|---|
committer | Jean-Michel Trivi <jmtrivi@google.com> | 2013-08-20 15:31:42 -0700 |
commit | 16c472c201c197d3660334df5952eb4084897f9f (patch) | |
tree | 33f6729a47fb3a6021e9a6f6bc2c330fb17924e3 | |
parent | a84864deb7c36b88f104f3116552d52d1ce64045 (diff) | |
download | fdk-aac-dabplus-16c472c201c197d3660334df5952eb4084897f9f.tar.gz fdk-aac-dabplus-16c472c201c197d3660334df5952eb4084897f9f.tar.bz2 fdk-aac-dabplus-16c472c201c197d3660334df5952eb4084897f9f.zip |
AAC encoder metadata improvement
AAC-Encoder
- Introduce metadata support for parametric stereo audio object type.
Write metadata matrix mixdown coefficient only for channel config 5 and 6.
Modified file(s):
libAACenc/src/aacenc_lib.cpp
- Revise metadata encoder downmix gain and fix matrix mixdown coefficient.
Modified file(s):
libAACenc/src/aacenc_lib.cpp
libAACenc/src/metadata_compressor.cpp
libMpegTPEnc/src/tpenc_asc.cpp
libMpegTPEnc/src/tpenc_lib.cpp
libMpegTPEnc/src/version
Bug 9428126
Change-Id: I87f5f1a1fdddd8223187aa0f9dc733e0ecc3e7e4
-rw-r--r-- | libAACenc/src/aacenc_lib.cpp | 11 | ||||
-rw-r--r-- | libAACenc/src/metadata_compressor.cpp | 10 | ||||
-rw-r--r-- | libMpegTPEnc/src/tpenc_asc.cpp | 4 | ||||
-rw-r--r-- | libMpegTPEnc/src/tpenc_lib.cpp | 12 | ||||
-rw-r--r-- | libMpegTPEnc/src/version | 2 |
5 files changed, 25 insertions, 14 deletions
diff --git a/libAACenc/src/aacenc_lib.cpp b/libAACenc/src/aacenc_lib.cpp index 161ed1c..a256f05 100644 --- a/libAACenc/src/aacenc_lib.cpp +++ b/libAACenc/src/aacenc_lib.cpp @@ -98,7 +98,7 @@ amm-info@iis.fraunhofer.de /* Encoder library info */ #define AACENCODER_LIB_VL0 3 #define AACENCODER_LIB_VL1 4 -#define AACENCODER_LIB_VL2 6 +#define AACENCODER_LIB_VL2 7 #define AACENCODER_LIB_TITLE "AAC Encoder" #define AACENCODER_LIB_BUILD_DATE __DATE__ #define AACENCODER_LIB_BUILD_TIME __TIME__ @@ -759,6 +759,7 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder, /* Allow metadata support */ case AOT_AAC_LC: case AOT_SBR: + case AOT_PS: hAacEncoder->metaDataAllowed = 1; if (((INT)hAacConfig->channelMode < 1) || ((INT)hAacConfig->channelMode > 7)) { config->userMetaDataMode = 0; @@ -1337,8 +1338,12 @@ AACENC_ERROR aacEncEncode( for (i=0; i<(INT)nMetaDataExtensions; i++) { /* Get meta data extension payload. */ hAacEncoder->extPayload[nExtensions++] = pMetaDataExtPayload[i]; } - if (matrix_mixdown_idx!=-1) { /* Set matrix mixdown coefficient. */ - UINT pceValue = (UINT)( (1<<3) | ((matrix_mixdown_idx&0x2)<<1) | 1 ); + + if ( (matrix_mixdown_idx!=-1) + && ((hAacEncoder->extParam.userChannelMode==MODE_1_2_2)||(hAacEncoder->extParam.userChannelMode==MODE_1_2_2_1)) ) + { + /* Set matrix mixdown coefficient. */ + UINT pceValue = (UINT)( (1<<3) | ((matrix_mixdown_idx&0x3)<<1) | 1 ); if (hAacEncoder->extParam.userPceAdditions != pceValue) { hAacEncoder->extParam.userPceAdditions = pceValue; hAacEncoder->InitFlags |= AACENC_INIT_TRANSPORT; diff --git a/libAACenc/src/metadata_compressor.cpp b/libAACenc/src/metadata_compressor.cpp index a96afbf..6fd8266 100644 --- a/libAACenc/src/metadata_compressor.cpp +++ b/libAACenc/src/metadata_compressor.cpp @@ -421,7 +421,7 @@ static FIXP_DBL tc2Coeff( result = f2Pow(-exponent, DFRACT_BITS-1-METADATA_FRACT_BITS, &e_res); /* result = 1.0 - exp(-1.0/((t) * (f))) */ - result = FL2FXCONST_DBL(1.0f) - scaleValue(result, e_res); + result = (FIXP_DBL)MAXVAL_DBL - scaleValue(result, e_res); return result; } @@ -832,12 +832,12 @@ INT FDK_DRC_Generator_Calc( FIXP_DBL accu; /* drcComp->smoothLevel[i] = (1-alpha) * drcComp->smoothLevel[i] + alpha * level; */ - accu = fMult((FL2FXCONST_DBL(1.f)-alpha), drcComp->smoothLevel[i]); + accu = fMult(((FIXP_DBL)MAXVAL_DBL-alpha), drcComp->smoothLevel[i]); accu += fMult(alpha,level); drcComp->smoothLevel[i] = accu; /* drcComp->smoothGain[i] = (1-alpha) * drcComp->smoothGain[i] + alpha * gain; */ - accu = fMult((FL2FXCONST_DBL(1.f)-alpha), drcComp->smoothGain[i]); + accu = fMult(((FIXP_DBL)MAXVAL_DBL-alpha), drcComp->smoothGain[i]); accu += fMult(alpha,gain); drcComp->smoothGain[i] = accu; } @@ -941,7 +941,7 @@ INT FDK_DRC_Generator_Calc( if ((drcComp->channelIdx[LS] >= 0) && (drcComp->channelIdx[LS2] >= 0)) tmp = fMult(FL2FXCONST_DBL(0.707f), tmp); /* 7.1ch */ /*if ((drcComp->channelIdx[RS] >= 0) && (drcComp->channelIdx[RS2] >= 0)) tmp *=0.707f;*/ /* 7.1ch */ if (drcComp->channelIdx[S] >= 0) tmp += fMultDiv2(slev, fMult(FL2FXCONST_DBL(0.7f), (FIXP_PCM)pSamples[drcComp->channelIdx[S]]))>>(DOWNMIX_SHIFT-1); /* S */ - if (drcComp->channelIdx[C] >= 0) tmp += fMultDiv2(clev, (FIXP_PCM)pSamples[drcComp->channelIdx[C]])>>(DOWNMIX_SHIFT-1); /* C */ + if (drcComp->channelIdx[C] >= 0) tmp += fMult(clev, (FIXP_PCM)pSamples[drcComp->channelIdx[C]])>>(DOWNMIX_SHIFT-1); /* C (2*clev) */ tmp += (FX_PCM2FX_DBL((FIXP_PCM)pSamples[drcComp->channelIdx[L]])>>DOWNMIX_SHIFT); /* L */ tmp += (FX_PCM2FX_DBL((FIXP_PCM)pSamples[drcComp->channelIdx[R]])>>DOWNMIX_SHIFT); /* R */ @@ -973,7 +973,7 @@ INT FDK_DRC_Generator_Calc( * + 0.2f*2^(-METADATA_FRACT_BITS) + drcComp->smoothGain[i] */ peak[i] = fMult((FIXP_DBL)(10<<(METADATA_FRACT_BITS+LD_DATA_SHIFT)), fMult( FL2FX_DBL(2*0.30102999566398119521373889472449f), ld_peak)); - peak[i] += (FL2FX_DBL(0.2f)>>METADATA_INT_BITS); /* add a little bit headroom */ + peak[i] += (FL2FX_DBL(0.5f)>>METADATA_INT_BITS); /* add a little bit headroom */ peak[i] += drcComp->smoothGain[i]; } diff --git a/libMpegTPEnc/src/tpenc_asc.cpp b/libMpegTPEnc/src/tpenc_asc.cpp index 93aa8ad..5ba71c8 100644 --- a/libMpegTPEnc/src/tpenc_asc.cpp +++ b/libMpegTPEnc/src/tpenc_asc.cpp @@ -255,7 +255,7 @@ int transportEnc_writePCE(HANDLE_FDK_BITSTREAM hBs, if ( matrixMixdownA!=0 && ((channelMode==MODE_1_2_2)||(channelMode==MODE_1_2_2_1)) ) { FDKwriteBits(hBs, 1, 1); /* Matrix mixdown present */ FDKwriteBits(hBs, (matrixMixdownA-1)&0x3, 2); /* matrix_mixdown_idx */ - FDKwriteBits(hBs, pseudoSurroundEnable&0x1, 1); /* pseudo_surround_enable */ + FDKwriteBits(hBs, (pseudoSurroundEnable)?1:0, 1); /* pseudo_surround_enable */ } else { FDKwriteBits(hBs, 0, 1); /* Matrix mixdown not present */ @@ -379,7 +379,7 @@ int transportEnc_writeGASpecificConfig( /* Write PCE if channel config is not 1-7 */ if (getChannelConfig(config->channelMode) == 0) { - transportEnc_writePCE(asc, config->channelMode, config->samplingRate, 0, 1, 0, 0, alignAnchor); + transportEnc_writePCE(asc, config->channelMode, config->samplingRate, 0, 1, config->matrixMixdownA, (config->flags&CC_PSEUDO_SURROUND)?1:0, alignAnchor); } if (extFlg) { if (aot == AOT_ER_BSAC) { diff --git a/libMpegTPEnc/src/tpenc_lib.cpp b/libMpegTPEnc/src/tpenc_lib.cpp index 325d3c3..d0a2fec 100644 --- a/libMpegTPEnc/src/tpenc_lib.cpp +++ b/libMpegTPEnc/src/tpenc_lib.cpp @@ -150,12 +150,18 @@ C_ALLOC_MEM(Ram_TransportEncoder, TRANSPORTENC, 1) TRANSPORTENC_ERROR transportEnc_Open( HANDLE_TRANSPORTENC *phTpEnc ) { - HANDLE_TRANSPORTENC hTpEnc = GetRam_TransportEncoder(0); + HANDLE_TRANSPORTENC hTpEnc; - if ( hTpEnc == NULL ) { + if ( phTpEnc == NULL ){ return TRANSPORTENC_INVALID_PARAMETER; } + hTpEnc = GetRam_TransportEncoder(0); + + if ( hTpEnc == NULL ) { + return TRANSPORTENC_NO_MEM; + } + *phTpEnc = hTpEnc; return TRANSPORTENC_OK; } @@ -417,7 +423,7 @@ TRANSPORTENC_ERROR transportEnc_WriteAccessUnit( } /* Write PCE as first raw_data_block element */ - transportEnc_writePCE(&hTp->bitStream, hTp->config.channelMode, hTp->config.samplingRate, 0, 1, hTp->config.matrixMixdownA, hTp->config.flags & CC_PSEUDO_SURROUND, alignAnchor); + transportEnc_writePCE(&hTp->bitStream, hTp->config.channelMode, hTp->config.samplingRate, 0, 1, hTp->config.matrixMixdownA, (hTp->config.flags&CC_PSEUDO_SURROUND)?1:0, alignAnchor); if ( (hTp->transportFmt==TT_MP4_ADTS) && !hTp->writer.adts.protection_absent) { adtsWrite_CrcEndReg(&hTp->writer.adts, &hTp->bitStream, crcIndex); diff --git a/libMpegTPEnc/src/version b/libMpegTPEnc/src/version index e7bd1b1..d998903 100644 --- a/libMpegTPEnc/src/version +++ b/libMpegTPEnc/src/version @@ -2,7 +2,7 @@ /* library info */ #define TP_LIB_VL0 2 #define TP_LIB_VL1 3 -#define TP_LIB_VL2 0 +#define TP_LIB_VL2 1 #define TP_LIB_TITLE "MPEG Transport" #define TP_LIB_BUILD_DATE __DATE__ #define TP_LIB_BUILD_TIME __TIME__ |