diff options
Diffstat (limited to 'media/libstagefright/codecs/aacdec/get_ga_specific_config.cpp')
-rw-r--r-- | media/libstagefright/codecs/aacdec/get_ga_specific_config.cpp | 473 |
1 files changed, 0 insertions, 473 deletions
diff --git a/media/libstagefright/codecs/aacdec/get_ga_specific_config.cpp b/media/libstagefright/codecs/aacdec/get_ga_specific_config.cpp deleted file mode 100644 index 65c00ea..0000000 --- a/media/libstagefright/codecs/aacdec/get_ga_specific_config.cpp +++ /dev/null @@ -1,473 +0,0 @@ -/* ------------------------------------------------------------------ - * Copyright (C) 1998-2009 PacketVideo - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the License for the specific language governing permissions - * and limitations under the License. - * ------------------------------------------------------------------- - */ -/* - - Pathname: get_GA_specific_config.c - ------------------------------------------------------------------------------- - REVISION HISTORY - - Description: Modified per review comments - - Description: Change getbits.h to ibstream.h - - Description: (1) use enum type for audioObjectType (2) update revision history - - Description: Updated the SW template to include the full pathname to the - source file and a slightly modified copyright header. - - Description: Updated to use scratch memory for the temporary prog config. - - Description: Replace some instances of getbits to get1bits - when only 1 bit is read. - - Who: Date: - Description: - ------------------------------------------------------------------------------- - INPUT AND OUTPUT DEFINITIONS - - Inputs: - pVars = pointer to the structure that holds all information for - this instance of the library. pVars->prog_config - pVars->mc_info, pVars->pWinSeqInfo, pVars->SFBWidth128 - are needed for calling set_mc_info. - Data type pointer to tDec_Int_File - - channel_config = variable that indicates the channel configuration - information, in this decoder library, only values - 0, 1, and 2 are allowed. - Data type UInt - - audioObjectType = variable that indicates the Audio Object Type. - Data type UInt. - - pInputStream = pointer to a BITS structure that holds information - regarding the input stream. - - Local Stores/Buffers/Pointers Needed: - None - - Global Stores/Buffers/Pointers Needed: - None - - Outputs: - status = 0 if success - 1 otherwise - - Pointers and Buffers Modified: - pVars->mc_info contents are updated with channel information. - if infoinit is called within set_mc_info, then - pVars->pWinSeqInfo contents are updated with window information. - pVars->SFBWidth128 contents are updated with scale factor band width data. - - Local Stores Modified: - None - - Global Stores Modified: - None - ------------------------------------------------------------------------------- - FUNCTION DESCRIPTION - - This function takes the sampling_rate_idx, channel_config, and - audioObjectType from AudioSpecificConfig() and set the decoder configuration - necessary for the decoder to decode properly. - It also reads the bitstream for frame length, scalable bitstream information - and extension information to General Audio defined in MPEG-4 phase 1 - ------------------------------------------------------------------------------- - REQUIREMENTS - - This function shall not use global variables - ------------------------------------------------------------------------------- - REFERENCES - - (1) ISO/IEC 14496-3: 1999(E) - Part 3 - Subpart 1 p18 1.6 Interface to MPEG-4 Systems - Subpart 4 p13 4.4.1 GA Specific Configuration - Amendment p10 6.2.1 AudioSpecificInfo - Amendment p78 8.2 Decoder configuration (GASpecificConfig) - - (2) AAC DecoderSpecificInfo Information - PacketVideo descriptions - San Diego - ------------------------------------------------------------------------------- - PSEUDO-CODE - - frameLenFlag = CALL getbits( - neededBits = LEN_FRAME_LEN_FLAG, - pInputStream = pInputStream); - MODIFYING (pInputStream) - RETURNING (frameLenFlag) - - dependsOnCoreCoder = CALL getbits( - neededBits = LEN_DEPEND_ON_CORE, - pInputStream = pInputStream); - MODIFYING (pInputStream) - RETURNING (dependsOnCoreCoder) - - IF (dependsOnCoreCoder != FALSE) - THEN - coreCoderDelay = CALL getbits( - neededBits = LEN_CORE_DELAY, - pInputStream = pInputStream); - MODIFYING (pInputStream) - RETURNING (coreCoderDelay) - ENDIF - - extFlag = CALL getbits( - neededBits = LEN_EXT_FLAG, - pInputStream = pInputStream); - MODIFYING (pInputStream) - RETURNING (extFlag) - - IF (channel_config == 0) - THEN - status = CALL get_prog_config( - pVars = pVars, - pScratchPCE = &pVars->scratch_prog_config); - MODIFYING (pVars, pScratchPCE) - RETURNING (status) - - ELSE - channel_config--; - pVars->prog_config.front.ele_is_cpe[0] = channel_config; - pVars->prog_config.front.ele_tag[0] = 0; - - status = CALL set_mc_info( - pMC_Info = &(pVars->mc_info), - audioObjectType = audioObjectType, - sampling_rate_idx = pVars->prog_config.sampling_rate_idx, - tag = pVars->prog_config.front.ele_tag[0], - is_cpe = pVars->prog_config.front.ele_is_cpe[0], - pWinSeqInfo = pVars->pWinSeqInfo, - sfbwidth128 = pVars->SFBWidth128); - MODIFYING (pMC_Info, pWinSeqInfo, sfbwidth128) - RETURNING (SUCCESS) - ENDIF - - IF ((audioObjectType == MP4AUDIO_AAC_SCALABLE) OR - (audioObjectType == MP4AUDIO_ER_AAC_SCALABLE)) - THEN - layer_num = CALL getbits( - neededBits = LEN_LAYER_NUM, - pInputStream = pInputStream); - MODIFYING (pInputStream) - RETURNING (layer_num) - - status = 1; - ENDIF - - IF (extFlag != FALSE) - THEN - IF (audioObjectType == MP4AUDIO_ER_BSAC) - THEN - numOfSubFrame = CALL getbits( - neededBits = LEN_SUB_FRAME, - pInputStream = pInputStream); - MODIFYING (pInputStream) - RETURNING (numOfSubFrame) - - layer_len = CALL getbits( - neededBits = LEN_LAYER_LEN, - pInputStream = pInputStream); - MODIFYING (pInputStream) - RETURNING (layer_len) - - ENDIF - - IF (((audioObjectType > 16) AND (audioObjectType < 22)) OR - (audioObjectType == 23)) - THEN - aacSectionDataResilienceFlag = - CALL getbits( - neededBits = LEN_SECT_RES_FLAG, - pInputStream = pInputStream); - MODIFYING (pInputStream) - RETURNING (aacSectionDataResilienceFlag) - - aacScalefactorDataResilienceFlag = - CALL getbits( - neededBits = LEN_SFB_RES_FLAG, - pInputStream = pInputStream); - MODIFYING (pInputStream) - RETURNING (aacScalefactorDataResilienceFlag) - - aacSpectralDataResilienceFlag = - CALL getbits( - neededBits = LEN_SPEC_RES_FLAG, - pInputStream = pInputStream); - MODIFYING (pInputStream) - RETURNING (aacSpectralDataResilienceFlag) - ENDIF - - status = 1; - - ENDIF - - RETURN status; - ------------------------------------------------------------------------------- - RESOURCES USED - When the code is written for a specific target processor the - the resources used should be documented below. - - STACK USAGE: [stack count for this module] + [variable to represent - stack usage for each subroutine called] - - where: [stack usage variable] = stack usage for [subroutine - name] (see [filename].ext) - - DATA MEMORY USED: x words - - PROGRAM MEMORY USED: x words - - CLOCK CYCLES: [cycle count equation for this module] + [variable - used to represent cycle count for each subroutine - called] - - where: [cycle count variable] = cycle count for [subroutine - name] (see [filename].ext) - ------------------------------------------------------------------------------- -*/ - - -/*---------------------------------------------------------------------------- -; INCLUDES -----------------------------------------------------------------------------*/ -#include "pv_audio_type_defs.h" -#include "e_mp4ff_const.h" -#include "e_tmp4audioobjecttype.h" -#include "s_tdec_int_file.h" -#include "get_ga_specific_config.h" -#include "set_mc_info.h" -#include "get_prog_config.h" -#include "ibstream.h" - -/*---------------------------------------------------------------------------- -; MACROS -; Define module specific macros here -----------------------------------------------------------------------------*/ - - -/*---------------------------------------------------------------------------- -; DEFINES -; Include all pre-processor statements here. Include conditional -; compile variables also. -----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -; LOCAL FUNCTION DEFINITIONS -; Function Prototype declaration -----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -; LOCAL STORE/BUFFER/POINTER DEFINITIONS -; Variable declaration - defined here and used outside this module -----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -; EXTERNAL FUNCTION REFERENCES -; Declare functions defined elsewhere and referenced in this module -----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES -; Declare variables used in this module but defined elsewhere -----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -; FUNCTION CODE -----------------------------------------------------------------------------*/ -Int get_GA_specific_config( - tDec_Int_File * const pVars, - BITS *pInputStream, - UInt channel_config, - const tMP4AudioObjectType audioObjectType -) -{ - - Int status = SUCCESS; - UInt dependsOnCoreCoder; - /* Int coreCoderDelay; */ - UInt extFlag; - - /* These variables are left for future implementation */ - /* UInt layer_num; */ - /* UInt numOfSubFrame; */ - /* UInt layer_len; */ - /* UInt aacSectionDataResilienceFlag; */ - /* UInt aacScalefactorDataResilienceFlag; */ - /* UInt aacSpectralDataResilienceFlag; */ - Int extFlag3; - - /* - * frame length flag == 0, 1024 samples/frame - * frame length flag == 1, 960 samples/frame - */ - get1bits(/* LEN_FRAME_LEN_FLAG,*/ - pInputStream); - - /* - * dependsOnCoreCoder == 1, core coder has different sampling rate - * in a scalable bitstream - */ - dependsOnCoreCoder = - get1bits(/* LEN_DEPEND_ON_CORE,*/ - pInputStream); - - if (dependsOnCoreCoder != FALSE) - { - /*coreCoderDelay = - * getbits( - * LEN_CORE_DELAY, - * pInputStream); - */ - - status = 1; /* do not support scalable coding in this release */ - } - - /* - * extension flag indicates if Amendment 1 objects are used or not - * extension flag == 0 objects = 1, 2, 3, 4, 6, 7 - * extension flag == 1 objects = 17, 19, 20, 21, 22, 23 - */ - extFlag = get1bits(pInputStream); /* LEN_EXT_FLAG,*/ - - - /* Force checks for implicit channel configuration */ - pVars->mc_info.implicit_channeling = 1; - - if (status == SUCCESS) - { - - if (channel_config == 0) - { - status = get_prog_config(pVars, - &pVars->scratch.scratch_prog_config); - - if (status != SUCCESS) - { - pVars->prog_config.front.ele_is_cpe[0] = 0; /* default to mono */ - pVars->mc_info.nch = 1; - pVars->prog_config.front.ele_tag[0] = 0; - - status = SUCCESS; - } - } - else - { - /* - * dummy tag = 0 and - * set up decoding configurations - */ - channel_config--; - pVars->prog_config.front.ele_is_cpe[0] = channel_config; - pVars->prog_config.front.ele_tag[0] = 0; - - status = - set_mc_info( - &(pVars->mc_info), - audioObjectType, /* previously profile */ - pVars->prog_config.sampling_rate_idx, - pVars->prog_config.front.ele_tag[0], - pVars->prog_config.front.ele_is_cpe[0], - pVars->winmap, /*pVars->pWinSeqInfo,*/ - pVars->SFBWidth128); - - } /* if (channel_config) */ - - } /* if(status) */ - - /* - * This layer_num is not found in ISO/IEC specs, - * but it is defined in San Diego spec for scalable bitstream - */ - if ((audioObjectType == MP4AUDIO_AAC_SCALABLE) || - (audioObjectType == MP4AUDIO_ER_AAC_SCALABLE)) - { - /*layer_num = - * getbits( - * LEN_LAYER_NUM, - * pInputStream); - */ - - status = 1; /* for this release only */ - } - - if (extFlag) - { - /* - * currently do not implement these functionalities - * defined in Amendment 1 - * keep it here for future release - */ - if (audioObjectType == MP4AUDIO_ER_BSAC) - { - status = 1; /* NOT SUPPORTED */ - /* - numOfSubFrame = getbits( LEN_SUB_FRAME, pInputStream); - - layer_len = getbits( LEN_LAYER_LEN, pInputStream); - */ - } - - /* - * The following code is equivalent to - * if ((audioObjectType == 17) || (audioObjectType == 18) || - * (audioObjectType == 19) || (audioObjectType == 20) || - * (audioObjectType == 21) || (audioObjectType == 23)) - */ - - if (((audioObjectType > 16) && (audioObjectType < 22)) || - (audioObjectType == 23)) - { - status = 1; /* NOT SUPPORTED */ - /* - aacSectionDataResilienceFlag = getbits( LEN_SECT_RES_FLAG, - pInputStream); - - aacScalefactorDataResilienceFlag = getbits( LEN_SCF_RES_FLAG, - pInputStream); - - aacSpectralDataResilienceFlag = getbits( LEN_SPEC_RES_FLAG, - pInputStream); - */ - } - /* - * this flag is tbd in version 3 of ISO/IEC spec - * if the encoder generates this bit, then it has to be read - * current adif2mp4ff does not write this bit. If this bit is to - * be read, it can be done by the following code: - */ - - extFlag3 = get1bits(pInputStream); /* LEN_EXT_FLAG3 */ - - if (extFlag3) - { - status = 1; /* NOT SUPPORTED */ - } - - } - - return status; -} |