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 5203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi� Copyright 1995 - 2015 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/************************ Fraunhofer IIS SBR decoder library ****************** 852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Author(s): 872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Description: SBR decoder front-end prototypes and definitions. 882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project******************************************************************************/ 902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#ifndef __SBRDECODER_H 922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define __SBRDECODER_H 932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "common_fix.h" 952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "FDK_bitstream.h" 972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "FDK_audio.h" 982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define SBR_DEBUG_EXTHLP "\ 1012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project--- SBR ---\n\ 1022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 0x00000010 Ancillary data and SBR-Header\n\ 1032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 0x00000020 SBR-Side info\n\ 1042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 0x00000040 Decoded SBR-bitstream data, e.g. envelope data\n\ 1052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 0x00000080 SBR-Bitstream statistics\n\ 1062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 0x00000100 Miscellaneous SBR-messages\n\ 1072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 0x00000200 SBR-Energies and gains in the adjustor\n\ 1082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 0x00000400 Fatal SBR errors\n\ 1092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 0x00000800 Transposer coefficients for inverse filtering\n\ 1102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project" 1112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* Capability flags */ 1132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define CAPF_SBR_LP 0x00000001 /*!< Flag indicating library's capability of Low Power mode. */ 1142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define CAPF_SBR_HQ 0x00000002 /*!< Flag indicating library's capability of High Quality mode. */ 1152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define CAPF_SBR_DRM_BS 0x00000004 /*!< Flag indicating library's capability to decode DRM SBR data. */ 1162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define CAPF_SBR_CONCEALMENT 0x00000008 /*!< Flag indicating library's capability to conceal erroneous frames. */ 1172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define CAPF_SBR_DRC 0x00000010 /*!< Flag indicating library's capability for Dynamic Range Control. */ 1182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define CAPF_SBR_PS_MPEG 0x00000020 /*!< Flag indicating library's capability to do MPEG Parametric Stereo. */ 1192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define CAPF_SBR_PS_DRM 0x00000040 /*!< Flag indicating library's capability to do DRM Parametric Stereo. */ 1202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef enum 1222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 1232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBRDEC_OK = 0, /*!< All fine. */ 1242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* SBRDEC_CONCEAL, */ 1252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* SBRDEC_NOSYNCH, */ 1262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* SBRDEC_ILLEGAL_PROGRAM, */ 1272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* SBRDEC_ILLEGAL_TAG, */ 1282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* SBRDEC_ILLEGAL_CHN_CONFIG, */ 1292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* SBRDEC_ILLEGAL_SECTION, */ 1302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* SBRDEC_ILLEGAL_SCFACTORS, */ 1312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* SBRDEC_ILLEGAL_PULSE_DATA, */ 1322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* SBRDEC_MAIN_PROFILE_NOT_IMPLEMENTED, */ 1332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* SBRDEC_GC_NOT_IMPLEMENTED, */ 1342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project /* SBRDEC_ILLEGAL_PLUS_ELE_ID, */ 1352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBRDEC_CREATE_ERROR, /*!< */ 1362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBRDEC_NOT_INITIALIZED, /*!< */ 1372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBRDEC_MEM_ALLOC_FAILED, /*!< Memory allocation failed. Probably not enough memory available. */ 1382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBRDEC_PARSE_ERROR, /*!< */ 1392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBRDEC_UNSUPPORTED_CONFIG, /*!< */ 1402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBRDEC_SET_PARAM_FAIL /*!< */ 1412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} SBR_ERROR; 1422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef enum 1442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 1452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBR_SYSTEM_BITSTREAM_DELAY, /*!< System: Switch to enable an additional SBR bitstream delay of one frame. */ 1462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBR_QMF_MODE, /*!< Set QMF mode, either complex or low power. */ 1472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBR_LD_QMF_TIME_ALIGN, /*!< Set QMF type, either LD-MPS or CLDFB. Relevant for ELD streams only. */ 148af967fcc55656a0d3c2a05982713f1ca43c1252bJean-Michel Trivi SBR_FLUSH_DATA, /*!< Set internal state to flush the decoder with the next process call. */ 149af967fcc55656a0d3c2a05982713f1ca43c1252bJean-Michel Trivi SBR_CLEAR_HISTORY, /*!< Clear all internal states (delay lines, QMF states, ...). */ 1502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SBR_BS_INTERRUPTION /*!< Signal bit stream interruption. Value is ignored. */ 1512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} SBRDEC_PARAM; 1522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef struct SBR_DECODER_INSTANCE *HANDLE_SBRDECODER; 1542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#ifdef __cplusplus 1572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectextern "C" 1582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{ 1592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 1602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 1632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Allocates and initializes one SBR decoder instance. 1642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param pSelf Pointer to where a SBR decoder handle is copied into. 1652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 1662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1672228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSBR_ERROR sbrDecoder_Open ( HANDLE_SBRDECODER *pSelf ); 1682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 1702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Initialize a SBR decoder runtime instance. Must be called before decoding starts. 1712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 1722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param self Handle to a SBR decoder instance. 1732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param sampleRateIn Input samplerate of the SBR decoder instance. 1742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param sampleRateOut Output samplerate of the SBR decoder instance. 1752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param samplesPerFrame Number of samples per frames. 1762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param coreCodec Audio Object Type (AOT) of the core codec. 1772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param elementID Table with MPEG-4 element Ids in canonical order. 1782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param forceReset Flag that enforces a complete decoder reset. 1792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 1802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 1812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 1822228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSBR_ERROR sbrDecoder_InitElement ( 1832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HANDLE_SBRDECODER self, 1842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const int sampleRateIn, 1852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const int sampleRateOut, 1862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const int samplesPerFrame, 1872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const AUDIO_OBJECT_TYPE coreCodec, 1882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const MP4_ELEMENT_ID elementID, 1892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const int elementIndex 1902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ); 1912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 1932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief pass out of band SBR header to SBR decoder 1942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 1952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param self Handle to a SBR decoder instance. 1962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hBs bit stream handle data source. 1972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param elementID SBR element ID. 1982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param elementIndex SBR element index. 1992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 2012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 2022228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectINT sbrDecoder_Header ( 2032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HANDLE_SBRDECODER self, 2042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HANDLE_FDK_BITSTREAM hBs, 2052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const INT sampleRateIn, 2062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const INT sampleRateOut, 2072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const INT samplesPerFrame, 2082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const AUDIO_OBJECT_TYPE coreCodec, 2092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const MP4_ELEMENT_ID elementID, 2102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const INT elementIndex 2112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ); 2122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 2142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Set a parameter of the SBR decoder runtime instance. 2152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param self SBR decoder handle. 2162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param param Parameter which will be set if successfull. 2172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param value New parameter value. 2182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 2192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 2202228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSBR_ERROR sbrDecoder_SetParam ( HANDLE_SBRDECODER self, 2212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const SBRDEC_PARAM param, 2222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const INT value ); 2232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 2252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Feed DRC channel data into a SBR decoder runtime instance. 2262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param self SBR decoder handle. 2282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param ch Channel number to which the DRC data is associated to. 2292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param numBands Number of DRC bands. 2302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param pNextFact_mag Pointer to a table with the DRC factor magnitudes. 2312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param nextFact_exp Exponent for all DRC factors. 2322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param drcInterpolationScheme DRC interpolation scheme. 2332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param winSequence Window sequence from core coder (eight short or one long window). 2342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param pBandTop Pointer to a table with the top borders for all DRC bands. 2352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 2372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 2382228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSBR_ERROR sbrDecoder_drcFeedChannel ( HANDLE_SBRDECODER self, 2392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT ch, 2402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project UINT numBands, 2412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project FIXP_DBL *pNextFact_mag, 2422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT nextFact_exp, 2432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project SHORT drcInterpolationScheme, 2442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project UCHAR winSequence, 2452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project USHORT *pBandTop ); 2462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 2482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Disable SBR DRC for a certain channel. 2492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hSbrDecoder SBR decoder handle. 2512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param ch Number of the channel that has to be disabled. 2522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return None. 2542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 2552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectvoid sbrDecoder_drcDisable ( HANDLE_SBRDECODER self, 2562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT ch ); 2572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 2602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Parse one SBR element data extension data block. The bit stream position will 2612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * be placed at the end of the SBR payload block. The remaining bits will be returned 2622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * into *count if a payload length is given (byPayLen > 0). If no SBR payload length is 2632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * given (bsPayLen < 0) then the bit stream position on return will be random after this 2642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * function call in case of errors, and any further decoding will be completely pointless. 265203e3f28fbebec7011342017fafc2a0bda0ce530Jean-Michel Trivi * This function accepts either normal ordered SBR data or reverse ordered DRM SBR data. 2662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param self SBR decoder handle. 2682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hBs Bit stream handle as data source. 2692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param count Pointer to an integer where the amount of parsed SBR payload bits is stored into. 2702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param bsPayLen If > 0 this value is the SBR payload length. If < 0, the SBR payload length is unknown. 2712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param flags CRC flag (0: EXT_SBR_DATA; 1: EXT_SBR_DATA_CRC) 2722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param prev_element Previous MPEG-4 element ID. 2732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param element_index Index of the current element. 2742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 2762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 2772228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSBR_ERROR sbrDecoder_Parse ( 2782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HANDLE_SBRDECODER self, 2792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project HANDLE_FDK_BITSTREAM hBs, 2802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int *count, 2812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int bsPayLen, 2822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int crcFlag, 2832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project MP4_ELEMENT_ID prev_element, 2842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int element_index, 2852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int fGlobalIndependencyFlag 2862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project ); 2872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 2892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief This function decodes the given SBR bitstreams and applies SBR to the given time data. 2902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * SBR-processing works InPlace. I.e. the calling function has to provide 2922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * a time domain buffer timeData which can hold the completely decoded 2932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * result. 2942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * Left and right channel are read and stored according to the 2962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * interleaving flag, frame length and number of channels. 2972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 2982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param self Handle of an open SBR decoder instance. 2992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hSbrBs SBR Bitstream handle. 3002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param timeData Pointer to input and finally upsampled output data. 3012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param numChannels Pointer to a buffer holding the number of channels in time data buffer. 3022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param sampleRate Output samplerate. 3032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param channelMapping Channel mapping indices. 3042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param interleaved Flag indicating if time data is stored interleaved (1: Interleaved time data, 0: non-interleaved timedata). 3052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param coreDecodedOk Flag indicating if the core decoder did not find any error (0: core decoder found errors, 1: no errors). 3062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param psDecoded Pointer to a buffer holding a flag. Input: PS is possible, Output: PS has been rendered. 3072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 3082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error code. 3092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3102228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSBR_ERROR sbrDecoder_Apply ( HANDLE_SBRDECODER self, 3112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project INT_PCM *timeData, 3122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int *numChannels, 3132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project int *sampleRate, 31447c680c62246594107da0a8995c953dfb8040bceJean-Michel Trivi const UCHAR channelMapping[(8)], 3152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const int interleaved, 3162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const int coreDecodedOk, 3172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project UCHAR *psDecoded ); 3182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 3212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Close SBR decoder instance and free memory. 3222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param self SBR decoder handle. 3232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return Error Code. 3242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3252228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSBR_ERROR sbrDecoder_Close ( HANDLE_SBRDECODER *self ); 3262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/** 3292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Get SBR decoder library information. 3302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param info Pointer to a LIB_INFO struct, where library information is written to. 3312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return 0 on success, -1 if invalid handle or if no free element is available to write information to. 3322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 3332228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectINT sbrDecoder_GetLibInfo( LIB_INFO *info ); 3342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3356792cf6361ff339e336287affb0bfe54bf6957a9Jean-Michel Trivi/** 3366792cf6361ff339e336287affb0bfe54bf6957a9Jean-Michel Trivi * \brief Determine the modules output signal delay in samples. 3376792cf6361ff339e336287affb0bfe54bf6957a9Jean-Michel Trivi * \param self SBR decoder handle. 3386792cf6361ff339e336287affb0bfe54bf6957a9Jean-Michel Trivi * \return The number of samples signal delay added by the module. 3396792cf6361ff339e336287affb0bfe54bf6957a9Jean-Michel Trivi */ 3406792cf6361ff339e336287affb0bfe54bf6957a9Jean-Michel TriviUINT sbrDecoder_GetDelay( const HANDLE_SBRDECODER self ); 3416792cf6361ff339e336287affb0bfe54bf6957a9Jean-Michel Trivi 3422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#ifdef __cplusplus 3442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} 3452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 3462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif 348