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