SBR/AAC encoder updates, code clean up
* SBR-Encoder - Prevent noise level overflow in noise floor detection. - Saturate threshold calculation in transient detection. Modified file(s): libSBRenc/src/nf_est.cpp libSBRenc/src/sbr_encoder.cpp libSBRenc/src/tran_det.cpp * AAC-Encoder - Expand input data range of GetInvInt() function. There was an encoder assert observed in non-default bitrate configuration. Modified file(s): libAACenc/src/aacenc_lib.cpp libAACenc/src/intensity.cpp libFDK/include/fixpoint_math.h libFDK/src/FDK_core.cpp libFDK/src/FDK_tools_rom.cpp - Make sure that the encoder is stable with regard to very low audio bandwidth confguration parameter value. - Fix lowdelay blending for low audio bandwidth. Modified file(s): libAACenc/src/aacenc.cpp libAACenc/src/aacenc_lib.cpp libAACenc/src/adj_thr.cpp libAACenc/src/psy_configuration.cpp libAACenc/src/psy_main.cpp - Disable pseudo surround flag in case metadata matrix mixdown index is present in program config element. Modified file(s): libAACenc/src/aacenc_lib.cpp - Enable variable bitrate mode in encoder api. - Add AACENC_PEAK_BITRATE parameter to encoder api. - Add AACENC_AUDIOMUXVER parameter to encoder api. Modified file(s): libAACenc/include/aacenc_lib.h libAACenc/src/aacenc.cpp libAACenc/src/aacenc.h libAACenc/src/aacenc_lib.cpp libAACenc/src/qc_main.cpp libMpegTPEnc/src/tpenc_latm.cpp libMpegTPEnc/src/version * FDK-Sources - Code clean up. Remove unneeded pseudo audio object types and transport types. Modified file(s): libAACdec/src/aacdecoder.cpp libAACdec/src/aacdecoder_lib.cpp libAACenc/include/aacenc_lib.h libAACenc/src/aacenc.cpp libAACenc/src/aacenc_lib.cpp libFDK/src/FDK_tools_rom.cpp libMpegTPDec/src/tpdec_lib.cpp libMpegTPDec/src/version libMpegTPEnc/src/tpenc_latm.cpp libMpegTPEnc/src/version libSBRdec/src/sbrdecoder.cpp libSBRenc/src/sbr_encoder.cpp libSYS/include/FDK_audio.h libSYS/src/genericStds.cpp Change-Id: I807a53cb7f48c9ee7563cb8da1d0c52221576ca6
This commit is contained in:
parent
ef30836651
commit
e1c78ed73f
Binary file not shown.
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -159,21 +159,6 @@ amm-info@iis.fraunhofer.de
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define CAN_DO_PS(aot) \
|
|
||||||
((aot) == AOT_AAC_LC \
|
|
||||||
|| (aot) == AOT_SBR \
|
|
||||||
|| (aot) == AOT_PS \
|
|
||||||
|| (aot) == AOT_ER_BSAC \
|
|
||||||
|| (aot) == AOT_DRM_AAC)
|
|
||||||
|
|
||||||
#define IS_USAC(aot) \
|
|
||||||
((aot) == AOT_USAC \
|
|
||||||
|| (aot) == AOT_RSVD50)
|
|
||||||
|
|
||||||
#define IS_LOWDELAY(aot) \
|
|
||||||
((aot) == AOT_ER_AAC_LD \
|
|
||||||
|| (aot) == AOT_ER_AAC_ELD)
|
|
||||||
|
|
||||||
void CAacDecoder_SyncQmfMode(HANDLE_AACDECODER self)
|
void CAacDecoder_SyncQmfMode(HANDLE_AACDECODER self)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -110,7 +110,7 @@ amm-info@iis.fraunhofer.de
|
|||||||
/* Decoder library info */
|
/* Decoder library info */
|
||||||
#define AACDECODER_LIB_VL0 2
|
#define AACDECODER_LIB_VL0 2
|
||||||
#define AACDECODER_LIB_VL1 5
|
#define AACDECODER_LIB_VL1 5
|
||||||
#define AACDECODER_LIB_VL2 10
|
#define AACDECODER_LIB_VL2 11
|
||||||
#define AACDECODER_LIB_TITLE "AAC Decoder Lib"
|
#define AACDECODER_LIB_TITLE "AAC Decoder Lib"
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
#define AACDECODER_LIB_BUILD_DATE ""
|
#define AACDECODER_LIB_BUILD_DATE ""
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -897,11 +897,7 @@ typedef enum
|
|||||||
This configuration can be used only with stereo input audio data.
|
This configuration can be used only with stereo input audio data.
|
||||||
- 23: MPEG-4 AAC Low-Delay.
|
- 23: MPEG-4 AAC Low-Delay.
|
||||||
- 39: MPEG-4 AAC Enhanced Low-Delay. Since there is no ::AUDIO_OBJECT_TYPE for ELD in
|
- 39: MPEG-4 AAC Enhanced Low-Delay. Since there is no ::AUDIO_OBJECT_TYPE for ELD in
|
||||||
combination with SBR defined, enable SBR explicitely by ::AACENC_SBR_MODE parameter.
|
combination with SBR defined, enable SBR explicitely by ::AACENC_SBR_MODE parameter. */
|
||||||
- 129: MPEG-2 AAC Low Complexity.
|
|
||||||
- 132: MPEG-2 AAC Low Complexity with Spectral Band Replication (HE-AAC).
|
|
||||||
- 156: MPEG-2 AAC Low Complexity with Spectral Band Replication and Parametric Stereo (HE-AAC v2).
|
|
||||||
This configuration can be used only with stereo input audio data. */
|
|
||||||
|
|
||||||
AACENC_BITRATE = 0x0101, /*!< Total encoder bitrate. This parameter is mandatory and interacts with ::AACENC_BITRATEMODE.
|
AACENC_BITRATE = 0x0101, /*!< Total encoder bitrate. This parameter is mandatory and interacts with ::AACENC_BITRATEMODE.
|
||||||
- CBR: Bitrate in bits/second.
|
- CBR: Bitrate in bits/second.
|
||||||
@ -958,6 +954,16 @@ typedef enum
|
|||||||
- 1 to fs/2: Frequency bandwidth in Hertz. (Experts only, better do not
|
- 1 to fs/2: Frequency bandwidth in Hertz. (Experts only, better do not
|
||||||
touch this value to avoid degraded audio quality) */
|
touch this value to avoid degraded audio quality) */
|
||||||
|
|
||||||
|
AACENC_PEAK_BITRATE = 0x0207, /*!< Peak bitrate configuration parameter to adjust maximum bits per audio frame. Bitrate is in bits/second.
|
||||||
|
The peak bitrate will internally be limited to the chosen bitrate ::AACENC_BITRATE as lower limit
|
||||||
|
and the number_of_effective_channels*6144 bit as upper limit.
|
||||||
|
|
||||||
|
Setting the peak bitrate equal to ::AACENC_BITRATE does not necessarily mean that the audio frames
|
||||||
|
will be of constant size. Since the peak bitate is in bits/second, the frame sizes can vary by
|
||||||
|
one byte in one or the other direction over various frames. However, it is not recommended to reduce
|
||||||
|
the peak pitrate to ::AACENC_BITRATE - it would disable the bitreservoir, which would affect the
|
||||||
|
audio quality by a large amount. */
|
||||||
|
|
||||||
AACENC_TRANSMUX = 0x0300, /*!< Transport type to be used. See ::TRANSPORT_TYPE in FDK_audio.h. Following
|
AACENC_TRANSMUX = 0x0300, /*!< Transport type to be used. See ::TRANSPORT_TYPE in FDK_audio.h. Following
|
||||||
types can be configured in encoder library:
|
types can be configured in encoder library:
|
||||||
- 0: raw access units
|
- 0: raw access units
|
||||||
@ -1023,6 +1029,11 @@ typedef enum
|
|||||||
- ADTS: Maximum number of sub frames restricted to 4.
|
- ADTS: Maximum number of sub frames restricted to 4.
|
||||||
- LOAS/LATM: Maximum number of sub frames restricted to 2.*/
|
- LOAS/LATM: Maximum number of sub frames restricted to 2.*/
|
||||||
|
|
||||||
|
AACENC_AUDIOMUXVER = 0x0304, /*!< AudioMuxVersion to be used for LATM. (AudioMuxVersionA, currently not implemented):
|
||||||
|
- 0: Default, no transmission of tara Buffer fullness, no ASC length and including actual latm Buffer fullnes.
|
||||||
|
- 1: Transmission of tara Buffer fullness, ASC length and actual latm Buffer fullness.
|
||||||
|
- 2: Transmission of tara Buffer fullness, ASC length and maximum level of latm Buffer fullness. */
|
||||||
|
|
||||||
AACENC_PROTECTION = 0x0306, /*!< Configure protection in tranpsort layer:
|
AACENC_PROTECTION = 0x0306, /*!< Configure protection in tranpsort layer:
|
||||||
- 0: No protection. (default)
|
- 0: No protection. (default)
|
||||||
- 1: CRC active for ADTS bitstream format. */
|
- 1: CRC active for ADTS bitstream format. */
|
||||||
|
@ -107,6 +107,39 @@ amm-info@iis.fraunhofer.de
|
|||||||
|
|
||||||
#define MIN_BUFSIZE_PER_EFF_CHAN 6144
|
#define MIN_BUFSIZE_PER_EFF_CHAN 6144
|
||||||
|
|
||||||
|
INT FDKaacEnc_CalcBitsPerFrame(
|
||||||
|
const INT bitRate,
|
||||||
|
const INT frameLength,
|
||||||
|
const INT samplingRate
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int shift = 0;
|
||||||
|
while ((frameLength & ~((1 << (shift + 1)) - 1)) == frameLength
|
||||||
|
&& (samplingRate & ~((1 << (shift + 1)) - 1)) == samplingRate)
|
||||||
|
{
|
||||||
|
shift++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (bitRate*(frameLength>>shift)) / (samplingRate>>shift);
|
||||||
|
}
|
||||||
|
|
||||||
|
INT FDKaacEnc_CalcBitrate(
|
||||||
|
const INT bitsPerFrame,
|
||||||
|
const INT frameLength,
|
||||||
|
const INT samplingRate
|
||||||
|
)
|
||||||
|
{
|
||||||
|
int shift = 0;
|
||||||
|
while ((frameLength & ~((1 << (shift + 1)) - 1)) == frameLength
|
||||||
|
&& (samplingRate & ~((1 << (shift + 1)) - 1)) == samplingRate)
|
||||||
|
{
|
||||||
|
shift++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (bitsPerFrame * (samplingRate>>shift)) / ( frameLength>>shift) ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static AAC_ENCODER_ERROR FDKaacEnc_InitCheckAncillary(INT bitRate,
|
static AAC_ENCODER_ERROR FDKaacEnc_InitCheckAncillary(INT bitRate,
|
||||||
INT framelength,
|
INT framelength,
|
||||||
INT ancillaryRate,
|
INT ancillaryRate,
|
||||||
@ -220,21 +253,19 @@ INT FDKaacEnc_GetVBRBitrate(INT bitrateMode, CHANNEL_MODE channelMode)
|
|||||||
/**
|
/**
|
||||||
* \brief Convert encoder bitreservoir value for transport library.
|
* \brief Convert encoder bitreservoir value for transport library.
|
||||||
*
|
*
|
||||||
* \param bitrateMode Bitratemode used in current encoder instance. Se ::AACENC_BITRATE_MODE
|
* \param hAacEnc Encoder handle
|
||||||
* \param bitresTotal Encoder bitreservoir level in bits.
|
|
||||||
*
|
*
|
||||||
* \return Corrected bitreservoir level used in transport library.
|
* \return Corrected bitreservoir level used in transport library.
|
||||||
*/
|
*/
|
||||||
static INT FDKaacEnc_EncBitresToTpBitres(
|
static INT FDKaacEnc_EncBitresToTpBitres(
|
||||||
const AACENC_BITRATE_MODE bitrateMode,
|
const HANDLE_AAC_ENC hAacEnc
|
||||||
const INT bitresTotal
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
INT transporBitreservoir = 0;
|
INT transporBitreservoir = 0;
|
||||||
|
|
||||||
switch (bitrateMode) {
|
switch (hAacEnc->bitrateMode) {
|
||||||
case AACENC_BR_MODE_CBR:
|
case AACENC_BR_MODE_CBR:
|
||||||
transporBitreservoir = bitresTotal; /* encoder bitreservoir level */
|
transporBitreservoir = hAacEnc->qcKernel->bitResTot; /* encoder bitreservoir level */
|
||||||
break;
|
break;
|
||||||
case AACENC_BR_MODE_VBR_1:
|
case AACENC_BR_MODE_VBR_1:
|
||||||
case AACENC_BR_MODE_VBR_2:
|
case AACENC_BR_MODE_VBR_2:
|
||||||
@ -253,6 +284,10 @@ static INT FDKaacEnc_EncBitresToTpBitres(
|
|||||||
FDK_ASSERT(0);
|
FDK_ASSERT(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hAacEnc->config->audioMuxVersion==2) {
|
||||||
|
transporBitreservoir = MIN_BUFSIZE_PER_EFF_CHAN * hAacEnc->channelMapping.nChannelsEff;
|
||||||
|
}
|
||||||
|
|
||||||
return transporBitreservoir;
|
return transporBitreservoir;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -289,6 +324,7 @@ void FDKaacEnc_AacInitDefaultConfig(AACENC_CONFIG *config)
|
|||||||
config->minBitsPerFrame = -1; /* minum number of bits in each AU */
|
config->minBitsPerFrame = -1; /* minum number of bits in each AU */
|
||||||
config->maxBitsPerFrame = -1; /* minum number of bits in each AU */
|
config->maxBitsPerFrame = -1; /* minum number of bits in each AU */
|
||||||
config->bitreservoir = -1; /* default, uninitialized value */
|
config->bitreservoir = -1; /* default, uninitialized value */
|
||||||
|
config->audioMuxVersion = -1; /* audio mux version not configured */
|
||||||
|
|
||||||
/* init tabs in fixpoint_math */
|
/* init tabs in fixpoint_math */
|
||||||
InitLdInt();
|
InitLdInt();
|
||||||
@ -564,7 +600,10 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(HANDLE_AAC_ENC hAacEnc,
|
|||||||
qcInit.averageBits = (averageBitsPerFrame+7)&~7;
|
qcInit.averageBits = (averageBitsPerFrame+7)&~7;
|
||||||
qcInit.bitRes = MIN_BUFSIZE_PER_EFF_CHAN*cm->nChannelsEff;
|
qcInit.bitRes = MIN_BUFSIZE_PER_EFF_CHAN*cm->nChannelsEff;
|
||||||
qcInit.maxBits = MIN_BUFSIZE_PER_EFF_CHAN*cm->nChannelsEff;
|
qcInit.maxBits = MIN_BUFSIZE_PER_EFF_CHAN*cm->nChannelsEff;
|
||||||
qcInit.minBits = 0;
|
qcInit.maxBits = (config->maxBitsPerFrame!=-1) ? fixMin(qcInit.maxBits, config->maxBitsPerFrame) : qcInit.maxBits;
|
||||||
|
qcInit.maxBits = fixMax(qcInit.maxBits, (averageBitsPerFrame+7)&~7);
|
||||||
|
qcInit.minBits = (config->minBitsPerFrame!=-1) ? config->minBitsPerFrame : 0;
|
||||||
|
qcInit.minBits = fixMin(qcInit.minBits, averageBitsPerFrame&~7);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -575,9 +614,11 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(HANDLE_AAC_ENC hAacEnc,
|
|||||||
|
|
||||||
qcInit.maxBits = fixMin(MIN_BUFSIZE_PER_EFF_CHAN*cm->nChannelsEff, ((averageBitsPerFrame+7)&~7)+qcInit.bitRes);
|
qcInit.maxBits = fixMin(MIN_BUFSIZE_PER_EFF_CHAN*cm->nChannelsEff, ((averageBitsPerFrame+7)&~7)+qcInit.bitRes);
|
||||||
qcInit.maxBits = (config->maxBitsPerFrame!=-1) ? fixMin(qcInit.maxBits, config->maxBitsPerFrame) : qcInit.maxBits;
|
qcInit.maxBits = (config->maxBitsPerFrame!=-1) ? fixMin(qcInit.maxBits, config->maxBitsPerFrame) : qcInit.maxBits;
|
||||||
|
qcInit.maxBits = fixMin(MIN_BUFSIZE_PER_EFF_CHAN*cm->nChannelsEff, fixMax(qcInit.maxBits, (averageBitsPerFrame+7+8)&~7));
|
||||||
|
|
||||||
qcInit.minBits = fixMax(0, ((averageBitsPerFrame-1)&~7)-qcInit.bitRes-transportEnc_GetStaticBits(hTpEnc, ((averageBitsPerFrame+7)&~7)+qcInit.bitRes));
|
qcInit.minBits = fixMax(0, ((averageBitsPerFrame-1)&~7)-qcInit.bitRes-transportEnc_GetStaticBits(hTpEnc, ((averageBitsPerFrame+7)&~7)+qcInit.bitRes));
|
||||||
qcInit.minBits = (config->minBitsPerFrame!=-1) ? fixMax(qcInit.minBits, config->minBitsPerFrame) : qcInit.minBits;
|
qcInit.minBits = (config->minBitsPerFrame!=-1) ? fixMax(qcInit.minBits, config->minBitsPerFrame) : qcInit.minBits;
|
||||||
|
qcInit.minBits = fixMin(qcInit.minBits, (averageBitsPerFrame - transportEnc_GetStaticBits(hTpEnc, qcInit.maxBits))&~7);
|
||||||
}
|
}
|
||||||
|
|
||||||
qcInit.sampleRate = config->sampleRate;
|
qcInit.sampleRate = config->sampleRate;
|
||||||
@ -585,11 +626,9 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(HANDLE_AAC_ENC hAacEnc,
|
|||||||
qcInit.nSubFrames = config->nSubFrames;
|
qcInit.nSubFrames = config->nSubFrames;
|
||||||
qcInit.padding.paddingRest = config->sampleRate;
|
qcInit.padding.paddingRest = config->sampleRate;
|
||||||
|
|
||||||
/* Calc meanPe */
|
/* Calc meanPe: qcInit.meanPe = 10.0f * FRAME_LEN_LONG * hAacEnc->bandwidth90dB/(config->sampleRate/2.0f); */
|
||||||
bw_ratio = fDivNorm((FIXP_DBL)hAacEnc->bandwidth90dB, (FIXP_DBL)(config->sampleRate>>1), &qbw);
|
bw_ratio = fDivNorm((FIXP_DBL)(10*config->framelength*hAacEnc->bandwidth90dB), (FIXP_DBL)(config->sampleRate), &qbw);
|
||||||
qbw = DFRACT_BITS-1-qbw;
|
qcInit.meanPe = FDKmax((INT)scaleValue(bw_ratio, qbw+1-(DFRACT_BITS-1)), 1);
|
||||||
/* qcInit.meanPe = 10.0f * FRAME_LEN_LONG * hAacEnc->bandwidth90dB/(config->sampleRate/2.0f); */
|
|
||||||
qcInit.meanPe = fMult(bw_ratio, (FIXP_DBL)((10*config->framelength)<<16)) >> (qbw-15);
|
|
||||||
|
|
||||||
/* Calc maxBitFac */
|
/* Calc maxBitFac */
|
||||||
mbfac = fDivNorm((MIN_BUFSIZE_PER_EFF_CHAN-744)*cm->nChannelsEff, qcInit.averageBits/qcInit.nSubFrames, &qmbfac);
|
mbfac = fDivNorm((MIN_BUFSIZE_PER_EFF_CHAN-744)*cm->nChannelsEff, qcInit.averageBits/qcInit.nSubFrames, &qmbfac);
|
||||||
@ -651,23 +690,7 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(HANDLE_AAC_ENC hAacEnc,
|
|||||||
if (ErrorStatus != AAC_ENC_OK)
|
if (ErrorStatus != AAC_ENC_OK)
|
||||||
goto bail;
|
goto bail;
|
||||||
|
|
||||||
/* Map virtual aot's to intern aot used in bitstream writer. */
|
hAacEnc->aot = hAacEnc->config->audioObjectType;
|
||||||
switch (hAacEnc->config->audioObjectType) {
|
|
||||||
case AOT_MP2_AAC_LC:
|
|
||||||
case AOT_DABPLUS_AAC_LC:
|
|
||||||
hAacEnc->aot = AOT_AAC_LC;
|
|
||||||
break;
|
|
||||||
case AOT_MP2_SBR:
|
|
||||||
case AOT_DABPLUS_SBR:
|
|
||||||
hAacEnc->aot = AOT_SBR;
|
|
||||||
break;
|
|
||||||
case AOT_MP2_PS:
|
|
||||||
case AOT_DABPLUS_PS:
|
|
||||||
hAacEnc->aot = AOT_PS;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
hAacEnc->aot = hAacEnc->config->audioObjectType;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* common things */
|
/* common things */
|
||||||
|
|
||||||
@ -932,7 +955,7 @@ AAC_ENCODER_ERROR FDKaacEnc_EncodeFrame( HANDLE_AAC_ENC hAacEnc,
|
|||||||
transportEnc_WriteAccessUnit(
|
transportEnc_WriteAccessUnit(
|
||||||
hTpEnc,
|
hTpEnc,
|
||||||
totalBits,
|
totalBits,
|
||||||
FDKaacEnc_EncBitresToTpBitres(hAacEnc->bitrateMode, hAacEnc->qcKernel->bitResTot),
|
FDKaacEnc_EncBitresToTpBitres(hAacEnc),
|
||||||
cm->nChannelsEff);
|
cm->nChannelsEff);
|
||||||
|
|
||||||
/* write bitstream */
|
/* write bitstream */
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -204,6 +204,8 @@ struct AACENC_CONFIG {
|
|||||||
INT maxBitsPerFrame; /* maximum number of bits in AU */
|
INT maxBitsPerFrame; /* maximum number of bits in AU */
|
||||||
INT bitreservoir; /* size of bitreservoir */
|
INT bitreservoir; /* size of bitreservoir */
|
||||||
|
|
||||||
|
INT audioMuxVersion; /* audio mux version in loas/latm transport format */
|
||||||
|
|
||||||
UINT sbrRatio; /* sbr sampling rate ratio: dual- or single-rate */
|
UINT sbrRatio; /* sbr sampling rate ratio: dual- or single-rate */
|
||||||
|
|
||||||
UCHAR useTns; /* flag: use temporal noise shaping */
|
UCHAR useTns; /* flag: use temporal noise shaping */
|
||||||
@ -222,6 +224,36 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct AAC_ENC *HANDLE_AAC_ENC;
|
typedef struct AAC_ENC *HANDLE_AAC_ENC;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Calculate framesize in bits for given bit rate, frame length and sampling rate.
|
||||||
|
*
|
||||||
|
* \param bitRate Ttarget bitrate in bits per second.
|
||||||
|
* \param frameLength Number of audio samples in one frame.
|
||||||
|
* \param samplingRate Sampling rate in Hz.
|
||||||
|
*
|
||||||
|
* \return Framesize in bits per frame.
|
||||||
|
*/
|
||||||
|
INT FDKaacEnc_CalcBitsPerFrame(
|
||||||
|
const INT bitRate,
|
||||||
|
const INT frameLength,
|
||||||
|
const INT samplingRate
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Calculate bitrate in bits per second for given framesize, frame length and sampling rate.
|
||||||
|
*
|
||||||
|
* \param bitsPerFrame Framesize in bits per frame.
|
||||||
|
* \param frameLength Number of audio samples in one frame.
|
||||||
|
* \param samplingRate Sampling rate in Hz.
|
||||||
|
*
|
||||||
|
* \return Bitrate in bits per second.
|
||||||
|
*/
|
||||||
|
INT FDKaacEnc_CalcBitrate(
|
||||||
|
const INT bitsPerFrame,
|
||||||
|
const INT frameLength,
|
||||||
|
const INT samplingRate
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Limit given bit rate to a valid value
|
* \brief Limit given bit rate to a valid value
|
||||||
* \param hTpEnc transport encoder handle
|
* \param hTpEnc transport encoder handle
|
||||||
|
@ -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 14
|
#define AACENCODER_LIB_VL2 19
|
||||||
#define AACENCODER_LIB_TITLE "AAC Encoder"
|
#define AACENCODER_LIB_TITLE "AAC Encoder"
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
#define AACENCODER_LIB_BUILD_DATE ""
|
#define AACENCODER_LIB_BUILD_DATE ""
|
||||||
@ -153,6 +153,7 @@ typedef struct {
|
|||||||
UINT userAfterburner;
|
UINT userAfterburner;
|
||||||
UINT userFramelength;
|
UINT userFramelength;
|
||||||
UINT userAncDataRate;
|
UINT userAncDataRate;
|
||||||
|
UINT userPeakBitrate;
|
||||||
|
|
||||||
UCHAR userTns; /*!< Use TNS coding. */
|
UCHAR userTns; /*!< Use TNS coding. */
|
||||||
UCHAR userPns; /*!< Use PNS coding. */
|
UCHAR userPns; /*!< Use PNS coding. */
|
||||||
@ -326,10 +327,7 @@ static inline INT isSbrActive(const HANDLE_AACENC_CONFIG hAacConfig)
|
|||||||
{
|
{
|
||||||
INT sbrUsed = 0;
|
INT sbrUsed = 0;
|
||||||
|
|
||||||
if ( (hAacConfig->audioObjectType==AOT_SBR) || (hAacConfig->audioObjectType==AOT_PS)
|
if ( (hAacConfig->audioObjectType==AOT_SBR) || (hAacConfig->audioObjectType==AOT_PS) )
|
||||||
|| (hAacConfig->audioObjectType==AOT_MP2_SBR) || (hAacConfig->audioObjectType==AOT_MP2_PS)
|
|
||||||
|| (hAacConfig->audioObjectType==AOT_DABPLUS_SBR) || (hAacConfig->audioObjectType==AOT_DABPLUS_PS)
|
|
||||||
|| (hAacConfig->audioObjectType==AOT_DRM_SBR) || (hAacConfig->audioObjectType==AOT_DRM_MPEG_PS) )
|
|
||||||
{
|
{
|
||||||
sbrUsed = 1;
|
sbrUsed = 1;
|
||||||
}
|
}
|
||||||
@ -345,10 +343,7 @@ static inline INT isPsActive(const AUDIO_OBJECT_TYPE audioObjectType)
|
|||||||
{
|
{
|
||||||
INT psUsed = 0;
|
INT psUsed = 0;
|
||||||
|
|
||||||
if ( (audioObjectType==AOT_PS)
|
if ( (audioObjectType==AOT_PS) )
|
||||||
|| (audioObjectType==AOT_MP2_PS)
|
|
||||||
|| (audioObjectType==AOT_DABPLUS_PS)
|
|
||||||
|| (audioObjectType==AOT_DRM_MPEG_PS) )
|
|
||||||
{
|
{
|
||||||
psUsed = 1;
|
psUsed = 1;
|
||||||
}
|
}
|
||||||
@ -373,8 +368,7 @@ static SBR_PS_SIGNALING getSbrSignalingMode(
|
|||||||
sbrSignaling = SIG_IMPLICIT; /* default: implicit signaling */
|
sbrSignaling = SIG_IMPLICIT; /* default: implicit signaling */
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((audioObjectType==AOT_AAC_LC) || (audioObjectType==AOT_SBR) || (audioObjectType==AOT_PS) ||
|
if ( (audioObjectType==AOT_AAC_LC) || (audioObjectType==AOT_SBR) || (audioObjectType==AOT_PS) ) {
|
||||||
(audioObjectType==AOT_MP2_AAC_LC) || (audioObjectType==AOT_MP2_SBR) || (audioObjectType==AOT_MP2_PS) ) {
|
|
||||||
switch (transportType) {
|
switch (transportType) {
|
||||||
case TT_MP4_ADIF:
|
case TT_MP4_ADIF:
|
||||||
case TT_MP4_ADTS:
|
case TT_MP4_ADTS:
|
||||||
@ -430,22 +424,7 @@ static void FDKaacEnc_MapConfig(
|
|||||||
|
|
||||||
cc->flags = 0;
|
cc->flags = 0;
|
||||||
|
|
||||||
/* Map virtual aot to transport aot. */
|
transport_AOT = hAacConfig->audioObjectType;
|
||||||
switch (hAacConfig->audioObjectType) {
|
|
||||||
case AOT_MP2_AAC_LC:
|
|
||||||
transport_AOT = AOT_AAC_LC;
|
|
||||||
break;
|
|
||||||
case AOT_MP2_SBR:
|
|
||||||
transport_AOT = AOT_SBR;
|
|
||||||
cc->flags |= CC_SBR;
|
|
||||||
break;
|
|
||||||
case AOT_MP2_PS:
|
|
||||||
transport_AOT = AOT_PS;
|
|
||||||
cc->flags |= CC_SBR;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
transport_AOT = hAacConfig->audioObjectType;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hAacConfig->audioObjectType == AOT_ER_AAC_ELD) {
|
if (hAacConfig->audioObjectType == AOT_ER_AAC_ELD) {
|
||||||
cc->flags |= (hAacConfig->syntaxFlags & AC_SBR_PRESENT) ? CC_SBR : 0;
|
cc->flags |= (hAacConfig->syntaxFlags & AC_SBR_PRESENT) ? CC_SBR : 0;
|
||||||
@ -511,16 +490,7 @@ static void FDKaacEnc_MapConfig(
|
|||||||
cc->samplingRate = hAacConfig->sampleRate;
|
cc->samplingRate = hAacConfig->sampleRate;
|
||||||
|
|
||||||
/* Mpeg-4 signaling for transport library. */
|
/* Mpeg-4 signaling for transport library. */
|
||||||
switch ( hAacConfig->audioObjectType ) {
|
cc->flags |= CC_MPEG_ID;
|
||||||
case AOT_MP2_AAC_LC:
|
|
||||||
case AOT_MP2_SBR:
|
|
||||||
case AOT_MP2_PS:
|
|
||||||
cc->flags &= ~CC_MPEG_ID; /* Required for ADTS. */
|
|
||||||
cc->extAOT = AOT_NULL_OBJECT;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
cc->flags |= CC_MPEG_ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ER-tools signaling. */
|
/* ER-tools signaling. */
|
||||||
cc->flags |= (hAacConfig->syntaxFlags & AC_ER_VCB11) ? CC_VCB11 : 0;
|
cc->flags |= (hAacConfig->syntaxFlags & AC_ER_VCB11) ? CC_VCB11 : 0;
|
||||||
@ -585,6 +555,7 @@ AAC_ENCODER_ERROR aacEncDefaultConfig(HANDLE_AACENC_CONFIG hAacConfig,
|
|||||||
config->userChannelMode = hAacConfig->channelMode;
|
config->userChannelMode = hAacConfig->channelMode;
|
||||||
config->userBitrate = hAacConfig->bitRate;
|
config->userBitrate = hAacConfig->bitRate;
|
||||||
config->userBitrateMode = hAacConfig->bitrateMode;
|
config->userBitrateMode = hAacConfig->bitrateMode;
|
||||||
|
config->userPeakBitrate = (UINT)-1;
|
||||||
config->userBandwidth = hAacConfig->bandWidth;
|
config->userBandwidth = hAacConfig->bandWidth;
|
||||||
config->userTns = hAacConfig->useTns;
|
config->userTns = hAacConfig->useTns;
|
||||||
config->userPns = hAacConfig->usePns;
|
config->userPns = hAacConfig->usePns;
|
||||||
@ -792,12 +763,15 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder,
|
|||||||
hAacConfig->syntaxFlags = 0;
|
hAacConfig->syntaxFlags = 0;
|
||||||
hAacConfig->epConfig = -1;
|
hAacConfig->epConfig = -1;
|
||||||
|
|
||||||
|
if (config->userTpType==TT_MP4_LATM_MCP1 || config->userTpType==TT_MP4_LATM_MCP0 || config->userTpType==TT_MP4_LOAS) {
|
||||||
|
hAacConfig->audioMuxVersion = config->userTpAmxv;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hAacConfig->audioMuxVersion = -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Adapt internal AOT when necessary. */
|
/* Adapt internal AOT when necessary. */
|
||||||
switch ( hAacConfig->audioObjectType ) {
|
switch ( hAacConfig->audioObjectType ) {
|
||||||
case AOT_MP2_AAC_LC:
|
|
||||||
case AOT_MP2_SBR:
|
|
||||||
case AOT_MP2_PS:
|
|
||||||
hAacConfig->usePns = 0;
|
|
||||||
case AOT_AAC_LC:
|
case AOT_AAC_LC:
|
||||||
case AOT_SBR:
|
case AOT_SBR:
|
||||||
case AOT_PS:
|
case AOT_PS:
|
||||||
@ -884,6 +858,18 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((hAacConfig->bitrateMode >= 0) && (hAacConfig->bitrateMode <= 5)) {
|
||||||
|
if ((INT)config->userPeakBitrate != -1) {
|
||||||
|
hAacConfig->maxBitsPerFrame = (FDKaacEnc_CalcBitsPerFrame(fMax(hAacConfig->bitRate, (INT)config->userPeakBitrate), hAacConfig->framelength, hAacConfig->sampleRate) + 7)&~7;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
hAacConfig->maxBitsPerFrame = -1;
|
||||||
|
}
|
||||||
|
if (hAacConfig->audioMuxVersion==2) {
|
||||||
|
hAacConfig->minBitsPerFrame = fMin(32*8, FDKaacEnc_CalcBitsPerFrame(hAacConfig->bitRate, hAacConfig->framelength, hAacConfig->sampleRate))&~7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize SBR parameters */
|
/* Initialize SBR parameters */
|
||||||
if ( (hAacConfig->audioObjectType==AOT_ER_AAC_ELD)
|
if ( (hAacConfig->audioObjectType==AOT_ER_AAC_ELD)
|
||||||
&& (config->userSbrEnabled == (UCHAR)-1) && (config->userSbrRatio==0) )
|
&& (config->userSbrEnabled == (UCHAR)-1) && (config->userSbrRatio==0) )
|
||||||
@ -1139,7 +1125,7 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder,
|
|||||||
hAacConfig);
|
hAacConfig);
|
||||||
|
|
||||||
/* create flags for transport encoder */
|
/* create flags for transport encoder */
|
||||||
if (config->userTpAmxv == 1) {
|
if (config->userTpAmxv != 0) {
|
||||||
flags |= TP_FLAG_LATM_AMV;
|
flags |= TP_FLAG_LATM_AMV;
|
||||||
}
|
}
|
||||||
/* Clear output buffer */
|
/* Clear output buffer */
|
||||||
@ -1569,7 +1555,7 @@ AACENC_ERROR aacEncEncode(
|
|||||||
&& ((hAacEncoder->extParam.userChannelMode==MODE_1_2_2)||(hAacEncoder->extParam.userChannelMode==MODE_1_2_2_1)) )
|
&& ((hAacEncoder->extParam.userChannelMode==MODE_1_2_2)||(hAacEncoder->extParam.userChannelMode==MODE_1_2_2_1)) )
|
||||||
{
|
{
|
||||||
/* Set matrix mixdown coefficient. */
|
/* Set matrix mixdown coefficient. */
|
||||||
UINT pceValue = (UINT)( (1<<3) | ((matrix_mixdown_idx&0x3)<<1) | 1 );
|
UINT pceValue = (UINT)( (0<<3) | ((matrix_mixdown_idx&0x3)<<1) | 1 );
|
||||||
if (hAacEncoder->extParam.userPceAdditions != pceValue) {
|
if (hAacEncoder->extParam.userPceAdditions != pceValue) {
|
||||||
hAacEncoder->extParam.userPceAdditions = pceValue;
|
hAacEncoder->extParam.userPceAdditions = pceValue;
|
||||||
hAacEncoder->InitFlags |= AACENC_INIT_TRANSPORT;
|
hAacEncoder->InitFlags |= AACENC_INIT_TRANSPORT;
|
||||||
@ -1785,19 +1771,16 @@ AACENC_ERROR aacEncoder_SetParam(
|
|||||||
/* check if AOT matches the allocated modules */
|
/* check if AOT matches the allocated modules */
|
||||||
switch ( value ) {
|
switch ( value ) {
|
||||||
case AOT_PS:
|
case AOT_PS:
|
||||||
case AOT_MP2_PS:
|
|
||||||
if (!(hAacEncoder->encoder_modis & (ENC_MODE_FLAG_PS))) {
|
if (!(hAacEncoder->encoder_modis & (ENC_MODE_FLAG_PS))) {
|
||||||
err = AACENC_INVALID_CONFIG;
|
err = AACENC_INVALID_CONFIG;
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
case AOT_SBR:
|
case AOT_SBR:
|
||||||
case AOT_MP2_SBR:
|
|
||||||
if (!(hAacEncoder->encoder_modis & (ENC_MODE_FLAG_SBR))) {
|
if (!(hAacEncoder->encoder_modis & (ENC_MODE_FLAG_SBR))) {
|
||||||
err = AACENC_INVALID_CONFIG;
|
err = AACENC_INVALID_CONFIG;
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
case AOT_AAC_LC:
|
case AOT_AAC_LC:
|
||||||
case AOT_MP2_AAC_LC:
|
|
||||||
case AOT_ER_AAC_LD:
|
case AOT_ER_AAC_LD:
|
||||||
case AOT_ER_AAC_ELD:
|
case AOT_ER_AAC_ELD:
|
||||||
if (!(hAacEncoder->encoder_modis & (ENC_MODE_FLAG_AAC))) {
|
if (!(hAacEncoder->encoder_modis & (ENC_MODE_FLAG_AAC))) {
|
||||||
@ -1823,6 +1806,7 @@ AACENC_ERROR aacEncoder_SetParam(
|
|||||||
if (settings->userBitrateMode != value) {
|
if (settings->userBitrateMode != value) {
|
||||||
switch ( value ) {
|
switch ( value ) {
|
||||||
case 0:
|
case 0:
|
||||||
|
case 1: case 2: case 3: case 4: case 5:
|
||||||
case 8:
|
case 8:
|
||||||
settings->userBitrateMode = value;
|
settings->userBitrateMode = value;
|
||||||
hAacEncoder->InitFlags |= AACENC_INIT_CONFIG | AACENC_INIT_TRANSPORT;
|
hAacEncoder->InitFlags |= AACENC_INIT_CONFIG | AACENC_INIT_TRANSPORT;
|
||||||
@ -1973,6 +1957,16 @@ AACENC_ERROR aacEncoder_SetParam(
|
|||||||
hAacEncoder->InitFlags |= AACENC_INIT_TRANSPORT;
|
hAacEncoder->InitFlags |= AACENC_INIT_TRANSPORT;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case AACENC_AUDIOMUXVER:
|
||||||
|
if (settings->userTpAmxv != value) {
|
||||||
|
if ( !((value==0) || (value==1) || (value==2)) ) {
|
||||||
|
err = AACENC_INVALID_CONFIG;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
settings->userTpAmxv = value;
|
||||||
|
hAacEncoder->InitFlags |= AACENC_INIT_TRANSPORT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case AACENC_TPSUBFRAMES:
|
case AACENC_TPSUBFRAMES:
|
||||||
if (settings->userTpNsubFrames != value) {
|
if (settings->userTpNsubFrames != value) {
|
||||||
if (! ( (value>=1) && (value<=4) ) ) {
|
if (! ( (value>=1) && (value<=4) ) ) {
|
||||||
@ -2006,6 +2000,12 @@ AACENC_ERROR aacEncoder_SetParam(
|
|||||||
hAacEncoder->InitFlags |= AACENC_INIT_CONFIG;
|
hAacEncoder->InitFlags |= AACENC_INIT_CONFIG;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case AACENC_PEAK_BITRATE:
|
||||||
|
if (settings->userPeakBitrate != value) {
|
||||||
|
settings->userPeakBitrate = value;
|
||||||
|
hAacEncoder->InitFlags |= AACENC_INIT_CONFIG | AACENC_INIT_TRANSPORT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
err = AACENC_UNSUPPORTED_PARAMETER;
|
err = AACENC_UNSUPPORTED_PARAMETER;
|
||||||
break;
|
break;
|
||||||
@ -2076,6 +2076,9 @@ UINT aacEncoder_GetParam(
|
|||||||
case AACENC_HEADER_PERIOD:
|
case AACENC_HEADER_PERIOD:
|
||||||
value = (UINT)hAacEncoder->coderConfig.headerPeriod;
|
value = (UINT)hAacEncoder->coderConfig.headerPeriod;
|
||||||
break;
|
break;
|
||||||
|
case AACENC_AUDIOMUXVER:
|
||||||
|
value = (UINT)hAacEncoder->aacConfig.audioMuxVersion;
|
||||||
|
break;
|
||||||
case AACENC_TPSUBFRAMES:
|
case AACENC_TPSUBFRAMES:
|
||||||
value = (UINT)settings->userTpNsubFrames;
|
value = (UINT)settings->userTpNsubFrames;
|
||||||
break;
|
break;
|
||||||
@ -2088,6 +2091,12 @@ UINT aacEncoder_GetParam(
|
|||||||
case AACENC_METADATA_MODE:
|
case AACENC_METADATA_MODE:
|
||||||
value = (hAacEncoder->metaDataAllowed==0) ? 0 : (UINT)settings->userMetaDataMode;
|
value = (hAacEncoder->metaDataAllowed==0) ? 0 : (UINT)settings->userMetaDataMode;
|
||||||
break;
|
break;
|
||||||
|
case AACENC_PEAK_BITRATE:
|
||||||
|
value = (UINT)-1; /* peak bitrate parameter is meaningless */
|
||||||
|
if ( ((INT)hAacEncoder->extParam.userPeakBitrate!=-1) ) {
|
||||||
|
value = (UINT)(fMax((INT)hAacEncoder->extParam.userPeakBitrate, hAacEncoder->aacConfig.bitRate)); /* peak bitrate parameter is in use */
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
//err = MPS_INVALID_PARAMETER;
|
//err = MPS_INVALID_PARAMETER;
|
||||||
break;
|
break;
|
||||||
|
@ -2138,7 +2138,7 @@ static FIXP_DBL FDKaacEnc_bitresCalcBitFac(const INT bitresBits,
|
|||||||
bresParam->clipSpendLow, bresParam->clipSpendHigh,
|
bresParam->clipSpendLow, bresParam->clipSpendHigh,
|
||||||
bresParam->minBitSpend, bresParam->maxBitSpend, bitspend_slope);
|
bresParam->minBitSpend, bresParam->maxBitSpend, bitspend_slope);
|
||||||
|
|
||||||
pe_pers = fDivNorm(pex - adjThrChan->peMin, adjThrChan->peMax - adjThrChan->peMin);
|
pe_pers = (pex > adjThrChan->peMin) ? fDivNorm(pex - adjThrChan->peMin, adjThrChan->peMax - adjThrChan->peMin) : 0;
|
||||||
tmp_fix = fMult(((FIXP_DBL)bitSpend + (FIXP_DBL)bitSave), pe_pers);
|
tmp_fix = fMult(((FIXP_DBL)bitSpend + (FIXP_DBL)bitSave), pe_pers);
|
||||||
bitresFac_fix = (UNITY>>1) - ((FIXP_DBL)bitSave>>1) + (tmp_fix>>1); qbres = (DFRACT_BITS-2);
|
bitresFac_fix = (UNITY>>1) - ((FIXP_DBL)bitSave>>1) + (tmp_fix>>1); qbres = (DFRACT_BITS-2);
|
||||||
|
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -325,7 +325,6 @@ FDKaacEnc_prepareIntensityDecision(const FIXP_DBL *sfbEnergyLeft,
|
|||||||
|
|
||||||
channelCorr[sfb + sfboffs] = FL2FXCONST_DBL(0.0f);
|
channelCorr[sfb + sfboffs] = FL2FXCONST_DBL(0.0f);
|
||||||
|
|
||||||
FDK_ASSERT(50 >= 49);
|
|
||||||
/* max width of scalefactorband is 96; width's are always even */
|
/* max width of scalefactorband is 96; width's are always even */
|
||||||
/* inv_n is scaled with factor 2 to compensate fMultDiv2() in subsequent loops */
|
/* inv_n is scaled with factor 2 to compensate fMultDiv2() in subsequent loops */
|
||||||
inv_n = GetInvInt((sfbOffset[sfb + sfboffs + 1] - sfbOffset[sfb + sfboffs])>>1);
|
inv_n = GetInvInt((sfbOffset[sfb + sfboffs + 1] - sfbOffset[sfb + sfboffs])>>1);
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -634,13 +634,14 @@ AAC_ENCODER_ERROR FDKaacEnc_InitPsyConfiguration(INT bitrate,
|
|||||||
if (psyConf->sfbOffset[sfb] >= psyConf->lowpassLine)
|
if (psyConf->sfbOffset[sfb] >= psyConf->lowpassLine)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
psyConf->sfbActive = sfb;
|
psyConf->sfbActive = FDKmax(sfb, 1);
|
||||||
|
|
||||||
for (sfb = 0; sfb < psyConf->sfbCnt; sfb++){
|
for (sfb = 0; sfb < psyConf->sfbCnt; sfb++){
|
||||||
if (psyConf->sfbOffset[sfb] >= psyConf->lowpassLineLFE)
|
if (psyConf->sfbOffset[sfb] >= psyConf->lowpassLineLFE)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
psyConf->sfbActiveLFE = sfb;
|
psyConf->sfbActiveLFE = sfb;
|
||||||
|
psyConf->sfbActive = FDKmax(psyConf->sfbActive, psyConf->sfbActiveLFE);
|
||||||
|
|
||||||
/* calculate minSnr */
|
/* calculate minSnr */
|
||||||
FDKaacEnc_initMinSnr(bitrate,
|
FDKaacEnc_initMinSnr(bitrate,
|
||||||
|
@ -621,7 +621,7 @@ AAC_ENCODER_ERROR FDKaacEnc_psyMain(INT channels,
|
|||||||
FDKmemclear(&psyData[ch]->mdctSpectrum[psyData[ch]->lowpassLine+wOffset],
|
FDKmemclear(&psyData[ch]->mdctSpectrum[psyData[ch]->lowpassLine+wOffset],
|
||||||
(windowLength[ch]-psyData[ch]->lowpassLine)*sizeof(FIXP_DBL));
|
(windowLength[ch]-psyData[ch]->lowpassLine)*sizeof(FIXP_DBL));
|
||||||
|
|
||||||
if (hPsyConfLong->filterbank != FB_LC) {
|
if ( (hPsyConfLong->filterbank != FB_LC) && (psyData[ch]->lowpassLine >= FADE_OUT_LEN) ) {
|
||||||
/* Do blending to reduce gibbs artifacts */
|
/* Do blending to reduce gibbs artifacts */
|
||||||
for (int i=0; i<FADE_OUT_LEN; i++) {
|
for (int i=0; i<FADE_OUT_LEN; i++) {
|
||||||
psyData[ch]->mdctSpectrum[psyData[ch]->lowpassLine+wOffset - FADE_OUT_LEN + i] = fMult(psyData[ch]->mdctSpectrum[psyData[ch]->lowpassLine+wOffset - FADE_OUT_LEN + i], fadeOutFactor[i]);
|
psyData[ch]->mdctSpectrum[psyData[ch]->lowpassLine+wOffset - FADE_OUT_LEN + i] = fMult(psyData[ch]->mdctSpectrum[psyData[ch]->lowpassLine+wOffset - FADE_OUT_LEN + i], fadeOutFactor[i]);
|
||||||
|
@ -1248,6 +1248,8 @@ AAC_ENCODER_ERROR FDKaacEnc_updateFillBits(CHANNEL_MAPPING* cm,
|
|||||||
case QCDATA_BR_MODE_VBR_4:
|
case QCDATA_BR_MODE_VBR_4:
|
||||||
case QCDATA_BR_MODE_VBR_5:
|
case QCDATA_BR_MODE_VBR_5:
|
||||||
qcOut[0]->totFillBits = (qcOut[0]->grantedDynBits - qcOut[0]->usedDynBits)&7; /* precalculate alignment bits */
|
qcOut[0]->totFillBits = (qcOut[0]->grantedDynBits - qcOut[0]->usedDynBits)&7; /* precalculate alignment bits */
|
||||||
|
qcOut[0]->totalBits = qcOut[0]->staticBits + qcOut[0]->usedDynBits + qcOut[0]->totFillBits + qcOut[0]->elementExtBits + qcOut[0]->globalExtBits;
|
||||||
|
qcOut[0]->totFillBits += ( fixMax(0, qcKernel->minBitsPerFrame - qcOut[0]->totalBits) + 7) & ~7;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QCDATA_BR_MODE_CBR:
|
case QCDATA_BR_MODE_CBR:
|
||||||
@ -1257,6 +1259,8 @@ AAC_ENCODER_ERROR FDKaacEnc_updateFillBits(CHANNEL_MAPPING* cm,
|
|||||||
/* processing fill-bits */
|
/* processing fill-bits */
|
||||||
INT deltaBitRes = qcOut[0]->grantedDynBits - qcOut[0]->usedDynBits ;
|
INT deltaBitRes = qcOut[0]->grantedDynBits - qcOut[0]->usedDynBits ;
|
||||||
qcOut[0]->totFillBits = fixMax((deltaBitRes&7), (deltaBitRes - (fixMax(0,bitResSpace-7)&~7)));
|
qcOut[0]->totFillBits = fixMax((deltaBitRes&7), (deltaBitRes - (fixMax(0,bitResSpace-7)&~7)));
|
||||||
|
qcOut[0]->totalBits = qcOut[0]->staticBits + qcOut[0]->usedDynBits + qcOut[0]->totFillBits + qcOut[0]->elementExtBits + qcOut[0]->globalExtBits;
|
||||||
|
qcOut[0]->totFillBits += ( fixMax(0, qcKernel->minBitsPerFrame - qcOut[0]->totalBits) + 7) & ~7;
|
||||||
break;
|
break;
|
||||||
} /* switch (qcKernel->bitrateMode) */
|
} /* switch (qcKernel->bitrateMode) */
|
||||||
|
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -438,11 +438,11 @@ inline FIXP_DBL fAddSaturate(const FIXP_DBL a, const FIXP_DBL b)
|
|||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
|
||||||
array for 1/n, n=1..50
|
array for 1/n, n=1..80
|
||||||
|
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
extern const FIXP_DBL invCount[50];
|
extern const FIXP_DBL invCount[80];
|
||||||
|
|
||||||
LNK_SECTION_INITCODE
|
LNK_SECTION_INITCODE
|
||||||
inline void InitInvInt(void) {}
|
inline void InitInvInt(void) {}
|
||||||
@ -450,14 +450,14 @@ inline FIXP_DBL fAddSaturate(const FIXP_DBL a, const FIXP_DBL b)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Calculate the value of 1/i where i is a integer value. It supports
|
* \brief Calculate the value of 1/i where i is a integer value. It supports
|
||||||
* input values from 1 upto 50.
|
* input values from 1 upto 80.
|
||||||
* \param intValue Integer input value.
|
* \param intValue Integer input value.
|
||||||
* \param FIXP_DBL representation of 1/intValue
|
* \param FIXP_DBL representation of 1/intValue
|
||||||
*/
|
*/
|
||||||
inline FIXP_DBL GetInvInt(int intValue)
|
inline FIXP_DBL GetInvInt(int intValue)
|
||||||
{
|
{
|
||||||
FDK_ASSERT((intValue > 0) && (intValue < 50));
|
FDK_ASSERT((intValue > 0) && (intValue < 80));
|
||||||
FDK_ASSERT(intValue<50);
|
FDK_ASSERT(intValue<80);
|
||||||
return invCount[intValue];
|
return invCount[intValue];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ amm-info@iis.fraunhofer.de
|
|||||||
/* FDK tools library info */
|
/* FDK tools library info */
|
||||||
#define FDK_TOOLS_LIB_VL0 2
|
#define FDK_TOOLS_LIB_VL0 2
|
||||||
#define FDK_TOOLS_LIB_VL1 3
|
#define FDK_TOOLS_LIB_VL1 3
|
||||||
#define FDK_TOOLS_LIB_VL2 3
|
#define FDK_TOOLS_LIB_VL2 4
|
||||||
#define FDK_TOOLS_LIB_TITLE "FDK Tools"
|
#define FDK_TOOLS_LIB_TITLE "FDK Tools"
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
#define FDK_TOOLS_LIB_BUILD_DATE ""
|
#define FDK_TOOLS_LIB_BUILD_DATE ""
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -1902,7 +1902,7 @@ const USHORT sqrt_tab[49]={
|
|||||||
0xb504};
|
0xb504};
|
||||||
|
|
||||||
LNK_SECTION_CONSTDATA_L1
|
LNK_SECTION_CONSTDATA_L1
|
||||||
const FIXP_DBL invCount[50]= /* This could be 16-bit wide */
|
const FIXP_DBL invCount[80]= /* This could be 16-bit wide */
|
||||||
{
|
{
|
||||||
0x00000000, 0x7fffffff, 0x40000000, 0x2aaaaaab, 0x20000000,
|
0x00000000, 0x7fffffff, 0x40000000, 0x2aaaaaab, 0x20000000,
|
||||||
0x1999999a, 0x15555555, 0x12492492, 0x10000000, 0x0e38e38e,
|
0x1999999a, 0x15555555, 0x12492492, 0x10000000, 0x0e38e38e,
|
||||||
@ -1913,7 +1913,13 @@ const FIXP_DBL invCount[50]= /* This could be 16-bit wide */
|
|||||||
0x04444444, 0x04210842, 0x04000000, 0x03e0f83e, 0x03c3c3c4,
|
0x04444444, 0x04210842, 0x04000000, 0x03e0f83e, 0x03c3c3c4,
|
||||||
0x03a83a84, 0x038e38e4, 0x03759f23, 0x035e50d8, 0x03483483,
|
0x03a83a84, 0x038e38e4, 0x03759f23, 0x035e50d8, 0x03483483,
|
||||||
0x03333333, 0x031f3832, 0x030c30c3, 0x02fa0be8, 0x02e8ba2f,
|
0x03333333, 0x031f3832, 0x030c30c3, 0x02fa0be8, 0x02e8ba2f,
|
||||||
0x02d82d83, 0x02c8590b, 0x02b93105, 0x02aaaaab, 0x029cbc15
|
0x02d82d83, 0x02c8590b, 0x02b93105, 0x02aaaaab, 0x029cbc15,
|
||||||
|
0x028f5c29, 0x02828283, 0x02762762, 0x026a439f, 0x025ed098,
|
||||||
|
0x0253c825, 0x02492492, 0x023ee090, 0x0234f72c, 0x022b63cc,
|
||||||
|
0x02222222, 0x02192e2a, 0x02108421, 0x02082082, 0x02000000,
|
||||||
|
0x01f81f82, 0x01f07c1f, 0x01e9131b, 0x01e1e1e2, 0x01dae607,
|
||||||
|
0x01d41d42, 0x01cd8569, 0x01c71c72, 0x01c0e070, 0x01bacf91,
|
||||||
|
0x01b4e81b, 0x01af286c, 0x01a98ef6, 0x01a41a42, 0x019ec8e9
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -2033,19 +2039,6 @@ static const element_list_t node_aac_cpe = {
|
|||||||
{ &node_aac_cpe0, &node_aac_cpe1 }
|
{ &node_aac_cpe0, &node_aac_cpe1 }
|
||||||
};
|
};
|
||||||
|
|
||||||
#define el_mpegsres_sce &el_aac_sce[2]
|
|
||||||
|
|
||||||
static const element_list_t node_mpegsres_sce = {
|
|
||||||
el_mpegsres_sce,
|
|
||||||
{ NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
static const element_list_t node_mpegsres_cpe = {
|
|
||||||
el_aac_cpe1,
|
|
||||||
{ NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AOT C- {17,23}
|
* AOT C- {17,23}
|
||||||
* epConfig = 0,1
|
* epConfig = 0,1
|
||||||
@ -2424,13 +2417,6 @@ const element_list_t * getBitstreamElementList(AUDIO_OBJECT_TYPE aot, SCHAR epCo
|
|||||||
else
|
else
|
||||||
return &node_eld_cpe_epc1;
|
return &node_eld_cpe_epc1;
|
||||||
}
|
}
|
||||||
case AOT_MPEGS_RESIDUALS:
|
|
||||||
if (nChannels == 1) {
|
|
||||||
return &node_mpegsres_sce;
|
|
||||||
} else {
|
|
||||||
return &node_mpegsres_cpe;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -1100,7 +1100,6 @@ TRANSPORTDEC_ERROR transportDec_ReadAccessUnit( const HANDLE_TRANSPORTDEC hTp, c
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TT_RSVD50:
|
|
||||||
case TT_MP4_ADTS:
|
case TT_MP4_ADTS:
|
||||||
case TT_MP4_LOAS:
|
case TT_MP4_LOAS:
|
||||||
err = transportDec_readStream(hTp, layer);
|
err = transportDec_readStream(hTp, layer);
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
/* library info */
|
/* library info */
|
||||||
#define TP_LIB_VL0 2
|
#define TP_LIB_VL0 2
|
||||||
#define TP_LIB_VL1 3
|
#define TP_LIB_VL1 3
|
||||||
#define TP_LIB_VL2 4
|
#define TP_LIB_VL2 5
|
||||||
#define TP_LIB_TITLE "MPEG Transport"
|
#define TP_LIB_TITLE "MPEG Transport"
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
#define TP_LIB_BUILD_DATE ""
|
#define TP_LIB_BUILD_DATE ""
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -296,6 +296,7 @@ CreateStreamMuxConfig(
|
|||||||
|
|
||||||
USHORT coreFrameOffset=0;
|
USHORT coreFrameOffset=0;
|
||||||
|
|
||||||
|
hAss->taraBufferFullness = 0xFF;
|
||||||
hAss->audioMuxVersionA = 0; /* for future extensions */
|
hAss->audioMuxVersionA = 0; /* for future extensions */
|
||||||
hAss->streamMuxConfigBits = 0;
|
hAss->streamMuxConfigBits = 0;
|
||||||
|
|
||||||
@ -339,13 +340,7 @@ CreateStreamMuxConfig(
|
|||||||
hAss->streamMuxConfigBits+=1;
|
hAss->streamMuxConfigBits+=1;
|
||||||
}
|
}
|
||||||
if( (useSameConfig == 0) || (transLayer==0) ) {
|
if( (useSameConfig == 0) || (transLayer==0) ) {
|
||||||
UINT bits;
|
const UINT alignAnchor = FDKgetValidBits(hBs);
|
||||||
|
|
||||||
if ( hAss->audioMuxVersion == 1 ) {
|
|
||||||
FDKpushFor(hBs, 2); /* align to ASC, even if we do not know the length of the "ascLen" field yet */
|
|
||||||
}
|
|
||||||
|
|
||||||
bits = FDKgetValidBits( hBs );
|
|
||||||
|
|
||||||
transportEnc_writeASC(
|
transportEnc_writeASC(
|
||||||
hBs,
|
hBs,
|
||||||
@ -353,19 +348,24 @@ CreateStreamMuxConfig(
|
|||||||
cb
|
cb
|
||||||
);
|
);
|
||||||
|
|
||||||
bits = FDKgetValidBits( hBs ) - bits;
|
|
||||||
|
|
||||||
if ( hAss->audioMuxVersion == 1 ) {
|
if ( hAss->audioMuxVersion == 1 ) {
|
||||||
FDKpushBack(hBs, bits+2);
|
UINT ascLen = transportEnc_LatmWriteValue(hBs, 0);
|
||||||
hAss->streamMuxConfigBits += transportEnc_LatmWriteValue( hBs, bits );
|
FDKbyteAlign(hBs, alignAnchor);
|
||||||
|
ascLen = FDKgetValidBits(hBs) - alignAnchor - ascLen;
|
||||||
|
FDKpushBack(hBs, FDKgetValidBits(hBs) - alignAnchor);
|
||||||
|
|
||||||
|
transportEnc_LatmWriteValue(hBs, ascLen);
|
||||||
|
|
||||||
transportEnc_writeASC(
|
transportEnc_writeASC(
|
||||||
hBs,
|
hBs,
|
||||||
hAss->config[prog][layer],
|
hAss->config[prog][layer],
|
||||||
cb
|
cb
|
||||||
);
|
);
|
||||||
|
|
||||||
|
FDKbyteAlign(hBs, alignAnchor); /* asc length fillbits */
|
||||||
}
|
}
|
||||||
|
|
||||||
hAss->streamMuxConfigBits += bits; /* add asc length to smc summary */
|
hAss->streamMuxConfigBits += FDKgetValidBits(hBs) - alignAnchor; /* add asc length to smc summary */
|
||||||
}
|
}
|
||||||
transLayer++;
|
transLayer++;
|
||||||
|
|
||||||
@ -384,7 +384,6 @@ CreateStreamMuxConfig(
|
|||||||
case AOT_ER_AAC_LD :
|
case AOT_ER_AAC_LD :
|
||||||
case AOT_ER_AAC_ELD :
|
case AOT_ER_AAC_ELD :
|
||||||
case AOT_USAC:
|
case AOT_USAC:
|
||||||
case AOT_RSVD50:
|
|
||||||
p_linfo->frameLengthType = 0;
|
p_linfo->frameLengthType = 0;
|
||||||
|
|
||||||
FDKwriteBits( hBs, p_linfo->frameLengthType, 3 ); /* frameLengthType */
|
FDKwriteBits( hBs, p_linfo->frameLengthType, 3 ); /* frameLengthType */
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
/* library info */
|
/* library info */
|
||||||
#define TP_LIB_VL0 2
|
#define TP_LIB_VL0 2
|
||||||
#define TP_LIB_VL1 3
|
#define TP_LIB_VL1 3
|
||||||
#define TP_LIB_VL2 4
|
#define TP_LIB_VL2 6
|
||||||
#define TP_LIB_TITLE "MPEG Transport"
|
#define TP_LIB_TITLE "MPEG Transport"
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
#define TP_LIB_BUILD_DATE ""
|
#define TP_LIB_BUILD_DATE ""
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -137,7 +137,7 @@ amm-info@iis.fraunhofer.de
|
|||||||
/* Decoder library info */
|
/* Decoder library info */
|
||||||
#define SBRDECODER_LIB_VL0 2
|
#define SBRDECODER_LIB_VL0 2
|
||||||
#define SBRDECODER_LIB_VL1 2
|
#define SBRDECODER_LIB_VL1 2
|
||||||
#define SBRDECODER_LIB_VL2 6
|
#define SBRDECODER_LIB_VL2 7
|
||||||
#define SBRDECODER_LIB_TITLE "SBR Decoder"
|
#define SBRDECODER_LIB_TITLE "SBR Decoder"
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
#define SBRDECODER_LIB_BUILD_DATE ""
|
#define SBRDECODER_LIB_BUILD_DATE ""
|
||||||
@ -318,7 +318,6 @@ SBR_ERROR sbrDecoder_ResetElement (
|
|||||||
case AOT_PS:
|
case AOT_PS:
|
||||||
case AOT_ER_AAC_SCAL:
|
case AOT_ER_AAC_SCAL:
|
||||||
case AOT_DRM_AAC:
|
case AOT_DRM_AAC:
|
||||||
case AOT_DRM_SURROUND:
|
|
||||||
if (CreatePsDec ( &self->hParametricStereoDec, samplesPerFrame )) {
|
if (CreatePsDec ( &self->hParametricStereoDec, samplesPerFrame )) {
|
||||||
sbrError = SBRDEC_CREATE_ERROR;
|
sbrError = SBRDEC_CREATE_ERROR;
|
||||||
goto bail;
|
goto bail;
|
||||||
@ -503,7 +502,6 @@ SBR_ERROR sbrDecoder_InitElement (
|
|||||||
case AOT_PS:
|
case AOT_PS:
|
||||||
case AOT_ER_AAC_SCAL:
|
case AOT_ER_AAC_SCAL:
|
||||||
case AOT_DRM_AAC:
|
case AOT_DRM_AAC:
|
||||||
case AOT_DRM_SURROUND:
|
|
||||||
elChannels = 2;
|
elChannels = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -268,8 +268,9 @@ qmfBasedNoiseFloorDetection(FIXP_DBL *noiseLevel, /*!< Pointer to v
|
|||||||
/*
|
/*
|
||||||
* Add a noise floor offset to compensate for bias in the detector
|
* Add a noise floor offset to compensate for bias in the detector
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
if(!missingHarmonicFlag)
|
if(!missingHarmonicFlag) {
|
||||||
*noiseLevel = fMult(*noiseLevel, noiseFloorOffset)<<(NOISE_FLOOR_OFFSET_SCALING);
|
*noiseLevel = fixMin(fMult(*noiseLevel, noiseFloorOffset), (FIXP_DBL)MAXVAL_DBL>>NOISE_FLOOR_OFFSET_SCALING) << NOISE_FLOOR_OFFSET_SCALING;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* check to see that we don't exceed the maximum allowed level
|
* check to see that we don't exceed the maximum allowed level
|
||||||
|
@ -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 6
|
#define SBRENCODER_LIB_VL2 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1552,12 +1552,6 @@ INT FDKsbrEnc_EnvInit (
|
|||||||
hSbrElement->sbrConfigData.sbrSyntaxFlags = 0;
|
hSbrElement->sbrConfigData.sbrSyntaxFlags = 0;
|
||||||
|
|
||||||
switch (aot) {
|
switch (aot) {
|
||||||
case AOT_DRM_MPEG_PS:
|
|
||||||
case AOT_DRM_SBR:
|
|
||||||
hSbrElement->sbrConfigData.sbrSyntaxFlags |= SBR_SYNTAX_SCALABLE;
|
|
||||||
hSbrElement->sbrConfigData.sbrSyntaxFlags |= SBR_SYNTAX_DRM_CRC;
|
|
||||||
hSbrElement->sbrConfigData.sbrSyntaxFlags |= SBR_SYNTAX_CRC;
|
|
||||||
break;
|
|
||||||
case AOT_ER_AAC_ELD:
|
case AOT_ER_AAC_ELD:
|
||||||
hSbrElement->sbrConfigData.sbrSyntaxFlags |= SBR_SYNTAX_LOW_DELAY;
|
hSbrElement->sbrConfigData.sbrSyntaxFlags |= SBR_SYNTAX_LOW_DELAY;
|
||||||
break;
|
break;
|
||||||
@ -1847,7 +1841,7 @@ INT sbrEncoder_Init(
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ( (aot==AOT_PS) || (aot==AOT_MP2_PS) || (aot==AOT_DABPLUS_PS) || (aot==AOT_DRM_MPEG_PS) ) {
|
if ( (aot==AOT_PS) ) {
|
||||||
usePs = 1;
|
usePs = 1;
|
||||||
}
|
}
|
||||||
if ( (aot==AOT_ER_AAC_ELD) ) {
|
if ( (aot==AOT_ER_AAC_ELD) ) {
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -676,7 +676,7 @@ FDKsbrEnc_InitSbrTransientDetector(HANDLE_SBR_TRANSIENT_DETECTOR h_sbrTransientD
|
|||||||
tmp = fixMax(tmp, FL2FXCONST_DBL(0.0001));
|
tmp = fixMax(tmp, FL2FXCONST_DBL(0.0001));
|
||||||
tmp = fDivNorm(FL2FXCONST_DBL(0.000075), fPow2(tmp), &scale_1);
|
tmp = fDivNorm(FL2FXCONST_DBL(0.000075), fPow2(tmp), &scale_1);
|
||||||
|
|
||||||
scale_1 = -(scale_1 + scale_0 + 2);
|
scale_1 = (scale_1 + scale_0 + 2);
|
||||||
|
|
||||||
FDK_ASSERT(no_cols <= QMF_MAX_TIME_SLOTS);
|
FDK_ASSERT(no_cols <= QMF_MAX_TIME_SLOTS);
|
||||||
FDK_ASSERT(no_rows <= QMF_CHANNELS);
|
FDK_ASSERT(no_rows <= QMF_CHANNELS);
|
||||||
@ -684,14 +684,7 @@ FDKsbrEnc_InitSbrTransientDetector(HANDLE_SBR_TRANSIENT_DETECTOR h_sbrTransientD
|
|||||||
h_sbrTransientDetector->no_cols = no_cols;
|
h_sbrTransientDetector->no_cols = no_cols;
|
||||||
h_sbrTransientDetector->tran_thr = (FIXP_DBL)((params->tran_thr << (32-24-1)) / no_rows);
|
h_sbrTransientDetector->tran_thr = (FIXP_DBL)((params->tran_thr << (32-24-1)) / no_rows);
|
||||||
h_sbrTransientDetector->tran_fc = tran_fc;
|
h_sbrTransientDetector->tran_fc = tran_fc;
|
||||||
|
h_sbrTransientDetector->split_thr = scaleValueSaturate(fMult(tmp, bitrateFactor_fix), scale_1);
|
||||||
if (scale_1>=0) {
|
|
||||||
h_sbrTransientDetector->split_thr = fMult(tmp, bitrateFactor_fix) >> scale_1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
h_sbrTransientDetector->split_thr = fMult(tmp, bitrateFactor_fix) << (-scale_1);
|
|
||||||
}
|
|
||||||
|
|
||||||
h_sbrTransientDetector->no_rows = no_rows;
|
h_sbrTransientDetector->no_rows = no_rows;
|
||||||
h_sbrTransientDetector->mode = params->tran_det_mode;
|
h_sbrTransientDetector->mode = params->tran_det_mode;
|
||||||
h_sbrTransientDetector->prevLowBandEnergy = FL2FXCONST_DBL(0.0f);
|
h_sbrTransientDetector->prevLowBandEnergy = FL2FXCONST_DBL(0.0f);
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -134,13 +134,7 @@ typedef enum
|
|||||||
|
|
||||||
TT_MP4_LOAS = 10, /**< Audio Sync Stream. */
|
TT_MP4_LOAS = 10, /**< Audio Sync Stream. */
|
||||||
|
|
||||||
TT_DRM = 12, /**< Digital Radio Mondial (DRM30/DRM+) bitstream format. */
|
TT_DRM = 12 /**< Digital Radio Mondial (DRM30/DRM+) bitstream format. */
|
||||||
|
|
||||||
TT_MP1_L1 = 16, /**< MPEG 1 Audio Layer 1 audio bitstream. */
|
|
||||||
TT_MP1_L2 = 17, /**< MPEG 1 Audio Layer 2 audio bitstream. */
|
|
||||||
TT_MP1_L3 = 18, /**< MPEG 1 Audio Layer 3 audio bitstream. */
|
|
||||||
|
|
||||||
TT_RSVD50 = 50 /**< */
|
|
||||||
|
|
||||||
} TRANSPORT_TYPE;
|
} TRANSPORT_TYPE;
|
||||||
|
|
||||||
@ -203,38 +197,22 @@ typedef enum
|
|||||||
AOT_SAOC = 43, /**< SAOC */
|
AOT_SAOC = 43, /**< SAOC */
|
||||||
AOT_LD_MPEGS = 44, /**< Low Delay MPEG Surround */
|
AOT_LD_MPEGS = 44, /**< Low Delay MPEG Surround */
|
||||||
|
|
||||||
AOT_RSVD50 = 50, /**< Interim AOT for Rsvd50 */
|
|
||||||
|
|
||||||
/* Pseudo AOTs */
|
/* Pseudo AOTs */
|
||||||
AOT_MP2_AAC_MAIN = 128, /**< Virtual AOT MP2 Main profile */
|
|
||||||
AOT_MP2_AAC_LC = 129, /**< Virtual AOT MP2 Low Complexity profile */
|
|
||||||
AOT_MP2_AAC_SSR = 130, /**< Virtual AOT MP2 Scalable Sampling Rate profile */
|
|
||||||
|
|
||||||
AOT_MP2_SBR = 132, /**< Virtual AOT MP2 Low Complexity Profile with SBR */
|
|
||||||
|
|
||||||
AOT_DAB = 134, /**< Virtual AOT for DAB (Layer2 with scalefactor CRC) */
|
|
||||||
AOT_DABPLUS_AAC_LC = 135, /**< Virtual AOT for DAB plus AAC-LC */
|
|
||||||
AOT_DABPLUS_SBR = 136, /**< Virtual AOT for DAB plus HE-AAC */
|
|
||||||
AOT_DABPLUS_PS = 137, /**< Virtual AOT for DAB plus HE-AAC v2 */
|
|
||||||
|
|
||||||
AOT_PLAIN_MP1 = 140, /**< Virtual AOT for plain mp1 */
|
|
||||||
AOT_PLAIN_MP2 = 141, /**< Virtual AOT for plain mp2 */
|
|
||||||
AOT_PLAIN_MP3 = 142, /**< Virtual AOT for plain mp3 */
|
|
||||||
|
|
||||||
AOT_DRM_AAC = 143, /**< Virtual AOT for DRM (ER-AAC-SCAL without SBR) */
|
AOT_DRM_AAC = 143, /**< Virtual AOT for DRM (ER-AAC-SCAL without SBR) */
|
||||||
AOT_DRM_SBR = 144, /**< Virtual AOT for DRM (ER-AAC-SCAL with SBR) */
|
AOT_DRM_SBR = 144, /**< Virtual AOT for DRM (ER-AAC-SCAL with SBR) */
|
||||||
AOT_DRM_MPEG_PS = 145, /**< Virtual AOT for DRM (ER-AAC-SCAL with SBR and MPEG-PS) */
|
AOT_DRM_MPEG_PS = 145 /**< Virtual AOT for DRM (ER-AAC-SCAL with SBR and MPEG-PS) */
|
||||||
AOT_DRM_SURROUND = 146, /**< Virtual AOT for DRM Surround (ER-AAC-SCAL (+SBR) +MPS) */
|
|
||||||
|
|
||||||
AOT_MP2_PS = 156, /**< Virtual AOT MP2 Low Complexity Profile with SBR and PS */
|
|
||||||
|
|
||||||
AOT_MPEGS_RESIDUALS = 256 /**< Virtual AOT for MPEG Surround residuals */
|
|
||||||
|
|
||||||
} AUDIO_OBJECT_TYPE;
|
} AUDIO_OBJECT_TYPE;
|
||||||
|
|
||||||
|
#define CAN_DO_PS(aot) \
|
||||||
|
((aot) == AOT_AAC_LC \
|
||||||
|
|| (aot) == AOT_SBR \
|
||||||
|
|| (aot) == AOT_PS \
|
||||||
|
|| (aot) == AOT_ER_BSAC \
|
||||||
|
|| (aot) == AOT_DRM_AAC)
|
||||||
|
|
||||||
#define IS_USAC(aot) \
|
#define IS_USAC(aot) \
|
||||||
((aot) == AOT_USAC \
|
((aot) == AOT_USAC)
|
||||||
|| (aot) == AOT_RSVD50)
|
|
||||||
|
|
||||||
#define IS_LOWDELAY(aot) \
|
#define IS_LOWDELAY(aot) \
|
||||||
((aot) == AOT_ER_AAC_LD \
|
((aot) == AOT_ER_AAC_LD \
|
||||||
|
@ -2,7 +2,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 - 2013 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
© Copyright 1995 - 2015 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
1. INTRODUCTION
|
1. INTRODUCTION
|
||||||
@ -99,7 +99,7 @@ amm-info@iis.fraunhofer.de
|
|||||||
/* library info */
|
/* library info */
|
||||||
#define SYS_LIB_VL0 1
|
#define SYS_LIB_VL0 1
|
||||||
#define SYS_LIB_VL1 3
|
#define SYS_LIB_VL1 3
|
||||||
#define SYS_LIB_VL2 6
|
#define SYS_LIB_VL2 7
|
||||||
#define SYS_LIB_TITLE "System Integration Library"
|
#define SYS_LIB_TITLE "System Integration Library"
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
#define SYS_LIB_BUILD_DATE ""
|
#define SYS_LIB_BUILD_DATE ""
|
||||||
|
Loading…
Reference in New Issue
Block a user