diff options
author | Casimir666 <casimir666@users.sourceforge.net> | 2009-02-14 01:54:06 +0300 |
---|---|---|
committer | Casimir666 <casimir666@users.sourceforge.net> | 2009-02-14 01:54:06 +0300 |
commit | d0acee9381fb88fd62a08c1786932c2b0053ec71 (patch) | |
tree | fcb26fc9556530023f4ccbd4cfff5b744b0a230d /src/filters/transform/mpadecfilter/faad2/libfaad/mp4.c | |
parent | 377cc63dc4f603c3df86e092180714f98945a5ea (diff) |
Changed : Faad updated to rev 2.2.7
- DAB+ support
- Use public headers internally to prevent duplicate declarations
- Explicitly typedef all types as signed
- Made sure MAIN prediction can't be started after the first frame
- Lot's of compilation issues solved
- Bugfix in SBR envelope border calculation
git-svn-id: https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@993 10f7b99b-c216-0410-bff0-8a66a9350fd8
Diffstat (limited to 'src/filters/transform/mpadecfilter/faad2/libfaad/mp4.c')
-rw-r--r-- | src/filters/transform/mpadecfilter/faad2/libfaad/mp4.c | 83 |
1 files changed, 46 insertions, 37 deletions
diff --git a/src/filters/transform/mpadecfilter/faad2/libfaad/mp4.c b/src/filters/transform/mpadecfilter/faad2/libfaad/mp4.c index ab79db813..72b2af6ce 100644 --- a/src/filters/transform/mpadecfilter/faad2/libfaad/mp4.c +++ b/src/filters/transform/mpadecfilter/faad2/libfaad/mp4.c @@ -19,15 +19,13 @@ ** Any non-GPL usage of this software or parts of this software is strictly ** forbidden. ** -** Software using this code must display the following message visibly in or -** on each copy of the software: -** "Code from FAAD2 is copyright (c) Nero AG, www.nero.com" -** in, for example, the about-box or help/startup screen. +** The "appropriate copyright message" mentioned in section 2c of the GPLv2 +** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com" ** ** Commercial non-GPL licensing of this software is possible. ** For more info contact Nero AG through Mpeg4AAClicense@nero.com. ** -** $Id: mp4.c,v 1.37 2007/10/11 18:41:51 menno Exp $ +** $Id: mp4.c,v 1.40 2009/02/06 03:39:58 menno Exp $ **/ #include "common.h" @@ -116,60 +114,53 @@ static uint8_t ObjectTypesTable[32] = { }; /* Table 1.6.1 */ -int8_t NEAACDECAPI NeAACDecAudioSpecificConfig(uint8_t *pBuffer, - uint32_t buffer_size, - mp4AudioSpecificConfig *mp4ASC) +char NEAACDECAPI NeAACDecAudioSpecificConfig(unsigned char *pBuffer, + unsigned long buffer_size, + mp4AudioSpecificConfig *mp4ASC) { - return AudioSpecificConfig2(pBuffer, buffer_size, mp4ASC, NULL); + return AudioSpecificConfig2(pBuffer, buffer_size, mp4ASC, NULL, 0); } -int8_t AudioSpecificConfig2(uint8_t *pBuffer, - uint32_t buffer_size, +int8_t AudioSpecificConfigFromBitfile(bitfile *ld, mp4AudioSpecificConfig *mp4ASC, - program_config *pce) + program_config *pce, uint32_t buffer_size, uint8_t short_form) { - bitfile ld; int8_t result = 0; + uint32_t startpos = faad_get_processed_bits(ld); #ifdef SBR_DEC int8_t bits_to_decode = 0; #endif - if (pBuffer == NULL) - return -7; if (mp4ASC == NULL) return -8; memset(mp4ASC, 0, sizeof(mp4AudioSpecificConfig)); - faad_initbits(&ld, pBuffer, buffer_size); - faad_byte_align(&ld); - - mp4ASC->objectTypeIndex = (uint8_t)faad_getbits(&ld, 5 + mp4ASC->objectTypeIndex = (uint8_t)faad_getbits(ld, 5 DEBUGVAR(1,1,"parse_audio_decoder_specific_info(): ObjectTypeIndex")); - mp4ASC->samplingFrequencyIndex = (uint8_t)faad_getbits(&ld, 4 + mp4ASC->samplingFrequencyIndex = (uint8_t)faad_getbits(ld, 4 DEBUGVAR(1,2,"parse_audio_decoder_specific_info(): SamplingFrequencyIndex")); + if(mp4ASC->samplingFrequencyIndex==0x0f) + faad_getbits(ld, 24); - mp4ASC->channelsConfiguration = (uint8_t)faad_getbits(&ld, 4 + mp4ASC->channelsConfiguration = (uint8_t)faad_getbits(ld, 4 DEBUGVAR(1,3,"parse_audio_decoder_specific_info(): ChannelsConfiguration")); mp4ASC->samplingFrequency = get_sample_rate(mp4ASC->samplingFrequencyIndex); if (ObjectTypesTable[mp4ASC->objectTypeIndex] != 1) { - faad_endbits(&ld); return -1; } if (mp4ASC->samplingFrequency == 0) { - faad_endbits(&ld); return -2; } if (mp4ASC->channelsConfiguration > 7) { - faad_endbits(&ld); return -3; } @@ -189,7 +180,7 @@ int8_t AudioSpecificConfig2(uint8_t *pBuffer, uint8_t tmp; mp4ASC->sbr_present_flag = 1; - tmp = (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) @@ -197,12 +188,12 @@ int8_t AudioSpecificConfig2(uint8_t *pBuffer, mp4ASC->samplingFrequencyIndex = tmp; if (mp4ASC->samplingFrequencyIndex == 15) { - mp4ASC->samplingFrequency = (uint32_t)faad_getbits(&ld, 24 + mp4ASC->samplingFrequency = (uint32_t)faad_getbits(ld, 24 DEBUGVAR(1,6,"parse_audio_decoder_specific_info(): extensionSamplingFrequencyIndex")); } else { mp4ASC->samplingFrequency = get_sample_rate(mp4ASC->samplingFrequencyIndex); } - mp4ASC->objectTypeIndex = (uint8_t)faad_getbits(&ld, 5 + mp4ASC->objectTypeIndex = (uint8_t)faad_getbits(ld, 5 DEBUGVAR(1,7,"parse_audio_decoder_specific_info(): ObjectTypeIndex")); } #endif @@ -212,12 +203,12 @@ int8_t AudioSpecificConfig2(uint8_t *pBuffer, mp4ASC->objectTypeIndex == 3 || mp4ASC->objectTypeIndex == 4 || mp4ASC->objectTypeIndex == 6 || mp4ASC->objectTypeIndex == 7) { - result = GASpecificConfig(&ld, mp4ASC, pce); + result = GASpecificConfig(ld, mp4ASC, pce); #ifdef ERROR_RESILIENCE } else if (mp4ASC->objectTypeIndex >= ER_OBJECT_START) { /* ER */ - result = GASpecificConfig(&ld, mp4ASC, pce); - mp4ASC->epConfig = (uint8_t)faad_getbits(&ld, 2 + result = GASpecificConfig(ld, mp4ASC, pce); + mp4ASC->epConfig = (uint8_t)faad_getbits(ld, 2 DEBUGVAR(1,143,"parse_audio_decoder_specific_info(): epConfig")); if (mp4ASC->epConfig != 0) @@ -236,21 +227,24 @@ int8_t AudioSpecificConfig2(uint8_t *pBuffer, #ifdef SBR_DEC - bits_to_decode = (int8_t)(buffer_size*8 - faad_get_processed_bits(&ld)); + if(short_form) + bits_to_decode = 0; + else + bits_to_decode = (int8_t)(buffer_size*8 - (startpos-faad_get_processed_bits(ld))); if ((mp4ASC->objectTypeIndex != 5) && (bits_to_decode >= 16)) { - int16_t syncExtensionType = (int16_t)faad_getbits(&ld, 11 + int16_t syncExtensionType = (int16_t)faad_getbits(ld, 11 DEBUGVAR(1,9,"parse_audio_decoder_specific_info(): syncExtensionType")); if (syncExtensionType == 0x2b7) { - uint8_t tmp_OTi = (uint8_t)faad_getbits(&ld, 5 + uint8_t tmp_OTi = (uint8_t)faad_getbits(ld, 5 DEBUGVAR(1,10,"parse_audio_decoder_specific_info(): extensionAudioObjectType")); if (tmp_OTi == 5) { - mp4ASC->sbr_present_flag = (uint8_t)faad_get1bit(&ld + mp4ASC->sbr_present_flag = (uint8_t)faad_get1bit(ld DEBUGVAR(1,11,"parse_audio_decoder_specific_info(): sbr_present_flag")); if (mp4ASC->sbr_present_flag) @@ -260,7 +254,7 @@ int8_t AudioSpecificConfig2(uint8_t *pBuffer, /* Don't set OT to SBR until checked that it is actually there */ mp4ASC->objectTypeIndex = tmp_OTi; - tmp = (uint8_t)faad_getbits(&ld, 4 + tmp = (uint8_t)faad_getbits(ld, 4 DEBUGVAR(1,12,"parse_audio_decoder_specific_info(): extensionSamplingFrequencyIndex")); /* check for downsampled SBR */ @@ -270,7 +264,7 @@ int8_t AudioSpecificConfig2(uint8_t *pBuffer, if (mp4ASC->samplingFrequencyIndex == 15) { - mp4ASC->samplingFrequency = (uint32_t)faad_getbits(&ld, 24 + mp4ASC->samplingFrequency = (uint32_t)faad_getbits(ld, 24 DEBUGVAR(1,13,"parse_audio_decoder_specific_info(): extensionSamplingFrequencyIndex")); } else { mp4ASC->samplingFrequency = get_sample_rate(mp4ASC->samplingFrequencyIndex); @@ -294,7 +288,22 @@ int8_t AudioSpecificConfig2(uint8_t *pBuffer, } #endif - faad_endbits(&ld); + faad_endbits(ld); return result; } + +int8_t AudioSpecificConfig2(uint8_t *pBuffer, + uint32_t buffer_size, + mp4AudioSpecificConfig *mp4ASC, + program_config *pce, + uint8_t short_form) +{ + uint8_t ret = 0; + bitfile ld; + faad_initbits(&ld, pBuffer, buffer_size); + faad_byte_align(&ld); + ret = AudioSpecificConfigFromBitfile(&ld, mp4ASC, pce, buffer_size, short_form); + faad_endbits(&ld); + return ret; +} |