12228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 22228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* ----------------------------------------------------------------------------------------------------------- 32228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSoftware License for The Fraunhofer FDK AAC Codec Library for Android 42228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 54f0d97057c5c640b25518358886f8c47da9fc052Jean-Michel Trivi� Copyright 1995 - 2013 Fraunhofer-Gesellschaft zur F�rderung der angewandten Forschung e.V. 62228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project All rights reserved. 72228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 82228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1. INTRODUCTION 92228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements 102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthe MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. 112228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThis FDK AAC Codec software is intended to be used on a wide variety of Android devices. 122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 132228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual 142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectaudio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by 152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectindependent studies and is widely deployed. AAC has been standardized by ISO and IEC as part 162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectof the MPEG specifications. 172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 182228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectPatent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) 192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectmay be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners 202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectindividually for the purpose of encoding or decoding bit streams in products that are compliant with 212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthe ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license 222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthese patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec 232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectsoftware may already be covered under those patent licenses when it is used for those licensed purposes only. 242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 252228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectCommercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, 262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectare also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional 272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectapplications information and documentation. 282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project2. COPYRIGHT LICENSE 302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 312228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectRedistribution and use in source and binary forms, with or without modification, are permitted without 322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectpayment of copyright license fees provided that you satisfy the following conditions: 332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 342228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou must retain the complete text of this software license in redistributions of the FDK AAC Codec or 352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectyour modifications thereto in source code form. 362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 372228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou must retain the complete text of this software license in the documentation and/or other materials 382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectprovided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. 392228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou must make available free of charge copies of the complete source code of the FDK AAC Codec and your 402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectmodifications thereto to recipients of copies in binary form. 412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 422228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe name of Fraunhofer may not be used to endorse or promote products derived from this library without 432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectprior written permission. 442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 452228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec 462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectsoftware or your modifications thereto. 472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 482228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYour modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software 492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectand the date of any change. For modified versions of the FDK AAC Codec, the term 502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term 512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." 522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project3. NO PATENT LICENSE 542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 552228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectNO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, 562228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with 572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectrespect to this software. 582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 592228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized 602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectby appropriate patent licenses. 612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project4. DISCLAIMER 632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 642228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThis FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors 652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties 662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectof merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 672228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectCONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, 682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectincluding but not limited to procurement of substitute goods or services; loss of use, data, or profits, 692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projector business interruption, however caused and on any theory of liability, whether in contract, strict 702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectliability, or tort (including negligence), arising in any way out of the use of this software, even if 712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectadvised of the possibility of such damage. 722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project5. CONTACT INFORMATION 742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 752228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFraunhofer Institute for Integrated Circuits IIS 762228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAttention: Audio and Multimedia Departments - FDK AAC LL 772228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAm Wolfsmantel 33 782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project91058 Erlangen, Germany 792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwww.iis.fraunhofer.de/amm 812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectamm-info@iis.fraunhofer.de 822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project----------------------------------------------------------------------------------------------------------- */ 832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/************************** MPEG-4 Transport Decoder *********************** 852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Author(s): Manuel Jander 872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description: MPEG Transport decoder 882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project******************************************************************************/ 902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#ifndef __TPDEC_LIB_H__ 922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define __TPDEC_LIB_H__ 932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "tp_data.h" 952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "FDK_bitstream.h" 972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define TRANSPORTDEC_INBUF_SIZE ( 8192 ) /*!< Size is in bytes. 992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Set the transport input buffer size carefully and 1002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project assure that it fulfills the requirements of the 1012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project supported transport format(s). */ 1022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef enum { 1042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TRANSPORTDEC_OK = 0, /*!< All fine. */ 1052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Synchronization errors. Wait for new input data and try again. */ 1072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tpdec_sync_error_start = 0x100, 1082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TRANSPORTDEC_NOT_ENOUGH_BITS, /*!< Out of bits. Provide more bits and try again. */ 1092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TRANSPORTDEC_SYNC_ERROR, /*!< No sync was found or sync got lost. Keep trying. */ 1102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tpdec_sync_error_end, 1112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Decode errors. Mostly caused due to bit errors. */ 1132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tpdec_decode_error_start = 0x400, 1142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TRANSPORTDEC_PARSE_ERROR, /*!< Bitstream data showed inconsistencies (wrong syntax). */ 1152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TRANSPORTDEC_UNSUPPORTED_FORMAT, /*!< Unsupported format or feature found in the bitstream data. */ 1162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TRANSPORTDEC_CRC_ERROR, /*!< CRC error encountered in bitstream data. */ 1172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tpdec_decode_error_end, 1182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* Fatal errors. Stop immediately on one of these errors! */ 1202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tpdec_fatal_error_start = 0x200, 1212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TRANSPORTDEC_UNKOWN_ERROR, /*!< An unknown error occured. */ 1222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TRANSPORTDEC_INVALID_PARAMETER, /*!< An invalid parameter was passed to a function. */ 1232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TRANSPORTDEC_NEED_TO_RESTART, /*!< The decoder needs to be restarted, since the requiered 1242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project configuration change cannot be performed. */ 1252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project tpdec_fatal_error_end 1262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} TRANSPORTDEC_ERROR; 1282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** Macro to identify decode errors. */ 1312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define TPDEC_IS_DECODE_ERROR(err) ( ((err>=tpdec_decode_error_start) && (err<=tpdec_decode_error_end)) ? 1 : 0) 1322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** Macro to identify fatal errors. */ 1332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define TPDEC_IS_FATAL_ERROR(err) ( ((err>=tpdec_fatal_error_start) && (err<=tpdec_fatal_error_end)) ? 1 : 0) 1342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 1372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Parameter identifiers for transportDec_SetParam() 1382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef enum { 1402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TPDEC_PARAM_MINIMIZE_DELAY = 1, /** Delay minimization strategy. 0: none, 1: discard as many frames as possible. */ 1412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TPDEC_PARAM_EARLY_CONFIG, /** Enable early config discovery. */ 1422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TPDEC_PARAM_IGNORE_BUFFERFULLNESS, /** Ignore buffer fullness. */ 1432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TPDEC_PARAM_SET_BITRATE, /** Set average bit rate for bit stream interruption frame misses estimation. */ 1442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TPDEC_PARAM_RESET, /** Reset transport decoder instance status. */ 1452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project TPDEC_PARAM_BURST_PERIOD /** Set data reception burst period in mili seconds. */ 1462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} TPDEC_PARAM; 1472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* ISO/IEC 14496-3 4.4.1.1 Table 4.2 Program config element */ 1492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define PC_FSB_CHANNELS_MAX 16 /* Front/Side/Back channels */ 1502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define PC_LFE_CHANNELS_MAX 4 1512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define PC_ASSOCDATA_MAX 8 1522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define PC_CCEL_MAX 16 /* CC elements */ 1532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define PC_COMMENTLENGTH 256 15447c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi#define PC_NUM_HEIGHT_LAYER 3 1552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 1582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief Reset Program Config Element. 1592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \param pPce Program Config Element structure. 1602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return void 1612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*/ 1622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid CProgramConfig_Reset ( CProgramConfig *pPce ); 1632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 1652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief Initialize Program Config Element. 1662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \param pPce Program Config Element structure. 1672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return void 1682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*/ 1692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid CProgramConfig_Init ( CProgramConfig *pPce ); 1702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 1722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief Inquire state of present Program Config Element structure. 1732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \param pPce Program Config Element structure. 1742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return 1 if the PCE structure is filled correct, 1752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 0 if no valid PCE present. 1762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*/ 1772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectint CProgramConfig_IsValid ( const CProgramConfig *pPce ); 1782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#ifdef TP_PCE_ENABLE 1802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/*! 1812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \brief Read Program Config Element. 1822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \param pPce Program Config Element structure. 1832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \param bs Bitstream buffer to read from. 1842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \param alignAnchor Align bitstream to alignAnchor bits after all read operations. 1852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project \return void 1862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*/ 1872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid CProgramConfig_Read ( CProgramConfig *pPce, 1882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HANDLE_FDK_BITSTREAM bs, 1892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project UINT alignAnchor ); 1905016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi 1915016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi/*! 1925016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi \brief Compare two Program Config Elements. 1935016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi \param pPce1 Pointer to first Program Config Element structure. 1945016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi \param pPce2 Pointer to second Program Config Element structure. 1955016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi \return -1 if PCEs are completely different, 1965016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi 0 if PCEs are completely equal, 1975016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi 1 if PCEs are different but have the same channel config, 1985016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi 2 if PCEs have different channel config but same number of channels. 1995016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi*/ 2005016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Triviint CProgramConfig_Compare ( const CProgramConfig * const pPce1, 2015016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi const CProgramConfig * const pPce2 ); 2025016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi 2035016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi/*! 2045016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi \brief Get a Program Config Element that matches the predefined MPEG-4 channel configurations 1-14. 2055016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi \param pPce Program Config Element structure. 2065016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi \param channelConfig MPEG-4 channel configuration. 2075016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi \return void 2085016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi*/ 2095016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivivoid CProgramConfig_GetDefault ( CProgramConfig *pPce, 2105016eb7f6582fbb2d72d79be782325a12df08864Jean-Michel Trivi const UINT channelConfig ); 2112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif /* TP_PCE_ENABLE */ 2122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 2142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Lookup and verify a given element. The decoder calls this 2152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * method with every new element ID found in the bitstream. 2162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param pPce A valid Program config structure. 2182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param tag Tag of the current element to be looked up. 2192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param channelIdx The current channel count of the decoder parser. 2202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param chMapping Array to store the canonical channel mapping indexes. 2212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param chType Array to store the audio channel type. 2222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param chIndex Array to store the individual audio channel type index. 2232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param elMapping Pointer where the canonical element index is stored. 2242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param elType The element id of the current element to be looked up. 2252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Non-zero if the element belongs to the current program, zero 2272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * if it does not. 2282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 2292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectint CProgramConfig_LookupElement( 2302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project CProgramConfig *pPce, 2312ddc922da87bb675b8ab8c305566436e806df0d9Jean-Michel Trivi UINT channelConfig, 2322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const UINT tag, 2332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const UINT channelIdx, 2342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project UCHAR chMapping[], 2352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project AUDIO_CHANNEL_TYPE chType[], 2362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project UCHAR chIndex[], 2372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project UCHAR *elMapping, 2382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project MP4_ELEMENT_ID elList[], 2392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project MP4_ELEMENT_ID elType 2402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ); 2412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 24347c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi * \brief Get table of elements in canonical order from a 24447c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi * give program config field. 24547c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi * \param pPce A valid program config structure. 24647c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi * \param table An array where the element IDs are stored. 24747c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi * \param elListSize The length of the table array. 24847c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi * \param pChMapIdx Pointer to a field receiving the corresponding 24947c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi * implicit channel configuration index of the given 25047c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi * PCE. If none can be found it receives the value 0. 25147c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi * \return Total element count including all SCE, CPE and LFE. 2522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 2532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectint CProgramConfig_GetElementTable( const CProgramConfig *pPce, 2542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project MP4_ELEMENT_ID table[], 25547c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi const INT elListSize, 25647c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi UCHAR *pChMapIdx ); 2572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 2592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Initialize a given AudioSpecificConfig structure. 2602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param pAsc A pointer to an allocated CSAudioSpecificConfig struct. 2612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return void 2622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 2632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid AudioSpecificConfig_Init(CSAudioSpecificConfig *pAsc); 2642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 2662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Parse a AudioSpecificConfig from a given bitstream handle. 2672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param pAsc A pointer to an allocated CSAudioSpecificConfig struct. 2692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hBs Bitstream handle. 2702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param fExplicitBackwardCompatible Do explicit backward compatibility parsing if set (flag). 2712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param cb pointer to structure holding callback information 2722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Total element count including all SCE, CPE and LFE. 2742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 2752228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectTRANSPORTDEC_ERROR AudioSpecificConfig_Parse( 2762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project CSAudioSpecificConfig *pAsc, 2772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HANDLE_FDK_BITSTREAM hBs, 2782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int fExplicitBackwardCompatible, 2792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project CSTpCallBacks *cb 2802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ); 2812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* CELP stuff */ 2832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectenum { 2842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project MPE = 0, 2852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project RPE = 1, 2862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project fs8KHz = 0, 2872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project fs16KHz = 1 2882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}; 2892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* Defintion of flags that can be passed to transportDecOpen() */ 2912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define TP_FLAG_MPEG4 1 2922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* Capability flags */ 2942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define CAPF_TPDEC_ADIF 0x00001000 /**< Flag indicating support for ADIF transport format. */ 2952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define CAPF_TPDEC_ADTS 0x00002000 /**< Flag indicating support for ADTS transport format. */ 2962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define CAPF_TPDEC_LOAS 0x00004000 /**< Flag indicating support for LOAS transport format. */ 2972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define CAPF_TPDEC_LATM 0x00008000 /**< Flag indicating support for LATM transport format. */ 2982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define CAPF_TPDEC_RAWPACKETS 0x00010000 /**< Flag indicating support for raw packets transport format. */ 2992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef struct TRANSPORTDEC *HANDLE_TRANSPORTDEC; 3012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 3042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Configure Transport Decoder via a binary coded AudioSpecificConfig or StreamMuxConfig. 3052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * The previously requested configuration callback will be called as well. The buffer conf 3062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * must containt a SMC in case of LOAS/LATM transport format, and an ASC elseways. 3072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 3082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Handle of a transport decoder. 3092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param conf UCHAR buffer of the binary coded config (ASC or SMC). 3102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param length The length in bytes of the conf buffer. 3112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 3122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 3132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3142228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectTRANSPORTDEC_ERROR transportDec_OutOfBandConfig( const HANDLE_TRANSPORTDEC hTp, 3152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project UCHAR *conf, 3162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const UINT length, 3172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const UINT layer ); 3182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 3202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Open Transport medium for reading. 3212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 3222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param transportDecFmt Format of the transport decoder medium to be accessed. 3232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param flags Transport decoder flags. Currently only TP_FLAG_MPEG4, which signals a 3242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * MPEG4 capable decoder (relevant for ADTS only). 3252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 3262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return A pointer to a valid and allocated HANDLE_TRANSPORTDEC or a null pointer on failure. 3272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3282228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectHANDLE_TRANSPORTDEC transportDec_Open( TRANSPORT_TYPE transportDecFmt, 3292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const UINT flags ); 3302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 3322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Register configuration change callback. 3332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Handle of transport decoder. 3342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param cbUpdateConfig Pointer to a callback function to handle audio config changes. 3352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param user_data void pointer for user data passed to the callback as first parameter. 3362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return 0 on success. 3372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectint transportDec_RegisterAscCallback ( 3392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HANDLE_TRANSPORTDEC hTp, 3402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const cbUpdateConfig_t cbUpdateConfig, 3412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project void* user_data ); 3422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 3442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Register SSC parser callback. 3452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Handle of transport decoder. 3462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param cbUpdateConfig Pointer to a callback function to handle SSC parsing. 3472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param user_data void pointer for user data passed to the callback as first parameter. 3482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return 0 on success. 3492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectint transportDec_RegisterSscCallback ( 3512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HANDLE_TRANSPORTDEC hTp, 3522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const cbSsc_t cbSscParse, 3532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project void* user_data ); 3542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 3562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Register SBR header parser callback. 3572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Handle of transport decoder. 3582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param cbUpdateConfig Pointer to a callback function to handle SBR header parsing. 3592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param user_data void pointer for user data passed to the callback as first parameter. 3602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return 0 on success. 3612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectint transportDec_RegisterSbrCallback( HANDLE_TRANSPORTDEC hTpDec, const cbSbr_t cbSbr, void* user_data); 3632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 3652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Fill internal input buffer with bitstream data from the external input buffer. 3662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * The function only copies such data as long as the decoder-internal input buffer is not full. 3672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * So it grabs whatever it can from pBuffer and returns information (bytesValid) so that at a 3682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * subsequent call of %transportDec_FillData(), the right position in pBuffer can be determined to 3692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * grab the next data. 3702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 3712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Handle of transportDec. 3722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param pBuffer Pointer to external input buffer. 3732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param bufferSize Size of external input buffer. This argument is required because decoder-internally 3742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * we need the information to calculate the offset to pBuffer, where the next 3752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * available data is, which is then fed into the decoder-internal buffer (as much 3762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * as possible). Our example framework implementation fills the buffer at pBuffer 3772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * again, once it contains no available valid bytes anymore (meaning bytesValid equal 0). 3782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param bytesValid Number of bitstream bytes in the external bitstream buffer that have not yet been 3792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * copied into the decoder's internal bitstream buffer by calling this function. 3802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * The value is updated according to the amount of newly copied bytes. 3812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param layer The layer the bitstream belongs to. 3822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 3832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3842228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectTRANSPORTDEC_ERROR transportDec_FillData( 3852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const HANDLE_TRANSPORTDEC hTp, 3862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project UCHAR *pBuffer, 3872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const UINT bufferSize, 3882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project UINT *pBytesValid, 3892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const INT layer ); 3902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 3922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Get transportDec bitstream handle. 3932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Pointer to a transport decoder handle. 3942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return HANDLE_FDK_BITSTREAM bitstream handle. 3952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3962228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectHANDLE_FDK_BITSTREAM transportDec_GetBitstream ( const HANDLE_TRANSPORTDEC hTp, const UINT layer ); 3972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 3992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Get transport format. 4002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Pointer to a transport decoder handle. 4012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return The transport format. 4022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 4032228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectTRANSPORT_TYPE transportDec_GetFormat ( const HANDLE_TRANSPORTDEC hTp ); 4042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 4062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Get the current buffer fullness value. 4072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 4082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Handle of a transport decoder. 4092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 4102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Buffer fullness 4112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 4122228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectINT transportDec_GetBufferFullness( const HANDLE_TRANSPORTDEC hTp ); 4132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 4152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Close and deallocate transportDec. 4162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param phTp Pointer to a previously allocated transport decoder handle. 4172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return void 4182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 4192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid transportDec_Close ( HANDLE_TRANSPORTDEC *phTp ); 4202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 4222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Read one access unit from the transportDec medium. 4232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Handle of transportDec. 4242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param length On return, this value is overwritten with the actual access unit length in bits. 4252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * Set to -1 if length is unknown. 4262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 4272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 4282228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectTRANSPORTDEC_ERROR transportDec_ReadAccessUnit ( const HANDLE_TRANSPORTDEC hTp, const UINT layer ); 4292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 4312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Get the remaining amount of bits of the current access unit. The result 4322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * can be below zero, meaning that too many bits have been read. 4332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Handle of transportDec. 4342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return amount of remaining bits. 4352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 4362228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectINT transportDec_GetAuBitsRemaining( const HANDLE_TRANSPORTDEC hTp, const UINT layer ); 4372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 4392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Get the total amount of bits of the current access unit. 4402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Handle of transportDec. 4412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return amount of total bits. 4422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 4432228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectINT transportDec_GetAuBitsTotal( const HANDLE_TRANSPORTDEC hTp, const UINT layer ); 4442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 4462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief This function is required to be called when the decoder has finished parsing 4472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * one Access Unit for bitstream housekeeping. 4482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Transport Handle. 4492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 4502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 4512228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectTRANSPORTDEC_ERROR transportDec_EndAccessUnit ( const HANDLE_TRANSPORTDEC hTp ); 4522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 4542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Obtain the amount of missing access units if applicable in case of 4552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * a bit stream synchronization error. Each time transportDec_ReadAccessUnit() 4562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * returns TRANSPORTDEC_SYNC_ERROR this function can be called to retrieve an estimate 4572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * of the amount of missing access units. This works only in case of constant average 4582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * bit rate (has to be known) and if the parameter TPDEC_PARAM_SET_BITRATE has been set 4592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * accordingly. 4602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Transport Handle. 4612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param pNAccessUnits pointer to a memory location where the estimated lost frame count will be stored into. 4622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 4632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 4642228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectTRANSPORTDEC_ERROR transportDec_GetMissingAccessUnitCount ( INT *pNAccessUnits, HANDLE_TRANSPORTDEC hTp ); 4652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 4682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Set a given setting. 4692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Transport Handle. 4702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param param Identifier of the parameter to be changed. 4712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param value Value for the parameter to be changed. 4722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 4732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 4742228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectTRANSPORTDEC_ERROR transportDec_SetParam ( const HANDLE_TRANSPORTDEC hTp, 4752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const TPDEC_PARAM param, 4762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const INT value ); 4772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 4792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Get number of subframes (for LATM or ADTS) 4802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Transport Handle. 4812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Number of ADTS/LATM subframes (return 1 for all other transport types). 4822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 4832228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectUINT transportDec_GetNrOfSubFrames(HANDLE_TRANSPORTDEC hTp); 4842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 4872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Get info structure of transport decoder library. 4882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param info A pointer to an allocated LIB_INFO struct. 4892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 4902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 4912228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectTRANSPORTDEC_ERROR transportDec_GetLibInfo( LIB_INFO *info ); 4922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* ADTS CRC support */ 4942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 4962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Set current bitstream position as start of a new data region. 4972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Transport handle. 4982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param mBits Size in bits of the data region. Set to 0 if it should not be of a fixed size. 4992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Data region ID, which should be used when calling transportDec_CrcEndReg(). 5002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 5012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectint transportDec_CrcStartReg ( const HANDLE_TRANSPORTDEC hTp, 5022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const INT mBits ); 5032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 5052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Set end of data region. 5062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Transport handle. 5072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param reg Data region ID, opbtained from transportDec_CrcStartReg(). 5082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return void 5092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 5102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid transportDec_CrcEndReg ( const HANDLE_TRANSPORTDEC hTp, 5112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const INT reg ); 5122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 5142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Calculate ADTS crc and check if it is correct. The ADTS checksum is held internally. 5152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hTp Transport handle. 5162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Return TRANSPORTDEC_OK if the CRC is ok, or error if CRC is not correct. 5172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 5182228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectTRANSPORTDEC_ERROR transportDec_CrcCheck ( const HANDLE_TRANSPORTDEC hTp ); 5192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif /* #ifndef __TPDEC_LIB_H__ */ 522