diff options
Diffstat (limited to 'src/libfaad/mp4.c')
-rw-r--r-- | src/libfaad/mp4.c | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/src/libfaad/mp4.c b/src/libfaad/mp4.c index 230dd6b65..651280805 100644 --- a/src/libfaad/mp4.c +++ b/src/libfaad/mp4.c @@ -22,7 +22,7 @@ ** Commercial non-GPL licensing of this software is possible. ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com. ** -** $Id: mp4.c,v 1.8 2004/12/03 01:15:30 tmattern Exp $ +** $Id: mp4.c,v 1.9 2005/10/29 23:57:07 tmmm Exp $ **/ #include "common.h" @@ -119,17 +119,17 @@ static uint8_t ObjectTypesTable[32] = { }; /* Table 1.6.1 */ -int8_t FAADAPI AudioSpecificConfig(uint8_t *pBuffer, - uint32_t buffer_size, - mp4AudioSpecificConfig *mp4ASC) +int8_t NEAACDECAPI NeAACDecAudioSpecificConfig(uint8_t *pBuffer, + uint32_t buffer_size, + mp4AudioSpecificConfig *mp4ASC) { return AudioSpecificConfig2(pBuffer, buffer_size, mp4ASC, NULL); } -int8_t FAADAPI AudioSpecificConfig2(uint8_t *pBuffer, - uint32_t buffer_size, - mp4AudioSpecificConfig *mp4ASC, - program_config *pce) +int8_t AudioSpecificConfig2(uint8_t *pBuffer, + uint32_t buffer_size, + mp4AudioSpecificConfig *mp4ASC, + program_config *pce) { bitfile ld; int8_t result = 0; @@ -176,13 +176,28 @@ int8_t FAADAPI AudioSpecificConfig2(uint8_t *pBuffer, return -3; } +#if (defined(PS_DEC) || defined(DRM_PS)) + /* check if we have a mono file */ + if (mp4ASC->channelsConfiguration == 1) + { + /* upMatrix to 2 channels for implicit signalling of PS */ + mp4ASC->channelsConfiguration = 2; + } +#endif + #ifdef SBR_DEC mp4ASC->sbr_present_flag = -1; if (mp4ASC->objectTypeIndex == 5) { + uint8_t tmp; + mp4ASC->sbr_present_flag = 1; - mp4ASC->samplingFrequencyIndex = (uint8_t)faad_getbits(&ld, 4 + tmp = (uint8_t)faad_getbits(&ld, 4 DEBUGVAR(1,5,"parse_audio_decoder_specific_info(): extensionSamplingFrequencyIndex")); + /* check for downsampled SBR */ + if (tmp == mp4ASC->samplingFrequencyIndex) + mp4ASC->downSampledSBR = 1; + mp4ASC->samplingFrequencyIndex = tmp; if (mp4ASC->samplingFrequencyIndex == 15) { mp4ASC->samplingFrequency = (uint32_t)faad_getbits(&ld, 24 @@ -243,8 +258,15 @@ int8_t FAADAPI AudioSpecificConfig2(uint8_t *pBuffer, if (mp4ASC->sbr_present_flag) { - mp4ASC->samplingFrequencyIndex = (uint8_t)faad_getbits(&ld, 4 + uint8_t tmp; + tmp = (uint8_t)faad_getbits(&ld, 4 DEBUGVAR(1,12,"parse_audio_decoder_specific_info(): extensionSamplingFrequencyIndex")); + + /* check for downsampled SBR */ + if (tmp == mp4ASC->samplingFrequencyIndex) + mp4ASC->downSampledSBR = 1; + mp4ASC->samplingFrequencyIndex = tmp; + if (mp4ASC->samplingFrequencyIndex == 15) { mp4ASC->samplingFrequency = (uint32_t)faad_getbits(&ld, 24 @@ -265,6 +287,8 @@ int8_t FAADAPI AudioSpecificConfig2(uint8_t *pBuffer, { mp4ASC->samplingFrequency *= 2; mp4ASC->forceUpSampling = 1; + } else /* > 24000*/ { + mp4ASC->downSampledSBR = 1; } } #endif |