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 - 2019 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 /**************************** AAC decoder library ****************************** 96*e5436536SAndroid Build Coastguard Worker 97*e5436536SAndroid Build Coastguard Worker Author(s): Manuel Jander 98*e5436536SAndroid Build Coastguard Worker 99*e5436536SAndroid Build Coastguard Worker Description: 100*e5436536SAndroid Build Coastguard Worker 101*e5436536SAndroid Build Coastguard Worker *******************************************************************************/ 102*e5436536SAndroid Build Coastguard Worker 103*e5436536SAndroid Build Coastguard Worker #ifndef AACDECODER_LIB_H 104*e5436536SAndroid Build Coastguard Worker #define AACDECODER_LIB_H 105*e5436536SAndroid Build Coastguard Worker 106*e5436536SAndroid Build Coastguard Worker /** 107*e5436536SAndroid Build Coastguard Worker * \file aacdecoder_lib.h 108*e5436536SAndroid Build Coastguard Worker * \brief FDK AAC decoder library interface header file. 109*e5436536SAndroid Build Coastguard Worker * 110*e5436536SAndroid Build Coastguard Worker 111*e5436536SAndroid Build Coastguard Worker \page INTRO Introduction 112*e5436536SAndroid Build Coastguard Worker 113*e5436536SAndroid Build Coastguard Worker 114*e5436536SAndroid Build Coastguard Worker \section SCOPE Scope 115*e5436536SAndroid Build Coastguard Worker 116*e5436536SAndroid Build Coastguard Worker This document describes the high-level application interface and usage of the 117*e5436536SAndroid Build Coastguard Worker ISO/MPEG-2/4 AAC Decoder library developed by the Fraunhofer Institute for 118*e5436536SAndroid Build Coastguard Worker Integrated Circuits (IIS). Depending on the library configuration, decoding of 119*e5436536SAndroid Build Coastguard Worker AAC-LC (Low-Complexity), HE-AAC (High-Efficiency AAC v1 and v2), AAC-LD 120*e5436536SAndroid Build Coastguard Worker (Low-Delay) and AAC-ELD (Enhanced Low-Delay) is implemented. 121*e5436536SAndroid Build Coastguard Worker 122*e5436536SAndroid Build Coastguard Worker All references to SBR (Spectral Band Replication) are only applicable to HE-AAC 123*e5436536SAndroid Build Coastguard Worker and AAC-ELD configurations of the FDK library. All references to PS (Parametric 124*e5436536SAndroid Build Coastguard Worker Stereo) are only applicable to HE-AAC v2 decoder configuration of the library. 125*e5436536SAndroid Build Coastguard Worker 126*e5436536SAndroid Build Coastguard Worker \section DecoderBasics Decoder Basics 127*e5436536SAndroid Build Coastguard Worker 128*e5436536SAndroid Build Coastguard Worker This document can only give a rough overview about the ISO/MPEG-2, ISO/MPEG-4 129*e5436536SAndroid Build Coastguard Worker AAC audio and MPEG-D USAC coding standards. To understand all details referenced 130*e5436536SAndroid Build Coastguard Worker in this document, you are encouraged to read the following documents. 131*e5436536SAndroid Build Coastguard Worker 132*e5436536SAndroid Build Coastguard Worker - ISO/IEC 13818-7 (MPEG-2 AAC) Standard, defines the syntax of MPEG-2 AAC audio 133*e5436536SAndroid Build Coastguard Worker bitstreams. 134*e5436536SAndroid Build Coastguard Worker - ISO/IEC 14496-3 (MPEG-4 AAC, subpart 1 and 4) Standard, defines the syntax of 135*e5436536SAndroid Build Coastguard Worker MPEG-4 AAC audio bitstreams. 136*e5436536SAndroid Build Coastguard Worker - ISO/IEC 23003-3 (MPEG-D USAC), defines MPEG-D USAC unified speech and audio 137*e5436536SAndroid Build Coastguard Worker codec. 138*e5436536SAndroid Build Coastguard Worker - Lutzky, Schuller, Gayer, Krämer, Wabnik, "A guideline to audio codec 139*e5436536SAndroid Build Coastguard Worker delay", 116th AES Convention, May 8, 2004 140*e5436536SAndroid Build Coastguard Worker 141*e5436536SAndroid Build Coastguard Worker In short, MPEG Advanced Audio Coding is based on a time-to-frequency mapping of 142*e5436536SAndroid Build Coastguard Worker the signal. The signal is partitioned into overlapping time portions and 143*e5436536SAndroid Build Coastguard Worker transformed into frequency domain. The spectral components are then quantized 144*e5436536SAndroid Build Coastguard Worker and coded using a highly efficient coding scheme.\n Encoded MPEG-2 and MPEG-4 145*e5436536SAndroid Build Coastguard Worker AAC audio bitstreams are composed of frames. Contrary to MPEG-1/2 Layer-3 (mp3), 146*e5436536SAndroid Build Coastguard Worker the length of individual frames is not restricted to a fixed number of bytes, 147*e5436536SAndroid Build Coastguard Worker but can take any length between 1 and 768 bytes. 148*e5436536SAndroid Build Coastguard Worker 149*e5436536SAndroid Build Coastguard Worker In addition to the above mentioned frequency domain coding mode, MPEG-D USAC 150*e5436536SAndroid Build Coastguard Worker also employs a time domain Algebraic Code-Excited Linear Prediction (ACELP) 151*e5436536SAndroid Build Coastguard Worker speech coder core. This operating mode is selected by the encoder in order to 152*e5436536SAndroid Build Coastguard Worker achieve the optimum audio quality for different content type. Several 153*e5436536SAndroid Build Coastguard Worker enhancements allow achieving higher quality at lower bit rates compared to 154*e5436536SAndroid Build Coastguard Worker MPEG-4 HE-AAC. 155*e5436536SAndroid Build Coastguard Worker 156*e5436536SAndroid Build Coastguard Worker 157*e5436536SAndroid Build Coastguard Worker \page LIBUSE Library Usage 158*e5436536SAndroid Build Coastguard Worker 159*e5436536SAndroid Build Coastguard Worker 160*e5436536SAndroid Build Coastguard Worker \section InterfaceDescritpion API Description 161*e5436536SAndroid Build Coastguard Worker 162*e5436536SAndroid Build Coastguard Worker All API header files are located in the folder /include of the release package. 163*e5436536SAndroid Build Coastguard Worker The contents of each file is described in detail in this document. All header 164*e5436536SAndroid Build Coastguard Worker files are provided for usage in specific C/C++ programs. The main AAC decoder 165*e5436536SAndroid Build Coastguard Worker library API functions are located in aacdecoder_lib.h header file. 166*e5436536SAndroid Build Coastguard Worker 167*e5436536SAndroid Build Coastguard Worker 168*e5436536SAndroid Build Coastguard Worker \section Calling_Sequence Calling Sequence 169*e5436536SAndroid Build Coastguard Worker 170*e5436536SAndroid Build Coastguard Worker The following sequence is necessary for proper decoding of ISO/MPEG-2/4 AAC, 171*e5436536SAndroid Build Coastguard Worker HE-AAC v2, or MPEG-D USAC bitstreams. In the following description, input stream 172*e5436536SAndroid Build Coastguard Worker read and output write function details are left out, since they may be 173*e5436536SAndroid Build Coastguard Worker implemented in a variety of configurations depending on the user's specific 174*e5436536SAndroid Build Coastguard Worker requirements. 175*e5436536SAndroid Build Coastguard Worker 176*e5436536SAndroid Build Coastguard Worker 177*e5436536SAndroid Build Coastguard Worker -# Call aacDecoder_Open() to open and retrieve a handle to a new AAC decoder 178*e5436536SAndroid Build Coastguard Worker instance. \code aacDecoderInfo = aacDecoder_Open(transportType, nrOfLayers); 179*e5436536SAndroid Build Coastguard Worker \endcode 180*e5436536SAndroid Build Coastguard Worker -# If out-of-band config data (Audio Specific Config (ASC) or Stream Mux Config 181*e5436536SAndroid Build Coastguard Worker (SMC)) is available, call aacDecoder_ConfigRaw() to pass this data to the 182*e5436536SAndroid Build Coastguard Worker decoder before beginning the decoding process. If this data is not available in 183*e5436536SAndroid Build Coastguard Worker advance, the decoder will configure itself while decoding, during the 184*e5436536SAndroid Build Coastguard Worker aacDecoder_DecodeFrame() function call. 185*e5436536SAndroid Build Coastguard Worker -# Begin decoding loop. 186*e5436536SAndroid Build Coastguard Worker \code 187*e5436536SAndroid Build Coastguard Worker do { 188*e5436536SAndroid Build Coastguard Worker \endcode 189*e5436536SAndroid Build Coastguard Worker -# Read data from bitstream file or stream buffer in to the driver program 190*e5436536SAndroid Build Coastguard Worker working memory (a client-supplied input buffer "inBuffer" in framework). This 191*e5436536SAndroid Build Coastguard Worker buffer will be used to load AAC bitstream data to the decoder. Only when all 192*e5436536SAndroid Build Coastguard Worker data in this buffer has been processed will the decoder signal an empty buffer. 193*e5436536SAndroid Build Coastguard Worker -# Call aacDecoder_Fill() to fill the decoder's internal bitstream input buffer 194*e5436536SAndroid Build Coastguard Worker with the client-supplied bitstream input buffer. Note, if the data loaded in to 195*e5436536SAndroid Build Coastguard Worker the internal buffer is not sufficient to decode a frame, 196*e5436536SAndroid Build Coastguard Worker aacDecoder_DecodeFrame() will return ::AAC_DEC_NOT_ENOUGH_BITS until a 197*e5436536SAndroid Build Coastguard Worker sufficient amount of data is loaded in to the internal buffer. For streaming 198*e5436536SAndroid Build Coastguard Worker formats (ADTS, LOAS), it is acceptable to load more than one frame to the 199*e5436536SAndroid Build Coastguard Worker decoder. However, for packed based formats, only one frame may be loaded to the 200*e5436536SAndroid Build Coastguard Worker decoder per aacDecoder_DecodeFrame() call. For least amount of communication 201*e5436536SAndroid Build Coastguard Worker delay, fill and decode should be performed on a frame by frame basis. \code 202*e5436536SAndroid Build Coastguard Worker ErrorStatus = aacDecoder_Fill(aacDecoderInfo, inBuffer, bytesRead, 203*e5436536SAndroid Build Coastguard Worker bytesValid); \endcode 204*e5436536SAndroid Build Coastguard Worker -# Call aacDecoder_DecodeFrame(). This function decodes one frame and writes 205*e5436536SAndroid Build Coastguard Worker decoded PCM audio data to a client-supplied buffer. It is the client's 206*e5436536SAndroid Build Coastguard Worker responsibility to allocate a buffer which is large enough to hold the decoded 207*e5436536SAndroid Build Coastguard Worker output data. \code ErrorStatus = aacDecoder_DecodeFrame(aacDecoderInfo, 208*e5436536SAndroid Build Coastguard Worker TimeData, OUT_BUF_SIZE, flags); \endcode If the bitstream configuration (number 209*e5436536SAndroid Build Coastguard Worker of channels, sample rate, frame size) is not known a priori, you may call 210*e5436536SAndroid Build Coastguard Worker aacDecoder_GetStreamInfo() to retrieve a structure that contains this 211*e5436536SAndroid Build Coastguard Worker information. You may use this data to initialize an audio output device. \code 212*e5436536SAndroid Build Coastguard Worker p_si = aacDecoder_GetStreamInfo(aacDecoderInfo); 213*e5436536SAndroid Build Coastguard Worker \endcode 214*e5436536SAndroid Build Coastguard Worker -# Repeat steps 5 to 7 until no data is available to decode any more, or in case 215*e5436536SAndroid Build Coastguard Worker of error. \code } while (bytesRead[0] > 0 || doFlush || doBsFlush || 216*e5436536SAndroid Build Coastguard Worker forceContinue); \endcode 217*e5436536SAndroid Build Coastguard Worker -# Call aacDecoder_Close() to de-allocate all AAC decoder and transport layer 218*e5436536SAndroid Build Coastguard Worker structures. \code aacDecoder_Close(aacDecoderInfo); \endcode 219*e5436536SAndroid Build Coastguard Worker 220*e5436536SAndroid Build Coastguard Worker \image latex decode.png "Decode calling sequence" width=11cm 221*e5436536SAndroid Build Coastguard Worker 222*e5436536SAndroid Build Coastguard Worker \image latex change_source.png "Change data source sequence" width=5cm 223*e5436536SAndroid Build Coastguard Worker 224*e5436536SAndroid Build Coastguard Worker \image latex conceal.png "Error concealment sequence" width=14cm 225*e5436536SAndroid Build Coastguard Worker 226*e5436536SAndroid Build Coastguard Worker \subsection Error_Concealment_Sequence Error Concealment Sequence 227*e5436536SAndroid Build Coastguard Worker 228*e5436536SAndroid Build Coastguard Worker There are different strategies to handle bit stream errors. Depending on the 229*e5436536SAndroid Build Coastguard Worker system properties the product designer might choose to take different actions in 230*e5436536SAndroid Build Coastguard Worker case a bit error occurs. In many cases the decoder might be able to do 231*e5436536SAndroid Build Coastguard Worker reasonable error concealment without the need of any additional actions from the 232*e5436536SAndroid Build Coastguard Worker system. But in some cases its not even possible to know how many decoded PCM 233*e5436536SAndroid Build Coastguard Worker output samples are required to fill the gap due to the data error, then the 234*e5436536SAndroid Build Coastguard Worker software surrounding the decoder must deal with the situation. The most simple 235*e5436536SAndroid Build Coastguard Worker way would be to just stop audio playback and resume once enough bit stream data 236*e5436536SAndroid Build Coastguard Worker and/or buffered output samples are available. More sophisticated designs might 237*e5436536SAndroid Build Coastguard Worker also be able to deal with sender/receiver clock drifts or data drop outs by 238*e5436536SAndroid Build Coastguard Worker using a closed loop control of FIFO fulness levels. The chosen strategy depends 239*e5436536SAndroid Build Coastguard Worker on the final product requirements. 240*e5436536SAndroid Build Coastguard Worker 241*e5436536SAndroid Build Coastguard Worker The error concealment sequence diagram illustrates the general execution paths 242*e5436536SAndroid Build Coastguard Worker for error handling. 243*e5436536SAndroid Build Coastguard Worker 244*e5436536SAndroid Build Coastguard Worker The macro IS_OUTPUT_VALID(err) can be used to identify if the audio output 245*e5436536SAndroid Build Coastguard Worker buffer contains valid audio either from error free bit stream data or successful 246*e5436536SAndroid Build Coastguard Worker error concealment. In case the result is false, the decoder output buffer does 247*e5436536SAndroid Build Coastguard Worker not contain meaningful audio samples and should not be passed to any output as 248*e5436536SAndroid Build Coastguard Worker it is. Most likely in case that a continuous audio output PCM stream is 249*e5436536SAndroid Build Coastguard Worker required, the output buffer must be filled with audio data from the calling 250*e5436536SAndroid Build Coastguard Worker framework. This might be e.g. an appropriate number of samples all zero. 251*e5436536SAndroid Build Coastguard Worker 252*e5436536SAndroid Build Coastguard Worker If error code ::AAC_DEC_TRANSPORT_SYNC_ERROR is returned by the decoder, under 253*e5436536SAndroid Build Coastguard Worker some particular conditions it is possible to estimate lost frames due to the bit 254*e5436536SAndroid Build Coastguard Worker stream error. In that case the bit stream is required to have a constant 255*e5436536SAndroid Build Coastguard Worker bitrate, and compatible transport type. Audio samples for the lost frames can be 256*e5436536SAndroid Build Coastguard Worker obtained by calling aacDecoder_DecodeFrame() with flag ::AACDEC_CONCEAL set 257*e5436536SAndroid Build Coastguard Worker n-times where n is the count of lost frames. Please note that the decoder has to 258*e5436536SAndroid Build Coastguard Worker have encountered valid configuration data at least once to be able to generate 259*e5436536SAndroid Build Coastguard Worker concealed data, because at the minimum the sampling rate, frame size and amount 260*e5436536SAndroid Build Coastguard Worker of audio channels needs to be known. 261*e5436536SAndroid Build Coastguard Worker 262*e5436536SAndroid Build Coastguard Worker If it is not possible to get an estimation of lost frames then a constant 263*e5436536SAndroid Build Coastguard Worker fullness of the audio output buffer can be achieved by implementing different 264*e5436536SAndroid Build Coastguard Worker FIFO control techniques e.g. just stop taking of samples from the buffer to 265*e5436536SAndroid Build Coastguard Worker avoid underflow or stop filling new data to the buffer to avoid overflow. But 266*e5436536SAndroid Build Coastguard Worker this techniques are out of scope of this document. 267*e5436536SAndroid Build Coastguard Worker 268*e5436536SAndroid Build Coastguard Worker For a detailed description of a specific error code please refer also to 269*e5436536SAndroid Build Coastguard Worker ::AAC_DECODER_ERROR. 270*e5436536SAndroid Build Coastguard Worker 271*e5436536SAndroid Build Coastguard Worker \section BufferSystem Buffer System 272*e5436536SAndroid Build Coastguard Worker 273*e5436536SAndroid Build Coastguard Worker There are three main buffers in an AAC decoder application. One external input 274*e5436536SAndroid Build Coastguard Worker buffer to hold bitstream data from file I/O or elsewhere, one decoder-internal 275*e5436536SAndroid Build Coastguard Worker input buffer, and one to hold the decoded output PCM sample data. In resource 276*e5436536SAndroid Build Coastguard Worker limited applications, the output buffer may be reused as an external input 277*e5436536SAndroid Build Coastguard Worker buffer prior to the subsequence aacDecoder_Fill() function call. 278*e5436536SAndroid Build Coastguard Worker 279*e5436536SAndroid Build Coastguard Worker To feed the data to the decoder-internal input buffer, use the 280*e5436536SAndroid Build Coastguard Worker function aacDecoder_Fill(). This function returns important information 281*e5436536SAndroid Build Coastguard Worker regarding the number of bytes in the external input buffer that have not yet 282*e5436536SAndroid Build Coastguard Worker been copied into the internal input buffer (variable bytesValid). Once the 283*e5436536SAndroid Build Coastguard Worker external buffer has been fully copied, it can be completely re-filled again. In 284*e5436536SAndroid Build Coastguard Worker case you wish to refill the buffer while there are unprocessed bytes (bytesValid 285*e5436536SAndroid Build Coastguard Worker is unequal 0), you should preserve the unconsumed data. However, we recommend to 286*e5436536SAndroid Build Coastguard Worker refill the buffer only when bytesValid returns 0. 287*e5436536SAndroid Build Coastguard Worker 288*e5436536SAndroid Build Coastguard Worker The bytesValid parameter is an input and output parameter to the FDK decoder. As 289*e5436536SAndroid Build Coastguard Worker an input, it signals how many valid bytes are available in the external buffer. 290*e5436536SAndroid Build Coastguard Worker After consumption of the external buffer using aacDecoder_Fill() function, the 291*e5436536SAndroid Build Coastguard Worker bytesValid parameter indicates if any of the bytes in the external buffer were 292*e5436536SAndroid Build Coastguard Worker not consumed. 293*e5436536SAndroid Build Coastguard Worker 294*e5436536SAndroid Build Coastguard Worker \image latex dec_buffer.png "Life cycle of the external input buffer" width=9cm 295*e5436536SAndroid Build Coastguard Worker 296*e5436536SAndroid Build Coastguard Worker \page OutputFormat Decoder audio output 297*e5436536SAndroid Build Coastguard Worker 298*e5436536SAndroid Build Coastguard Worker \section OutputFormatObtaining Obtaining channel mapping information 299*e5436536SAndroid Build Coastguard Worker 300*e5436536SAndroid Build Coastguard Worker The decoded audio output format is indicated by a set of variables of the 301*e5436536SAndroid Build Coastguard Worker CStreamInfo structure. While the struct members sampleRate, frameSize and 302*e5436536SAndroid Build Coastguard Worker numChannels might be self explanatory, pChannelType and pChannelIndices require 303*e5436536SAndroid Build Coastguard Worker some further explanation. 304*e5436536SAndroid Build Coastguard Worker 305*e5436536SAndroid Build Coastguard Worker These two arrays indicate the configuration of channel data within the output 306*e5436536SAndroid Build Coastguard Worker buffer. Both arrays have CStreamInfo::numChannels number of cells. Each cell of 307*e5436536SAndroid Build Coastguard Worker pChannelType indicates the channel type, which is described in the enum 308*e5436536SAndroid Build Coastguard Worker ::AUDIO_CHANNEL_TYPE (defined in FDK_audio.h). The cells of pChannelIndices 309*e5436536SAndroid Build Coastguard Worker indicate the sub index among the channels starting with 0 among channels of the 310*e5436536SAndroid Build Coastguard Worker same audio channel type. 311*e5436536SAndroid Build Coastguard Worker 312*e5436536SAndroid Build Coastguard Worker The indexing scheme is structured as defined in MPEG-2/4 Standards. Indices 313*e5436536SAndroid Build Coastguard Worker start from the front direction (a center channel if available, will always be 314*e5436536SAndroid Build Coastguard Worker index 0) and increment, starting with the left side, pairwise (e.g. L, R) and 315*e5436536SAndroid Build Coastguard Worker from front to back (Front L, Front R, Surround L, Surround R). For detailed 316*e5436536SAndroid Build Coastguard Worker explanation, please refer to ISO/IEC 13818-7:2005(E), chapter 8.5.3.2. 317*e5436536SAndroid Build Coastguard Worker 318*e5436536SAndroid Build Coastguard Worker In case a Program Config is included in the audio configuration, the channel 319*e5436536SAndroid Build Coastguard Worker mapping described within it will be adopted. 320*e5436536SAndroid Build Coastguard Worker 321*e5436536SAndroid Build Coastguard Worker The examples below explain these aspects in detail. 322*e5436536SAndroid Build Coastguard Worker 323*e5436536SAndroid Build Coastguard Worker \section OutputFormatChange Changing the audio output format 324*e5436536SAndroid Build Coastguard Worker 325*e5436536SAndroid Build Coastguard Worker For MPEG-4 audio the channel order can be changed at runtime through the 326*e5436536SAndroid Build Coastguard Worker parameter 327*e5436536SAndroid Build Coastguard Worker ::AAC_PCM_OUTPUT_CHANNEL_MAPPING. See the description of those 328*e5436536SAndroid Build Coastguard Worker parameters and the decoder library function aacDecoder_SetParam() for more 329*e5436536SAndroid Build Coastguard Worker detail. 330*e5436536SAndroid Build Coastguard Worker 331*e5436536SAndroid Build Coastguard Worker \section OutputFormatExample Channel mapping examples 332*e5436536SAndroid Build Coastguard Worker 333*e5436536SAndroid Build Coastguard Worker The following examples illustrate the location of individual audio samples in 334*e5436536SAndroid Build Coastguard Worker the audio buffer that is passed to aacDecoder_DecodeFrame() and the expected 335*e5436536SAndroid Build Coastguard Worker data in the CStreamInfo structure which can be obtained by calling 336*e5436536SAndroid Build Coastguard Worker aacDecoder_GetStreamInfo(). 337*e5436536SAndroid Build Coastguard Worker 338*e5436536SAndroid Build Coastguard Worker \subsection ExamplesStereo Stereo 339*e5436536SAndroid Build Coastguard Worker 340*e5436536SAndroid Build Coastguard Worker In case of ::AAC_PCM_OUTPUT_CHANNEL_MAPPING set to 1, 341*e5436536SAndroid Build Coastguard Worker a AAC-LC bit stream which has channelConfiguration = 2 in its audio specific 342*e5436536SAndroid Build Coastguard Worker config would lead to the following values in CStreamInfo: 343*e5436536SAndroid Build Coastguard Worker 344*e5436536SAndroid Build Coastguard Worker CStreamInfo::numChannels = 2 345*e5436536SAndroid Build Coastguard Worker 346*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelType = { ::ACT_FRONT, ::ACT_FRONT } 347*e5436536SAndroid Build Coastguard Worker 348*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelIndices = { 0, 1 } 349*e5436536SAndroid Build Coastguard Worker 350*e5436536SAndroid Build Coastguard Worker The output buffer will be formatted as follows: 351*e5436536SAndroid Build Coastguard Worker 352*e5436536SAndroid Build Coastguard Worker \verbatim 353*e5436536SAndroid Build Coastguard Worker <left sample 0> <left sample 1> <left sample 2> ... <left sample N> 354*e5436536SAndroid Build Coastguard Worker <right sample 0> <right sample 1> <right sample 2> ... <right sample N> 355*e5436536SAndroid Build Coastguard Worker \endverbatim 356*e5436536SAndroid Build Coastguard Worker 357*e5436536SAndroid Build Coastguard Worker Where N equals to CStreamInfo::frameSize . 358*e5436536SAndroid Build Coastguard Worker 359*e5436536SAndroid Build Coastguard Worker \subsection ExamplesSurround Surround 5.1 360*e5436536SAndroid Build Coastguard Worker 361*e5436536SAndroid Build Coastguard Worker In case of ::AAC_PCM_OUTPUT_CHANNEL_MAPPING set to 1, 362*e5436536SAndroid Build Coastguard Worker a AAC-LC bit stream which has channelConfiguration = 6 in its audio specific 363*e5436536SAndroid Build Coastguard Worker config, would lead to the following values in CStreamInfo: 364*e5436536SAndroid Build Coastguard Worker 365*e5436536SAndroid Build Coastguard Worker CStreamInfo::numChannels = 6 366*e5436536SAndroid Build Coastguard Worker 367*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelType = { ::ACT_FRONT, ::ACT_FRONT, ::ACT_FRONT, ::ACT_LFE, 368*e5436536SAndroid Build Coastguard Worker ::ACT_BACK, ::ACT_BACK } 369*e5436536SAndroid Build Coastguard Worker 370*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelIndices = { 1, 2, 0, 0, 0, 1 } 371*e5436536SAndroid Build Coastguard Worker 372*e5436536SAndroid Build Coastguard Worker Since ::AAC_PCM_OUTPUT_CHANNEL_MAPPING is 1, WAV file channel ordering will be 373*e5436536SAndroid Build Coastguard Worker used. For a 5.1 channel scheme, thus the channels would be: front left, front 374*e5436536SAndroid Build Coastguard Worker right, center, LFE, surround left, surround right. Thus the third channel is the 375*e5436536SAndroid Build Coastguard Worker center channel, receiving the index 0. The other front channels are front left, 376*e5436536SAndroid Build Coastguard Worker front right being placed as first and second channels with indices 1 and 2 377*e5436536SAndroid Build Coastguard Worker correspondingly. There is only one LFE, placed as the fourth channel and index 378*e5436536SAndroid Build Coastguard Worker 0. Finally both surround channels get the type definition ACT_BACK, and the 379*e5436536SAndroid Build Coastguard Worker indices 0 and 1. 380*e5436536SAndroid Build Coastguard Worker 381*e5436536SAndroid Build Coastguard Worker The output buffer will be formatted as follows: 382*e5436536SAndroid Build Coastguard Worker 383*e5436536SAndroid Build Coastguard Worker \verbatim 384*e5436536SAndroid Build Coastguard Worker <front left sample 0> <front right sample 0> 385*e5436536SAndroid Build Coastguard Worker <center sample 0> <LFE sample 0> 386*e5436536SAndroid Build Coastguard Worker <surround left sample 0> <surround right sample 0> 387*e5436536SAndroid Build Coastguard Worker 388*e5436536SAndroid Build Coastguard Worker <front left sample 1> <front right sample 1> 389*e5436536SAndroid Build Coastguard Worker <center sample 1> <LFE sample 1> 390*e5436536SAndroid Build Coastguard Worker <surround left sample 1> <surround right sample 1> 391*e5436536SAndroid Build Coastguard Worker 392*e5436536SAndroid Build Coastguard Worker ... 393*e5436536SAndroid Build Coastguard Worker 394*e5436536SAndroid Build Coastguard Worker <front left sample N> <front right sample N> 395*e5436536SAndroid Build Coastguard Worker <center sample N> <LFE sample N> 396*e5436536SAndroid Build Coastguard Worker <surround left sample N> <surround right sample N> 397*e5436536SAndroid Build Coastguard Worker \endverbatim 398*e5436536SAndroid Build Coastguard Worker 399*e5436536SAndroid Build Coastguard Worker Where N equals to CStreamInfo::frameSize . 400*e5436536SAndroid Build Coastguard Worker 401*e5436536SAndroid Build Coastguard Worker \subsection ExamplesArib ARIB coding mode 2/1 402*e5436536SAndroid Build Coastguard Worker 403*e5436536SAndroid Build Coastguard Worker In case of ::AAC_PCM_OUTPUT_CHANNEL_MAPPING set to 1, 404*e5436536SAndroid Build Coastguard Worker in case of a ARIB bit stream using coding mode 2/1 as described in ARIB STD-B32 405*e5436536SAndroid Build Coastguard Worker Part 2 Version 2.1-E1, page 61, would lead to the following values in 406*e5436536SAndroid Build Coastguard Worker CStreamInfo: 407*e5436536SAndroid Build Coastguard Worker 408*e5436536SAndroid Build Coastguard Worker CStreamInfo::numChannels = 3 409*e5436536SAndroid Build Coastguard Worker 410*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelType = { ::ACT_FRONT, ::ACT_FRONT, ::ACT_BACK } 411*e5436536SAndroid Build Coastguard Worker 412*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelIndices = { 0, 1, 0 } 413*e5436536SAndroid Build Coastguard Worker 414*e5436536SAndroid Build Coastguard Worker The audio channels will be placed as follows in the audio output buffer: 415*e5436536SAndroid Build Coastguard Worker 416*e5436536SAndroid Build Coastguard Worker \verbatim 417*e5436536SAndroid Build Coastguard Worker <front left sample 0> <front right sample 0> <mid surround sample 0> 418*e5436536SAndroid Build Coastguard Worker 419*e5436536SAndroid Build Coastguard Worker <front left sample 1> <front right sample 1> <mid surround sample 1> 420*e5436536SAndroid Build Coastguard Worker 421*e5436536SAndroid Build Coastguard Worker ... 422*e5436536SAndroid Build Coastguard Worker 423*e5436536SAndroid Build Coastguard Worker <front left sample N> <front right sample N> <mid surround sample N> 424*e5436536SAndroid Build Coastguard Worker 425*e5436536SAndroid Build Coastguard Worker Where N equals to CStreamInfo::frameSize . 426*e5436536SAndroid Build Coastguard Worker 427*e5436536SAndroid Build Coastguard Worker \endverbatim 428*e5436536SAndroid Build Coastguard Worker 429*e5436536SAndroid Build Coastguard Worker */ 430*e5436536SAndroid Build Coastguard Worker 431*e5436536SAndroid Build Coastguard Worker #include "machine_type.h" 432*e5436536SAndroid Build Coastguard Worker #include "FDK_audio.h" 433*e5436536SAndroid Build Coastguard Worker 434*e5436536SAndroid Build Coastguard Worker #define AACDECODER_LIB_VL0 3 435*e5436536SAndroid Build Coastguard Worker #define AACDECODER_LIB_VL1 2 436*e5436536SAndroid Build Coastguard Worker #define AACDECODER_LIB_VL2 0 437*e5436536SAndroid Build Coastguard Worker 438*e5436536SAndroid Build Coastguard Worker #include "genericStds.h" 439*e5436536SAndroid Build Coastguard Worker /** 440*e5436536SAndroid Build Coastguard Worker * \brief AAC decoder error codes. 441*e5436536SAndroid Build Coastguard Worker */ 442*e5436536SAndroid Build Coastguard Worker typedef enum { 443*e5436536SAndroid Build Coastguard Worker AAC_DEC_OK = 444*e5436536SAndroid Build Coastguard Worker 0x0000, /*!< No error occurred. Output buffer is valid and error free. */ 445*e5436536SAndroid Build Coastguard Worker AAC_DEC_OUT_OF_MEMORY = 446*e5436536SAndroid Build Coastguard Worker 0x0002, /*!< Heap returned NULL pointer. Output buffer is invalid. */ 447*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNKNOWN = 448*e5436536SAndroid Build Coastguard Worker 0x0005, /*!< Error condition is of unknown reason, or from a another 449*e5436536SAndroid Build Coastguard Worker module. Output buffer is invalid. */ 450*e5436536SAndroid Build Coastguard Worker 451*e5436536SAndroid Build Coastguard Worker /* Synchronization errors. Output buffer is invalid. */ 452*e5436536SAndroid Build Coastguard Worker aac_dec_sync_error_start = 0x1000, 453*e5436536SAndroid Build Coastguard Worker AAC_DEC_TRANSPORT_SYNC_ERROR = 0x1001, /*!< The transport decoder had 454*e5436536SAndroid Build Coastguard Worker synchronization problems. Do not 455*e5436536SAndroid Build Coastguard Worker exit decoding. Just feed new 456*e5436536SAndroid Build Coastguard Worker bitstream data. */ 457*e5436536SAndroid Build Coastguard Worker AAC_DEC_NOT_ENOUGH_BITS = 0x1002, /*!< The input buffer ran out of bits. */ 458*e5436536SAndroid Build Coastguard Worker aac_dec_sync_error_end = 0x1FFF, 459*e5436536SAndroid Build Coastguard Worker 460*e5436536SAndroid Build Coastguard Worker /* Initialization errors. Output buffer is invalid. */ 461*e5436536SAndroid Build Coastguard Worker aac_dec_init_error_start = 0x2000, 462*e5436536SAndroid Build Coastguard Worker AAC_DEC_INVALID_HANDLE = 463*e5436536SAndroid Build Coastguard Worker 0x2001, /*!< The handle passed to the function call was invalid (NULL). */ 464*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_AOT = 465*e5436536SAndroid Build Coastguard Worker 0x2002, /*!< The AOT found in the configuration is not supported. */ 466*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_FORMAT = 467*e5436536SAndroid Build Coastguard Worker 0x2003, /*!< The bitstream format is not supported. */ 468*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_ER_FORMAT = 469*e5436536SAndroid Build Coastguard Worker 0x2004, /*!< The error resilience tool format is not supported. */ 470*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_EPCONFIG = 471*e5436536SAndroid Build Coastguard Worker 0x2005, /*!< The error protection format is not supported. */ 472*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_MULTILAYER = 473*e5436536SAndroid Build Coastguard Worker 0x2006, /*!< More than one layer for AAC scalable is not supported. */ 474*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_CHANNELCONFIG = 475*e5436536SAndroid Build Coastguard Worker 0x2007, /*!< The channel configuration (either number or arrangement) is 476*e5436536SAndroid Build Coastguard Worker not supported. */ 477*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_SAMPLINGRATE = 0x2008, /*!< The sample rate specified in 478*e5436536SAndroid Build Coastguard Worker the configuration is not 479*e5436536SAndroid Build Coastguard Worker supported. */ 480*e5436536SAndroid Build Coastguard Worker AAC_DEC_INVALID_SBR_CONFIG = 481*e5436536SAndroid Build Coastguard Worker 0x2009, /*!< The SBR configuration is not supported. */ 482*e5436536SAndroid Build Coastguard Worker AAC_DEC_SET_PARAM_FAIL = 0x200A, /*!< The parameter could not be set. Either 483*e5436536SAndroid Build Coastguard Worker the value was out of range or the 484*e5436536SAndroid Build Coastguard Worker parameter does not exist. */ 485*e5436536SAndroid Build Coastguard Worker AAC_DEC_NEED_TO_RESTART = 0x200B, /*!< The decoder needs to be restarted, 486*e5436536SAndroid Build Coastguard Worker since the required configuration change 487*e5436536SAndroid Build Coastguard Worker cannot be performed. */ 488*e5436536SAndroid Build Coastguard Worker AAC_DEC_OUTPUT_BUFFER_TOO_SMALL = 489*e5436536SAndroid Build Coastguard Worker 0x200C, /*!< The provided output buffer is too small. */ 490*e5436536SAndroid Build Coastguard Worker aac_dec_init_error_end = 0x2FFF, 491*e5436536SAndroid Build Coastguard Worker 492*e5436536SAndroid Build Coastguard Worker /* Decode errors. Output buffer is valid but concealed. */ 493*e5436536SAndroid Build Coastguard Worker aac_dec_decode_error_start = 0x4000, 494*e5436536SAndroid Build Coastguard Worker AAC_DEC_TRANSPORT_ERROR = 495*e5436536SAndroid Build Coastguard Worker 0x4001, /*!< The transport decoder encountered an unexpected error. */ 496*e5436536SAndroid Build Coastguard Worker AAC_DEC_PARSE_ERROR = 0x4002, /*!< Error while parsing the bitstream. Most 497*e5436536SAndroid Build Coastguard Worker probably it is corrupted, or the system 498*e5436536SAndroid Build Coastguard Worker crashed. */ 499*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_EXTENSION_PAYLOAD = 500*e5436536SAndroid Build Coastguard Worker 0x4003, /*!< Error while parsing the extension payload of the bitstream. 501*e5436536SAndroid Build Coastguard Worker The extension payload type found is not supported. */ 502*e5436536SAndroid Build Coastguard Worker AAC_DEC_DECODE_FRAME_ERROR = 0x4004, /*!< The parsed bitstream value is out of 503*e5436536SAndroid Build Coastguard Worker range. Most probably the bitstream is 504*e5436536SAndroid Build Coastguard Worker corrupt, or the system crashed. */ 505*e5436536SAndroid Build Coastguard Worker AAC_DEC_CRC_ERROR = 0x4005, /*!< The embedded CRC did not match. */ 506*e5436536SAndroid Build Coastguard Worker AAC_DEC_INVALID_CODE_BOOK = 0x4006, /*!< An invalid codebook was signaled. 507*e5436536SAndroid Build Coastguard Worker Most probably the bitstream is corrupt, 508*e5436536SAndroid Build Coastguard Worker or the system crashed. */ 509*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_PREDICTION = 510*e5436536SAndroid Build Coastguard Worker 0x4007, /*!< Predictor found, but not supported in the AAC Low Complexity 511*e5436536SAndroid Build Coastguard Worker profile. Most probably the bitstream is corrupt, or has a wrong 512*e5436536SAndroid Build Coastguard Worker format. */ 513*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_CCE = 0x4008, /*!< A CCE element was found which is not 514*e5436536SAndroid Build Coastguard Worker supported. Most probably the bitstream is 515*e5436536SAndroid Build Coastguard Worker corrupt, or has a wrong format. */ 516*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_LFE = 0x4009, /*!< A LFE element was found which is not 517*e5436536SAndroid Build Coastguard Worker supported. Most probably the bitstream is 518*e5436536SAndroid Build Coastguard Worker corrupt, or has a wrong format. */ 519*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_GAIN_CONTROL_DATA = 520*e5436536SAndroid Build Coastguard Worker 0x400A, /*!< Gain control data found but not supported. Most probably the 521*e5436536SAndroid Build Coastguard Worker bitstream is corrupt, or has a wrong format. */ 522*e5436536SAndroid Build Coastguard Worker AAC_DEC_UNSUPPORTED_SBA = 523*e5436536SAndroid Build Coastguard Worker 0x400B, /*!< SBA found, but currently not supported in the BSAC profile. 524*e5436536SAndroid Build Coastguard Worker */ 525*e5436536SAndroid Build Coastguard Worker AAC_DEC_TNS_READ_ERROR = 0x400C, /*!< Error while reading TNS data. Most 526*e5436536SAndroid Build Coastguard Worker probably the bitstream is corrupt or the 527*e5436536SAndroid Build Coastguard Worker system crashed. */ 528*e5436536SAndroid Build Coastguard Worker AAC_DEC_RVLC_ERROR = 529*e5436536SAndroid Build Coastguard Worker 0x400D, /*!< Error while decoding error resilient data. */ 530*e5436536SAndroid Build Coastguard Worker aac_dec_decode_error_end = 0x4FFF, 531*e5436536SAndroid Build Coastguard Worker /* Ancillary data errors. Output buffer is valid. */ 532*e5436536SAndroid Build Coastguard Worker aac_dec_anc_data_error_start = 0x8000, 533*e5436536SAndroid Build Coastguard Worker AAC_DEC_ANC_DATA_ERROR = 534*e5436536SAndroid Build Coastguard Worker 0x8001, /*!< Non severe error concerning the ancillary data handling. */ 535*e5436536SAndroid Build Coastguard Worker AAC_DEC_TOO_SMALL_ANC_BUFFER = 0x8002, /*!< The registered ancillary data 536*e5436536SAndroid Build Coastguard Worker buffer is too small to receive the 537*e5436536SAndroid Build Coastguard Worker parsed data. */ 538*e5436536SAndroid Build Coastguard Worker AAC_DEC_TOO_MANY_ANC_ELEMENTS = 0x8003, /*!< More than the allowed number of 539*e5436536SAndroid Build Coastguard Worker ancillary data elements should be 540*e5436536SAndroid Build Coastguard Worker written to buffer. */ 541*e5436536SAndroid Build Coastguard Worker aac_dec_anc_data_error_end = 0x8FFF 542*e5436536SAndroid Build Coastguard Worker 543*e5436536SAndroid Build Coastguard Worker } AAC_DECODER_ERROR; 544*e5436536SAndroid Build Coastguard Worker 545*e5436536SAndroid Build Coastguard Worker /** Macro to identify initialization errors. Output buffer is invalid. */ 546*e5436536SAndroid Build Coastguard Worker #define IS_INIT_ERROR(err) \ 547*e5436536SAndroid Build Coastguard Worker ((((err) >= aac_dec_init_error_start) && ((err) <= aac_dec_init_error_end)) \ 548*e5436536SAndroid Build Coastguard Worker ? 1 \ 549*e5436536SAndroid Build Coastguard Worker : 0) 550*e5436536SAndroid Build Coastguard Worker /** Macro to identify decode errors. Output buffer is valid but concealed. */ 551*e5436536SAndroid Build Coastguard Worker #define IS_DECODE_ERROR(err) \ 552*e5436536SAndroid Build Coastguard Worker ((((err) >= aac_dec_decode_error_start) && \ 553*e5436536SAndroid Build Coastguard Worker ((err) <= aac_dec_decode_error_end)) \ 554*e5436536SAndroid Build Coastguard Worker ? 1 \ 555*e5436536SAndroid Build Coastguard Worker : 0) 556*e5436536SAndroid Build Coastguard Worker /** 557*e5436536SAndroid Build Coastguard Worker * Macro to identify if the audio output buffer contains valid samples after 558*e5436536SAndroid Build Coastguard Worker * calling aacDecoder_DecodeFrame(). Output buffer is valid but can be 559*e5436536SAndroid Build Coastguard Worker * concealed. 560*e5436536SAndroid Build Coastguard Worker */ 561*e5436536SAndroid Build Coastguard Worker #define IS_OUTPUT_VALID(err) (((err) == AAC_DEC_OK) || IS_DECODE_ERROR(err)) 562*e5436536SAndroid Build Coastguard Worker 563*e5436536SAndroid Build Coastguard Worker /*! \enum AAC_MD_PROFILE 564*e5436536SAndroid Build Coastguard Worker * \brief The available metadata profiles which are mostly related to downmixing. The values define the arguments 565*e5436536SAndroid Build Coastguard Worker * for the use with parameter ::AAC_METADATA_PROFILE. 566*e5436536SAndroid Build Coastguard Worker */ 567*e5436536SAndroid Build Coastguard Worker typedef enum { 568*e5436536SAndroid Build Coastguard Worker AAC_MD_PROFILE_MPEG_STANDARD = 569*e5436536SAndroid Build Coastguard Worker 0, /*!< The standard profile creates a mixdown signal based on the 570*e5436536SAndroid Build Coastguard Worker advanced downmix metadata (from a DSE). The equations and default 571*e5436536SAndroid Build Coastguard Worker values are defined in ISO/IEC 14496:3 Ammendment 4. Any other 572*e5436536SAndroid Build Coastguard Worker (legacy) downmix metadata will be ignored. No other parameter will 573*e5436536SAndroid Build Coastguard Worker be modified. */ 574*e5436536SAndroid Build Coastguard Worker AAC_MD_PROFILE_MPEG_LEGACY = 575*e5436536SAndroid Build Coastguard Worker 1, /*!< This profile behaves identical to the standard profile if advanced 576*e5436536SAndroid Build Coastguard Worker downmix metadata (from a DSE) is available. If not, the 577*e5436536SAndroid Build Coastguard Worker matrix_mixdown information embedded in the program configuration 578*e5436536SAndroid Build Coastguard Worker element (PCE) will be applied. If neither is the case, the module 579*e5436536SAndroid Build Coastguard Worker creates a mixdown using the default coefficients as defined in 580*e5436536SAndroid Build Coastguard Worker ISO/IEC 14496:3 AMD 4. The profile can be used to support legacy 581*e5436536SAndroid Build Coastguard Worker digital TV (e.g. DVB) streams. */ 582*e5436536SAndroid Build Coastguard Worker AAC_MD_PROFILE_MPEG_LEGACY_PRIO = 583*e5436536SAndroid Build Coastguard Worker 2, /*!< Similar to the ::AAC_MD_PROFILE_MPEG_LEGACY profile but if both 584*e5436536SAndroid Build Coastguard Worker the advanced (ISO/IEC 14496:3 AMD 4) and the legacy (PCE) MPEG 585*e5436536SAndroid Build Coastguard Worker downmix metadata are available the latter will be applied. 586*e5436536SAndroid Build Coastguard Worker */ 587*e5436536SAndroid Build Coastguard Worker AAC_MD_PROFILE_ARIB_JAPAN = 588*e5436536SAndroid Build Coastguard Worker 3 /*!< Downmix creation as described in ABNT NBR 15602-2. But if advanced 589*e5436536SAndroid Build Coastguard Worker downmix metadata (ISO/IEC 14496:3 AMD 4) is available it will be 590*e5436536SAndroid Build Coastguard Worker preferred because of the higher resolutions. In addition the 591*e5436536SAndroid Build Coastguard Worker metadata expiry time will be set to the value defined in the ARIB 592*e5436536SAndroid Build Coastguard Worker standard (see ::AAC_METADATA_EXPIRY_TIME). 593*e5436536SAndroid Build Coastguard Worker */ 594*e5436536SAndroid Build Coastguard Worker } AAC_MD_PROFILE; 595*e5436536SAndroid Build Coastguard Worker 596*e5436536SAndroid Build Coastguard Worker /*! \enum AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS 597*e5436536SAndroid Build Coastguard Worker * \brief Options for handling of DRC parameters, if presentation mode is not indicated in bitstream 598*e5436536SAndroid Build Coastguard Worker */ 599*e5436536SAndroid Build Coastguard Worker typedef enum { 600*e5436536SAndroid Build Coastguard Worker AAC_DRC_PARAMETER_HANDLING_DISABLED = -1, /*!< DRC parameter handling 601*e5436536SAndroid Build Coastguard Worker disabled, all parameters are 602*e5436536SAndroid Build Coastguard Worker applied as requested. */ 603*e5436536SAndroid Build Coastguard Worker AAC_DRC_PARAMETER_HANDLING_ENABLED = 604*e5436536SAndroid Build Coastguard Worker 0, /*!< Apply changes to requested DRC parameters to prevent clipping. */ 605*e5436536SAndroid Build Coastguard Worker AAC_DRC_PRESENTATION_MODE_1_DEFAULT = 606*e5436536SAndroid Build Coastguard Worker 1, /*!< Use DRC presentation mode 1 as default (e.g. for Nordig) */ 607*e5436536SAndroid Build Coastguard Worker AAC_DRC_PRESENTATION_MODE_2_DEFAULT = 608*e5436536SAndroid Build Coastguard Worker 2 /*!< Use DRC presentation mode 2 as default (e.g. for DTG DBook) */ 609*e5436536SAndroid Build Coastguard Worker } AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS; 610*e5436536SAndroid Build Coastguard Worker 611*e5436536SAndroid Build Coastguard Worker /** 612*e5436536SAndroid Build Coastguard Worker * \brief AAC decoder setting parameters 613*e5436536SAndroid Build Coastguard Worker */ 614*e5436536SAndroid Build Coastguard Worker typedef enum { 615*e5436536SAndroid Build Coastguard Worker AAC_PCM_DUAL_CHANNEL_OUTPUT_MODE = 616*e5436536SAndroid Build Coastguard Worker 0x0002, /*!< Defines how the decoder processes two channel signals: \n 617*e5436536SAndroid Build Coastguard Worker 0: Leave both signals as they are (default). \n 618*e5436536SAndroid Build Coastguard Worker 1: Create a dual mono output signal from channel 1. \n 619*e5436536SAndroid Build Coastguard Worker 2: Create a dual mono output signal from channel 2. \n 620*e5436536SAndroid Build Coastguard Worker 3: Create a dual mono output signal by mixing both channels 621*e5436536SAndroid Build Coastguard Worker (L' = R' = 0.5*Ch1 + 0.5*Ch2). */ 622*e5436536SAndroid Build Coastguard Worker AAC_PCM_OUTPUT_CHANNEL_MAPPING = 623*e5436536SAndroid Build Coastguard Worker 0x0003, /*!< Output buffer channel ordering. 0: MPEG PCE style order, 1: 624*e5436536SAndroid Build Coastguard Worker WAV file channel order (default). */ 625*e5436536SAndroid Build Coastguard Worker AAC_PCM_LIMITER_ENABLE = 626*e5436536SAndroid Build Coastguard Worker 0x0004, /*!< Enable signal level limiting. \n 627*e5436536SAndroid Build Coastguard Worker -1: Auto-config. Enable limiter for all 628*e5436536SAndroid Build Coastguard Worker non-lowdelay configurations by default. \n 629*e5436536SAndroid Build Coastguard Worker 0: Disable limiter in general. \n 630*e5436536SAndroid Build Coastguard Worker 1: Enable limiter always. 631*e5436536SAndroid Build Coastguard Worker It is recommended to call the decoder 632*e5436536SAndroid Build Coastguard Worker with a AACDEC_CLRHIST flag to reset all 633*e5436536SAndroid Build Coastguard Worker states when the limiter switch is changed 634*e5436536SAndroid Build Coastguard Worker explicitly. */ 635*e5436536SAndroid Build Coastguard Worker AAC_PCM_LIMITER_ATTACK_TIME = 0x0005, /*!< Signal level limiting attack time 636*e5436536SAndroid Build Coastguard Worker in ms. Default configuration is 15 637*e5436536SAndroid Build Coastguard Worker ms. Adjustable range from 1 ms to 15 638*e5436536SAndroid Build Coastguard Worker ms. */ 639*e5436536SAndroid Build Coastguard Worker AAC_PCM_LIMITER_RELEAS_TIME = 0x0006, /*!< Signal level limiting release time 640*e5436536SAndroid Build Coastguard Worker in ms. Default configuration is 50 641*e5436536SAndroid Build Coastguard Worker ms. Adjustable time must be larger 642*e5436536SAndroid Build Coastguard Worker than 0 ms. */ 643*e5436536SAndroid Build Coastguard Worker AAC_PCM_MIN_OUTPUT_CHANNELS = 644*e5436536SAndroid Build Coastguard Worker 0x0011, /*!< Minimum number of PCM output channels. If higher than the 645*e5436536SAndroid Build Coastguard Worker number of encoded audio channels, a simple channel extension is 646*e5436536SAndroid Build Coastguard Worker applied (see note 4 for exceptions). \n -1, 0: Disable channel 647*e5436536SAndroid Build Coastguard Worker extension feature. The decoder output contains the same number 648*e5436536SAndroid Build Coastguard Worker of channels as the encoded bitstream. \n 1: This value is 649*e5436536SAndroid Build Coastguard Worker currently needed only together with the mix-down feature. See 650*e5436536SAndroid Build Coastguard Worker ::AAC_PCM_MAX_OUTPUT_CHANNELS and note 2 below. \n 651*e5436536SAndroid Build Coastguard Worker 2: Encoded mono signals will be duplicated to achieve a 652*e5436536SAndroid Build Coastguard Worker 2/0/0.0 channel output configuration. \n 6: The decoder 653*e5436536SAndroid Build Coastguard Worker tries to reorder encoded signals with less than six channels to 654*e5436536SAndroid Build Coastguard Worker achieve a 3/0/2.1 channel output signal. Missing channels will 655*e5436536SAndroid Build Coastguard Worker be filled with a zero signal. If reordering is not possible the 656*e5436536SAndroid Build Coastguard Worker empty channels will simply be appended. Only available if 657*e5436536SAndroid Build Coastguard Worker instance is configured to support multichannel output. \n 8: 658*e5436536SAndroid Build Coastguard Worker The decoder tries to reorder encoded signals with less than 659*e5436536SAndroid Build Coastguard Worker eight channels to achieve a 3/0/4.1 channel output signal. 660*e5436536SAndroid Build Coastguard Worker Missing channels will be filled with a zero signal. If 661*e5436536SAndroid Build Coastguard Worker reordering is not possible the empty channels will simply be 662*e5436536SAndroid Build Coastguard Worker appended. Only available if instance is configured to 663*e5436536SAndroid Build Coastguard Worker support multichannel output.\n NOTE: \n 664*e5436536SAndroid Build Coastguard Worker 1. The channel signaling (CStreamInfo::pChannelType and 665*e5436536SAndroid Build Coastguard Worker CStreamInfo::pChannelIndices) will not be modified. Added empty 666*e5436536SAndroid Build Coastguard Worker channels will be signaled with channel type 667*e5436536SAndroid Build Coastguard Worker AUDIO_CHANNEL_TYPE::ACT_NONE. \n 668*e5436536SAndroid Build Coastguard Worker 2. If the parameter value is greater than that of 669*e5436536SAndroid Build Coastguard Worker ::AAC_PCM_MAX_OUTPUT_CHANNELS both will be set to the same 670*e5436536SAndroid Build Coastguard Worker value. \n 671*e5436536SAndroid Build Coastguard Worker 3. This parameter will be ignored if the number of encoded 672*e5436536SAndroid Build Coastguard Worker audio channels is greater than 8. */ 673*e5436536SAndroid Build Coastguard Worker AAC_PCM_MAX_OUTPUT_CHANNELS = 674*e5436536SAndroid Build Coastguard Worker 0x0012, /*!< Maximum number of PCM output channels. If lower than the 675*e5436536SAndroid Build Coastguard Worker number of encoded audio channels, downmixing is applied 676*e5436536SAndroid Build Coastguard Worker accordingly (see note 5 for exceptions). If dedicated metadata 677*e5436536SAndroid Build Coastguard Worker is available in the stream it will be used to achieve better 678*e5436536SAndroid Build Coastguard Worker mixing results. \n -1, 0: Disable downmixing feature. The 679*e5436536SAndroid Build Coastguard Worker decoder output contains the same number of channels as the 680*e5436536SAndroid Build Coastguard Worker encoded bitstream. \n 1: All encoded audio configurations 681*e5436536SAndroid Build Coastguard Worker with more than one channel will be mixed down to one mono 682*e5436536SAndroid Build Coastguard Worker output signal. \n 2: The decoder performs a stereo mix-down 683*e5436536SAndroid Build Coastguard Worker if the number encoded audio channels is greater than two. \n 6: 684*e5436536SAndroid Build Coastguard Worker If the number of encoded audio channels is greater than six the 685*e5436536SAndroid Build Coastguard Worker decoder performs a mix-down to meet the target output 686*e5436536SAndroid Build Coastguard Worker configuration of 3/0/2.1 channels. Only available if instance 687*e5436536SAndroid Build Coastguard Worker is configured to support multichannel output. \n 8: This 688*e5436536SAndroid Build Coastguard Worker value is currently needed only together with the channel 689*e5436536SAndroid Build Coastguard Worker extension feature. See ::AAC_PCM_MIN_OUTPUT_CHANNELS and note 2 690*e5436536SAndroid Build Coastguard Worker below. Only available if instance is configured to support 691*e5436536SAndroid Build Coastguard Worker multichannel output. \n NOTE: \n 692*e5436536SAndroid Build Coastguard Worker 1. Down-mixing of any seven or eight channel configuration 693*e5436536SAndroid Build Coastguard Worker not defined in ISO/IEC 14496-3 PDAM 4 is not supported by this 694*e5436536SAndroid Build Coastguard Worker software version. \n 695*e5436536SAndroid Build Coastguard Worker 2. If the parameter value is greater than zero but smaller 696*e5436536SAndroid Build Coastguard Worker than ::AAC_PCM_MIN_OUTPUT_CHANNELS both will be set to same 697*e5436536SAndroid Build Coastguard Worker value. \n 698*e5436536SAndroid Build Coastguard Worker 3. This parameter will be ignored if the number of encoded 699*e5436536SAndroid Build Coastguard Worker audio channels is greater than 8. */ 700*e5436536SAndroid Build Coastguard Worker AAC_METADATA_PROFILE = 701*e5436536SAndroid Build Coastguard Worker 0x0020, /*!< See ::AAC_MD_PROFILE for all available values. */ 702*e5436536SAndroid Build Coastguard Worker AAC_METADATA_EXPIRY_TIME = 0x0021, /*!< Defines the time in ms after which all 703*e5436536SAndroid Build Coastguard Worker the bitstream associated meta-data (DRC, 704*e5436536SAndroid Build Coastguard Worker downmix coefficients, ...) will be reset 705*e5436536SAndroid Build Coastguard Worker to default if no update has been 706*e5436536SAndroid Build Coastguard Worker received. Negative values disable the 707*e5436536SAndroid Build Coastguard Worker feature. */ 708*e5436536SAndroid Build Coastguard Worker 709*e5436536SAndroid Build Coastguard Worker AAC_CONCEAL_METHOD = 0x0100, /*!< Error concealment: Processing method. \n 710*e5436536SAndroid Build Coastguard Worker 0: Spectral muting. \n 711*e5436536SAndroid Build Coastguard Worker 1: Noise substitution (see ::CONCEAL_NOISE). 712*e5436536SAndroid Build Coastguard Worker \n 2: Energy interpolation (adds additional 713*e5436536SAndroid Build Coastguard Worker signal delay of one frame, see 714*e5436536SAndroid Build Coastguard Worker ::CONCEAL_INTER. only some AOTs are 715*e5436536SAndroid Build Coastguard Worker supported). \n */ 716*e5436536SAndroid Build Coastguard Worker AAC_DRC_BOOST_FACTOR = 717*e5436536SAndroid Build Coastguard Worker 0x0200, /*!< MPEG-4 / MPEG-D Dynamic Range Control (DRC): Scaling factor 718*e5436536SAndroid Build Coastguard Worker for boosting gain values. Defines how the boosting DRC factors 719*e5436536SAndroid Build Coastguard Worker (conveyed in the bitstream) will be applied to the decoded 720*e5436536SAndroid Build Coastguard Worker signal. The valid values range from 0 (don't apply boost 721*e5436536SAndroid Build Coastguard Worker factors) to 127 (fully apply boost factors). Default value is 0 722*e5436536SAndroid Build Coastguard Worker for MPEG-4 DRC and 127 for MPEG-D DRC. */ 723*e5436536SAndroid Build Coastguard Worker AAC_DRC_ATTENUATION_FACTOR = 0x0201, /*!< MPEG-4 / MPEG-D DRC: Scaling factor 724*e5436536SAndroid Build Coastguard Worker for attenuating gain values. Same as 725*e5436536SAndroid Build Coastguard Worker ::AAC_DRC_BOOST_FACTOR but for 726*e5436536SAndroid Build Coastguard Worker attenuating DRC factors. */ 727*e5436536SAndroid Build Coastguard Worker AAC_DRC_REFERENCE_LEVEL = 728*e5436536SAndroid Build Coastguard Worker 0x0202, /*!< MPEG-4 / MPEG-D DRC: Target reference level / decoder target 729*e5436536SAndroid Build Coastguard Worker loudness.\n Defines the level below full-scale (quantized in 730*e5436536SAndroid Build Coastguard Worker steps of 0.25dB) to which the output audio signal will be 731*e5436536SAndroid Build Coastguard Worker normalized to by the DRC module.\n The parameter controls 732*e5436536SAndroid Build Coastguard Worker loudness normalization for both MPEG-4 DRC and MPEG-D DRC. The 733*e5436536SAndroid Build Coastguard Worker valid values range from 40 (-10 dBFS) to 127 (-31.75 dBFS).\n 734*e5436536SAndroid Build Coastguard Worker Example values:\n 735*e5436536SAndroid Build Coastguard Worker 124 (-31 dBFS) for audio/video receivers (AVR) or other 736*e5436536SAndroid Build Coastguard Worker devices allowing audio playback with high dynamic range,\n 96 737*e5436536SAndroid Build Coastguard Worker (-24 dBFS) for TV sets or equivalent devices (default),\n 64 738*e5436536SAndroid Build Coastguard Worker (-16 dBFS) for mobile devices where the dynamic range of audio 739*e5436536SAndroid Build Coastguard Worker playback is restricted.\n Any value smaller than 0 switches off 740*e5436536SAndroid Build Coastguard Worker loudness normalization and MPEG-4 DRC. */ 741*e5436536SAndroid Build Coastguard Worker AAC_DRC_HEAVY_COMPRESSION = 742*e5436536SAndroid Build Coastguard Worker 0x0203, /*!< MPEG-4 DRC: En-/Disable DVB specific heavy compression (aka 743*e5436536SAndroid Build Coastguard Worker RF mode). If set to 1, the decoder will apply the compression 744*e5436536SAndroid Build Coastguard Worker values from the DVB specific ancillary data field. At the same 745*e5436536SAndroid Build Coastguard Worker time the MPEG-4 Dynamic Range Control tool will be disabled. By 746*e5436536SAndroid Build Coastguard Worker default, heavy compression is disabled. */ 747*e5436536SAndroid Build Coastguard Worker AAC_DRC_DEFAULT_PRESENTATION_MODE = 748*e5436536SAndroid Build Coastguard Worker 0x0204, /*!< MPEG-4 DRC: Default presentation mode (DRC parameter 749*e5436536SAndroid Build Coastguard Worker handling). \n Defines the handling of the DRC parameters boost 750*e5436536SAndroid Build Coastguard Worker factor, attenuation factor and heavy compression, if no 751*e5436536SAndroid Build Coastguard Worker presentation mode is indicated in the bitstream.\n For options, 752*e5436536SAndroid Build Coastguard Worker see ::AAC_DRC_DEFAULT_PRESENTATION_MODE_OPTIONS.\n Default: 753*e5436536SAndroid Build Coastguard Worker ::AAC_DRC_PARAMETER_HANDLING_DISABLED */ 754*e5436536SAndroid Build Coastguard Worker AAC_DRC_ENC_TARGET_LEVEL = 755*e5436536SAndroid Build Coastguard Worker 0x0205, /*!< MPEG-4 DRC: Encoder target level for light (i.e. not heavy) 756*e5436536SAndroid Build Coastguard Worker compression.\n If known, this declares the target reference 757*e5436536SAndroid Build Coastguard Worker level that was assumed at the encoder for calculation of 758*e5436536SAndroid Build Coastguard Worker limiting gains. The valid values range from 0 (full-scale) to 759*e5436536SAndroid Build Coastguard Worker 127 (31.75 dB below full-scale). This parameter is used only 760*e5436536SAndroid Build Coastguard Worker with ::AAC_DRC_PARAMETER_HANDLING_ENABLED and ignored 761*e5436536SAndroid Build Coastguard Worker otherwise.\n Default: 127 (worst-case assumption).\n */ 762*e5436536SAndroid Build Coastguard Worker AAC_UNIDRC_SET_EFFECT = 0x0206, /*!< MPEG-D DRC: Request a DRC effect type for 763*e5436536SAndroid Build Coastguard Worker selection of a DRC set.\n Supported indices 764*e5436536SAndroid Build Coastguard Worker are:\n -1: DRC off. Completely disables 765*e5436536SAndroid Build Coastguard Worker MPEG-D DRC.\n 0: None (default). Disables 766*e5436536SAndroid Build Coastguard Worker MPEG-D DRC, but automatically enables DRC 767*e5436536SAndroid Build Coastguard Worker if necessary to prevent clipping.\n 1: Late 768*e5436536SAndroid Build Coastguard Worker night\n 2: Noisy environment\n 3: Limited 769*e5436536SAndroid Build Coastguard Worker playback range\n 4: Low playback level\n 5: 770*e5436536SAndroid Build Coastguard Worker Dialog enhancement\n 6: General 771*e5436536SAndroid Build Coastguard Worker compression. Used for generally enabling 772*e5436536SAndroid Build Coastguard Worker MPEG-D DRC without particular request.\n */ 773*e5436536SAndroid Build Coastguard Worker AAC_UNIDRC_ALBUM_MODE = 774*e5436536SAndroid Build Coastguard Worker 0x0207, /*!< MPEG-D DRC: Enable album mode. 0: Disabled (default), 1: 775*e5436536SAndroid Build Coastguard Worker Enabled.\n Disabled album mode leads to application of gain 776*e5436536SAndroid Build Coastguard Worker sequences for fading in and out, if provided in the 777*e5436536SAndroid Build Coastguard Worker bitstream.\n Enabled album mode makes use of dedicated album 778*e5436536SAndroid Build Coastguard Worker loudness information, if provided in the bitstream.\n */ 779*e5436536SAndroid Build Coastguard Worker AAC_QMF_LOWPOWER = 780*e5436536SAndroid Build Coastguard Worker 0x0300, /*!< Quadrature Mirror Filter (QMF) Bank processing mode. \n 781*e5436536SAndroid Build Coastguard Worker -1: Use internal default. \n 782*e5436536SAndroid Build Coastguard Worker 0: Use complex QMF data mode. \n 783*e5436536SAndroid Build Coastguard Worker 1: Use real (low power) QMF data mode. \n */ 784*e5436536SAndroid Build Coastguard Worker AAC_TPDEC_CLEAR_BUFFER = 785*e5436536SAndroid Build Coastguard Worker 0x0603 /*!< Clear internal bit stream buffer of transport layers. The 786*e5436536SAndroid Build Coastguard Worker decoder will start decoding at new data passed after this event 787*e5436536SAndroid Build Coastguard Worker and any previous data is discarded. */ 788*e5436536SAndroid Build Coastguard Worker 789*e5436536SAndroid Build Coastguard Worker } AACDEC_PARAM; 790*e5436536SAndroid Build Coastguard Worker 791*e5436536SAndroid Build Coastguard Worker /** 792*e5436536SAndroid Build Coastguard Worker * \brief This structure gives information about the currently decoded audio 793*e5436536SAndroid Build Coastguard Worker * data. All fields are read-only. 794*e5436536SAndroid Build Coastguard Worker */ 795*e5436536SAndroid Build Coastguard Worker typedef struct { 796*e5436536SAndroid Build Coastguard Worker /* These five members are the only really relevant ones for the user. */ 797*e5436536SAndroid Build Coastguard Worker INT sampleRate; /*!< The sample rate in Hz of the decoded PCM audio signal. */ 798*e5436536SAndroid Build Coastguard Worker INT frameSize; /*!< The frame size of the decoded PCM audio signal. \n 799*e5436536SAndroid Build Coastguard Worker Typically this is: \n 800*e5436536SAndroid Build Coastguard Worker 1024 or 960 for AAC-LC \n 801*e5436536SAndroid Build Coastguard Worker 2048 or 1920 for HE-AAC (v2) \n 802*e5436536SAndroid Build Coastguard Worker 512 or 480 for AAC-LD and AAC-ELD \n 803*e5436536SAndroid Build Coastguard Worker 768, 1024, 2048 or 4096 for USAC */ 804*e5436536SAndroid Build Coastguard Worker INT numChannels; /*!< The number of output audio channels before the rendering 805*e5436536SAndroid Build Coastguard Worker module, i.e. the original channel configuration. */ 806*e5436536SAndroid Build Coastguard Worker AUDIO_CHANNEL_TYPE 807*e5436536SAndroid Build Coastguard Worker *pChannelType; /*!< Audio channel type of each output audio channel. */ 808*e5436536SAndroid Build Coastguard Worker UCHAR *pChannelIndices; /*!< Audio channel index for each output audio 809*e5436536SAndroid Build Coastguard Worker channel. See ISO/IEC 13818-7:2005(E), 8.5.3.2 810*e5436536SAndroid Build Coastguard Worker Explicit channel mapping using a 811*e5436536SAndroid Build Coastguard Worker program_config_element() */ 812*e5436536SAndroid Build Coastguard Worker /* Decoder internal members. */ 813*e5436536SAndroid Build Coastguard Worker INT aacSampleRate; /*!< Sampling rate in Hz without SBR (from configuration 814*e5436536SAndroid Build Coastguard Worker info) divided by a (ELD) downscale factor if present. */ 815*e5436536SAndroid Build Coastguard Worker INT profile; /*!< MPEG-2 profile (from file header) (-1: not applicable (e. g. 816*e5436536SAndroid Build Coastguard Worker MPEG-4)). */ 817*e5436536SAndroid Build Coastguard Worker AUDIO_OBJECT_TYPE 818*e5436536SAndroid Build Coastguard Worker aot; /*!< Audio Object Type (from ASC): is set to the appropriate value 819*e5436536SAndroid Build Coastguard Worker for MPEG-2 bitstreams (e. g. 2 for AAC-LC). */ 820*e5436536SAndroid Build Coastguard Worker INT channelConfig; /*!< Channel configuration (0: PCE defined, 1: mono, 2: 821*e5436536SAndroid Build Coastguard Worker stereo, ... */ 822*e5436536SAndroid Build Coastguard Worker INT bitRate; /*!< Instantaneous bit rate. */ 823*e5436536SAndroid Build Coastguard Worker INT aacSamplesPerFrame; /*!< Samples per frame for the AAC core (from ASC) 824*e5436536SAndroid Build Coastguard Worker divided by a (ELD) downscale factor if present. \n 825*e5436536SAndroid Build Coastguard Worker Typically this is (with a downscale factor of 1): 826*e5436536SAndroid Build Coastguard Worker \n 1024 or 960 for AAC-LC \n 512 or 480 for 827*e5436536SAndroid Build Coastguard Worker AAC-LD and AAC-ELD */ 828*e5436536SAndroid Build Coastguard Worker INT aacNumChannels; /*!< The number of audio channels after AAC core 829*e5436536SAndroid Build Coastguard Worker processing (before PS or MPS processing). CAUTION: This 830*e5436536SAndroid Build Coastguard Worker are not the final number of output channels! */ 831*e5436536SAndroid Build Coastguard Worker AUDIO_OBJECT_TYPE extAot; /*!< Extension Audio Object Type (from ASC) */ 832*e5436536SAndroid Build Coastguard Worker INT extSamplingRate; /*!< Extension sampling rate in Hz (from ASC) divided by 833*e5436536SAndroid Build Coastguard Worker a (ELD) downscale factor if present. */ 834*e5436536SAndroid Build Coastguard Worker 835*e5436536SAndroid Build Coastguard Worker UINT outputDelay; /*!< The number of samples the output is additionally 836*e5436536SAndroid Build Coastguard Worker delayed by.the decoder. */ 837*e5436536SAndroid Build Coastguard Worker UINT flags; /*!< Copy of internal flags. Only to be written by the decoder, 838*e5436536SAndroid Build Coastguard Worker and only to be read externally. */ 839*e5436536SAndroid Build Coastguard Worker 840*e5436536SAndroid Build Coastguard Worker SCHAR epConfig; /*!< epConfig level (from ASC): only level 0 supported, -1 841*e5436536SAndroid Build Coastguard Worker means no ER (e. g. AOT=2, MPEG-2 AAC, etc.) */ 842*e5436536SAndroid Build Coastguard Worker /* Statistics */ 843*e5436536SAndroid Build Coastguard Worker INT numLostAccessUnits; /*!< This integer will reflect the estimated amount of 844*e5436536SAndroid Build Coastguard Worker lost access units in case aacDecoder_DecodeFrame() 845*e5436536SAndroid Build Coastguard Worker returns AAC_DEC_TRANSPORT_SYNC_ERROR. It will be 846*e5436536SAndroid Build Coastguard Worker < 0 if the estimation failed. */ 847*e5436536SAndroid Build Coastguard Worker 848*e5436536SAndroid Build Coastguard Worker INT64 numTotalBytes; /*!< This is the number of total bytes that have passed 849*e5436536SAndroid Build Coastguard Worker through the decoder. */ 850*e5436536SAndroid Build Coastguard Worker INT64 851*e5436536SAndroid Build Coastguard Worker numBadBytes; /*!< This is the number of total bytes that were considered 852*e5436536SAndroid Build Coastguard Worker with errors from numTotalBytes. */ 853*e5436536SAndroid Build Coastguard Worker INT64 854*e5436536SAndroid Build Coastguard Worker numTotalAccessUnits; /*!< This is the number of total access units that 855*e5436536SAndroid Build Coastguard Worker have passed through the decoder. */ 856*e5436536SAndroid Build Coastguard Worker INT64 numBadAccessUnits; /*!< This is the number of total access units that 857*e5436536SAndroid Build Coastguard Worker were considered with errors from numTotalBytes. */ 858*e5436536SAndroid Build Coastguard Worker 859*e5436536SAndroid Build Coastguard Worker /* Metadata */ 860*e5436536SAndroid Build Coastguard Worker SCHAR drcProgRefLev; /*!< DRC program reference level. Defines the reference 861*e5436536SAndroid Build Coastguard Worker level below full-scale. It is quantized in steps of 862*e5436536SAndroid Build Coastguard Worker 0.25dB. The valid values range from 0 (0 dBFS) to 127 863*e5436536SAndroid Build Coastguard Worker (-31.75 dBFS). It is used to reflect the average 864*e5436536SAndroid Build Coastguard Worker loudness of the audio in LKFS according to ITU-R BS 865*e5436536SAndroid Build Coastguard Worker 1770. If no level has been found in the bitstream the 866*e5436536SAndroid Build Coastguard Worker value is -1. */ 867*e5436536SAndroid Build Coastguard Worker SCHAR 868*e5436536SAndroid Build Coastguard Worker drcPresMode; /*!< DRC presentation mode. According to ETSI TS 101 154, 869*e5436536SAndroid Build Coastguard Worker this field indicates whether light (MPEG-4 Dynamic Range 870*e5436536SAndroid Build Coastguard Worker Control tool) or heavy compression (DVB heavy 871*e5436536SAndroid Build Coastguard Worker compression) dynamic range control shall take priority 872*e5436536SAndroid Build Coastguard Worker on the outputs. For details, see ETSI TS 101 154, table 873*e5436536SAndroid Build Coastguard Worker C.33. Possible values are: \n -1: No corresponding 874*e5436536SAndroid Build Coastguard Worker metadata found in the bitstream \n 0: DRC presentation 875*e5436536SAndroid Build Coastguard Worker mode not indicated \n 1: DRC presentation mode 1 \n 2: 876*e5436536SAndroid Build Coastguard Worker DRC presentation mode 2 \n 3: Reserved */ 877*e5436536SAndroid Build Coastguard Worker INT outputLoudness; /*!< Audio output loudness in steps of -0.25 dB. Range: 0 878*e5436536SAndroid Build Coastguard Worker (0 dBFS) to 231 (-57.75 dBFS).\n A value of -1 879*e5436536SAndroid Build Coastguard Worker indicates that no loudness metadata is present.\n If 880*e5436536SAndroid Build Coastguard Worker loudness normalization is active, the value corresponds 881*e5436536SAndroid Build Coastguard Worker to the target loudness value set with 882*e5436536SAndroid Build Coastguard Worker ::AAC_DRC_REFERENCE_LEVEL.\n If loudness normalization 883*e5436536SAndroid Build Coastguard Worker is not active, the output loudness value corresponds to 884*e5436536SAndroid Build Coastguard Worker the loudness metadata given in the bitstream.\n 885*e5436536SAndroid Build Coastguard Worker Loudness metadata can originate from MPEG-4 DRC or 886*e5436536SAndroid Build Coastguard Worker MPEG-D DRC. */ 887*e5436536SAndroid Build Coastguard Worker 888*e5436536SAndroid Build Coastguard Worker } CStreamInfo; 889*e5436536SAndroid Build Coastguard Worker 890*e5436536SAndroid Build Coastguard Worker typedef struct AAC_DECODER_INSTANCE 891*e5436536SAndroid Build Coastguard Worker *HANDLE_AACDECODER; /*!< Pointer to a AAC decoder instance. */ 892*e5436536SAndroid Build Coastguard Worker 893*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus 894*e5436536SAndroid Build Coastguard Worker extern "C" { 895*e5436536SAndroid Build Coastguard Worker #endif 896*e5436536SAndroid Build Coastguard Worker 897*e5436536SAndroid Build Coastguard Worker /** 898*e5436536SAndroid Build Coastguard Worker * \brief Initialize ancillary data buffer. 899*e5436536SAndroid Build Coastguard Worker * 900*e5436536SAndroid Build Coastguard Worker * \param self AAC decoder handle. 901*e5436536SAndroid Build Coastguard Worker * \param buffer Pointer to (external) ancillary data buffer. 902*e5436536SAndroid Build Coastguard Worker * \param size Size of the buffer pointed to by buffer. 903*e5436536SAndroid Build Coastguard Worker * \return Error code. 904*e5436536SAndroid Build Coastguard Worker */ 905*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_AncDataInit(HANDLE_AACDECODER self, 906*e5436536SAndroid Build Coastguard Worker UCHAR *buffer, int size); 907*e5436536SAndroid Build Coastguard Worker 908*e5436536SAndroid Build Coastguard Worker /** 909*e5436536SAndroid Build Coastguard Worker * \brief Get one ancillary data element. 910*e5436536SAndroid Build Coastguard Worker * 911*e5436536SAndroid Build Coastguard Worker * \param self AAC decoder handle. 912*e5436536SAndroid Build Coastguard Worker * \param index Index of the ancillary data element to get. 913*e5436536SAndroid Build Coastguard Worker * \param ptr Pointer to a buffer receiving a pointer to the requested 914*e5436536SAndroid Build Coastguard Worker * ancillary data element. 915*e5436536SAndroid Build Coastguard Worker * \param size Pointer to a buffer receiving the length of the requested 916*e5436536SAndroid Build Coastguard Worker * ancillary data element. 917*e5436536SAndroid Build Coastguard Worker * \return Error code. 918*e5436536SAndroid Build Coastguard Worker */ 919*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_AncDataGet(HANDLE_AACDECODER self, 920*e5436536SAndroid Build Coastguard Worker int index, UCHAR **ptr, 921*e5436536SAndroid Build Coastguard Worker int *size); 922*e5436536SAndroid Build Coastguard Worker 923*e5436536SAndroid Build Coastguard Worker /** 924*e5436536SAndroid Build Coastguard Worker * \brief Set one single decoder parameter. 925*e5436536SAndroid Build Coastguard Worker * 926*e5436536SAndroid Build Coastguard Worker * \param self AAC decoder handle. 927*e5436536SAndroid Build Coastguard Worker * \param param Parameter to be set. 928*e5436536SAndroid Build Coastguard Worker * \param value Parameter value. 929*e5436536SAndroid Build Coastguard Worker * \return Error code. 930*e5436536SAndroid Build Coastguard Worker */ 931*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_SetParam(const HANDLE_AACDECODER self, 932*e5436536SAndroid Build Coastguard Worker const AACDEC_PARAM param, 933*e5436536SAndroid Build Coastguard Worker const INT value); 934*e5436536SAndroid Build Coastguard Worker 935*e5436536SAndroid Build Coastguard Worker /** 936*e5436536SAndroid Build Coastguard Worker * \brief Get free bytes inside decoder internal buffer. 937*e5436536SAndroid Build Coastguard Worker * \param self Handle of AAC decoder instance. 938*e5436536SAndroid Build Coastguard Worker * \param pFreeBytes Pointer to variable receiving amount of free bytes inside 939*e5436536SAndroid Build Coastguard Worker * decoder internal buffer. 940*e5436536SAndroid Build Coastguard Worker * \return Error code. 941*e5436536SAndroid Build Coastguard Worker */ 942*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR 943*e5436536SAndroid Build Coastguard Worker aacDecoder_GetFreeBytes(const HANDLE_AACDECODER self, UINT *pFreeBytes); 944*e5436536SAndroid Build Coastguard Worker 945*e5436536SAndroid Build Coastguard Worker /** 946*e5436536SAndroid Build Coastguard Worker * \brief Open an AAC decoder instance. 947*e5436536SAndroid Build Coastguard Worker * \param transportFmt The transport type to be used. 948*e5436536SAndroid Build Coastguard Worker * \param nrOfLayers Number of transport layers. 949*e5436536SAndroid Build Coastguard Worker * \return AAC decoder handle. 950*e5436536SAndroid Build Coastguard Worker */ 951*e5436536SAndroid Build Coastguard Worker LINKSPEC_H HANDLE_AACDECODER aacDecoder_Open(TRANSPORT_TYPE transportFmt, 952*e5436536SAndroid Build Coastguard Worker UINT nrOfLayers); 953*e5436536SAndroid Build Coastguard Worker 954*e5436536SAndroid Build Coastguard Worker /** 955*e5436536SAndroid Build Coastguard Worker * \brief Explicitly configure the decoder by passing a raw AudioSpecificConfig 956*e5436536SAndroid Build Coastguard Worker * (ASC) or a StreamMuxConfig (SMC), contained in a binary buffer. This is 957*e5436536SAndroid Build Coastguard Worker * required for MPEG-4 and Raw Packets file format bitstreams as well as for 958*e5436536SAndroid Build Coastguard Worker * LATM bitstreams with no in-band SMC. If the transport format is LATM with or 959*e5436536SAndroid Build Coastguard Worker * without LOAS, configuration is assumed to be an SMC, for all other file 960*e5436536SAndroid Build Coastguard Worker * formats an ASC. 961*e5436536SAndroid Build Coastguard Worker * 962*e5436536SAndroid Build Coastguard Worker * \param self AAC decoder handle. 963*e5436536SAndroid Build Coastguard Worker * \param conf Pointer to an unsigned char buffer containing the binary 964*e5436536SAndroid Build Coastguard Worker * configuration buffer (either ASC or SMC). 965*e5436536SAndroid Build Coastguard Worker * \param length Length of the configuration buffer in bytes. 966*e5436536SAndroid Build Coastguard Worker * \return Error code. 967*e5436536SAndroid Build Coastguard Worker */ 968*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_ConfigRaw(HANDLE_AACDECODER self, 969*e5436536SAndroid Build Coastguard Worker UCHAR *conf[], 970*e5436536SAndroid Build Coastguard Worker const UINT length[]); 971*e5436536SAndroid Build Coastguard Worker 972*e5436536SAndroid Build Coastguard Worker /** 973*e5436536SAndroid Build Coastguard Worker * \brief Submit raw ISO base media file format boxes to decoder for parsing 974*e5436536SAndroid Build Coastguard Worker * (only some box types are recognized). 975*e5436536SAndroid Build Coastguard Worker * 976*e5436536SAndroid Build Coastguard Worker * \param self AAC decoder handle. 977*e5436536SAndroid Build Coastguard Worker * \param buffer Pointer to an unsigned char buffer containing the binary box 978*e5436536SAndroid Build Coastguard Worker * data (including size and type, can be a sequence of multiple boxes). 979*e5436536SAndroid Build Coastguard Worker * \param length Length of the data in bytes. 980*e5436536SAndroid Build Coastguard Worker * \return Error code. 981*e5436536SAndroid Build Coastguard Worker */ 982*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_RawISOBMFFData(HANDLE_AACDECODER self, 983*e5436536SAndroid Build Coastguard Worker UCHAR *buffer, 984*e5436536SAndroid Build Coastguard Worker UINT length); 985*e5436536SAndroid Build Coastguard Worker 986*e5436536SAndroid Build Coastguard Worker /** 987*e5436536SAndroid Build Coastguard Worker * \brief Fill AAC decoder's internal input buffer with bitstream data from the 988*e5436536SAndroid Build Coastguard Worker * external input buffer. The function only copies such data as long as the 989*e5436536SAndroid Build Coastguard Worker * decoder-internal input buffer is not full. So it grabs whatever it can from 990*e5436536SAndroid Build Coastguard Worker * pBuffer and returns information (bytesValid) so that at a subsequent call of 991*e5436536SAndroid Build Coastguard Worker * %aacDecoder_Fill(), the right position in pBuffer can be determined to grab 992*e5436536SAndroid Build Coastguard Worker * the next data. 993*e5436536SAndroid Build Coastguard Worker * 994*e5436536SAndroid Build Coastguard Worker * \param self AAC decoder handle. 995*e5436536SAndroid Build Coastguard Worker * \param pBuffer Pointer to external input buffer. 996*e5436536SAndroid Build Coastguard Worker * \param bufferSize Size of external input buffer. This argument is required 997*e5436536SAndroid Build Coastguard Worker * because decoder-internally we need the information to calculate the offset to 998*e5436536SAndroid Build Coastguard Worker * pBuffer, where the next available data is, which is then 999*e5436536SAndroid Build Coastguard Worker * fed into the decoder-internal buffer (as much as 1000*e5436536SAndroid Build Coastguard Worker * possible). Our example framework implementation fills the 1001*e5436536SAndroid Build Coastguard Worker * buffer at pBuffer again, once it contains no available valid bytes anymore 1002*e5436536SAndroid Build Coastguard Worker * (meaning bytesValid equal 0). 1003*e5436536SAndroid Build Coastguard Worker * \param bytesValid Number of bitstream bytes in the external bitstream buffer 1004*e5436536SAndroid Build Coastguard Worker * that have not yet been copied into the decoder's internal bitstream buffer by 1005*e5436536SAndroid Build Coastguard Worker * calling this function. The value is updated according to 1006*e5436536SAndroid Build Coastguard Worker * the amount of newly copied bytes. 1007*e5436536SAndroid Build Coastguard Worker * \return Error code. 1008*e5436536SAndroid Build Coastguard Worker */ 1009*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_Fill(HANDLE_AACDECODER self, 1010*e5436536SAndroid Build Coastguard Worker UCHAR *pBuffer[], 1011*e5436536SAndroid Build Coastguard Worker const UINT bufferSize[], 1012*e5436536SAndroid Build Coastguard Worker UINT *bytesValid); 1013*e5436536SAndroid Build Coastguard Worker 1014*e5436536SAndroid Build Coastguard Worker /** Flag for aacDecoder_DecodeFrame(): Trigger the built-in error concealment 1015*e5436536SAndroid Build Coastguard Worker * module to generate a substitute signal for one lost frame. New input data 1016*e5436536SAndroid Build Coastguard Worker * will not be considered. 1017*e5436536SAndroid Build Coastguard Worker */ 1018*e5436536SAndroid Build Coastguard Worker #define AACDEC_CONCEAL 1 1019*e5436536SAndroid Build Coastguard Worker /** Flag for aacDecoder_DecodeFrame(): Flush all filterbanks to get all delayed 1020*e5436536SAndroid Build Coastguard Worker * audio without having new input data. Thus new input data will not be 1021*e5436536SAndroid Build Coastguard Worker * considered. 1022*e5436536SAndroid Build Coastguard Worker */ 1023*e5436536SAndroid Build Coastguard Worker #define AACDEC_FLUSH 2 1024*e5436536SAndroid Build Coastguard Worker /** Flag for aacDecoder_DecodeFrame(): Signal an input bit stream data 1025*e5436536SAndroid Build Coastguard Worker * discontinuity. Resync any internals as necessary. 1026*e5436536SAndroid Build Coastguard Worker */ 1027*e5436536SAndroid Build Coastguard Worker #define AACDEC_INTR 4 1028*e5436536SAndroid Build Coastguard Worker /** Flag for aacDecoder_DecodeFrame(): Clear all signal delay lines and history 1029*e5436536SAndroid Build Coastguard Worker * buffers. CAUTION: This can cause discontinuities in the output signal. 1030*e5436536SAndroid Build Coastguard Worker */ 1031*e5436536SAndroid Build Coastguard Worker #define AACDEC_CLRHIST 8 1032*e5436536SAndroid Build Coastguard Worker 1033*e5436536SAndroid Build Coastguard Worker /** 1034*e5436536SAndroid Build Coastguard Worker * \brief Decode one audio frame 1035*e5436536SAndroid Build Coastguard Worker * 1036*e5436536SAndroid Build Coastguard Worker * \param self AAC decoder handle. 1037*e5436536SAndroid Build Coastguard Worker * \param pTimeData Pointer to external output buffer where the decoded PCM 1038*e5436536SAndroid Build Coastguard Worker * samples will be stored into. 1039*e5436536SAndroid Build Coastguard Worker * \param timeDataSize Size of external output buffer in PCM samples. 1040*e5436536SAndroid Build Coastguard Worker * \param flags Bit field with flags for the decoder: \n 1041*e5436536SAndroid Build Coastguard Worker * (flags & AACDEC_CONCEAL) == 1: Do concealment. \n 1042*e5436536SAndroid Build Coastguard Worker * (flags & AACDEC_FLUSH) == 2: Discard input data. Flush 1043*e5436536SAndroid Build Coastguard Worker * filter banks (output delayed audio). \n (flags & AACDEC_INTR) == 4: Input 1044*e5436536SAndroid Build Coastguard Worker * data is discontinuous. Resynchronize any internals as 1045*e5436536SAndroid Build Coastguard Worker * necessary. \n (flags & AACDEC_CLRHIST) == 8: Clear all signal delay lines and 1046*e5436536SAndroid Build Coastguard Worker * history buffers. 1047*e5436536SAndroid Build Coastguard Worker * \return Error code. 1048*e5436536SAndroid Build Coastguard Worker */ 1049*e5436536SAndroid Build Coastguard Worker LINKSPEC_H AAC_DECODER_ERROR aacDecoder_DecodeFrame(HANDLE_AACDECODER self, 1050*e5436536SAndroid Build Coastguard Worker INT_PCM *pTimeData, 1051*e5436536SAndroid Build Coastguard Worker const INT timeDataSize, 1052*e5436536SAndroid Build Coastguard Worker const UINT flags); 1053*e5436536SAndroid Build Coastguard Worker 1054*e5436536SAndroid Build Coastguard Worker /** 1055*e5436536SAndroid Build Coastguard Worker * \brief De-allocate all resources of an AAC decoder instance. 1056*e5436536SAndroid Build Coastguard Worker * 1057*e5436536SAndroid Build Coastguard Worker * \param self AAC decoder handle. 1058*e5436536SAndroid Build Coastguard Worker * \return void. 1059*e5436536SAndroid Build Coastguard Worker */ 1060*e5436536SAndroid Build Coastguard Worker LINKSPEC_H void aacDecoder_Close(HANDLE_AACDECODER self); 1061*e5436536SAndroid Build Coastguard Worker 1062*e5436536SAndroid Build Coastguard Worker /** 1063*e5436536SAndroid Build Coastguard Worker * \brief Get CStreamInfo handle from decoder. 1064*e5436536SAndroid Build Coastguard Worker * 1065*e5436536SAndroid Build Coastguard Worker * \param self AAC decoder handle. 1066*e5436536SAndroid Build Coastguard Worker * \return Reference to requested CStreamInfo. 1067*e5436536SAndroid Build Coastguard Worker */ 1068*e5436536SAndroid Build Coastguard Worker LINKSPEC_H CStreamInfo *aacDecoder_GetStreamInfo(HANDLE_AACDECODER self); 1069*e5436536SAndroid Build Coastguard Worker 1070*e5436536SAndroid Build Coastguard Worker /** 1071*e5436536SAndroid Build Coastguard Worker * \brief Get decoder library info. 1072*e5436536SAndroid Build Coastguard Worker * 1073*e5436536SAndroid Build Coastguard Worker * \param info Pointer to an allocated LIB_INFO structure. 1074*e5436536SAndroid Build Coastguard Worker * \return 0 on success. 1075*e5436536SAndroid Build Coastguard Worker */ 1076*e5436536SAndroid Build Coastguard Worker LINKSPEC_H INT aacDecoder_GetLibInfo(LIB_INFO *info); 1077*e5436536SAndroid Build Coastguard Worker 1078*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus 1079*e5436536SAndroid Build Coastguard Worker } 1080*e5436536SAndroid Build Coastguard Worker #endif 1081*e5436536SAndroid Build Coastguard Worker 1082*e5436536SAndroid Build Coastguard Worker #endif /* AACDECODER_LIB_H */ 1083