1*e5436536SAndroid Build Coastguard Worker /* ----------------------------------------------------------------------------- 2*e5436536SAndroid Build Coastguard Worker Software License for The Fraunhofer FDK AAC Codec Library for Android 3*e5436536SAndroid Build Coastguard Worker 4*e5436536SAndroid Build Coastguard Worker © Copyright 1995 - 2018 Fraunhofer-Gesellschaft zur Förderung der angewandten 5*e5436536SAndroid Build Coastguard Worker Forschung e.V. All rights reserved. 6*e5436536SAndroid Build Coastguard Worker 7*e5436536SAndroid Build Coastguard Worker 1. INTRODUCTION 8*e5436536SAndroid Build Coastguard Worker The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software 9*e5436536SAndroid Build Coastguard Worker that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding 10*e5436536SAndroid Build Coastguard Worker scheme for digital audio. This FDK AAC Codec software is intended to be used on 11*e5436536SAndroid Build Coastguard Worker a wide variety of Android devices. 12*e5436536SAndroid Build Coastguard Worker 13*e5436536SAndroid Build Coastguard Worker AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient 14*e5436536SAndroid Build Coastguard Worker general perceptual audio codecs. AAC-ELD is considered the best-performing 15*e5436536SAndroid Build Coastguard Worker full-bandwidth communications codec by independent studies and is widely 16*e5436536SAndroid Build Coastguard Worker deployed. AAC has been standardized by ISO and IEC as part of the MPEG 17*e5436536SAndroid Build Coastguard Worker specifications. 18*e5436536SAndroid Build Coastguard Worker 19*e5436536SAndroid Build Coastguard Worker Patent licenses for necessary patent claims for the FDK AAC Codec (including 20*e5436536SAndroid Build Coastguard Worker those of Fraunhofer) may be obtained through Via Licensing 21*e5436536SAndroid Build Coastguard Worker (www.vialicensing.com) or through the respective patent owners individually for 22*e5436536SAndroid Build Coastguard Worker the purpose of encoding or decoding bit streams in products that are compliant 23*e5436536SAndroid Build Coastguard Worker with the ISO/IEC MPEG audio standards. Please note that most manufacturers of 24*e5436536SAndroid Build Coastguard Worker Android devices already license these patent claims through Via Licensing or 25*e5436536SAndroid Build Coastguard Worker directly from the patent owners, and therefore FDK AAC Codec software may 26*e5436536SAndroid Build Coastguard Worker already be covered under those patent licenses when it is used for those 27*e5436536SAndroid Build Coastguard Worker licensed purposes only. 28*e5436536SAndroid Build Coastguard Worker 29*e5436536SAndroid Build Coastguard Worker Commercially-licensed AAC software libraries, including floating-point versions 30*e5436536SAndroid Build Coastguard Worker with enhanced sound quality, are also available from Fraunhofer. Users are 31*e5436536SAndroid Build Coastguard Worker encouraged to check the Fraunhofer website for additional applications 32*e5436536SAndroid Build Coastguard Worker information and documentation. 33*e5436536SAndroid Build Coastguard Worker 34*e5436536SAndroid Build Coastguard Worker 2. COPYRIGHT LICENSE 35*e5436536SAndroid Build Coastguard Worker 36*e5436536SAndroid Build Coastguard Worker Redistribution and use in source and binary forms, with or without modification, 37*e5436536SAndroid Build Coastguard Worker are permitted without payment of copyright license fees provided that you 38*e5436536SAndroid Build Coastguard Worker satisfy the following conditions: 39*e5436536SAndroid Build Coastguard Worker 40*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in redistributions of 41*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec or your modifications thereto in source code form. 42*e5436536SAndroid Build Coastguard Worker 43*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in the documentation 44*e5436536SAndroid Build Coastguard Worker and/or other materials provided with redistributions of the FDK AAC Codec or 45*e5436536SAndroid Build Coastguard Worker your modifications thereto in binary form. You must make available free of 46*e5436536SAndroid Build Coastguard Worker charge copies of the complete source code of the FDK AAC Codec and your 47*e5436536SAndroid Build Coastguard Worker modifications thereto to recipients of copies in binary form. 48*e5436536SAndroid Build Coastguard Worker 49*e5436536SAndroid Build Coastguard Worker The name of Fraunhofer may not be used to endorse or promote products derived 50*e5436536SAndroid Build Coastguard Worker from this library without prior written permission. 51*e5436536SAndroid Build Coastguard Worker 52*e5436536SAndroid Build Coastguard Worker You may not charge copyright license fees for anyone to use, copy or distribute 53*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec software or your modifications thereto. 54*e5436536SAndroid Build Coastguard Worker 55*e5436536SAndroid Build Coastguard Worker Your modified versions of the FDK AAC Codec must carry prominent notices stating 56*e5436536SAndroid Build Coastguard Worker that you changed the software and the date of any change. For modified versions 57*e5436536SAndroid Build Coastguard Worker of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android" 58*e5436536SAndroid Build Coastguard Worker must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK 59*e5436536SAndroid Build Coastguard Worker AAC Codec Library for Android." 60*e5436536SAndroid Build Coastguard Worker 61*e5436536SAndroid Build Coastguard Worker 3. NO PATENT LICENSE 62*e5436536SAndroid Build Coastguard Worker 63*e5436536SAndroid Build Coastguard Worker NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without 64*e5436536SAndroid Build Coastguard Worker limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE. 65*e5436536SAndroid Build Coastguard Worker Fraunhofer provides no warranty of patent non-infringement with respect to this 66*e5436536SAndroid Build Coastguard Worker software. 67*e5436536SAndroid Build Coastguard Worker 68*e5436536SAndroid Build Coastguard Worker You may use this FDK AAC Codec software or modifications thereto only for 69*e5436536SAndroid Build Coastguard Worker purposes that are authorized by appropriate patent licenses. 70*e5436536SAndroid Build Coastguard Worker 71*e5436536SAndroid Build Coastguard Worker 4. DISCLAIMER 72*e5436536SAndroid Build Coastguard Worker 73*e5436536SAndroid Build Coastguard Worker This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright 74*e5436536SAndroid Build Coastguard Worker holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, 75*e5436536SAndroid Build Coastguard Worker including but not limited to the implied warranties of merchantability and 76*e5436536SAndroid Build Coastguard Worker fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 77*e5436536SAndroid Build Coastguard Worker CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, 78*e5436536SAndroid Build Coastguard Worker or consequential damages, including but not limited to procurement of substitute 79*e5436536SAndroid Build Coastguard Worker goods or services; loss of use, data, or profits, or business interruption, 80*e5436536SAndroid Build Coastguard Worker however caused and on any theory of liability, whether in contract, strict 81*e5436536SAndroid Build Coastguard Worker liability, or tort (including negligence), arising in any way out of the use of 82*e5436536SAndroid Build Coastguard Worker this software, even if advised of the possibility of such damage. 83*e5436536SAndroid Build Coastguard Worker 84*e5436536SAndroid Build Coastguard Worker 5. CONTACT INFORMATION 85*e5436536SAndroid Build Coastguard Worker 86*e5436536SAndroid Build Coastguard Worker Fraunhofer Institute for Integrated Circuits IIS 87*e5436536SAndroid Build Coastguard Worker Attention: Audio and Multimedia Departments - FDK AAC LL 88*e5436536SAndroid Build Coastguard Worker Am Wolfsmantel 33 89*e5436536SAndroid Build Coastguard Worker 91058 Erlangen, Germany 90*e5436536SAndroid Build Coastguard Worker 91*e5436536SAndroid Build Coastguard Worker www.iis.fraunhofer.de/amm 92*e5436536SAndroid Build Coastguard Worker [email protected] 93*e5436536SAndroid Build Coastguard Worker ----------------------------------------------------------------------------- */ 94*e5436536SAndroid Build Coastguard Worker 95*e5436536SAndroid Build Coastguard Worker /******************* MPEG transport format decoder library ********************* 96*e5436536SAndroid Build Coastguard Worker 97*e5436536SAndroid Build Coastguard Worker Author(s): Manuel Jander 98*e5436536SAndroid Build Coastguard Worker 99*e5436536SAndroid Build Coastguard Worker Description: MPEG Transport decoder 100*e5436536SAndroid Build Coastguard Worker 101*e5436536SAndroid Build Coastguard Worker *******************************************************************************/ 102*e5436536SAndroid Build Coastguard Worker 103*e5436536SAndroid Build Coastguard Worker #ifndef TPDEC_LIB_H 104*e5436536SAndroid Build Coastguard Worker #define TPDEC_LIB_H 105*e5436536SAndroid Build Coastguard Worker 106*e5436536SAndroid Build Coastguard Worker #include "tp_data.h" 107*e5436536SAndroid Build Coastguard Worker 108*e5436536SAndroid Build Coastguard Worker #include "FDK_bitstream.h" 109*e5436536SAndroid Build Coastguard Worker 110*e5436536SAndroid Build Coastguard Worker typedef enum { 111*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_OK = 0, /*!< All fine. */ 112*e5436536SAndroid Build Coastguard Worker 113*e5436536SAndroid Build Coastguard Worker /* Synchronization errors. Wait for new input data and try again. */ 114*e5436536SAndroid Build Coastguard Worker tpdec_sync_error_start = 0x100, 115*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_NOT_ENOUGH_BITS, /*!< Out of bits. Provide more bits and try 116*e5436536SAndroid Build Coastguard Worker again. */ 117*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_SYNC_ERROR, /*!< No sync was found or sync got lost. Keep trying. 118*e5436536SAndroid Build Coastguard Worker */ 119*e5436536SAndroid Build Coastguard Worker tpdec_sync_error_end, 120*e5436536SAndroid Build Coastguard Worker 121*e5436536SAndroid Build Coastguard Worker /* Decode errors. Mostly caused due to bit errors. */ 122*e5436536SAndroid Build Coastguard Worker tpdec_decode_error_start = 0x400, 123*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_PARSE_ERROR, /*!< Bitstream data showed inconsistencies (wrong 124*e5436536SAndroid Build Coastguard Worker syntax). */ 125*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_UNSUPPORTED_FORMAT, /*!< Unsupported format or feature found in 126*e5436536SAndroid Build Coastguard Worker the bitstream data. */ 127*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_CRC_ERROR, /*!< CRC error encountered in bitstream data. */ 128*e5436536SAndroid Build Coastguard Worker tpdec_decode_error_end, 129*e5436536SAndroid Build Coastguard Worker 130*e5436536SAndroid Build Coastguard Worker /* Fatal errors. Stop immediately on one of these errors! */ 131*e5436536SAndroid Build Coastguard Worker tpdec_fatal_error_start = 0x200, 132*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_UNKOWN_ERROR, /*!< An unknown error occured. */ 133*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_INVALID_PARAMETER, /*!< An invalid parameter was passed to a 134*e5436536SAndroid Build Coastguard Worker function. */ 135*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_NEED_TO_RESTART, /*!< The decoder needs to be restarted, since 136*e5436536SAndroid Build Coastguard Worker the requiered configuration change cannot 137*e5436536SAndroid Build Coastguard Worker be performed. */ 138*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_TOO_MANY_BITS, /*!< In case of packet based formats: Supplied 139*e5436536SAndroid Build Coastguard Worker number of bits exceed the size of the 140*e5436536SAndroid Build Coastguard Worker internal bit buffer. */ 141*e5436536SAndroid Build Coastguard Worker tpdec_fatal_error_end 142*e5436536SAndroid Build Coastguard Worker 143*e5436536SAndroid Build Coastguard Worker } TRANSPORTDEC_ERROR; 144*e5436536SAndroid Build Coastguard Worker 145*e5436536SAndroid Build Coastguard Worker /** Macro to identify decode errors. */ 146*e5436536SAndroid Build Coastguard Worker #define TPDEC_IS_DECODE_ERROR(err) \ 147*e5436536SAndroid Build Coastguard Worker (((err >= tpdec_decode_error_start) && (err <= tpdec_decode_error_end)) ? 1 \ 148*e5436536SAndroid Build Coastguard Worker : 0) 149*e5436536SAndroid Build Coastguard Worker /** Macro to identify fatal errors. */ 150*e5436536SAndroid Build Coastguard Worker #define TPDEC_IS_FATAL_ERROR(err) \ 151*e5436536SAndroid Build Coastguard Worker (((err >= tpdec_fatal_error_start) && (err <= tpdec_fatal_error_end)) ? 1 : 0) 152*e5436536SAndroid Build Coastguard Worker 153*e5436536SAndroid Build Coastguard Worker /** 154*e5436536SAndroid Build Coastguard Worker * \brief Parameter identifiers for transportDec_SetParam() 155*e5436536SAndroid Build Coastguard Worker */ 156*e5436536SAndroid Build Coastguard Worker typedef enum { 157*e5436536SAndroid Build Coastguard Worker TPDEC_PARAM_MINIMIZE_DELAY = 1, /** Delay minimization strategy. 0: none, 1: 158*e5436536SAndroid Build Coastguard Worker discard as many frames as possible. */ 159*e5436536SAndroid Build Coastguard Worker TPDEC_PARAM_EARLY_CONFIG, /** Enable early config discovery. */ 160*e5436536SAndroid Build Coastguard Worker TPDEC_PARAM_IGNORE_BUFFERFULLNESS, /** Ignore buffer fullness. */ 161*e5436536SAndroid Build Coastguard Worker TPDEC_PARAM_SET_BITRATE, /** Set average bit rate for bit stream interruption 162*e5436536SAndroid Build Coastguard Worker frame misses estimation. */ 163*e5436536SAndroid Build Coastguard Worker TPDEC_PARAM_RESET, /** Reset transport decoder instance status. */ 164*e5436536SAndroid Build Coastguard Worker TPDEC_PARAM_BURST_PERIOD, /** Set data reception burst period in mili seconds. 165*e5436536SAndroid Build Coastguard Worker */ 166*e5436536SAndroid Build Coastguard Worker TPDEC_PARAM_TARGETLAYOUT, /** Set CICP target layout */ 167*e5436536SAndroid Build Coastguard Worker TPDEC_PARAM_FORCE_CONFIG_CHANGE, /** Force config change for next received 168*e5436536SAndroid Build Coastguard Worker config */ 169*e5436536SAndroid Build Coastguard Worker TPDEC_PARAM_USE_ELEM_SKIPPING 170*e5436536SAndroid Build Coastguard Worker } TPDEC_PARAM; 171*e5436536SAndroid Build Coastguard Worker 172*e5436536SAndroid Build Coastguard Worker /*! 173*e5436536SAndroid Build Coastguard Worker \brief Reset Program Config Element. 174*e5436536SAndroid Build Coastguard Worker \param pPce Program Config Element structure. 175*e5436536SAndroid Build Coastguard Worker \return void 176*e5436536SAndroid Build Coastguard Worker */ 177*e5436536SAndroid Build Coastguard Worker void CProgramConfig_Reset(CProgramConfig *pPce); 178*e5436536SAndroid Build Coastguard Worker 179*e5436536SAndroid Build Coastguard Worker /*! 180*e5436536SAndroid Build Coastguard Worker \brief Initialize Program Config Element. 181*e5436536SAndroid Build Coastguard Worker \param pPce Program Config Element structure. 182*e5436536SAndroid Build Coastguard Worker \return void 183*e5436536SAndroid Build Coastguard Worker */ 184*e5436536SAndroid Build Coastguard Worker void CProgramConfig_Init(CProgramConfig *pPce); 185*e5436536SAndroid Build Coastguard Worker 186*e5436536SAndroid Build Coastguard Worker /*! 187*e5436536SAndroid Build Coastguard Worker \brief Inquire state of present Program Config Element 188*e5436536SAndroid Build Coastguard Worker structure. \param pPce Program Config Element structure. \return 189*e5436536SAndroid Build Coastguard Worker 1 if the PCE structure is filled correct, 0 if no valid PCE present. 190*e5436536SAndroid Build Coastguard Worker */ 191*e5436536SAndroid Build Coastguard Worker int CProgramConfig_IsValid(const CProgramConfig *pPce); 192*e5436536SAndroid Build Coastguard Worker 193*e5436536SAndroid Build Coastguard Worker /*! 194*e5436536SAndroid Build Coastguard Worker \brief Read Program Config Element. 195*e5436536SAndroid Build Coastguard Worker \param pPce Program Config Element structure. 196*e5436536SAndroid Build Coastguard Worker \param bs Bitstream buffer to read from. 197*e5436536SAndroid Build Coastguard Worker \param alignAnchor Align bitstream to alignAnchor bits after all read 198*e5436536SAndroid Build Coastguard Worker operations. \return void 199*e5436536SAndroid Build Coastguard Worker */ 200*e5436536SAndroid Build Coastguard Worker void CProgramConfig_Read(CProgramConfig *pPce, HANDLE_FDK_BITSTREAM bs, 201*e5436536SAndroid Build Coastguard Worker UINT alignAnchor); 202*e5436536SAndroid Build Coastguard Worker 203*e5436536SAndroid Build Coastguard Worker /*! 204*e5436536SAndroid Build Coastguard Worker \brief Compare two Program Config Elements. 205*e5436536SAndroid Build Coastguard Worker \param pPce1 Pointer to first Program Config Element structure. 206*e5436536SAndroid Build Coastguard Worker \param pPce2 Pointer to second Program Config Element structure. 207*e5436536SAndroid Build Coastguard Worker \return -1 if PCEs are completely different, 208*e5436536SAndroid Build Coastguard Worker 0 if PCEs are completely equal, 209*e5436536SAndroid Build Coastguard Worker 1 if PCEs are different but have the same channel 210*e5436536SAndroid Build Coastguard Worker config, 2 if PCEs have different channel config but same number of channels. 211*e5436536SAndroid Build Coastguard Worker */ 212*e5436536SAndroid Build Coastguard Worker int CProgramConfig_Compare(const CProgramConfig *const pPce1, 213*e5436536SAndroid Build Coastguard Worker const CProgramConfig *const pPce2); 214*e5436536SAndroid Build Coastguard Worker 215*e5436536SAndroid Build Coastguard Worker /*! 216*e5436536SAndroid Build Coastguard Worker \brief Get a Program Config Element that matches the predefined 217*e5436536SAndroid Build Coastguard Worker MPEG-4 channel configurations 1-14. \param pPce Program Config 218*e5436536SAndroid Build Coastguard Worker Element structure. \param channelConfig MPEG-4 channel configuration. \return 219*e5436536SAndroid Build Coastguard Worker void 220*e5436536SAndroid Build Coastguard Worker */ 221*e5436536SAndroid Build Coastguard Worker void CProgramConfig_GetDefault(CProgramConfig *pPce, const UINT channelConfig); 222*e5436536SAndroid Build Coastguard Worker 223*e5436536SAndroid Build Coastguard Worker /** 224*e5436536SAndroid Build Coastguard Worker * \brief Lookup and verify a given element. The decoder calls this 225*e5436536SAndroid Build Coastguard Worker * method with every new element ID found in the bitstream. 226*e5436536SAndroid Build Coastguard Worker * 227*e5436536SAndroid Build Coastguard Worker * \param pPce A valid Program config structure. 228*e5436536SAndroid Build Coastguard Worker * \param chConfig MPEG-4 channel configuration. 229*e5436536SAndroid Build Coastguard Worker * \param tag Tag of the current element to be looked up. 230*e5436536SAndroid Build Coastguard Worker * \param channelIdx The current channel count of the decoder parser. 231*e5436536SAndroid Build Coastguard Worker * \param chMapping Array to store the canonical channel mapping indexes. 232*e5436536SAndroid Build Coastguard Worker * \param chType Array to store the audio channel type. 233*e5436536SAndroid Build Coastguard Worker * \param chIndex Array to store the individual audio channel type index. 234*e5436536SAndroid Build Coastguard Worker * \param chDescrLen Length of the output channel description array. 235*e5436536SAndroid Build Coastguard Worker * \param elMapping Pointer where the canonical element index is stored. 236*e5436536SAndroid Build Coastguard Worker * \param elType The element id of the current element to be looked up. 237*e5436536SAndroid Build Coastguard Worker * 238*e5436536SAndroid Build Coastguard Worker * \return Non-zero if the element belongs to the current program, 239*e5436536SAndroid Build Coastguard Worker * zero if it does not. 240*e5436536SAndroid Build Coastguard Worker */ 241*e5436536SAndroid Build Coastguard Worker int CProgramConfig_LookupElement(CProgramConfig *pPce, UINT chConfig, 242*e5436536SAndroid Build Coastguard Worker const UINT tag, const UINT channelIdx, 243*e5436536SAndroid Build Coastguard Worker UCHAR chMapping[], AUDIO_CHANNEL_TYPE chType[], 244*e5436536SAndroid Build Coastguard Worker UCHAR chIndex[], const UINT chDescrLen, 245*e5436536SAndroid Build Coastguard Worker UCHAR *elMapping, MP4_ELEMENT_ID elList[], 246*e5436536SAndroid Build Coastguard Worker MP4_ELEMENT_ID elType); 247*e5436536SAndroid Build Coastguard Worker 248*e5436536SAndroid Build Coastguard Worker /** 249*e5436536SAndroid Build Coastguard Worker * \brief Get table of channel indices in the order of their 250*e5436536SAndroid Build Coastguard Worker * appearance in by the program config field. 251*e5436536SAndroid Build Coastguard Worker * \param pPce A valid program config structure. 252*e5436536SAndroid Build Coastguard Worker * \param pceChMap Array to store the channel mapping indices like they 253*e5436536SAndroid Build Coastguard Worker * appear in the PCE. 254*e5436536SAndroid Build Coastguard Worker * \param pceChMapLen Lenght of the channel mapping index array (pceChMap). 255*e5436536SAndroid Build Coastguard Worker * 256*e5436536SAndroid Build Coastguard Worker * \return Non-zero if any error occured otherwise zero. 257*e5436536SAndroid Build Coastguard Worker */ 258*e5436536SAndroid Build Coastguard Worker int CProgramConfig_GetPceChMap(const CProgramConfig *pPce, UCHAR pceChMap[], 259*e5436536SAndroid Build Coastguard Worker const UINT pceChMapLen); 260*e5436536SAndroid Build Coastguard Worker 261*e5436536SAndroid Build Coastguard Worker /** 262*e5436536SAndroid Build Coastguard Worker * \brief Get table of elements in canonical order from a 263*e5436536SAndroid Build Coastguard Worker * give program config field. 264*e5436536SAndroid Build Coastguard Worker * \param pPce A valid program config structure. 265*e5436536SAndroid Build Coastguard Worker * \param table An array where the element IDs are stored. 266*e5436536SAndroid Build Coastguard Worker * \param elListSize The length of the table array. 267*e5436536SAndroid Build Coastguard Worker * \param pChMapIdx Pointer to a field receiving the corresponding 268*e5436536SAndroid Build Coastguard Worker * implicit channel configuration index of the given 269*e5436536SAndroid Build Coastguard Worker * PCE. If none can be found it receives the value 0. 270*e5436536SAndroid Build Coastguard Worker * \return Total element count including all SCE, CPE and LFE. 271*e5436536SAndroid Build Coastguard Worker */ 272*e5436536SAndroid Build Coastguard Worker int CProgramConfig_GetElementTable(const CProgramConfig *pPce, 273*e5436536SAndroid Build Coastguard Worker MP4_ELEMENT_ID table[], const INT elListSize, 274*e5436536SAndroid Build Coastguard Worker UCHAR *pChMapIdx); 275*e5436536SAndroid Build Coastguard Worker 276*e5436536SAndroid Build Coastguard Worker /** 277*e5436536SAndroid Build Coastguard Worker * \brief Get channel description (type and index) for implicit 278*e5436536SAndroid Build Coastguard Worker configurations (chConfig > 0) in MPEG canonical order. 279*e5436536SAndroid Build Coastguard Worker * \param chConfig MPEG-4 channel configuration. 280*e5436536SAndroid Build Coastguard Worker * \param chType Array to store the audio channel type. 281*e5436536SAndroid Build Coastguard Worker * \param chIndex Array to store the individual audio channel type index. 282*e5436536SAndroid Build Coastguard Worker * \return void 283*e5436536SAndroid Build Coastguard Worker */ 284*e5436536SAndroid Build Coastguard Worker void CProgramConfig_GetChannelDescription(const UINT chConfig, 285*e5436536SAndroid Build Coastguard Worker const CProgramConfig *pPce, 286*e5436536SAndroid Build Coastguard Worker AUDIO_CHANNEL_TYPE chType[], 287*e5436536SAndroid Build Coastguard Worker UCHAR chIndex[]); 288*e5436536SAndroid Build Coastguard Worker 289*e5436536SAndroid Build Coastguard Worker /** 290*e5436536SAndroid Build Coastguard Worker * \brief Initialize a given AudioSpecificConfig structure. 291*e5436536SAndroid Build Coastguard Worker * \param pAsc A pointer to an allocated CSAudioSpecificConfig struct. 292*e5436536SAndroid Build Coastguard Worker * \return void 293*e5436536SAndroid Build Coastguard Worker */ 294*e5436536SAndroid Build Coastguard Worker void AudioSpecificConfig_Init(CSAudioSpecificConfig *pAsc); 295*e5436536SAndroid Build Coastguard Worker 296*e5436536SAndroid Build Coastguard Worker /** 297*e5436536SAndroid Build Coastguard Worker * \brief Parse a AudioSpecificConfig from a given bitstream handle. 298*e5436536SAndroid Build Coastguard Worker * 299*e5436536SAndroid Build Coastguard Worker * \param pAsc A pointer to an allocated 300*e5436536SAndroid Build Coastguard Worker * CSAudioSpecificConfig struct. 301*e5436536SAndroid Build Coastguard Worker * \param hBs Bitstream handle. 302*e5436536SAndroid Build Coastguard Worker * \param fExplicitBackwardCompatible Do explicit backward compatibility 303*e5436536SAndroid Build Coastguard Worker * parsing if set (flag). 304*e5436536SAndroid Build Coastguard Worker * \param cb pointer to structure holding callback information 305*e5436536SAndroid Build Coastguard Worker * \param configMode Config modes: memory allocation mode or config change 306*e5436536SAndroid Build Coastguard Worker * detection mode. 307*e5436536SAndroid Build Coastguard Worker * \param configChanged Indicates a config change. 308*e5436536SAndroid Build Coastguard Worker * \param m_aot in case of unequal AOT_NULL_OBJECT only the specific config is 309*e5436536SAndroid Build Coastguard Worker * parsed. 310*e5436536SAndroid Build Coastguard Worker * 311*e5436536SAndroid Build Coastguard Worker * \return Total element count including all SCE, CPE and LFE. 312*e5436536SAndroid Build Coastguard Worker */ 313*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR AudioSpecificConfig_Parse( 314*e5436536SAndroid Build Coastguard Worker CSAudioSpecificConfig *pAsc, HANDLE_FDK_BITSTREAM hBs, 315*e5436536SAndroid Build Coastguard Worker int fExplicitBackwardCompatible, CSTpCallBacks *cb, UCHAR configMode, 316*e5436536SAndroid Build Coastguard Worker UCHAR configChanged, AUDIO_OBJECT_TYPE m_aot); 317*e5436536SAndroid Build Coastguard Worker 318*e5436536SAndroid Build Coastguard Worker /* CELP stuff */ 319*e5436536SAndroid Build Coastguard Worker enum { MPE = 0, RPE = 1, fs8KHz = 0, fs16KHz = 1 }; 320*e5436536SAndroid Build Coastguard Worker 321*e5436536SAndroid Build Coastguard Worker /* Defintion of flags that can be passed to transportDecOpen() */ 322*e5436536SAndroid Build Coastguard Worker #define TP_FLAG_MPEG4 1 323*e5436536SAndroid Build Coastguard Worker 324*e5436536SAndroid Build Coastguard Worker /* Capability flags */ 325*e5436536SAndroid Build Coastguard Worker #define CAPF_TPDEC_ADIF \ 326*e5436536SAndroid Build Coastguard Worker 0x00001000 /**< Flag indicating support for ADIF transport format. */ 327*e5436536SAndroid Build Coastguard Worker #define CAPF_TPDEC_ADTS \ 328*e5436536SAndroid Build Coastguard Worker 0x00002000 /**< Flag indicating support for ADTS transport format. */ 329*e5436536SAndroid Build Coastguard Worker #define CAPF_TPDEC_LOAS \ 330*e5436536SAndroid Build Coastguard Worker 0x00004000 /**< Flag indicating support for LOAS transport format. */ 331*e5436536SAndroid Build Coastguard Worker #define CAPF_TPDEC_LATM \ 332*e5436536SAndroid Build Coastguard Worker 0x00008000 /**< Flag indicating support for LATM transport format. */ 333*e5436536SAndroid Build Coastguard Worker #define CAPF_TPDEC_RAWPACKETS \ 334*e5436536SAndroid Build Coastguard Worker 0x00010000 /**< Flag indicating support for raw packets transport format. */ 335*e5436536SAndroid Build Coastguard Worker 336*e5436536SAndroid Build Coastguard Worker typedef struct TRANSPORTDEC *HANDLE_TRANSPORTDEC; 337*e5436536SAndroid Build Coastguard Worker 338*e5436536SAndroid Build Coastguard Worker /** 339*e5436536SAndroid Build Coastguard Worker * \brief Configure Transport Decoder via a binary coded AudioSpecificConfig or 340*e5436536SAndroid Build Coastguard Worker * StreamMuxConfig. The previously requested configuration callback will be 341*e5436536SAndroid Build Coastguard Worker * called as well. The buffer conf must containt a SMC in case of 342*e5436536SAndroid Build Coastguard Worker * LOAS/LATM transport format, and an ASC elseways. 343*e5436536SAndroid Build Coastguard Worker * 344*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of a transport decoder. 345*e5436536SAndroid Build Coastguard Worker * \param conf UCHAR buffer of the binary coded config (ASC or SMC). 346*e5436536SAndroid Build Coastguard Worker * \param length The length in bytes of the conf buffer. 347*e5436536SAndroid Build Coastguard Worker * 348*e5436536SAndroid Build Coastguard Worker * \return Error code. 349*e5436536SAndroid Build Coastguard Worker */ 350*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_OutOfBandConfig(const HANDLE_TRANSPORTDEC hTp, 351*e5436536SAndroid Build Coastguard Worker UCHAR *conf, const UINT length, 352*e5436536SAndroid Build Coastguard Worker const UINT layer); 353*e5436536SAndroid Build Coastguard Worker 354*e5436536SAndroid Build Coastguard Worker /** 355*e5436536SAndroid Build Coastguard Worker * \brief Configure Transport Decoder via a binary coded USAC/RSV603DA Config. 356*e5436536SAndroid Build Coastguard Worker * The buffer newConfig contains a binary coded USAC/RSV603DA config of 357*e5436536SAndroid Build Coastguard Worker * length newConfigLength bytes. If the new config and the previous config are 358*e5436536SAndroid Build Coastguard Worker * different configChanged is set to 1 otherwise it is set to 0. 359*e5436536SAndroid Build Coastguard Worker * 360*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of a transport decoder. 361*e5436536SAndroid Build Coastguard Worker * \param newConfig buffer of the binary coded config. 362*e5436536SAndroid Build Coastguard Worker * \param newConfigLength Length of new config in bytes. 363*e5436536SAndroid Build Coastguard Worker * \param buildUpStatus Indicates build up status: off|on|idle. 364*e5436536SAndroid Build Coastguard Worker * \param configChanged Indicates if config changed. 365*e5436536SAndroid Build Coastguard Worker * \param layer Instance layer. 366*e5436536SAndroid Build Coastguard Worker * 367*e5436536SAndroid Build Coastguard Worker * \return Error code. 368*e5436536SAndroid Build Coastguard Worker */ 369*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_InBandConfig( 370*e5436536SAndroid Build Coastguard Worker const HANDLE_TRANSPORTDEC hTp, UCHAR *newConfig, const UINT newConfigLength, 371*e5436536SAndroid Build Coastguard Worker const UCHAR buildUpStatus, UCHAR *configChanged, const UINT layer, 372*e5436536SAndroid Build Coastguard Worker UCHAR *implicitExplicitCfgDiff); 373*e5436536SAndroid Build Coastguard Worker 374*e5436536SAndroid Build Coastguard Worker /** 375*e5436536SAndroid Build Coastguard Worker * \brief Open Transport medium for reading. 376*e5436536SAndroid Build Coastguard Worker * 377*e5436536SAndroid Build Coastguard Worker * \param transportDecFmt Format of the transport decoder medium to be accessed. 378*e5436536SAndroid Build Coastguard Worker * \param flags Transport decoder flags. Currently only TP_FLAG_MPEG4, 379*e5436536SAndroid Build Coastguard Worker * which signals a MPEG4 capable decoder (relevant for ADTS only). 380*e5436536SAndroid Build Coastguard Worker * 381*e5436536SAndroid Build Coastguard Worker * \return A pointer to a valid and allocated HANDLE_TRANSPORTDEC or a null 382*e5436536SAndroid Build Coastguard Worker * pointer on failure. 383*e5436536SAndroid Build Coastguard Worker */ 384*e5436536SAndroid Build Coastguard Worker HANDLE_TRANSPORTDEC transportDec_Open(TRANSPORT_TYPE transportDecFmt, 385*e5436536SAndroid Build Coastguard Worker const UINT flags, const UINT nrOfLayer); 386*e5436536SAndroid Build Coastguard Worker 387*e5436536SAndroid Build Coastguard Worker /** 388*e5436536SAndroid Build Coastguard Worker * \brief Register configuration change callback. 389*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of transport decoder. 390*e5436536SAndroid Build Coastguard Worker * \param cbUpdateConfig Pointer to a callback function to handle audio config 391*e5436536SAndroid Build Coastguard Worker * changes. 392*e5436536SAndroid Build Coastguard Worker * \param user_data void pointer for user data passed to the callback as 393*e5436536SAndroid Build Coastguard Worker * first parameter. 394*e5436536SAndroid Build Coastguard Worker * \return 0 on success. 395*e5436536SAndroid Build Coastguard Worker */ 396*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterAscCallback(HANDLE_TRANSPORTDEC hTp, 397*e5436536SAndroid Build Coastguard Worker const cbUpdateConfig_t cbUpdateConfig, 398*e5436536SAndroid Build Coastguard Worker void *user_data); 399*e5436536SAndroid Build Coastguard Worker 400*e5436536SAndroid Build Coastguard Worker /** 401*e5436536SAndroid Build Coastguard Worker * \brief Register free memory callback. 402*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of transport decoder. 403*e5436536SAndroid Build Coastguard Worker * \param cbFreeMem Pointer to a callback function to free config dependent 404*e5436536SAndroid Build Coastguard Worker * memory. 405*e5436536SAndroid Build Coastguard Worker * \param user_data void pointer for user data passed to the callback as 406*e5436536SAndroid Build Coastguard Worker * first parameter. 407*e5436536SAndroid Build Coastguard Worker * \return 0 on success. 408*e5436536SAndroid Build Coastguard Worker */ 409*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterFreeMemCallback(HANDLE_TRANSPORTDEC hTp, 410*e5436536SAndroid Build Coastguard Worker const cbFreeMem_t cbFreeMem, 411*e5436536SAndroid Build Coastguard Worker void *user_data); 412*e5436536SAndroid Build Coastguard Worker 413*e5436536SAndroid Build Coastguard Worker /** 414*e5436536SAndroid Build Coastguard Worker * \brief Register config change control callback. 415*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of transport decoder. 416*e5436536SAndroid Build Coastguard Worker * \param cbCtrlCFGChange Pointer to a callback function for config change 417*e5436536SAndroid Build Coastguard Worker * control. 418*e5436536SAndroid Build Coastguard Worker * \param user_data void pointer for user data passed to the callback as 419*e5436536SAndroid Build Coastguard Worker * first parameter. 420*e5436536SAndroid Build Coastguard Worker * \return 0 on success. 421*e5436536SAndroid Build Coastguard Worker */ 422*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterCtrlCFGChangeCallback( 423*e5436536SAndroid Build Coastguard Worker HANDLE_TRANSPORTDEC hTp, const cbCtrlCFGChange_t cbCtrlCFGChange, 424*e5436536SAndroid Build Coastguard Worker void *user_data); 425*e5436536SAndroid Build Coastguard Worker 426*e5436536SAndroid Build Coastguard Worker /** 427*e5436536SAndroid Build Coastguard Worker * \brief Register SSC parser callback. 428*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of transport decoder. 429*e5436536SAndroid Build Coastguard Worker * \param cbUpdateConfig Pointer to a callback function to handle SSC parsing. 430*e5436536SAndroid Build Coastguard Worker * \param user_data void pointer for user data passed to the callback as 431*e5436536SAndroid Build Coastguard Worker * first parameter. 432*e5436536SAndroid Build Coastguard Worker * \return 0 on success. 433*e5436536SAndroid Build Coastguard Worker */ 434*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterSscCallback(HANDLE_TRANSPORTDEC hTp, 435*e5436536SAndroid Build Coastguard Worker const cbSsc_t cbSscParse, void *user_data); 436*e5436536SAndroid Build Coastguard Worker 437*e5436536SAndroid Build Coastguard Worker /** 438*e5436536SAndroid Build Coastguard Worker * \brief Register SBR header parser callback. 439*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of transport decoder. 440*e5436536SAndroid Build Coastguard Worker * \param cbUpdateConfig Pointer to a callback function to handle SBR header 441*e5436536SAndroid Build Coastguard Worker * parsing. 442*e5436536SAndroid Build Coastguard Worker * \param user_data void pointer for user data passed to the callback as 443*e5436536SAndroid Build Coastguard Worker * first parameter. 444*e5436536SAndroid Build Coastguard Worker * \return 0 on success. 445*e5436536SAndroid Build Coastguard Worker */ 446*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterSbrCallback(HANDLE_TRANSPORTDEC hTpDec, 447*e5436536SAndroid Build Coastguard Worker const cbSbr_t cbSbr, void *user_data); 448*e5436536SAndroid Build Coastguard Worker 449*e5436536SAndroid Build Coastguard Worker /** 450*e5436536SAndroid Build Coastguard Worker * \brief Register USAC SC parser callback. 451*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of transport decoder. 452*e5436536SAndroid Build Coastguard Worker * \param cbUpdateConfig Pointer to a callback function to handle USAC SC 453*e5436536SAndroid Build Coastguard Worker * parsing. 454*e5436536SAndroid Build Coastguard Worker * \param user_data void pointer for user data passed to the callback as 455*e5436536SAndroid Build Coastguard Worker * first parameter. 456*e5436536SAndroid Build Coastguard Worker * \return 0 on success. 457*e5436536SAndroid Build Coastguard Worker */ 458*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterUsacCallback(HANDLE_TRANSPORTDEC hTpDec, 459*e5436536SAndroid Build Coastguard Worker const cbUsac_t cbUsac, void *user_data); 460*e5436536SAndroid Build Coastguard Worker 461*e5436536SAndroid Build Coastguard Worker /** 462*e5436536SAndroid Build Coastguard Worker * \brief Register uniDrcConfig and loudnessInfoSet parser 463*e5436536SAndroid Build Coastguard Worker * callback. 464*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of transport decoder. 465*e5436536SAndroid Build Coastguard Worker * \param cbUpdateConfig Pointer to a callback function to handle uniDrcConfig 466*e5436536SAndroid Build Coastguard Worker * and loudnessInfoSet parsing. 467*e5436536SAndroid Build Coastguard Worker * \param user_data void pointer for user data passed to the callback as 468*e5436536SAndroid Build Coastguard Worker * first parameter. 469*e5436536SAndroid Build Coastguard Worker * \return 0 on success. 470*e5436536SAndroid Build Coastguard Worker */ 471*e5436536SAndroid Build Coastguard Worker int transportDec_RegisterUniDrcConfigCallback(HANDLE_TRANSPORTDEC hTpDec, 472*e5436536SAndroid Build Coastguard Worker const cbUniDrc_t cbUniDrc, 473*e5436536SAndroid Build Coastguard Worker void *user_data, 474*e5436536SAndroid Build Coastguard Worker UINT *pLoudnessInfoSetPosition); 475*e5436536SAndroid Build Coastguard Worker 476*e5436536SAndroid Build Coastguard Worker /** 477*e5436536SAndroid Build Coastguard Worker * \brief Fill internal input buffer with bitstream data from the external input 478*e5436536SAndroid Build Coastguard Worker * buffer. The function only copies such data as long as the decoder-internal 479*e5436536SAndroid Build Coastguard Worker * input buffer is not full. So it grabs whatever it can from pBuffer and 480*e5436536SAndroid Build Coastguard Worker * returns information (bytesValid) so that at a subsequent call of 481*e5436536SAndroid Build Coastguard Worker * %transportDec_FillData(), the right position in pBuffer can be determined to 482*e5436536SAndroid Build Coastguard Worker * grab the next data. 483*e5436536SAndroid Build Coastguard Worker * 484*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of transportDec. 485*e5436536SAndroid Build Coastguard Worker * \param pBuffer Pointer to external input buffer. 486*e5436536SAndroid Build Coastguard Worker * \param bufferSize Size of external input buffer. This argument is required 487*e5436536SAndroid Build Coastguard Worker * because decoder-internally we need the information to calculate the offset to 488*e5436536SAndroid Build Coastguard Worker * pBuffer, where the next available data is, which is then 489*e5436536SAndroid Build Coastguard Worker * fed into the decoder-internal buffer (as much as 490*e5436536SAndroid Build Coastguard Worker * possible). Our example framework implementation fills the 491*e5436536SAndroid Build Coastguard Worker * buffer at pBuffer again, once it contains no available valid bytes anymore 492*e5436536SAndroid Build Coastguard Worker * (meaning bytesValid equal 0). 493*e5436536SAndroid Build Coastguard Worker * \param bytesValid Number of bitstream bytes in the external bitstream buffer 494*e5436536SAndroid Build Coastguard Worker * that have not yet been copied into the decoder's internal bitstream buffer by 495*e5436536SAndroid Build Coastguard Worker * calling this function. The value is updated according to 496*e5436536SAndroid Build Coastguard Worker * the amount of newly copied bytes. 497*e5436536SAndroid Build Coastguard Worker * \param layer The layer the bitstream belongs to. 498*e5436536SAndroid Build Coastguard Worker * \return Error code. 499*e5436536SAndroid Build Coastguard Worker */ 500*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_FillData(const HANDLE_TRANSPORTDEC hTp, 501*e5436536SAndroid Build Coastguard Worker UCHAR *pBuffer, const UINT bufferSize, 502*e5436536SAndroid Build Coastguard Worker UINT *pBytesValid, const INT layer); 503*e5436536SAndroid Build Coastguard Worker 504*e5436536SAndroid Build Coastguard Worker /** 505*e5436536SAndroid Build Coastguard Worker * \brief Get transportDec bitstream handle. 506*e5436536SAndroid Build Coastguard Worker * \param hTp Pointer to a transport decoder handle. 507*e5436536SAndroid Build Coastguard Worker * \return HANDLE_FDK_BITSTREAM bitstream handle. 508*e5436536SAndroid Build Coastguard Worker */ 509*e5436536SAndroid Build Coastguard Worker HANDLE_FDK_BITSTREAM transportDec_GetBitstream(const HANDLE_TRANSPORTDEC hTp, 510*e5436536SAndroid Build Coastguard Worker const UINT layer); 511*e5436536SAndroid Build Coastguard Worker 512*e5436536SAndroid Build Coastguard Worker /** 513*e5436536SAndroid Build Coastguard Worker * \brief Get transport format. 514*e5436536SAndroid Build Coastguard Worker * \param hTp Pointer to a transport decoder handle. 515*e5436536SAndroid Build Coastguard Worker * \return The transport format. 516*e5436536SAndroid Build Coastguard Worker */ 517*e5436536SAndroid Build Coastguard Worker TRANSPORT_TYPE transportDec_GetFormat(const HANDLE_TRANSPORTDEC hTp); 518*e5436536SAndroid Build Coastguard Worker 519*e5436536SAndroid Build Coastguard Worker /** 520*e5436536SAndroid Build Coastguard Worker * \brief Get the current buffer fullness value. 521*e5436536SAndroid Build Coastguard Worker * 522*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of a transport decoder. 523*e5436536SAndroid Build Coastguard Worker * 524*e5436536SAndroid Build Coastguard Worker * \return Buffer fullness 525*e5436536SAndroid Build Coastguard Worker */ 526*e5436536SAndroid Build Coastguard Worker INT transportDec_GetBufferFullness(const HANDLE_TRANSPORTDEC hTp); 527*e5436536SAndroid Build Coastguard Worker 528*e5436536SAndroid Build Coastguard Worker /** 529*e5436536SAndroid Build Coastguard Worker * \brief Close and deallocate transportDec. 530*e5436536SAndroid Build Coastguard Worker * \param phTp Pointer to a previously allocated transport decoder handle. 531*e5436536SAndroid Build Coastguard Worker * \return void 532*e5436536SAndroid Build Coastguard Worker */ 533*e5436536SAndroid Build Coastguard Worker void transportDec_Close(HANDLE_TRANSPORTDEC *phTp); 534*e5436536SAndroid Build Coastguard Worker 535*e5436536SAndroid Build Coastguard Worker /** 536*e5436536SAndroid Build Coastguard Worker * \brief Read one access unit from the transportDec medium. 537*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of transportDec. 538*e5436536SAndroid Build Coastguard Worker * \param length On return, this value is overwritten with the actual access 539*e5436536SAndroid Build Coastguard Worker * unit length in bits. Set to -1 if length is unknown. 540*e5436536SAndroid Build Coastguard Worker * \return Error code. 541*e5436536SAndroid Build Coastguard Worker */ 542*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_ReadAccessUnit(const HANDLE_TRANSPORTDEC hTp, 543*e5436536SAndroid Build Coastguard Worker const UINT layer); 544*e5436536SAndroid Build Coastguard Worker 545*e5436536SAndroid Build Coastguard Worker /** 546*e5436536SAndroid Build Coastguard Worker * \brief Get AudioSpecificConfig. 547*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of transportDec. 548*e5436536SAndroid Build Coastguard Worker * \param layer Transport layer. 549*e5436536SAndroid Build Coastguard Worker * \param asc Pointer to AudioSpecificConfig. 550*e5436536SAndroid Build Coastguard Worker * \return Error code. 551*e5436536SAndroid Build Coastguard Worker */ 552*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_GetAsc(const HANDLE_TRANSPORTDEC hTp, 553*e5436536SAndroid Build Coastguard Worker const UINT layer, 554*e5436536SAndroid Build Coastguard Worker CSAudioSpecificConfig *asc); 555*e5436536SAndroid Build Coastguard Worker 556*e5436536SAndroid Build Coastguard Worker /** 557*e5436536SAndroid Build Coastguard Worker * \brief Get the remaining amount of bits of the current access unit. The 558*e5436536SAndroid Build Coastguard Worker * result can be below zero, meaning that too many bits have been read. 559*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of transportDec. 560*e5436536SAndroid Build Coastguard Worker * \return amount of remaining bits. 561*e5436536SAndroid Build Coastguard Worker */ 562*e5436536SAndroid Build Coastguard Worker INT transportDec_GetAuBitsRemaining(const HANDLE_TRANSPORTDEC hTp, 563*e5436536SAndroid Build Coastguard Worker const UINT layer); 564*e5436536SAndroid Build Coastguard Worker 565*e5436536SAndroid Build Coastguard Worker /** 566*e5436536SAndroid Build Coastguard Worker * \brief Get the total amount of bits of the current access unit. 567*e5436536SAndroid Build Coastguard Worker * \param hTp Handle of transportDec. 568*e5436536SAndroid Build Coastguard Worker * \return amount of total bits. 569*e5436536SAndroid Build Coastguard Worker */ 570*e5436536SAndroid Build Coastguard Worker INT transportDec_GetAuBitsTotal(const HANDLE_TRANSPORTDEC hTp, 571*e5436536SAndroid Build Coastguard Worker const UINT layer); 572*e5436536SAndroid Build Coastguard Worker 573*e5436536SAndroid Build Coastguard Worker /** 574*e5436536SAndroid Build Coastguard Worker * \brief This function is required to be called when the decoder has 575*e5436536SAndroid Build Coastguard Worker * finished parsing one Access Unit for bitstream housekeeping. 576*e5436536SAndroid Build Coastguard Worker * \param hTp Transport Handle. 577*e5436536SAndroid Build Coastguard Worker * \return Error code. 578*e5436536SAndroid Build Coastguard Worker */ 579*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_EndAccessUnit(const HANDLE_TRANSPORTDEC hTp); 580*e5436536SAndroid Build Coastguard Worker 581*e5436536SAndroid Build Coastguard Worker /** 582*e5436536SAndroid Build Coastguard Worker * \brief Obtain the amount of missing access units if applicable in case 583*e5436536SAndroid Build Coastguard Worker * of a bit stream synchronization error. Each time 584*e5436536SAndroid Build Coastguard Worker * transportDec_ReadAccessUnit() returns TRANSPORTDEC_SYNC_ERROR 585*e5436536SAndroid Build Coastguard Worker * this function can be called to retrieve an estimate of the amount 586*e5436536SAndroid Build Coastguard Worker * of missing access units. This works only in case of constant 587*e5436536SAndroid Build Coastguard Worker * average bit rate (has to be known) and if the parameter 588*e5436536SAndroid Build Coastguard Worker * TPDEC_PARAM_SET_BITRATE has been set accordingly. 589*e5436536SAndroid Build Coastguard Worker * \param hTp Transport Handle. 590*e5436536SAndroid Build Coastguard Worker * \param pNAccessUnits pointer to a memory location where the estimated lost 591*e5436536SAndroid Build Coastguard Worker * frame count will be stored into. 592*e5436536SAndroid Build Coastguard Worker * \return Error code. 593*e5436536SAndroid Build Coastguard Worker */ 594*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_GetMissingAccessUnitCount( 595*e5436536SAndroid Build Coastguard Worker INT *pNAccessUnits, HANDLE_TRANSPORTDEC hTp); 596*e5436536SAndroid Build Coastguard Worker 597*e5436536SAndroid Build Coastguard Worker /** 598*e5436536SAndroid Build Coastguard Worker * \brief Set a given setting. 599*e5436536SAndroid Build Coastguard Worker * \param hTp Transport Handle. 600*e5436536SAndroid Build Coastguard Worker * \param param Identifier of the parameter to be changed. 601*e5436536SAndroid Build Coastguard Worker * \param value Value for the parameter to be changed. 602*e5436536SAndroid Build Coastguard Worker * \return Error code. 603*e5436536SAndroid Build Coastguard Worker */ 604*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_SetParam(const HANDLE_TRANSPORTDEC hTp, 605*e5436536SAndroid Build Coastguard Worker const TPDEC_PARAM param, 606*e5436536SAndroid Build Coastguard Worker const INT value); 607*e5436536SAndroid Build Coastguard Worker 608*e5436536SAndroid Build Coastguard Worker /** 609*e5436536SAndroid Build Coastguard Worker * \brief Get number of subframes (for LATM or ADTS) 610*e5436536SAndroid Build Coastguard Worker * \param hTp Transport Handle. 611*e5436536SAndroid Build Coastguard Worker * \return Number of ADTS/LATM subframes (return 1 for all other transport 612*e5436536SAndroid Build Coastguard Worker * types). 613*e5436536SAndroid Build Coastguard Worker */ 614*e5436536SAndroid Build Coastguard Worker UINT transportDec_GetNrOfSubFrames(HANDLE_TRANSPORTDEC hTp); 615*e5436536SAndroid Build Coastguard Worker 616*e5436536SAndroid Build Coastguard Worker /** 617*e5436536SAndroid Build Coastguard Worker * \brief Get info structure of transport decoder library. 618*e5436536SAndroid Build Coastguard Worker * \param info A pointer to an allocated LIB_INFO struct. 619*e5436536SAndroid Build Coastguard Worker * \return Error code. 620*e5436536SAndroid Build Coastguard Worker */ 621*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_GetLibInfo(LIB_INFO *info); 622*e5436536SAndroid Build Coastguard Worker 623*e5436536SAndroid Build Coastguard Worker /* ADTS CRC support */ 624*e5436536SAndroid Build Coastguard Worker 625*e5436536SAndroid Build Coastguard Worker /** 626*e5436536SAndroid Build Coastguard Worker * \brief Set current bitstream position as start of a new data region. 627*e5436536SAndroid Build Coastguard Worker * \param hTp Transport handle. 628*e5436536SAndroid Build Coastguard Worker * \param mBits Size in bits of the data region. Set to 0 if it should not be 629*e5436536SAndroid Build Coastguard Worker * of a fixed size. 630*e5436536SAndroid Build Coastguard Worker * \return Data region ID, which should be used when calling 631*e5436536SAndroid Build Coastguard Worker * transportDec_CrcEndReg(). 632*e5436536SAndroid Build Coastguard Worker */ 633*e5436536SAndroid Build Coastguard Worker int transportDec_CrcStartReg(const HANDLE_TRANSPORTDEC hTp, const INT mBits); 634*e5436536SAndroid Build Coastguard Worker 635*e5436536SAndroid Build Coastguard Worker /** 636*e5436536SAndroid Build Coastguard Worker * \brief Set end of data region. 637*e5436536SAndroid Build Coastguard Worker * \param hTp Transport handle. 638*e5436536SAndroid Build Coastguard Worker * \param reg Data region ID, opbtained from transportDec_CrcStartReg(). 639*e5436536SAndroid Build Coastguard Worker * \return void 640*e5436536SAndroid Build Coastguard Worker */ 641*e5436536SAndroid Build Coastguard Worker void transportDec_CrcEndReg(const HANDLE_TRANSPORTDEC hTp, const INT reg); 642*e5436536SAndroid Build Coastguard Worker 643*e5436536SAndroid Build Coastguard Worker /** 644*e5436536SAndroid Build Coastguard Worker * \brief Calculate ADTS crc and check if it is correct. The ADTS checksum 645*e5436536SAndroid Build Coastguard Worker * is held internally. 646*e5436536SAndroid Build Coastguard Worker * \param hTp Transport handle. 647*e5436536SAndroid Build Coastguard Worker * \return Return TRANSPORTDEC_OK if the CRC is ok, or error if CRC is not 648*e5436536SAndroid Build Coastguard Worker * correct. 649*e5436536SAndroid Build Coastguard Worker */ 650*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_CrcCheck(const HANDLE_TRANSPORTDEC hTp); 651*e5436536SAndroid Build Coastguard Worker 652*e5436536SAndroid Build Coastguard Worker /** 653*e5436536SAndroid Build Coastguard Worker * \brief Only check whether a given config seems to be valid without modifying 654*e5436536SAndroid Build Coastguard Worker * internal states. 655*e5436536SAndroid Build Coastguard Worker * 656*e5436536SAndroid Build Coastguard Worker * \param conf UCHAR buffer of the binary coded config (SDC type 9). 657*e5436536SAndroid Build Coastguard Worker * \param length The length in bytes of the conf buffer. 658*e5436536SAndroid Build Coastguard Worker * 659*e5436536SAndroid Build Coastguard Worker * \return Error code. 660*e5436536SAndroid Build Coastguard Worker */ 661*e5436536SAndroid Build Coastguard Worker TRANSPORTDEC_ERROR transportDec_DrmRawSdcAudioConfig_Check(UCHAR *conf, 662*e5436536SAndroid Build Coastguard Worker const UINT length); 663*e5436536SAndroid Build Coastguard Worker 664*e5436536SAndroid Build Coastguard Worker #endif /* #ifndef TPDEC_LIB_H */ 665