1*e5436536SAndroid Build Coastguard Worker /* ----------------------------------------------------------------------------- 2*e5436536SAndroid Build Coastguard Worker Software License for The Fraunhofer FDK AAC Codec Library for Android 3*e5436536SAndroid Build Coastguard Worker 4*e5436536SAndroid Build Coastguard Worker © Copyright 1995 - 2020 Fraunhofer-Gesellschaft zur Förderung der angewandten 5*e5436536SAndroid Build Coastguard Worker Forschung e.V. All rights reserved. 6*e5436536SAndroid Build Coastguard Worker 7*e5436536SAndroid Build Coastguard Worker 1. INTRODUCTION 8*e5436536SAndroid Build Coastguard Worker The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software 9*e5436536SAndroid Build Coastguard Worker that implements the MPEG Advanced Audio Coding ("AAC") encoding and decoding 10*e5436536SAndroid Build Coastguard Worker scheme for digital audio. This FDK AAC Codec software is intended to be used on 11*e5436536SAndroid Build Coastguard Worker a wide variety of Android devices. 12*e5436536SAndroid Build Coastguard Worker 13*e5436536SAndroid Build Coastguard Worker AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient 14*e5436536SAndroid Build Coastguard Worker general perceptual audio codecs. AAC-ELD is considered the best-performing 15*e5436536SAndroid Build Coastguard Worker full-bandwidth communications codec by independent studies and is widely 16*e5436536SAndroid Build Coastguard Worker deployed. AAC has been standardized by ISO and IEC as part of the MPEG 17*e5436536SAndroid Build Coastguard Worker specifications. 18*e5436536SAndroid Build Coastguard Worker 19*e5436536SAndroid Build Coastguard Worker Patent licenses for necessary patent claims for the FDK AAC Codec (including 20*e5436536SAndroid Build Coastguard Worker those of Fraunhofer) may be obtained through Via Licensing 21*e5436536SAndroid Build Coastguard Worker (www.vialicensing.com) or through the respective patent owners individually for 22*e5436536SAndroid Build Coastguard Worker the purpose of encoding or decoding bit streams in products that are compliant 23*e5436536SAndroid Build Coastguard Worker with the ISO/IEC MPEG audio standards. Please note that most manufacturers of 24*e5436536SAndroid Build Coastguard Worker Android devices already license these patent claims through Via Licensing or 25*e5436536SAndroid Build Coastguard Worker directly from the patent owners, and therefore FDK AAC Codec software may 26*e5436536SAndroid Build Coastguard Worker already be covered under those patent licenses when it is used for those 27*e5436536SAndroid Build Coastguard Worker licensed purposes only. 28*e5436536SAndroid Build Coastguard Worker 29*e5436536SAndroid Build Coastguard Worker Commercially-licensed AAC software libraries, including floating-point versions 30*e5436536SAndroid Build Coastguard Worker with enhanced sound quality, are also available from Fraunhofer. Users are 31*e5436536SAndroid Build Coastguard Worker encouraged to check the Fraunhofer website for additional applications 32*e5436536SAndroid Build Coastguard Worker information and documentation. 33*e5436536SAndroid Build Coastguard Worker 34*e5436536SAndroid Build Coastguard Worker 2. COPYRIGHT LICENSE 35*e5436536SAndroid Build Coastguard Worker 36*e5436536SAndroid Build Coastguard Worker Redistribution and use in source and binary forms, with or without modification, 37*e5436536SAndroid Build Coastguard Worker are permitted without payment of copyright license fees provided that you 38*e5436536SAndroid Build Coastguard Worker satisfy the following conditions: 39*e5436536SAndroid Build Coastguard Worker 40*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in redistributions of 41*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec or your modifications thereto in source code form. 42*e5436536SAndroid Build Coastguard Worker 43*e5436536SAndroid Build Coastguard Worker You must retain the complete text of this software license in the documentation 44*e5436536SAndroid Build Coastguard Worker and/or other materials provided with redistributions of the FDK AAC Codec or 45*e5436536SAndroid Build Coastguard Worker your modifications thereto in binary form. You must make available free of 46*e5436536SAndroid Build Coastguard Worker charge copies of the complete source code of the FDK AAC Codec and your 47*e5436536SAndroid Build Coastguard Worker modifications thereto to recipients of copies in binary form. 48*e5436536SAndroid Build Coastguard Worker 49*e5436536SAndroid Build Coastguard Worker The name of Fraunhofer may not be used to endorse or promote products derived 50*e5436536SAndroid Build Coastguard Worker from this library without prior written permission. 51*e5436536SAndroid Build Coastguard Worker 52*e5436536SAndroid Build Coastguard Worker You may not charge copyright license fees for anyone to use, copy or distribute 53*e5436536SAndroid Build Coastguard Worker the FDK AAC Codec software or your modifications thereto. 54*e5436536SAndroid Build Coastguard Worker 55*e5436536SAndroid Build Coastguard Worker Your modified versions of the FDK AAC Codec must carry prominent notices stating 56*e5436536SAndroid Build Coastguard Worker that you changed the software and the date of any change. For modified versions 57*e5436536SAndroid Build Coastguard Worker of the FDK AAC Codec, the term "Fraunhofer FDK AAC Codec Library for Android" 58*e5436536SAndroid Build Coastguard Worker must be replaced by the term "Third-Party Modified Version of the Fraunhofer FDK 59*e5436536SAndroid Build Coastguard Worker AAC Codec Library for Android." 60*e5436536SAndroid Build Coastguard Worker 61*e5436536SAndroid Build Coastguard Worker 3. NO PATENT LICENSE 62*e5436536SAndroid Build Coastguard Worker 63*e5436536SAndroid Build Coastguard Worker NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without 64*e5436536SAndroid Build Coastguard Worker limitation the patents of Fraunhofer, ARE GRANTED BY THIS SOFTWARE LICENSE. 65*e5436536SAndroid Build Coastguard Worker Fraunhofer provides no warranty of patent non-infringement with respect to this 66*e5436536SAndroid Build Coastguard Worker software. 67*e5436536SAndroid Build Coastguard Worker 68*e5436536SAndroid Build Coastguard Worker You may use this FDK AAC Codec software or modifications thereto only for 69*e5436536SAndroid Build Coastguard Worker purposes that are authorized by appropriate patent licenses. 70*e5436536SAndroid Build Coastguard Worker 71*e5436536SAndroid Build Coastguard Worker 4. DISCLAIMER 72*e5436536SAndroid Build Coastguard Worker 73*e5436536SAndroid Build Coastguard Worker This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright 74*e5436536SAndroid Build Coastguard Worker holders and contributors "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, 75*e5436536SAndroid Build Coastguard Worker including but not limited to the implied warranties of merchantability and 76*e5436536SAndroid Build Coastguard Worker fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 77*e5436536SAndroid Build Coastguard Worker CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, 78*e5436536SAndroid Build Coastguard Worker or consequential damages, including but not limited to procurement of substitute 79*e5436536SAndroid Build Coastguard Worker goods or services; loss of use, data, or profits, or business interruption, 80*e5436536SAndroid Build Coastguard Worker however caused and on any theory of liability, whether in contract, strict 81*e5436536SAndroid Build Coastguard Worker liability, or tort (including negligence), arising in any way out of the use of 82*e5436536SAndroid Build Coastguard Worker this software, even if advised of the possibility of such damage. 83*e5436536SAndroid Build Coastguard Worker 84*e5436536SAndroid Build Coastguard Worker 5. CONTACT INFORMATION 85*e5436536SAndroid Build Coastguard Worker 86*e5436536SAndroid Build Coastguard Worker Fraunhofer Institute for Integrated Circuits IIS 87*e5436536SAndroid Build Coastguard Worker Attention: Audio and Multimedia Departments - FDK AAC LL 88*e5436536SAndroid Build Coastguard Worker Am Wolfsmantel 33 89*e5436536SAndroid Build Coastguard Worker 91058 Erlangen, Germany 90*e5436536SAndroid Build Coastguard Worker 91*e5436536SAndroid Build Coastguard Worker www.iis.fraunhofer.de/amm 92*e5436536SAndroid Build Coastguard Worker [email protected] 93*e5436536SAndroid Build Coastguard Worker ----------------------------------------------------------------------------- */ 94*e5436536SAndroid Build Coastguard Worker 95*e5436536SAndroid Build Coastguard Worker /*********************** MPEG surround decoder library ************************* 96*e5436536SAndroid Build Coastguard Worker 97*e5436536SAndroid Build Coastguard Worker Author(s): 98*e5436536SAndroid Build Coastguard Worker 99*e5436536SAndroid Build Coastguard Worker Description: Space Decoder 100*e5436536SAndroid Build Coastguard Worker 101*e5436536SAndroid Build Coastguard Worker *******************************************************************************/ 102*e5436536SAndroid Build Coastguard Worker 103*e5436536SAndroid Build Coastguard Worker #ifndef SAC_DEC_LIB_H 104*e5436536SAndroid Build Coastguard Worker #define SAC_DEC_LIB_H 105*e5436536SAndroid Build Coastguard Worker 106*e5436536SAndroid Build Coastguard Worker #include "common_fix.h" 107*e5436536SAndroid Build Coastguard Worker #include "FDK_audio.h" 108*e5436536SAndroid Build Coastguard Worker #include "sac_dec_errorcodes.h" 109*e5436536SAndroid Build Coastguard Worker #include "FDK_bitstream.h" 110*e5436536SAndroid Build Coastguard Worker #include "FDK_qmf_domain.h" 111*e5436536SAndroid Build Coastguard Worker 112*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus 113*e5436536SAndroid Build Coastguard Worker extern "C" { 114*e5436536SAndroid Build Coastguard Worker #endif /* __cplusplus */ 115*e5436536SAndroid Build Coastguard Worker 116*e5436536SAndroid Build Coastguard Worker /** 117*e5436536SAndroid Build Coastguard Worker * \brief MPEG Surround input data interface mode. 118*e5436536SAndroid Build Coastguard Worker **/ 119*e5436536SAndroid Build Coastguard Worker typedef enum { 120*e5436536SAndroid Build Coastguard Worker SAC_INTERFACE_QMF = 121*e5436536SAndroid Build Coastguard Worker 0, /*!< Use QMF domain interface for the input downmix audio. */ 122*e5436536SAndroid Build Coastguard Worker SAC_INTERFACE_TIME, /*!< Use time domain interface for the input downmix 123*e5436536SAndroid Build Coastguard Worker audio. */ 124*e5436536SAndroid Build Coastguard Worker SAC_INTERFACE_AUTO /*!< */ 125*e5436536SAndroid Build Coastguard Worker } SAC_INPUT_CONFIG; 126*e5436536SAndroid Build Coastguard Worker 127*e5436536SAndroid Build Coastguard Worker /** 128*e5436536SAndroid Build Coastguard Worker * \brief MPEG Surround output mode. 129*e5436536SAndroid Build Coastguard Worker **/ 130*e5436536SAndroid Build Coastguard Worker typedef enum { 131*e5436536SAndroid Build Coastguard Worker SACDEC_OUT_MODE_NORMAL = 132*e5436536SAndroid Build Coastguard Worker 0, /*!< Normal multi channel processing without output restrictions. */ 133*e5436536SAndroid Build Coastguard Worker SACDEC_OUT_MODE_BINAURAL, /*!< Two channel output with binaural processsing. 134*e5436536SAndroid Build Coastguard Worker */ 135*e5436536SAndroid Build Coastguard Worker SACDEC_OUT_MODE_STEREO, /*!< Always two channel output mode. */ 136*e5436536SAndroid Build Coastguard Worker SACDEC_OUT_MODE_6CHANNEL /*!< Always process with 5.1 channel output. */ 137*e5436536SAndroid Build Coastguard Worker } SAC_DEC_OUTPUT_MODE; 138*e5436536SAndroid Build Coastguard Worker 139*e5436536SAndroid Build Coastguard Worker /** 140*e5436536SAndroid Build Coastguard Worker * \brief MPEG Surround binaural HRTF model. 141*e5436536SAndroid Build Coastguard Worker * HRTF will be applied only in combination with upmixtype 142*e5436536SAndroid Build Coastguard Worker *SAC_UPMIX_TYPE_BINAURAL. 143*e5436536SAndroid Build Coastguard Worker **/ 144*e5436536SAndroid Build Coastguard Worker typedef enum { 145*e5436536SAndroid Build Coastguard Worker SAC_BINAURAL_HRTF_KEMAR = 0, 146*e5436536SAndroid Build Coastguard Worker SAC_BINAURAL_HRTF_VAST, 147*e5436536SAndroid Build Coastguard Worker SAC_BINAURAL_HRTF_MPSVT, 148*e5436536SAndroid Build Coastguard Worker SAC_BINAURAL_SINGLE_HRTFS 149*e5436536SAndroid Build Coastguard Worker } SAC_BINAURAL_HRTF_MODEL; 150*e5436536SAndroid Build Coastguard Worker 151*e5436536SAndroid Build Coastguard Worker /** 152*e5436536SAndroid Build Coastguard Worker * \brief MPEG Surround decoder instance available. 153*e5436536SAndroid Build Coastguard Worker **/ 154*e5436536SAndroid Build Coastguard Worker typedef enum { 155*e5436536SAndroid Build Coastguard Worker SAC_INSTANCE_NOT_FULL_AVAILABLE = 156*e5436536SAndroid Build Coastguard Worker 0, /*!< MPEG Surround decoder instance not full available. */ 157*e5436536SAndroid Build Coastguard Worker SAC_INSTANCE_FULL_AVAILABLE /*!< MPEG Surround decoder instance full 158*e5436536SAndroid Build Coastguard Worker available. */ 159*e5436536SAndroid Build Coastguard Worker } SAC_INSTANCE_AVAIL; 160*e5436536SAndroid Build Coastguard Worker 161*e5436536SAndroid Build Coastguard Worker /** 162*e5436536SAndroid Build Coastguard Worker * \brief MPEG Surround decoder dynamic parameters. 163*e5436536SAndroid Build Coastguard Worker * 164*e5436536SAndroid Build Coastguard Worker * Use mpegSurroundDecoder_SetParam() function to configure internal status of 165*e5436536SAndroid Build Coastguard Worker * following parameters. 166*e5436536SAndroid Build Coastguard Worker */ 167*e5436536SAndroid Build Coastguard Worker typedef enum { 168*e5436536SAndroid Build Coastguard Worker SACDEC_OUTPUT_MODE = 0x0001, /*!< Set MPEG Surround decoder output mode. See 169*e5436536SAndroid Build Coastguard Worker SAC_DEC_OUTPUT_MODE. */ 170*e5436536SAndroid Build Coastguard Worker SACDEC_BLIND_ENABLE = 171*e5436536SAndroid Build Coastguard Worker 0x0002, /*!< Multi channel output without MPEG Surround side info. */ 172*e5436536SAndroid Build Coastguard Worker SACDEC_PARTIALLY_COMPLEX = 173*e5436536SAndroid Build Coastguard Worker 0x0003, /*!< Set partially complex flag for MPEG Surround. 174*e5436536SAndroid Build Coastguard Worker 0: Use complex valued QMF data. 175*e5436536SAndroid Build Coastguard Worker 1: Use real valued QMF data (low power mode) */ 176*e5436536SAndroid Build Coastguard Worker SACDEC_INTERFACE = 177*e5436536SAndroid Build Coastguard Worker 0x0004, /*!< Select signal input interface for MPEG Surround. 178*e5436536SAndroid Build Coastguard Worker Switch time interface off: 0 179*e5436536SAndroid Build Coastguard Worker Switch time interface on: 1 */ 180*e5436536SAndroid Build Coastguard Worker SACDEC_BS_DELAY = 0x0005, /*!< Select bit stream delay for MPEG Surround. 181*e5436536SAndroid Build Coastguard Worker Switch bit stream delay off: 0 182*e5436536SAndroid Build Coastguard Worker Switch bit stream delay on: 1 */ 183*e5436536SAndroid Build Coastguard Worker SACDEC_BINAURAL_QUALITY = 184*e5436536SAndroid Build Coastguard Worker 0x0102, /*!< Set binaural quality for MPEG Surround binaural mode. 185*e5436536SAndroid Build Coastguard Worker 0: Low Complexity, 186*e5436536SAndroid Build Coastguard Worker 1: High Quality */ 187*e5436536SAndroid Build Coastguard Worker SACDEC_BINAURAL_DISTANCE = 0x0103, /*!< Set perceived distance for binaural 188*e5436536SAndroid Build Coastguard Worker playback (binaural mode only). The valid 189*e5436536SAndroid Build Coastguard Worker values range from 0 to 100. Where 100 190*e5436536SAndroid Build Coastguard Worker corresponds to the farthest perceived 191*e5436536SAndroid Build Coastguard Worker distance. */ 192*e5436536SAndroid Build Coastguard Worker SACDEC_BINAURAL_DIALOG_CLARITY = 193*e5436536SAndroid Build Coastguard Worker 0x0104, /*!< Set dialog clarity (for binaural playback). 194*e5436536SAndroid Build Coastguard Worker The valid values range from 0 to 100. */ 195*e5436536SAndroid Build Coastguard Worker SACDEC_BINAURAL_FRONT_ANGLE = 0x0105, /*!< Set angle between the virtual front 196*e5436536SAndroid Build Coastguard Worker speaker pair (binaural mode only). 197*e5436536SAndroid Build Coastguard Worker The valid range is from 0 to 180 198*e5436536SAndroid Build Coastguard Worker angular degrees. */ 199*e5436536SAndroid Build Coastguard Worker SACDEC_BINAURAL_BACK_ANGLE = 0x0106, /*!< Set angle between the virtual back 200*e5436536SAndroid Build Coastguard Worker speaker pair (binaural mode only). The 201*e5436536SAndroid Build Coastguard Worker valid range is from 0 to 180 angular 202*e5436536SAndroid Build Coastguard Worker degrees. */ 203*e5436536SAndroid Build Coastguard Worker SACDEC_BINAURAL_PRESET = 0x0107, /*!< Set a virtual speaker setup preset for 204*e5436536SAndroid Build Coastguard Worker binaural playback (binaural mode only). 205*e5436536SAndroid Build Coastguard Worker This meta-parameter implicitly modifies 206*e5436536SAndroid Build Coastguard Worker the following parameters: 207*e5436536SAndroid Build Coastguard Worker SACDEC_BINAURAL_DISTANCE, 208*e5436536SAndroid Build Coastguard Worker SACDEC_BINAURAL_DIALOG_CLARITY, 209*e5436536SAndroid Build Coastguard Worker SACDEC_BINAURAL_FRONT_ANGLE and 210*e5436536SAndroid Build Coastguard Worker SACDEC_BINAURAL_BACK_ANGLE. 211*e5436536SAndroid Build Coastguard Worker The following presets are available: 212*e5436536SAndroid Build Coastguard Worker 1: Dry room 213*e5436536SAndroid Build Coastguard Worker 2: Living room (default) 214*e5436536SAndroid Build Coastguard Worker 3: Cinema */ 215*e5436536SAndroid Build Coastguard Worker 216*e5436536SAndroid Build Coastguard Worker SACDEC_BS_INTERRUPTION = 217*e5436536SAndroid Build Coastguard Worker 0x0200, /*!< If the given value is unequal to 0 hint the MPEG Surround 218*e5436536SAndroid Build Coastguard Worker decoder that the next input data is discontinuous, because of 219*e5436536SAndroid Build Coastguard Worker frame loss, seeking, etc. Announce the decoder that the 220*e5436536SAndroid Build Coastguard Worker bitstream data was interrupted (fSync = 0). This will cause the 221*e5436536SAndroid Build Coastguard Worker surround decoder not to parse any new bitstream data until a 222*e5436536SAndroid Build Coastguard Worker new header with a valid Spatial Specific Config and a 223*e5436536SAndroid Build Coastguard Worker independently decodable frame is found. Specially important 224*e5436536SAndroid Build Coastguard Worker when the MPEG Surround data is split accross several frames 225*e5436536SAndroid Build Coastguard Worker (for example in the case of AAC-LC downmix with 1024 226*e5436536SAndroid Build Coastguard Worker framelength and 2048 surround frame length) and a discontinuity 227*e5436536SAndroid Build Coastguard Worker in the bitstream data occurs. If fSync is 1, assume that MPEG 228*e5436536SAndroid Build Coastguard Worker Surround data is in sync (out of band config for example). */ 229*e5436536SAndroid Build Coastguard Worker SACDEC_CLEAR_HISTORY = 0x0201, /*!< If the given value is unequal to 0 clear 230*e5436536SAndroid Build Coastguard Worker all internal states (delay lines, QMF 231*e5436536SAndroid Build Coastguard Worker states, ...) of the MPEG Surround decoder. 232*e5436536SAndroid Build Coastguard Worker This will cause a discontinuity in the audio 233*e5436536SAndroid Build Coastguard Worker output signal. */ 234*e5436536SAndroid Build Coastguard Worker 235*e5436536SAndroid Build Coastguard Worker SACDEC_CONCEAL_NUM_KEEP_FRAMES = 236*e5436536SAndroid Build Coastguard Worker 0x0301, /*!< Error concealment: The Number of frames the module keeps the 237*e5436536SAndroid Build Coastguard Worker last spatial image before fading to the particular spatial 238*e5436536SAndroid Build Coastguard Worker scenario starts. The default is 10 frames. */ 239*e5436536SAndroid Build Coastguard Worker SACDEC_CONCEAL_FADE_OUT_SLOPE_LENGTH = 240*e5436536SAndroid Build Coastguard Worker 0x0302, /*!< Error concealment: Length of the slope (in frames) the module 241*e5436536SAndroid Build Coastguard Worker creates to fade from the last spatial scenario to the 242*e5436536SAndroid Build Coastguard Worker particular default scenario (downmix) in case of consecutive 243*e5436536SAndroid Build Coastguard Worker errors. Default is 5. */ 244*e5436536SAndroid Build Coastguard Worker SACDEC_CONCEAL_FADE_IN_SLOPE_LENGTH = 245*e5436536SAndroid Build Coastguard Worker 0x0303, /*!< Error concealment: Length of the slope (in frames) the module 246*e5436536SAndroid Build Coastguard Worker creates to fade from the default spatial scenario (downmix) to 247*e5436536SAndroid Build Coastguard Worker the current scenario after fade-out. Default parameter value 248*e5436536SAndroid Build Coastguard Worker is 5. */ 249*e5436536SAndroid Build Coastguard Worker SACDEC_CONCEAL_NUM_RELEASE_FRAMES = 250*e5436536SAndroid Build Coastguard Worker 0x0304 /*!< Error concealment: The number of error free frames before the 251*e5436536SAndroid Build Coastguard Worker module starts fading from default to the current spatial 252*e5436536SAndroid Build Coastguard Worker scenario. Default parameter value is 3 frames. */ 253*e5436536SAndroid Build Coastguard Worker } SACDEC_PARAM; 254*e5436536SAndroid Build Coastguard Worker 255*e5436536SAndroid Build Coastguard Worker #define PCM_MPS LONG 256*e5436536SAndroid Build Coastguard Worker 257*e5436536SAndroid Build Coastguard Worker /** 258*e5436536SAndroid Build Coastguard Worker * \brief MPEG Surround decoder handle. 259*e5436536SAndroid Build Coastguard Worker */ 260*e5436536SAndroid Build Coastguard Worker typedef struct MpegSurroundDecoder CMpegSurroundDecoder; 261*e5436536SAndroid Build Coastguard Worker 262*e5436536SAndroid Build Coastguard Worker /** 263*e5436536SAndroid Build Coastguard Worker * \brief Check if the full MPEG Surround decoder instance is allocated. 264*e5436536SAndroid Build Coastguard Worker * 265*e5436536SAndroid Build Coastguard Worker * Check if the full MPEG Surround decoder instance is allocated. 266*e5436536SAndroid Build Coastguard Worker * 267*e5436536SAndroid Build Coastguard Worker * \param pMpegSurroundDecoder A pointer to a decoder stucture. 268*e5436536SAndroid Build Coastguard Worker * 269*e5436536SAndroid Build Coastguard Worker * \return SACDEC_ERROR error code 270*e5436536SAndroid Build Coastguard Worker */ 271*e5436536SAndroid Build Coastguard Worker SAC_INSTANCE_AVAIL 272*e5436536SAndroid Build Coastguard Worker mpegSurroundDecoder_IsFullMpegSurroundDecoderInstanceAvailable( 273*e5436536SAndroid Build Coastguard Worker CMpegSurroundDecoder *pMpegSurroundDecoder); 274*e5436536SAndroid Build Coastguard Worker 275*e5436536SAndroid Build Coastguard Worker /** 276*e5436536SAndroid Build Coastguard Worker * \brief Open one instance of the MPEG Surround decoder. 277*e5436536SAndroid Build Coastguard Worker * 278*e5436536SAndroid Build Coastguard Worker * Allocate one instance of decoder and input buffers. 279*e5436536SAndroid Build Coastguard Worker * - Allocate decoder structure 280*e5436536SAndroid Build Coastguard Worker * - Allocate input buffers (QMF/time/MPS data) 281*e5436536SAndroid Build Coastguard Worker * 282*e5436536SAndroid Build Coastguard Worker * \param pMpegSurroundDecoder A pointer to a decoder handle; filled on 283*e5436536SAndroid Build Coastguard Worker * return. 284*e5436536SAndroid Build Coastguard Worker * \param splitMemoryAllocation Allocate only outer layer of MPS decoder. Core 285*e5436536SAndroid Build Coastguard Worker * part is reallocated later if needed. 286*e5436536SAndroid Build Coastguard Worker * \param stereoConfigIndex USAC: Save memory by opening the MPS decoder 287*e5436536SAndroid Build Coastguard Worker * for a specific stereoConfigIndex. (Needs optimization macros enabled.) 288*e5436536SAndroid Build Coastguard Worker * \param pQmfDomain Pointer to QMF domain data structure. 289*e5436536SAndroid Build Coastguard Worker * 290*e5436536SAndroid Build Coastguard Worker * \return SACDEC_ERROR error code 291*e5436536SAndroid Build Coastguard Worker */ 292*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR mpegSurroundDecoder_Open( 293*e5436536SAndroid Build Coastguard Worker CMpegSurroundDecoder **pMpegSurroundDecoder, int stereoConfigIndex, 294*e5436536SAndroid Build Coastguard Worker HANDLE_FDK_QMF_DOMAIN pQmfDomain); 295*e5436536SAndroid Build Coastguard Worker 296*e5436536SAndroid Build Coastguard Worker /** 297*e5436536SAndroid Build Coastguard Worker * \brief Init one instance of the MPEG Surround decoder. 298*e5436536SAndroid Build Coastguard Worker * 299*e5436536SAndroid Build Coastguard Worker * Init one instance of the MPEG Surround decoder 300*e5436536SAndroid Build Coastguard Worker * 301*e5436536SAndroid Build Coastguard Worker * \param pMpegSurroundDecoder A pointer to a decoder handle; 302*e5436536SAndroid Build Coastguard Worker * 303*e5436536SAndroid Build Coastguard Worker * \return SACDEC_ERROR error code 304*e5436536SAndroid Build Coastguard Worker */ 305*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR mpegSurroundDecoder_Init( 306*e5436536SAndroid Build Coastguard Worker CMpegSurroundDecoder *pMpegSurroundDecoder); 307*e5436536SAndroid Build Coastguard Worker 308*e5436536SAndroid Build Coastguard Worker /** 309*e5436536SAndroid Build Coastguard Worker * \brief Read and parse SpatialSpecificConfig. 310*e5436536SAndroid Build Coastguard Worker * 311*e5436536SAndroid Build Coastguard Worker * \param pMpegSurroundDecoder A pointer to a decoder handle. 312*e5436536SAndroid Build Coastguard Worker * \param hBs bitstream handle config parsing data source. 313*e5436536SAndroid Build Coastguard Worker * 314*e5436536SAndroid Build Coastguard Worker * \return SACDEC_ERROR error code 315*e5436536SAndroid Build Coastguard Worker */ 316*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR mpegSurroundDecoder_Config( 317*e5436536SAndroid Build Coastguard Worker CMpegSurroundDecoder *pMpegSurroundDecoder, HANDLE_FDK_BITSTREAM hBs, 318*e5436536SAndroid Build Coastguard Worker AUDIO_OBJECT_TYPE coreCodec, INT samplingRate, INT frameSize, 319*e5436536SAndroid Build Coastguard Worker INT numChannels, INT stereoConfigIndex, INT coreSbrFrameLengthIndex, 320*e5436536SAndroid Build Coastguard Worker INT configBytes, const UCHAR configMode, UCHAR *configChanged); 321*e5436536SAndroid Build Coastguard Worker 322*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR 323*e5436536SAndroid Build Coastguard Worker mpegSurroundDecoder_ConfigureQmfDomain( 324*e5436536SAndroid Build Coastguard Worker CMpegSurroundDecoder *pMpegSurroundDecoder, 325*e5436536SAndroid Build Coastguard Worker SAC_INPUT_CONFIG sac_dec_interface, UINT coreSamplingRate, 326*e5436536SAndroid Build Coastguard Worker AUDIO_OBJECT_TYPE coreCodec); 327*e5436536SAndroid Build Coastguard Worker 328*e5436536SAndroid Build Coastguard Worker /** 329*e5436536SAndroid Build Coastguard Worker * \brief Parse MPEG Surround data without header 330*e5436536SAndroid Build Coastguard Worker * 331*e5436536SAndroid Build Coastguard Worker * \param pMpegSurroundDecoder A MPEG Surrround decoder handle. 332*e5436536SAndroid Build Coastguard Worker * \param hBs Bit stream handle data input source 333*e5436536SAndroid Build Coastguard Worker * \param pMpsDataBits Pointer to number of valid bits in extension 334*e5436536SAndroid Build Coastguard Worker * payload. Function updates mpsDataBits while parsing bitstream. 335*e5436536SAndroid Build Coastguard Worker * \param fGlobalIndependencyFlag Global independency flag of current frame. 336*e5436536SAndroid Build Coastguard Worker * 337*e5436536SAndroid Build Coastguard Worker * \return Error code. 338*e5436536SAndroid Build Coastguard Worker */ 339*e5436536SAndroid Build Coastguard Worker int mpegSurroundDecoder_ParseNoHeader( 340*e5436536SAndroid Build Coastguard Worker CMpegSurroundDecoder *pMpegSurroundDecoder, HANDLE_FDK_BITSTREAM hBs, 341*e5436536SAndroid Build Coastguard Worker int *pMpsDataBits, int fGlobalIndependencyFlag); 342*e5436536SAndroid Build Coastguard Worker 343*e5436536SAndroid Build Coastguard Worker /* #ifdef SACDEC_MPS_ENABLE */ 344*e5436536SAndroid Build Coastguard Worker /** 345*e5436536SAndroid Build Coastguard Worker * \brief Parse MPEG Surround data with header. Header is ancType, ancStart, 346*e5436536SAndroid Build Coastguard Worker ancStop (4 bits total). Body is ancDataSegmentByte[i]. 347*e5436536SAndroid Build Coastguard Worker * 348*e5436536SAndroid Build Coastguard Worker * \param pMpegSurroundDecoder A MPEG Surrround decoder handle. 349*e5436536SAndroid Build Coastguard Worker * \param hBs Bit stream handle data input source 350*e5436536SAndroid Build Coastguard Worker * \param pMpsDataBits Pointer to number of valid bits in extension 351*e5436536SAndroid Build Coastguard Worker payload. Function updates mpsDataBits while parsing bitstream. Needs to be a 352*e5436536SAndroid Build Coastguard Worker multiple of 8 + 4 (4 bits header). 353*e5436536SAndroid Build Coastguard Worker * \param coreCodec The audio object type of the core codec handling 354*e5436536SAndroid Build Coastguard Worker the downmix input signal. 355*e5436536SAndroid Build Coastguard Worker * \param sampleRate Samplerate of input downmix data. 356*e5436536SAndroid Build Coastguard Worker * \param nChannels Amount of input channels. 357*e5436536SAndroid Build Coastguard Worker * \param frameSize Amount of input samples. 358*e5436536SAndroid Build Coastguard Worker * \param fGlobalIndependencyFlag Global independency flag of current frame. 359*e5436536SAndroid Build Coastguard Worker * 360*e5436536SAndroid Build Coastguard Worker * \return Error code. 361*e5436536SAndroid Build Coastguard Worker */ 362*e5436536SAndroid Build Coastguard Worker int mpegSurroundDecoder_Parse(CMpegSurroundDecoder *pMpegSurroundDecoder, 363*e5436536SAndroid Build Coastguard Worker HANDLE_FDK_BITSTREAM hBs, int *pMpsDataBits, 364*e5436536SAndroid Build Coastguard Worker AUDIO_OBJECT_TYPE coreCodec, int sampleRate, 365*e5436536SAndroid Build Coastguard Worker int frameSize, int fGlobalIndependencyFlag); 366*e5436536SAndroid Build Coastguard Worker /* #endif */ 367*e5436536SAndroid Build Coastguard Worker 368*e5436536SAndroid Build Coastguard Worker /** 369*e5436536SAndroid Build Coastguard Worker * \brief Apply MPEG Surround upmix. 370*e5436536SAndroid Build Coastguard Worker * 371*e5436536SAndroid Build Coastguard Worker * Process one downmix audio frame and decode one surround frame if it applies. 372*e5436536SAndroid Build Coastguard Worker * Downmix framing can be different from surround framing, so depending on the 373*e5436536SAndroid Build Coastguard Worker * frame size of the downmix audio data and the framing being used by the MPEG 374*e5436536SAndroid Build Coastguard Worker * Surround decoder, it could be that only every second call, for example, of 375*e5436536SAndroid Build Coastguard Worker * this function actually surround data was decoded. The returned value of 376*e5436536SAndroid Build Coastguard Worker * frameSize will be zero, if no surround data was decoded. 377*e5436536SAndroid Build Coastguard Worker * 378*e5436536SAndroid Build Coastguard Worker * Decoding one MPEG Surround frame. Depending on interface configuration 379*e5436536SAndroid Build Coastguard Worker * mpegSurroundDecoder_SetParam(self, SACDEC_INTERFACE, value), the QMF or time 380*e5436536SAndroid Build Coastguard Worker * interface will be applied. External access to QMF buffer interface can be 381*e5436536SAndroid Build Coastguard Worker * achieved by mpegSurroundDecoder_GetQmfBuffer() call before decode frame. 382*e5436536SAndroid Build Coastguard Worker * While using time interface, pTimeData buffer will be shared as input and 383*e5436536SAndroid Build Coastguard Worker * output buffer. 384*e5436536SAndroid Build Coastguard Worker * 385*e5436536SAndroid Build Coastguard Worker * \param pMpegSurroundDecoder A MPEG Surrround decoder handle. 386*e5436536SAndroid Build Coastguard Worker * \param pTimeData Pointer to time buffer. Depending on interface 387*e5436536SAndroid Build Coastguard Worker * configuration, the content of pTimeData is ignored, and the internal QMF 388*e5436536SAndroid Build Coastguard Worker * buffer will be used as input data source. 389*e5436536SAndroid Build Coastguard Worker * Otherwise, the MPEG Surround processing is applied to the timesignal 390*e5436536SAndroid Build Coastguard Worker * pTimeData. For both variants, the resulting MPEG 391*e5436536SAndroid Build Coastguard Worker * Surround signal is written into pTimeData. 392*e5436536SAndroid Build Coastguard Worker * \param timeDataSize Size of pTimeData (available buffer size). 393*e5436536SAndroid Build Coastguard Worker * \param timeDataFrameSize Frame size of input timedata 394*e5436536SAndroid Build Coastguard Worker * \param nChannels Pointer where the amount of input channels is 395*e5436536SAndroid Build Coastguard Worker * given and amount of output channels is returned. 396*e5436536SAndroid Build Coastguard Worker * \param frameSize Pointer where the amount of output samples is 397*e5436536SAndroid Build Coastguard Worker * returned into. 398*e5436536SAndroid Build Coastguard Worker * \param channelType Array were the corresponding channel type for 399*e5436536SAndroid Build Coastguard Worker * each output audio channel is stored into. 400*e5436536SAndroid Build Coastguard Worker * \param channelIndices Array were the corresponding channel type index 401*e5436536SAndroid Build Coastguard Worker * for each output audio channel is stored into. 402*e5436536SAndroid Build Coastguard Worker * \param mapDescr Channep map descriptor for output channel mapping 403*e5436536SAndroid Build Coastguard Worker * to be used (From MPEG PCE ordering to whatever is required). 404*e5436536SAndroid Build Coastguard Worker * \param inDataHeadroom Headroom of SAC input time signal to prevent 405*e5436536SAndroid Build Coastguard Worker * clipping. 406*e5436536SAndroid Build Coastguard Worker * \param outDataHeadroom Pointer to headroom of SAC output time signal to 407*e5436536SAndroid Build Coastguard Worker * prevent clipping. 408*e5436536SAndroid Build Coastguard Worker * 409*e5436536SAndroid Build Coastguard Worker * \return Error code. 410*e5436536SAndroid Build Coastguard Worker */ 411*e5436536SAndroid Build Coastguard Worker int mpegSurroundDecoder_Apply(CMpegSurroundDecoder *pMpegSurroundDecoder, 412*e5436536SAndroid Build Coastguard Worker PCM_MPS *input, PCM_MPS *pTimeData, 413*e5436536SAndroid Build Coastguard Worker const int timeDataSize, int timeDataFrameSize, 414*e5436536SAndroid Build Coastguard Worker int *nChannels, int *frameSize, int sampleRate, 415*e5436536SAndroid Build Coastguard Worker AUDIO_OBJECT_TYPE coreCodec, 416*e5436536SAndroid Build Coastguard Worker AUDIO_CHANNEL_TYPE channelType[], 417*e5436536SAndroid Build Coastguard Worker UCHAR channelIndices[], 418*e5436536SAndroid Build Coastguard Worker const FDK_channelMapDescr *const mapDescr, 419*e5436536SAndroid Build Coastguard Worker const INT inDataHeadroom, INT *outDataHeadroom); 420*e5436536SAndroid Build Coastguard Worker 421*e5436536SAndroid Build Coastguard Worker /** 422*e5436536SAndroid Build Coastguard Worker * \brief Deallocate a MPEG Surround decoder instance. 423*e5436536SAndroid Build Coastguard Worker * \param pMpegSurroundDecoder A decoder handle. 424*e5436536SAndroid Build Coastguard Worker * \return No return value. 425*e5436536SAndroid Build Coastguard Worker */ 426*e5436536SAndroid Build Coastguard Worker void mpegSurroundDecoder_Close(CMpegSurroundDecoder *pMpegSurroundDecoder); 427*e5436536SAndroid Build Coastguard Worker 428*e5436536SAndroid Build Coastguard Worker /** 429*e5436536SAndroid Build Coastguard Worker * \brief Free config dependent MPEG Surround memory. 430*e5436536SAndroid Build Coastguard Worker * \param pMpegSurroundDecoder A decoder handle. 431*e5436536SAndroid Build Coastguard Worker * \return error. 432*e5436536SAndroid Build Coastguard Worker */ 433*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR mpegSurroundDecoder_FreeMem( 434*e5436536SAndroid Build Coastguard Worker CMpegSurroundDecoder *pMpegSurroundDecoder); 435*e5436536SAndroid Build Coastguard Worker 436*e5436536SAndroid Build Coastguard Worker /** 437*e5436536SAndroid Build Coastguard Worker * \brief Set one single MPEG Surround decoder parameter. 438*e5436536SAndroid Build Coastguard Worker * 439*e5436536SAndroid Build Coastguard Worker * \param pMpegSurroundDecoder A MPEG Surrround decoder handle. Must not be 440*e5436536SAndroid Build Coastguard Worker * NULL pointer. 441*e5436536SAndroid Build Coastguard Worker * \param param Parameter to be set. See SACDEC_PARAM. 442*e5436536SAndroid Build Coastguard Worker * \param value Parameter value. See SACDEC_PARAM. 443*e5436536SAndroid Build Coastguard Worker * 444*e5436536SAndroid Build Coastguard Worker * \return 0 on sucess, and non-zero on failure. 445*e5436536SAndroid Build Coastguard Worker */ 446*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR mpegSurroundDecoder_SetParam( 447*e5436536SAndroid Build Coastguard Worker CMpegSurroundDecoder *pMpegSurroundDecoder, const SACDEC_PARAM param, 448*e5436536SAndroid Build Coastguard Worker const INT value); 449*e5436536SAndroid Build Coastguard Worker 450*e5436536SAndroid Build Coastguard Worker /** 451*e5436536SAndroid Build Coastguard Worker * \brief Retrieve MPEG Surround decoder library info and fill info list with all depending library infos. 452*e5436536SAndroid Build Coastguard Worker * \param libInfo Pointer to library info list to be filled. 453*e5436536SAndroid Build Coastguard Worker * \return 0 on sucess, and non-zero on failure. 454*e5436536SAndroid Build Coastguard Worker **/ 455*e5436536SAndroid Build Coastguard Worker int mpegSurroundDecoder_GetLibInfo(LIB_INFO *libInfo); 456*e5436536SAndroid Build Coastguard Worker 457*e5436536SAndroid Build Coastguard Worker /** 458*e5436536SAndroid Build Coastguard Worker * \brief Set one single MPEG Surround decoder parameter. 459*e5436536SAndroid Build Coastguard Worker * 460*e5436536SAndroid Build Coastguard Worker * \param pMpegSurroundDecoder A valid MPEG Surrround decoder handle. 461*e5436536SAndroid Build Coastguard Worker * 462*e5436536SAndroid Build Coastguard Worker * \return The additional signal delay caused by the module. 463*e5436536SAndroid Build Coastguard Worker */ 464*e5436536SAndroid Build Coastguard Worker UINT mpegSurroundDecoder_GetDelay(const CMpegSurroundDecoder *self); 465*e5436536SAndroid Build Coastguard Worker 466*e5436536SAndroid Build Coastguard Worker /** 467*e5436536SAndroid Build Coastguard Worker * \brief Get info on whether the USAC pseudo LR feature is active. 468*e5436536SAndroid Build Coastguard Worker * 469*e5436536SAndroid Build Coastguard Worker * \param pMpegSurroundDecoder A valid MPEG Surrround decoder handle. 470*e5436536SAndroid Build Coastguard Worker * \param bsPseudoLr Pointer to return wether pseudo LR USAC feature 471*e5436536SAndroid Build Coastguard Worker * is used. 472*e5436536SAndroid Build Coastguard Worker * 473*e5436536SAndroid Build Coastguard Worker * \return 0 on sucess, and non-zero on failure. 474*e5436536SAndroid Build Coastguard Worker */ 475*e5436536SAndroid Build Coastguard Worker SACDEC_ERROR mpegSurroundDecoder_IsPseudoLR( 476*e5436536SAndroid Build Coastguard Worker CMpegSurroundDecoder *pMpegSurroundDecoder, int *bsPseudoLr); 477*e5436536SAndroid Build Coastguard Worker 478*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus 479*e5436536SAndroid Build Coastguard Worker } 480*e5436536SAndroid Build Coastguard Worker #endif /* __cplusplus */ 481*e5436536SAndroid Build Coastguard Worker 482*e5436536SAndroid Build Coastguard Worker #endif /* #ifndef SAC_DEC_LIB_H */ 483