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