SBR/AAC encoder updates, code clean up
am: e1c78ed
* commit 'e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5':
SBR/AAC encoder updates, code clean up
Change-Id: I908adc47823de593c3e258c67f360da9321780f5
This commit is contained in:
commit
65750eae65
Binary file not shown.
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
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)
|
||||
{
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
1. INTRODUCTION
|
||||
@ -110,7 +110,7 @@ amm-info@iis.fraunhofer.de
|
||||
/* Decoder library info */
|
||||
#define AACDECODER_LIB_VL0 2
|
||||
#define AACDECODER_LIB_VL1 5
|
||||
#define AACDECODER_LIB_VL2 10
|
||||
#define AACDECODER_LIB_VL2 11
|
||||
#define AACDECODER_LIB_TITLE "AAC Decoder Lib"
|
||||
#ifdef __ANDROID__
|
||||
#define AACDECODER_LIB_BUILD_DATE ""
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
1. INTRODUCTION
|
||||
@ -897,11 +897,7 @@ typedef enum
|
||||
This configuration can be used only with stereo input audio data.
|
||||
- 23: MPEG-4 AAC Low-Delay.
|
||||
- 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.
|
||||
- 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. */
|
||||
combination with SBR defined, enable SBR explicitely by ::AACENC_SBR_MODE parameter. */
|
||||
|
||||
AACENC_BITRATE = 0x0101, /*!< Total encoder bitrate. This parameter is mandatory and interacts with ::AACENC_BITRATEMODE.
|
||||
- CBR: Bitrate in bits/second.
|
||||
@ -958,6 +954,16 @@ typedef enum
|
||||
- 1 to fs/2: Frequency bandwidth in Hertz. (Experts only, better do not
|
||||
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
|
||||
types can be configured in encoder library:
|
||||
- 0: raw access units
|
||||
@ -1023,6 +1029,11 @@ typedef enum
|
||||
- ADTS: Maximum number of sub frames restricted to 4.
|
||||
- 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:
|
||||
- 0: No protection. (default)
|
||||
- 1: CRC active for ADTS bitstream format. */
|
||||
|
@ -107,6 +107,39 @@ amm-info@iis.fraunhofer.de
|
||||
|
||||
#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,
|
||||
INT framelength,
|
||||
INT ancillaryRate,
|
||||
@ -220,21 +253,19 @@ INT FDKaacEnc_GetVBRBitrate(INT bitrateMode, CHANNEL_MODE channelMode)
|
||||
/**
|
||||
* \brief Convert encoder bitreservoir value for transport library.
|
||||
*
|
||||
* \param bitrateMode Bitratemode used in current encoder instance. Se ::AACENC_BITRATE_MODE
|
||||
* \param bitresTotal Encoder bitreservoir level in bits.
|
||||
* \param hAacEnc Encoder handle
|
||||
*
|
||||
* \return Corrected bitreservoir level used in transport library.
|
||||
*/
|
||||
static INT FDKaacEnc_EncBitresToTpBitres(
|
||||
const AACENC_BITRATE_MODE bitrateMode,
|
||||
const INT bitresTotal
|
||||
const HANDLE_AAC_ENC hAacEnc
|
||||
)
|
||||
{
|
||||
INT transporBitreservoir = 0;
|
||||
|
||||
switch (bitrateMode) {
|
||||
switch (hAacEnc->bitrateMode) {
|
||||
case AACENC_BR_MODE_CBR:
|
||||
transporBitreservoir = bitresTotal; /* encoder bitreservoir level */
|
||||
transporBitreservoir = hAacEnc->qcKernel->bitResTot; /* encoder bitreservoir level */
|
||||
break;
|
||||
case AACENC_BR_MODE_VBR_1:
|
||||
case AACENC_BR_MODE_VBR_2:
|
||||
@ -253,6 +284,10 @@ static INT FDKaacEnc_EncBitresToTpBitres(
|
||||
FDK_ASSERT(0);
|
||||
}
|
||||
|
||||
if (hAacEnc->config->audioMuxVersion==2) {
|
||||
transporBitreservoir = MIN_BUFSIZE_PER_EFF_CHAN * hAacEnc->channelMapping.nChannelsEff;
|
||||
}
|
||||
|
||||
return transporBitreservoir;
|
||||
}
|
||||
|
||||
@ -289,6 +324,7 @@ void FDKaacEnc_AacInitDefaultConfig(AACENC_CONFIG *config)
|
||||
config->minBitsPerFrame = -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->audioMuxVersion = -1; /* audio mux version not configured */
|
||||
|
||||
/* init tabs in fixpoint_math */
|
||||
InitLdInt();
|
||||
@ -564,7 +600,10 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(HANDLE_AAC_ENC hAacEnc,
|
||||
qcInit.averageBits = (averageBitsPerFrame+7)&~7;
|
||||
qcInit.bitRes = 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
|
||||
{
|
||||
@ -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 = (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 = (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;
|
||||
@ -585,11 +626,9 @@ AAC_ENCODER_ERROR FDKaacEnc_Initialize(HANDLE_AAC_ENC hAacEnc,
|
||||
qcInit.nSubFrames = config->nSubFrames;
|
||||
qcInit.padding.paddingRest = config->sampleRate;
|
||||
|
||||
/* Calc meanPe */
|
||||
bw_ratio = fDivNorm((FIXP_DBL)hAacEnc->bandwidth90dB, (FIXP_DBL)(config->sampleRate>>1), &qbw);
|
||||
qbw = DFRACT_BITS-1-qbw;
|
||||
/* 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 meanPe: qcInit.meanPe = 10.0f * FRAME_LEN_LONG * hAacEnc->bandwidth90dB/(config->sampleRate/2.0f); */
|
||||
bw_ratio = fDivNorm((FIXP_DBL)(10*config->framelength*hAacEnc->bandwidth90dB), (FIXP_DBL)(config->sampleRate), &qbw);
|
||||
qcInit.meanPe = FDKmax((INT)scaleValue(bw_ratio, qbw+1-(DFRACT_BITS-1)), 1);
|
||||
|
||||
/* Calc maxBitFac */
|
||||
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)
|
||||
goto bail;
|
||||
|
||||
/* Map virtual aot's to intern aot used in bitstream writer. */
|
||||
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;
|
||||
}
|
||||
hAacEnc->aot = hAacEnc->config->audioObjectType;
|
||||
|
||||
/* common things */
|
||||
|
||||
@ -932,7 +955,7 @@ AAC_ENCODER_ERROR FDKaacEnc_EncodeFrame( HANDLE_AAC_ENC hAacEnc,
|
||||
transportEnc_WriteAccessUnit(
|
||||
hTpEnc,
|
||||
totalBits,
|
||||
FDKaacEnc_EncBitresToTpBitres(hAacEnc->bitrateMode, hAacEnc->qcKernel->bitResTot),
|
||||
FDKaacEnc_EncBitresToTpBitres(hAacEnc),
|
||||
cm->nChannelsEff);
|
||||
|
||||
/* write bitstream */
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
1. INTRODUCTION
|
||||
@ -204,6 +204,8 @@ struct AACENC_CONFIG {
|
||||
INT maxBitsPerFrame; /* maximum number of bits in AU */
|
||||
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 */
|
||||
|
||||
UCHAR useTns; /* flag: use temporal noise shaping */
|
||||
@ -222,6 +224,36 @@ typedef struct {
|
||||
|
||||
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
|
||||
* \param hTpEnc transport encoder handle
|
||||
|
@ -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 14
|
||||
#define AACENCODER_LIB_VL2 19
|
||||
#define AACENCODER_LIB_TITLE "AAC Encoder"
|
||||
#ifdef __ANDROID__
|
||||
#define AACENCODER_LIB_BUILD_DATE ""
|
||||
@ -153,6 +153,7 @@ typedef struct {
|
||||
UINT userAfterburner;
|
||||
UINT userFramelength;
|
||||
UINT userAncDataRate;
|
||||
UINT userPeakBitrate;
|
||||
|
||||
UCHAR userTns; /*!< Use TNS coding. */
|
||||
UCHAR userPns; /*!< Use PNS coding. */
|
||||
@ -326,10 +327,7 @@ static inline INT isSbrActive(const HANDLE_AACENC_CONFIG hAacConfig)
|
||||
{
|
||||
INT sbrUsed = 0;
|
||||
|
||||
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) )
|
||||
if ( (hAacConfig->audioObjectType==AOT_SBR) || (hAacConfig->audioObjectType==AOT_PS) )
|
||||
{
|
||||
sbrUsed = 1;
|
||||
}
|
||||
@ -345,10 +343,7 @@ static inline INT isPsActive(const AUDIO_OBJECT_TYPE audioObjectType)
|
||||
{
|
||||
INT psUsed = 0;
|
||||
|
||||
if ( (audioObjectType==AOT_PS)
|
||||
|| (audioObjectType==AOT_MP2_PS)
|
||||
|| (audioObjectType==AOT_DABPLUS_PS)
|
||||
|| (audioObjectType==AOT_DRM_MPEG_PS) )
|
||||
if ( (audioObjectType==AOT_PS) )
|
||||
{
|
||||
psUsed = 1;
|
||||
}
|
||||
@ -373,8 +368,7 @@ static SBR_PS_SIGNALING getSbrSignalingMode(
|
||||
sbrSignaling = SIG_IMPLICIT; /* default: implicit signaling */
|
||||
}
|
||||
|
||||
if ((audioObjectType==AOT_AAC_LC) || (audioObjectType==AOT_SBR) || (audioObjectType==AOT_PS) ||
|
||||
(audioObjectType==AOT_MP2_AAC_LC) || (audioObjectType==AOT_MP2_SBR) || (audioObjectType==AOT_MP2_PS) ) {
|
||||
if ( (audioObjectType==AOT_AAC_LC) || (audioObjectType==AOT_SBR) || (audioObjectType==AOT_PS) ) {
|
||||
switch (transportType) {
|
||||
case TT_MP4_ADIF:
|
||||
case TT_MP4_ADTS:
|
||||
@ -430,22 +424,7 @@ static void FDKaacEnc_MapConfig(
|
||||
|
||||
cc->flags = 0;
|
||||
|
||||
/* Map virtual aot to transport aot. */
|
||||
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;
|
||||
}
|
||||
transport_AOT = hAacConfig->audioObjectType;
|
||||
|
||||
if (hAacConfig->audioObjectType == AOT_ER_AAC_ELD) {
|
||||
cc->flags |= (hAacConfig->syntaxFlags & AC_SBR_PRESENT) ? CC_SBR : 0;
|
||||
@ -511,16 +490,7 @@ static void FDKaacEnc_MapConfig(
|
||||
cc->samplingRate = hAacConfig->sampleRate;
|
||||
|
||||
/* Mpeg-4 signaling for transport library. */
|
||||
switch ( hAacConfig->audioObjectType ) {
|
||||
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;
|
||||
}
|
||||
cc->flags |= CC_MPEG_ID;
|
||||
|
||||
/* ER-tools signaling. */
|
||||
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->userBitrate = hAacConfig->bitRate;
|
||||
config->userBitrateMode = hAacConfig->bitrateMode;
|
||||
config->userPeakBitrate = (UINT)-1;
|
||||
config->userBandwidth = hAacConfig->bandWidth;
|
||||
config->userTns = hAacConfig->useTns;
|
||||
config->userPns = hAacConfig->usePns;
|
||||
@ -792,12 +763,15 @@ AACENC_ERROR FDKaacEnc_AdjustEncSettings(HANDLE_AACENCODER hAacEncoder,
|
||||
hAacConfig->syntaxFlags = 0;
|
||||
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. */
|
||||
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_SBR:
|
||||
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 */
|
||||
if ( (hAacConfig->audioObjectType==AOT_ER_AAC_ELD)
|
||||
&& (config->userSbrEnabled == (UCHAR)-1) && (config->userSbrRatio==0) )
|
||||
@ -1139,7 +1125,7 @@ static AACENC_ERROR aacEncInit(HANDLE_AACENCODER hAacEncoder,
|
||||
hAacConfig);
|
||||
|
||||
/* create flags for transport encoder */
|
||||
if (config->userTpAmxv == 1) {
|
||||
if (config->userTpAmxv != 0) {
|
||||
flags |= TP_FLAG_LATM_AMV;
|
||||
}
|
||||
/* 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)) )
|
||||
{
|
||||
/* 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) {
|
||||
hAacEncoder->extParam.userPceAdditions = pceValue;
|
||||
hAacEncoder->InitFlags |= AACENC_INIT_TRANSPORT;
|
||||
@ -1785,19 +1771,16 @@ AACENC_ERROR aacEncoder_SetParam(
|
||||
/* check if AOT matches the allocated modules */
|
||||
switch ( value ) {
|
||||
case AOT_PS:
|
||||
case AOT_MP2_PS:
|
||||
if (!(hAacEncoder->encoder_modis & (ENC_MODE_FLAG_PS))) {
|
||||
err = AACENC_INVALID_CONFIG;
|
||||
goto bail;
|
||||
}
|
||||
case AOT_SBR:
|
||||
case AOT_MP2_SBR:
|
||||
if (!(hAacEncoder->encoder_modis & (ENC_MODE_FLAG_SBR))) {
|
||||
err = AACENC_INVALID_CONFIG;
|
||||
goto bail;
|
||||
}
|
||||
case AOT_AAC_LC:
|
||||
case AOT_MP2_AAC_LC:
|
||||
case AOT_ER_AAC_LD:
|
||||
case AOT_ER_AAC_ELD:
|
||||
if (!(hAacEncoder->encoder_modis & (ENC_MODE_FLAG_AAC))) {
|
||||
@ -1823,6 +1806,7 @@ AACENC_ERROR aacEncoder_SetParam(
|
||||
if (settings->userBitrateMode != value) {
|
||||
switch ( value ) {
|
||||
case 0:
|
||||
case 1: case 2: case 3: case 4: case 5:
|
||||
case 8:
|
||||
settings->userBitrateMode = value;
|
||||
hAacEncoder->InitFlags |= AACENC_INIT_CONFIG | AACENC_INIT_TRANSPORT;
|
||||
@ -1973,6 +1957,16 @@ AACENC_ERROR aacEncoder_SetParam(
|
||||
hAacEncoder->InitFlags |= AACENC_INIT_TRANSPORT;
|
||||
}
|
||||
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:
|
||||
if (settings->userTpNsubFrames != value) {
|
||||
if (! ( (value>=1) && (value<=4) ) ) {
|
||||
@ -2006,6 +2000,12 @@ AACENC_ERROR aacEncoder_SetParam(
|
||||
hAacEncoder->InitFlags |= AACENC_INIT_CONFIG;
|
||||
}
|
||||
break;
|
||||
case AACENC_PEAK_BITRATE:
|
||||
if (settings->userPeakBitrate != value) {
|
||||
settings->userPeakBitrate = value;
|
||||
hAacEncoder->InitFlags |= AACENC_INIT_CONFIG | AACENC_INIT_TRANSPORT;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
err = AACENC_UNSUPPORTED_PARAMETER;
|
||||
break;
|
||||
@ -2076,6 +2076,9 @@ UINT aacEncoder_GetParam(
|
||||
case AACENC_HEADER_PERIOD:
|
||||
value = (UINT)hAacEncoder->coderConfig.headerPeriod;
|
||||
break;
|
||||
case AACENC_AUDIOMUXVER:
|
||||
value = (UINT)hAacEncoder->aacConfig.audioMuxVersion;
|
||||
break;
|
||||
case AACENC_TPSUBFRAMES:
|
||||
value = (UINT)settings->userTpNsubFrames;
|
||||
break;
|
||||
@ -2088,6 +2091,12 @@ UINT aacEncoder_GetParam(
|
||||
case AACENC_METADATA_MODE:
|
||||
value = (hAacEncoder->metaDataAllowed==0) ? 0 : (UINT)settings->userMetaDataMode;
|
||||
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:
|
||||
//err = MPS_INVALID_PARAMETER;
|
||||
break;
|
||||
|
@ -2138,7 +2138,7 @@ static FIXP_DBL FDKaacEnc_bitresCalcBitFac(const INT bitresBits,
|
||||
bresParam->clipSpendLow, bresParam->clipSpendHigh,
|
||||
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);
|
||||
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
|
||||
|
||||
© 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.
|
||||
|
||||
1. INTRODUCTION
|
||||
@ -325,7 +325,6 @@ FDKaacEnc_prepareIntensityDecision(const FIXP_DBL *sfbEnergyLeft,
|
||||
|
||||
channelCorr[sfb + sfboffs] = FL2FXCONST_DBL(0.0f);
|
||||
|
||||
FDK_ASSERT(50 >= 49);
|
||||
/* 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 = GetInvInt((sfbOffset[sfb + sfboffs + 1] - sfbOffset[sfb + sfboffs])>>1);
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
1. INTRODUCTION
|
||||
@ -634,13 +634,14 @@ AAC_ENCODER_ERROR FDKaacEnc_InitPsyConfiguration(INT bitrate,
|
||||
if (psyConf->sfbOffset[sfb] >= psyConf->lowpassLine)
|
||||
break;
|
||||
}
|
||||
psyConf->sfbActive = sfb;
|
||||
psyConf->sfbActive = FDKmax(sfb, 1);
|
||||
|
||||
for (sfb = 0; sfb < psyConf->sfbCnt; sfb++){
|
||||
if (psyConf->sfbOffset[sfb] >= psyConf->lowpassLineLFE)
|
||||
break;
|
||||
}
|
||||
psyConf->sfbActiveLFE = sfb;
|
||||
psyConf->sfbActive = FDKmax(psyConf->sfbActive, psyConf->sfbActiveLFE);
|
||||
|
||||
/* calculate minSnr */
|
||||
FDKaacEnc_initMinSnr(bitrate,
|
||||
|
@ -621,7 +621,7 @@ AAC_ENCODER_ERROR FDKaacEnc_psyMain(INT channels,
|
||||
FDKmemclear(&psyData[ch]->mdctSpectrum[psyData[ch]->lowpassLine+wOffset],
|
||||
(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 */
|
||||
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]);
|
||||
|
@ -1248,6 +1248,8 @@ AAC_ENCODER_ERROR FDKaacEnc_updateFillBits(CHANNEL_MAPPING* cm,
|
||||
case QCDATA_BR_MODE_VBR_4:
|
||||
case QCDATA_BR_MODE_VBR_5:
|
||||
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;
|
||||
|
||||
case QCDATA_BR_MODE_CBR:
|
||||
@ -1257,6 +1259,8 @@ AAC_ENCODER_ERROR FDKaacEnc_updateFillBits(CHANNEL_MAPPING* cm,
|
||||
/* processing fill-bits */
|
||||
INT deltaBitRes = qcOut[0]->grantedDynBits - qcOut[0]->usedDynBits ;
|
||||
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;
|
||||
} /* switch (qcKernel->bitrateMode) */
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
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
|
||||
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
|
||||
* input values from 1 upto 50.
|
||||
* input values from 1 upto 80.
|
||||
* \param intValue Integer input value.
|
||||
* \param FIXP_DBL representation of 1/intValue
|
||||
*/
|
||||
inline FIXP_DBL GetInvInt(int intValue)
|
||||
{
|
||||
FDK_ASSERT((intValue > 0) && (intValue < 50));
|
||||
FDK_ASSERT(intValue<50);
|
||||
FDK_ASSERT((intValue > 0) && (intValue < 80));
|
||||
FDK_ASSERT(intValue<80);
|
||||
return invCount[intValue];
|
||||
}
|
||||
|
||||
|
@ -93,7 +93,7 @@ amm-info@iis.fraunhofer.de
|
||||
/* FDK tools library info */
|
||||
#define FDK_TOOLS_LIB_VL0 2
|
||||
#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"
|
||||
#ifdef __ANDROID__
|
||||
#define FDK_TOOLS_LIB_BUILD_DATE ""
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
1. INTRODUCTION
|
||||
@ -1902,7 +1902,7 @@ const USHORT sqrt_tab[49]={
|
||||
0xb504};
|
||||
|
||||
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,
|
||||
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,
|
||||
0x03a83a84, 0x038e38e4, 0x03759f23, 0x035e50d8, 0x03483483,
|
||||
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 }
|
||||
};
|
||||
|
||||
#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}
|
||||
* epConfig = 0,1
|
||||
@ -2424,13 +2417,6 @@ const element_list_t * getBitstreamElementList(AUDIO_OBJECT_TYPE aot, SCHAR epCo
|
||||
else
|
||||
return &node_eld_cpe_epc1;
|
||||
}
|
||||
case AOT_MPEGS_RESIDUALS:
|
||||
if (nChannels == 1) {
|
||||
return &node_mpegsres_sce;
|
||||
} else {
|
||||
return &node_mpegsres_cpe;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
1. INTRODUCTION
|
||||
@ -1100,7 +1100,6 @@ TRANSPORTDEC_ERROR transportDec_ReadAccessUnit( const HANDLE_TRANSPORTDEC hTp, c
|
||||
}
|
||||
break;
|
||||
|
||||
case TT_RSVD50:
|
||||
case TT_MP4_ADTS:
|
||||
case TT_MP4_LOAS:
|
||||
err = transportDec_readStream(hTp, layer);
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* library info */
|
||||
#define TP_LIB_VL0 2
|
||||
#define TP_LIB_VL1 3
|
||||
#define TP_LIB_VL2 4
|
||||
#define TP_LIB_VL2 5
|
||||
#define TP_LIB_TITLE "MPEG Transport"
|
||||
#ifdef __ANDROID__
|
||||
#define TP_LIB_BUILD_DATE ""
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
1. INTRODUCTION
|
||||
@ -296,6 +296,7 @@ CreateStreamMuxConfig(
|
||||
|
||||
USHORT coreFrameOffset=0;
|
||||
|
||||
hAss->taraBufferFullness = 0xFF;
|
||||
hAss->audioMuxVersionA = 0; /* for future extensions */
|
||||
hAss->streamMuxConfigBits = 0;
|
||||
|
||||
@ -339,13 +340,7 @@ CreateStreamMuxConfig(
|
||||
hAss->streamMuxConfigBits+=1;
|
||||
}
|
||||
if( (useSameConfig == 0) || (transLayer==0) ) {
|
||||
UINT bits;
|
||||
|
||||
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 );
|
||||
const UINT alignAnchor = FDKgetValidBits(hBs);
|
||||
|
||||
transportEnc_writeASC(
|
||||
hBs,
|
||||
@ -353,19 +348,24 @@ CreateStreamMuxConfig(
|
||||
cb
|
||||
);
|
||||
|
||||
bits = FDKgetValidBits( hBs ) - bits;
|
||||
|
||||
if ( hAss->audioMuxVersion == 1 ) {
|
||||
FDKpushBack(hBs, bits+2);
|
||||
hAss->streamMuxConfigBits += transportEnc_LatmWriteValue( hBs, bits );
|
||||
UINT ascLen = transportEnc_LatmWriteValue(hBs, 0);
|
||||
FDKbyteAlign(hBs, alignAnchor);
|
||||
ascLen = FDKgetValidBits(hBs) - alignAnchor - ascLen;
|
||||
FDKpushBack(hBs, FDKgetValidBits(hBs) - alignAnchor);
|
||||
|
||||
transportEnc_LatmWriteValue(hBs, ascLen);
|
||||
|
||||
transportEnc_writeASC(
|
||||
hBs,
|
||||
hAss->config[prog][layer],
|
||||
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++;
|
||||
|
||||
@ -384,7 +384,6 @@ CreateStreamMuxConfig(
|
||||
case AOT_ER_AAC_LD :
|
||||
case AOT_ER_AAC_ELD :
|
||||
case AOT_USAC:
|
||||
case AOT_RSVD50:
|
||||
p_linfo->frameLengthType = 0;
|
||||
|
||||
FDKwriteBits( hBs, p_linfo->frameLengthType, 3 ); /* frameLengthType */
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* library info */
|
||||
#define TP_LIB_VL0 2
|
||||
#define TP_LIB_VL1 3
|
||||
#define TP_LIB_VL2 4
|
||||
#define TP_LIB_VL2 6
|
||||
#define TP_LIB_TITLE "MPEG Transport"
|
||||
#ifdef __ANDROID__
|
||||
#define TP_LIB_BUILD_DATE ""
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
1. INTRODUCTION
|
||||
@ -137,7 +137,7 @@ amm-info@iis.fraunhofer.de
|
||||
/* Decoder library info */
|
||||
#define SBRDECODER_LIB_VL0 2
|
||||
#define SBRDECODER_LIB_VL1 2
|
||||
#define SBRDECODER_LIB_VL2 6
|
||||
#define SBRDECODER_LIB_VL2 7
|
||||
#define SBRDECODER_LIB_TITLE "SBR Decoder"
|
||||
#ifdef __ANDROID__
|
||||
#define SBRDECODER_LIB_BUILD_DATE ""
|
||||
@ -318,7 +318,6 @@ SBR_ERROR sbrDecoder_ResetElement (
|
||||
case AOT_PS:
|
||||
case AOT_ER_AAC_SCAL:
|
||||
case AOT_DRM_AAC:
|
||||
case AOT_DRM_SURROUND:
|
||||
if (CreatePsDec ( &self->hParametricStereoDec, samplesPerFrame )) {
|
||||
sbrError = SBRDEC_CREATE_ERROR;
|
||||
goto bail;
|
||||
@ -503,7 +502,6 @@ SBR_ERROR sbrDecoder_InitElement (
|
||||
case AOT_PS:
|
||||
case AOT_ER_AAC_SCAL:
|
||||
case AOT_DRM_AAC:
|
||||
case AOT_DRM_SURROUND:
|
||||
elChannels = 2;
|
||||
break;
|
||||
default:
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
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
|
||||
*****************************************************************/
|
||||
if(!missingHarmonicFlag)
|
||||
*noiseLevel = fMult(*noiseLevel, noiseFloorOffset)<<(NOISE_FLOOR_OFFSET_SCALING);
|
||||
if(!missingHarmonicFlag) {
|
||||
*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
|
||||
|
@ -103,7 +103,7 @@ amm-info@iis.fraunhofer.de
|
||||
|
||||
#define SBRENCODER_LIB_VL0 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;
|
||||
|
||||
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:
|
||||
hSbrElement->sbrConfigData.sbrSyntaxFlags |= SBR_SYNTAX_LOW_DELAY;
|
||||
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;
|
||||
}
|
||||
if ( (aot==AOT_ER_AAC_ELD) ) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
1. INTRODUCTION
|
||||
@ -676,7 +676,7 @@ FDKsbrEnc_InitSbrTransientDetector(HANDLE_SBR_TRANSIENT_DETECTOR h_sbrTransientD
|
||||
tmp = fixMax(tmp, FL2FXCONST_DBL(0.0001));
|
||||
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_rows <= QMF_CHANNELS);
|
||||
@ -684,14 +684,7 @@ FDKsbrEnc_InitSbrTransientDetector(HANDLE_SBR_TRANSIENT_DETECTOR h_sbrTransientD
|
||||
h_sbrTransientDetector->no_cols = no_cols;
|
||||
h_sbrTransientDetector->tran_thr = (FIXP_DBL)((params->tran_thr << (32-24-1)) / no_rows);
|
||||
h_sbrTransientDetector->tran_fc = tran_fc;
|
||||
|
||||
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->split_thr = scaleValueSaturate(fMult(tmp, bitrateFactor_fix), scale_1);
|
||||
h_sbrTransientDetector->no_rows = no_rows;
|
||||
h_sbrTransientDetector->mode = params->tran_det_mode;
|
||||
h_sbrTransientDetector->prevLowBandEnergy = FL2FXCONST_DBL(0.0f);
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
1. INTRODUCTION
|
||||
@ -134,13 +134,7 @@ typedef enum
|
||||
|
||||
TT_MP4_LOAS = 10, /**< Audio Sync Stream. */
|
||||
|
||||
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 /**< */
|
||||
TT_DRM = 12 /**< Digital Radio Mondial (DRM30/DRM+) bitstream format. */
|
||||
|
||||
} TRANSPORT_TYPE;
|
||||
|
||||
@ -203,38 +197,22 @@ typedef enum
|
||||
AOT_SAOC = 43, /**< SAOC */
|
||||
AOT_LD_MPEGS = 44, /**< Low Delay MPEG Surround */
|
||||
|
||||
AOT_RSVD50 = 50, /**< Interim AOT for Rsvd50 */
|
||||
|
||||
/* 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_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_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 */
|
||||
AOT_DRM_MPEG_PS = 145 /**< Virtual AOT for DRM (ER-AAC-SCAL with SBR and MPEG-PS) */
|
||||
|
||||
} 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) \
|
||||
((aot) == AOT_USAC \
|
||||
|| (aot) == AOT_RSVD50)
|
||||
((aot) == AOT_USAC)
|
||||
|
||||
#define IS_LOWDELAY(aot) \
|
||||
((aot) == AOT_ER_AAC_LD \
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* -----------------------------------------------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
1. INTRODUCTION
|
||||
@ -99,7 +99,7 @@ amm-info@iis.fraunhofer.de
|
||||
/* library info */
|
||||
#define SYS_LIB_VL0 1
|
||||
#define SYS_LIB_VL1 3
|
||||
#define SYS_LIB_VL2 6
|
||||
#define SYS_LIB_VL2 7
|
||||
#define SYS_LIB_TITLE "System Integration Library"
|
||||
#ifdef __ANDROID__
|
||||
#define SYS_LIB_BUILD_DATE ""
|
||||
|
Loading…
Reference in New Issue
Block a user