xref: /aosp_15_r20/external/aac/libAACenc/include/aacenc_lib.h (revision e54365361535b070c2db7374cec45c159c7d0e7a)
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 - 2021 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 encoder library ******************************
96*e5436536SAndroid Build Coastguard Worker 
97*e5436536SAndroid Build Coastguard Worker    Author(s):   M. Lohwasser
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 /**
104*e5436536SAndroid Build Coastguard Worker  * \file   aacenc_lib.h
105*e5436536SAndroid Build Coastguard Worker  * \brief  FDK AAC Encoder library interface header file.
106*e5436536SAndroid Build Coastguard Worker  *
107*e5436536SAndroid Build Coastguard Worker \mainpage  Introduction
108*e5436536SAndroid Build Coastguard Worker 
109*e5436536SAndroid Build Coastguard Worker \section Scope
110*e5436536SAndroid Build Coastguard Worker 
111*e5436536SAndroid Build Coastguard Worker This document describes the high-level interface and usage of the ISO/MPEG-2/4
112*e5436536SAndroid Build Coastguard Worker AAC Encoder library developed by the Fraunhofer Institute for Integrated
113*e5436536SAndroid Build Coastguard Worker Circuits (IIS).
114*e5436536SAndroid Build Coastguard Worker 
115*e5436536SAndroid Build Coastguard Worker The library implements encoding on the basis of the MPEG-2 and MPEG-4 AAC
116*e5436536SAndroid Build Coastguard Worker Low-Complexity standard, and depending on the library's configuration, MPEG-4
117*e5436536SAndroid Build Coastguard Worker High-Efficiency AAC v2 and/or AAC-ELD standard.
118*e5436536SAndroid Build Coastguard Worker 
119*e5436536SAndroid Build Coastguard Worker All references to SBR (Spectral Band Replication) are only applicable to HE-AAC
120*e5436536SAndroid Build Coastguard Worker or AAC-ELD versions of the library. All references to PS (Parametric Stereo) are
121*e5436536SAndroid Build Coastguard Worker only applicable to HE-AAC v2 versions of the library.
122*e5436536SAndroid Build Coastguard Worker 
123*e5436536SAndroid Build Coastguard Worker \section encBasics Encoder Basics
124*e5436536SAndroid Build Coastguard Worker 
125*e5436536SAndroid Build Coastguard Worker This document can only give a rough overview about the ISO/MPEG-2 and ISO/MPEG-4
126*e5436536SAndroid Build Coastguard Worker AAC audio coding standard. To understand all the terms in this document, you are
127*e5436536SAndroid Build Coastguard Worker encouraged to read the following documents.
128*e5436536SAndroid Build Coastguard Worker 
129*e5436536SAndroid Build Coastguard Worker - ISO/IEC 13818-7 (MPEG-2 AAC), which defines the syntax of MPEG-2 AAC audio
130*e5436536SAndroid Build Coastguard Worker bitstreams.
131*e5436536SAndroid Build Coastguard Worker - ISO/IEC 14496-3 (MPEG-4 AAC, subparts 1 and 4), which defines the syntax of
132*e5436536SAndroid Build Coastguard Worker MPEG-4 AAC audio bitstreams.
133*e5436536SAndroid Build Coastguard Worker - Lutzky, Schuller, Gayer, Krämer, Wabnik, "A guideline to audio codec
134*e5436536SAndroid Build Coastguard Worker delay", 116th AES Convention, May 8, 2004
135*e5436536SAndroid Build Coastguard Worker 
136*e5436536SAndroid Build Coastguard Worker MPEG Advanced Audio Coding is based on a time-to-frequency mapping of the
137*e5436536SAndroid Build Coastguard Worker signal. The signal is partitioned into overlapping portions and transformed into
138*e5436536SAndroid Build Coastguard Worker frequency domain. The spectral components are then quantized and coded. \n An
139*e5436536SAndroid Build Coastguard Worker MPEG-2 or MPEG-4 AAC audio bitstream is composed of frames. Contrary to MPEG-1/2
140*e5436536SAndroid Build Coastguard Worker Layer-3 (mp3), the length of individual frames is not restricted to a fixed
141*e5436536SAndroid Build Coastguard Worker number of bytes, but can take on any length between 1 and 768 bytes.
142*e5436536SAndroid Build Coastguard Worker 
143*e5436536SAndroid Build Coastguard Worker 
144*e5436536SAndroid Build Coastguard Worker \page LIBUSE Library Usage
145*e5436536SAndroid Build Coastguard Worker 
146*e5436536SAndroid Build Coastguard Worker \section InterfaceDescription API Files
147*e5436536SAndroid Build Coastguard Worker 
148*e5436536SAndroid Build Coastguard Worker All API header files are located in the folder /include of the release package.
149*e5436536SAndroid Build Coastguard Worker All header files are provided for usage in C/C++ programs. The AAC encoder
150*e5436536SAndroid Build Coastguard Worker library API functions are located in aacenc_lib.h.
151*e5436536SAndroid Build Coastguard Worker 
152*e5436536SAndroid Build Coastguard Worker \section CallingSequence Calling Sequence
153*e5436536SAndroid Build Coastguard Worker 
154*e5436536SAndroid Build Coastguard Worker For encoding of ISO/MPEG-2/4 AAC bitstreams the following sequence is mandatory.
155*e5436536SAndroid Build Coastguard Worker Input read and output write functions as well as the corresponding open and
156*e5436536SAndroid Build Coastguard Worker close functions are left out, since they may be implemented differently
157*e5436536SAndroid Build Coastguard Worker according to the user's specific requirements. The example implementation uses
158*e5436536SAndroid Build Coastguard Worker file-based input/output.
159*e5436536SAndroid Build Coastguard Worker 
160*e5436536SAndroid Build Coastguard Worker -# Call aacEncOpen() to allocate encoder instance with required \ref encOpen
161*e5436536SAndroid Build Coastguard Worker "configuration". \code HANDLE_AACENCODER hAacEncoder = NULL; if ( (ErrorStatus =
162*e5436536SAndroid Build Coastguard Worker aacEncOpen(&hAacEncoder,0,0)) != AACENC_OK ) { \endcode
163*e5436536SAndroid Build Coastguard Worker -# Call aacEncoder_SetParam() for each parameter to be set. AOT, samplingrate,
164*e5436536SAndroid Build Coastguard Worker channelMode, bitrate and transport type are \ref encParams "mandatory". \code
165*e5436536SAndroid Build Coastguard Worker ErrorStatus = aacEncoder_SetParam(hAacEncoder, parameter, value);
166*e5436536SAndroid Build Coastguard Worker \endcode
167*e5436536SAndroid Build Coastguard Worker -# Call aacEncEncode() with NULL parameters to \ref encReconf "initialize"
168*e5436536SAndroid Build Coastguard Worker encoder instance with present parameter set. \code ErrorStatus =
169*e5436536SAndroid Build Coastguard Worker aacEncEncode(hAacEncoder, NULL, NULL, NULL, NULL); \endcode
170*e5436536SAndroid Build Coastguard Worker -# Call aacEncInfo() to retrieve a configuration data block to be transmitted
171*e5436536SAndroid Build Coastguard Worker out of band. This is required when using RFC3640 or RFC3016 like transport.
172*e5436536SAndroid Build Coastguard Worker \code
173*e5436536SAndroid Build Coastguard Worker AACENC_InfoStruct encInfo;
174*e5436536SAndroid Build Coastguard Worker aacEncInfo(hAacEncoder, &encInfo);
175*e5436536SAndroid Build Coastguard Worker \endcode
176*e5436536SAndroid Build Coastguard Worker -# Encode input audio data in loop.
177*e5436536SAndroid Build Coastguard Worker \code
178*e5436536SAndroid Build Coastguard Worker do
179*e5436536SAndroid Build Coastguard Worker {
180*e5436536SAndroid Build Coastguard Worker \endcode
181*e5436536SAndroid Build Coastguard Worker Feed \ref feedInBuf "input buffer" with new audio data and provide input/output
182*e5436536SAndroid Build Coastguard Worker \ref bufDes "arguments" to aacEncEncode(). \code ErrorStatus =
183*e5436536SAndroid Build Coastguard Worker aacEncEncode(hAacEncoder, &inBufDesc, &outBufDesc, &inargs, &outargs); \endcode
184*e5436536SAndroid Build Coastguard Worker Write \ref writeOutData "output data" to file or audio device.
185*e5436536SAndroid Build Coastguard Worker \code
186*e5436536SAndroid Build Coastguard Worker } while (ErrorStatus==AACENC_OK);
187*e5436536SAndroid Build Coastguard Worker \endcode
188*e5436536SAndroid Build Coastguard Worker -# Call aacEncClose() and destroy encoder instance.
189*e5436536SAndroid Build Coastguard Worker \code
190*e5436536SAndroid Build Coastguard Worker aacEncClose(&hAacEncoder);
191*e5436536SAndroid Build Coastguard Worker \endcode
192*e5436536SAndroid Build Coastguard Worker 
193*e5436536SAndroid Build Coastguard Worker 
194*e5436536SAndroid Build Coastguard Worker \section encOpen Encoder Instance Allocation
195*e5436536SAndroid Build Coastguard Worker 
196*e5436536SAndroid Build Coastguard Worker The assignment of the aacEncOpen() function is very flexible and can be used in
197*e5436536SAndroid Build Coastguard Worker the following way.
198*e5436536SAndroid Build Coastguard Worker - If the amount of memory consumption is not an issue, the encoder instance can
199*e5436536SAndroid Build Coastguard Worker be allocated for the maximum number of possible audio channels (for example 6 or
200*e5436536SAndroid Build Coastguard Worker 8) with the full functional range supported by the library. This is the default
201*e5436536SAndroid Build Coastguard Worker open procedure for the AAC encoder if memory consumption does not need to be
202*e5436536SAndroid Build Coastguard Worker minimized. \code aacEncOpen(&hAacEncoder,0,0) \endcode
203*e5436536SAndroid Build Coastguard Worker - If the required MPEG-4 AOTs do not call for the full functional range of the
204*e5436536SAndroid Build Coastguard Worker library, encoder modules can be allocated selectively. \verbatim
205*e5436536SAndroid Build Coastguard Worker ------------------------------------------------------
206*e5436536SAndroid Build Coastguard Worker  AAC | SBR |  PS | MD |         FLAGS         | value
207*e5436536SAndroid Build Coastguard Worker -----+-----+-----+----+-----------------------+-------
208*e5436536SAndroid Build Coastguard Worker   X  |  -  |  -  |  - | (0x01)                |  0x01
209*e5436536SAndroid Build Coastguard Worker   X  |  X  |  -  |  - | (0x01|0x02)           |  0x03
210*e5436536SAndroid Build Coastguard Worker   X  |  X  |  X  |  - | (0x01|0x02|0x04)      |  0x07
211*e5436536SAndroid Build Coastguard Worker   X  |  -  |  -  |  X | (0x01          |0x10) |  0x11
212*e5436536SAndroid Build Coastguard Worker   X  |  X  |  -  |  X | (0x01|0x02     |0x10) |  0x13
213*e5436536SAndroid Build Coastguard Worker   X  |  X  |  X  |  X | (0x01|0x02|0x04|0x10) |  0x17
214*e5436536SAndroid Build Coastguard Worker ------------------------------------------------------
215*e5436536SAndroid Build Coastguard Worker  - AAC: Allocate AAC Core Encoder module.
216*e5436536SAndroid Build Coastguard Worker  - SBR: Allocate Spectral Band Replication module.
217*e5436536SAndroid Build Coastguard Worker  - PS: Allocate Parametric Stereo module.
218*e5436536SAndroid Build Coastguard Worker  - MD: Allocate Meta Data module within AAC encoder.
219*e5436536SAndroid Build Coastguard Worker \endverbatim
220*e5436536SAndroid Build Coastguard Worker \code aacEncOpen(&hAacEncoder,value,0) \endcode
221*e5436536SAndroid Build Coastguard Worker - Specifying the maximum number of channels to be supported in the encoder
222*e5436536SAndroid Build Coastguard Worker instance can be done as follows.
223*e5436536SAndroid Build Coastguard Worker  - For example allocate an encoder instance which supports 2 channels for all
224*e5436536SAndroid Build Coastguard Worker supported AOTs. The library itself may be capable of encoding up to 6 or 8
225*e5436536SAndroid Build Coastguard Worker channels but in this example only 2 channel encoding is required and thus only
226*e5436536SAndroid Build Coastguard Worker buffers for 2 channels are allocated to save data memory. \code
227*e5436536SAndroid Build Coastguard Worker aacEncOpen(&hAacEncoder,0,2) \endcode
228*e5436536SAndroid Build Coastguard Worker  - Additionally the maximum number of supported channels in the SBR module can
229*e5436536SAndroid Build Coastguard Worker be denoted separately.\n In this example the encoder instance provides a maximum
230*e5436536SAndroid Build Coastguard Worker of 6 channels out of which up to 2 channels support SBR. This encoder instance
231*e5436536SAndroid Build Coastguard Worker can produce for example 5.1 channel AAC-LC streams or stereo HE-AAC (v2)
232*e5436536SAndroid Build Coastguard Worker streams. HE-AAC 5.1 multi channel is not possible since only 2 out of 6 channels
233*e5436536SAndroid Build Coastguard Worker support SBR, which saves data memory. \code aacEncOpen(&hAacEncoder,0,6|(2<<8))
234*e5436536SAndroid Build Coastguard Worker \endcode \n
235*e5436536SAndroid Build Coastguard Worker 
236*e5436536SAndroid Build Coastguard Worker \section bufDes Input/Output Arguments
237*e5436536SAndroid Build Coastguard Worker 
238*e5436536SAndroid Build Coastguard Worker \subsection allocIOBufs Provide Buffer Descriptors
239*e5436536SAndroid Build Coastguard Worker In the present encoder API, the input and output buffers are described with \ref
240*e5436536SAndroid Build Coastguard Worker AACENC_BufDesc "buffer descriptors". This mechanism allows a flexible handling
241*e5436536SAndroid Build Coastguard Worker of input and output buffers without impact to the actual encoding call. Optional
242*e5436536SAndroid Build Coastguard Worker buffers are necessary e.g. for ancillary data, meta data input or additional
243*e5436536SAndroid Build Coastguard Worker output buffers describing superframing data in DAB+ or DRM+.\n At least one
244*e5436536SAndroid Build Coastguard Worker input buffer for audio input data and one output buffer for bitstream data must
245*e5436536SAndroid Build Coastguard Worker be allocated. The input buffer size can be a user defined multiple of the number
246*e5436536SAndroid Build Coastguard Worker of input channels. PCM input data will be copied from the user defined PCM
247*e5436536SAndroid Build Coastguard Worker buffer to an internal input buffer and so input data can be less than one AAC
248*e5436536SAndroid Build Coastguard Worker audio frame. The output buffer size should be 6144 bits per channel excluding
249*e5436536SAndroid Build Coastguard Worker the LFE channel. If the output data does not fit into the provided buffer, an
250*e5436536SAndroid Build Coastguard Worker AACENC_ERROR will be returned by aacEncEncode(). \code static INT_PCM
251*e5436536SAndroid Build Coastguard Worker inputBuffer[8*2048]; static UCHAR            ancillaryBuffer[50]; static
252*e5436536SAndroid Build Coastguard Worker AACENC_MetaData  metaDataSetup; static UCHAR            outputBuffer[8192];
253*e5436536SAndroid Build Coastguard Worker \endcode
254*e5436536SAndroid Build Coastguard Worker 
255*e5436536SAndroid Build Coastguard Worker All input and output buffer must be clustered in input and output buffer arrays.
256*e5436536SAndroid Build Coastguard Worker \code
257*e5436536SAndroid Build Coastguard Worker static void* inBuffer[]        = { inputBuffer, ancillaryBuffer, &metaDataSetup
258*e5436536SAndroid Build Coastguard Worker }; static INT   inBufferIds[]     = { IN_AUDIO_DATA, IN_ANCILLRY_DATA,
259*e5436536SAndroid Build Coastguard Worker IN_METADATA_SETUP }; static INT   inBufferSize[]    = { sizeof(inputBuffer),
260*e5436536SAndroid Build Coastguard Worker sizeof(ancillaryBuffer), sizeof(metaDataSetup) }; static INT   inBufferElSize[]
261*e5436536SAndroid Build Coastguard Worker = { sizeof(INT_PCM), sizeof(UCHAR), sizeof(AACENC_MetaData) };
262*e5436536SAndroid Build Coastguard Worker 
263*e5436536SAndroid Build Coastguard Worker static void* outBuffer[]       = { outputBuffer };
264*e5436536SAndroid Build Coastguard Worker static INT   outBufferIds[]    = { OUT_BITSTREAM_DATA };
265*e5436536SAndroid Build Coastguard Worker static INT   outBufferSize[]   = { sizeof(outputBuffer) };
266*e5436536SAndroid Build Coastguard Worker static INT   outBufferElSize[] = { sizeof(UCHAR) };
267*e5436536SAndroid Build Coastguard Worker \endcode
268*e5436536SAndroid Build Coastguard Worker 
269*e5436536SAndroid Build Coastguard Worker Allocate buffer descriptors
270*e5436536SAndroid Build Coastguard Worker \code
271*e5436536SAndroid Build Coastguard Worker AACENC_BufDesc inBufDesc;
272*e5436536SAndroid Build Coastguard Worker AACENC_BufDesc outBufDesc;
273*e5436536SAndroid Build Coastguard Worker \endcode
274*e5436536SAndroid Build Coastguard Worker 
275*e5436536SAndroid Build Coastguard Worker Initialize input buffer descriptor
276*e5436536SAndroid Build Coastguard Worker \code
277*e5436536SAndroid Build Coastguard Worker inBufDesc.numBufs            = sizeof(inBuffer)/sizeof(void*);
278*e5436536SAndroid Build Coastguard Worker inBufDesc.bufs              = (void**)&inBuffer;
279*e5436536SAndroid Build Coastguard Worker inBufDesc.bufferIdentifiers = inBufferIds;
280*e5436536SAndroid Build Coastguard Worker inBufDesc.bufSizes          = inBufferSize;
281*e5436536SAndroid Build Coastguard Worker inBufDesc.bufElSizes        = inBufferElSize;
282*e5436536SAndroid Build Coastguard Worker \endcode
283*e5436536SAndroid Build Coastguard Worker 
284*e5436536SAndroid Build Coastguard Worker Initialize output buffer descriptor
285*e5436536SAndroid Build Coastguard Worker \code
286*e5436536SAndroid Build Coastguard Worker outBufDesc.numBufs           = sizeof(outBuffer)/sizeof(void*);
287*e5436536SAndroid Build Coastguard Worker outBufDesc.bufs              = (void**)&outBuffer;
288*e5436536SAndroid Build Coastguard Worker outBufDesc.bufferIdentifiers = outBufferIds;
289*e5436536SAndroid Build Coastguard Worker outBufDesc.bufSizes          = outBufferSize;
290*e5436536SAndroid Build Coastguard Worker outBufDesc.bufElSizes        = outBufferElSize;
291*e5436536SAndroid Build Coastguard Worker \endcode
292*e5436536SAndroid Build Coastguard Worker 
293*e5436536SAndroid Build Coastguard Worker \subsection argLists Provide Input/Output Argument Lists
294*e5436536SAndroid Build Coastguard Worker The input and output arguments of an aacEncEncode() call are described in
295*e5436536SAndroid Build Coastguard Worker argument structures. \code AACENC_InArgs     inargs; AACENC_OutArgs    outargs;
296*e5436536SAndroid Build Coastguard Worker \endcode
297*e5436536SAndroid Build Coastguard Worker 
298*e5436536SAndroid Build Coastguard Worker \section feedInBuf Feed Input Buffer
299*e5436536SAndroid Build Coastguard Worker The input buffer should be handled as a modulo buffer. New audio data in the
300*e5436536SAndroid Build Coastguard Worker form of pulse-code- modulated samples (PCM) must be read from external and be
301*e5436536SAndroid Build Coastguard Worker fed to the input buffer depending on its fill level. The required sample bitrate
302*e5436536SAndroid Build Coastguard Worker (represented by the data type INT_PCM which is 16, 24 or 32 bits wide) is fixed
303*e5436536SAndroid Build Coastguard Worker and depends on library configuration (usually 16 bit). \code inargs.numInSamples
304*e5436536SAndroid Build Coastguard Worker += WAV_InputRead ( wavIn, &inputBuffer[inargs.numInSamples],
305*e5436536SAndroid Build Coastguard Worker                                        FDKmin(encInfo.inputChannels*encInfo.frameLength,
306*e5436536SAndroid Build Coastguard Worker                                               sizeof(inputBuffer) /
307*e5436536SAndroid Build Coastguard Worker                                               sizeof(INT_PCM)-inargs.numInSamples),
308*e5436536SAndroid Build Coastguard Worker                                        SAMPLE_BITS
309*e5436536SAndroid Build Coastguard Worker                                      );
310*e5436536SAndroid Build Coastguard Worker \endcode
311*e5436536SAndroid Build Coastguard Worker 
312*e5436536SAndroid Build Coastguard Worker After the encoder's internal buffer is fed with incoming audio samples, and
313*e5436536SAndroid Build Coastguard Worker aacEncEncode() processed the new input data, update/move remaining samples in
314*e5436536SAndroid Build Coastguard Worker input buffer, simulating a modulo buffer: \code if (outargs.numInSamples>0) {
315*e5436536SAndroid Build Coastguard Worker     FDKmemmove( inputBuffer,
316*e5436536SAndroid Build Coastguard Worker                 &inputBuffer[outargs.numInSamples],
317*e5436536SAndroid Build Coastguard Worker                 sizeof(INT_PCM)*(inargs.numInSamples-outargs.numInSamples) );
318*e5436536SAndroid Build Coastguard Worker     inargs.numInSamples -= outargs.numInSamples;
319*e5436536SAndroid Build Coastguard Worker }
320*e5436536SAndroid Build Coastguard Worker \endcode
321*e5436536SAndroid Build Coastguard Worker 
322*e5436536SAndroid Build Coastguard Worker \section writeOutData Output Bitstream Data
323*e5436536SAndroid Build Coastguard Worker If any AAC bitstream data is available, write it to output file or device as
324*e5436536SAndroid Build Coastguard Worker follows. \code if (outargs.numOutBytes>0) { FDKfwrite(outputBuffer,
325*e5436536SAndroid Build Coastguard Worker outargs.numOutBytes, 1, pOutFile);
326*e5436536SAndroid Build Coastguard Worker }
327*e5436536SAndroid Build Coastguard Worker \endcode
328*e5436536SAndroid Build Coastguard Worker 
329*e5436536SAndroid Build Coastguard Worker \section cfgMetaData Meta Data Configuration
330*e5436536SAndroid Build Coastguard Worker 
331*e5436536SAndroid Build Coastguard Worker If the present library is configured with Metadata support, it is possible to
332*e5436536SAndroid Build Coastguard Worker insert meta data side info into the generated audio bitstream while encoding.
333*e5436536SAndroid Build Coastguard Worker 
334*e5436536SAndroid Build Coastguard Worker To work with meta data the encoder instance has to be \ref encOpen "allocated"
335*e5436536SAndroid Build Coastguard Worker with meta data support. The meta data mode must be be configured with the
336*e5436536SAndroid Build Coastguard Worker ::AACENC_METADATA_MODE parameter and aacEncoder_SetParam() function. \code
337*e5436536SAndroid Build Coastguard Worker aacEncoder_SetParam(hAacEncoder, AACENC_METADATA_MODE, 0-3); \endcode
338*e5436536SAndroid Build Coastguard Worker 
339*e5436536SAndroid Build Coastguard Worker This configuration indicates how to embed meta data into bitstrem. Either no
340*e5436536SAndroid Build Coastguard Worker insertion, MPEG or ETSI style. The meta data itself must be specified within the
341*e5436536SAndroid Build Coastguard Worker meta data setup structure AACENC_MetaData.
342*e5436536SAndroid Build Coastguard Worker 
343*e5436536SAndroid Build Coastguard Worker Changing one of the AACENC_MetaData setup parameters can be achieved from
344*e5436536SAndroid Build Coastguard Worker outside the library within ::IN_METADATA_SETUP input buffer. There is no need to
345*e5436536SAndroid Build Coastguard Worker supply meta data setup structure every frame. If there is no new meta setup data
346*e5436536SAndroid Build Coastguard Worker available, the encoder uses the previous setup or the default configuration in
347*e5436536SAndroid Build Coastguard Worker initial state.
348*e5436536SAndroid Build Coastguard Worker 
349*e5436536SAndroid Build Coastguard Worker In general the audio compressor and limiter within the encoder library can be
350*e5436536SAndroid Build Coastguard Worker configured with the ::AACENC_METADATA_DRC_PROFILE parameter
351*e5436536SAndroid Build Coastguard Worker AACENC_MetaData::drc_profile and and AACENC_MetaData::comp_profile.
352*e5436536SAndroid Build Coastguard Worker \n
353*e5436536SAndroid Build Coastguard Worker 
354*e5436536SAndroid Build Coastguard Worker \section encReconf Encoder Reconfiguration
355*e5436536SAndroid Build Coastguard Worker 
356*e5436536SAndroid Build Coastguard Worker The encoder library allows reconfiguration of the encoder instance with new
357*e5436536SAndroid Build Coastguard Worker settings continuously between encoding frames. Each parameter to be changed must
358*e5436536SAndroid Build Coastguard Worker be set with a single aacEncoder_SetParam() call. The internal status of each
359*e5436536SAndroid Build Coastguard Worker parameter can be retrieved with an aacEncoder_GetParam() call.\n There is no
360*e5436536SAndroid Build Coastguard Worker stand-alone reconfiguration function available. When parameters were modified
361*e5436536SAndroid Build Coastguard Worker from outside the library, an internal control mechanism triggers the necessary
362*e5436536SAndroid Build Coastguard Worker reconfiguration process which will be applied at the beginning of the following
363*e5436536SAndroid Build Coastguard Worker aacEncEncode() call. This state can be observed from external via the
364*e5436536SAndroid Build Coastguard Worker AACENC_INIT_STATUS and aacEncoder_GetParam() function. The reconfiguration
365*e5436536SAndroid Build Coastguard Worker process can also be applied immediately when all parameters of an aacEncEncode()
366*e5436536SAndroid Build Coastguard Worker call are NULL with a valid encoder handle.\n\n The internal reconfiguration
367*e5436536SAndroid Build Coastguard Worker process can be controlled from extern with the following access. \code
368*e5436536SAndroid Build Coastguard Worker aacEncoder_SetParam(hAacEncoder, AACENC_CONTROL_STATE, AACENC_CTRLFLAGS);
369*e5436536SAndroid Build Coastguard Worker \endcode
370*e5436536SAndroid Build Coastguard Worker 
371*e5436536SAndroid Build Coastguard Worker 
372*e5436536SAndroid Build Coastguard Worker \section encParams Encoder Parametrization
373*e5436536SAndroid Build Coastguard Worker 
374*e5436536SAndroid Build Coastguard Worker All parameteres listed in ::AACENC_PARAM can be modified within an encoder
375*e5436536SAndroid Build Coastguard Worker instance.
376*e5436536SAndroid Build Coastguard Worker 
377*e5436536SAndroid Build Coastguard Worker \subsection encMandatory Mandatory Encoder Parameters
378*e5436536SAndroid Build Coastguard Worker The following parameters must be specified when the encoder instance is
379*e5436536SAndroid Build Coastguard Worker initialized. \code aacEncoder_SetParam(hAacEncoder, AACENC_AOT, value);
380*e5436536SAndroid Build Coastguard Worker aacEncoder_SetParam(hAacEncoder, AACENC_BITRATE, value);
381*e5436536SAndroid Build Coastguard Worker aacEncoder_SetParam(hAacEncoder, AACENC_SAMPLERATE, value);
382*e5436536SAndroid Build Coastguard Worker aacEncoder_SetParam(hAacEncoder, AACENC_CHANNELMODE, value);
383*e5436536SAndroid Build Coastguard Worker \endcode
384*e5436536SAndroid Build Coastguard Worker Beyond that is an internal auto mode which preinitizializes the ::AACENC_BITRATE
385*e5436536SAndroid Build Coastguard Worker parameter if the parameter was not set from extern. The bitrate depends on the
386*e5436536SAndroid Build Coastguard Worker number of effective channels and sampling rate and is determined as follows.
387*e5436536SAndroid Build Coastguard Worker \code
388*e5436536SAndroid Build Coastguard Worker AAC-LC (AOT_AAC_LC): 1.5 bits per sample
389*e5436536SAndroid Build Coastguard Worker HE-AAC (AOT_SBR): 0.625 bits per sample (dualrate sbr)
390*e5436536SAndroid Build Coastguard Worker HE-AAC (AOT_SBR): 1.125 bits per sample (downsampled sbr)
391*e5436536SAndroid Build Coastguard Worker HE-AAC v2 (AOT_PS): 0.5 bits per sample
392*e5436536SAndroid Build Coastguard Worker \endcode
393*e5436536SAndroid Build Coastguard Worker 
394*e5436536SAndroid Build Coastguard Worker \subsection channelMode Channel Mode Configuration
395*e5436536SAndroid Build Coastguard Worker The input audio data is described with the ::AACENC_CHANNELMODE parameter in the
396*e5436536SAndroid Build Coastguard Worker aacEncoder_SetParam() call. It is not possible to use the encoder instance with
397*e5436536SAndroid Build Coastguard Worker a 'number of input channels' argument. Instead, the channelMode must be set as
398*e5436536SAndroid Build Coastguard Worker follows. \code aacEncoder_SetParam(hAacEncoder, AACENC_CHANNELMODE, value);
399*e5436536SAndroid Build Coastguard Worker \endcode The parameter is specified in ::CHANNEL_MODE and can be mapped from the
400*e5436536SAndroid Build Coastguard Worker number of input channels in the following way. \code CHANNEL_MODE chMode =
401*e5436536SAndroid Build Coastguard Worker MODE_INVALID;
402*e5436536SAndroid Build Coastguard Worker 
403*e5436536SAndroid Build Coastguard Worker switch (nChannels) {
404*e5436536SAndroid Build Coastguard Worker   case 1:  chMode = MODE_1;          break;
405*e5436536SAndroid Build Coastguard Worker   case 2:  chMode = MODE_2;          break;
406*e5436536SAndroid Build Coastguard Worker   case 3:  chMode = MODE_1_2;        break;
407*e5436536SAndroid Build Coastguard Worker   case 4:  chMode = MODE_1_2_1;      break;
408*e5436536SAndroid Build Coastguard Worker   case 5:  chMode = MODE_1_2_2;      break;
409*e5436536SAndroid Build Coastguard Worker   case 6:  chMode = MODE_1_2_2_1;    break;
410*e5436536SAndroid Build Coastguard Worker   case 7:  chMode = MODE_6_1;        break;
411*e5436536SAndroid Build Coastguard Worker   case 8:  chMode = MODE_7_1_BACK;   break;
412*e5436536SAndroid Build Coastguard Worker   default:
413*e5436536SAndroid Build Coastguard Worker     chMode = MODE_INVALID;
414*e5436536SAndroid Build Coastguard Worker }
415*e5436536SAndroid Build Coastguard Worker return chMode;
416*e5436536SAndroid Build Coastguard Worker \endcode
417*e5436536SAndroid Build Coastguard Worker 
418*e5436536SAndroid Build Coastguard Worker \subsection peakbitrate Peak Bitrate Configuration
419*e5436536SAndroid Build Coastguard Worker In AAC, the default bitreservoir configuration depends on the chosen bitrate per
420*e5436536SAndroid Build Coastguard Worker frame and the number of effective channels. The size can be determined as below.
421*e5436536SAndroid Build Coastguard Worker \f[
422*e5436536SAndroid Build Coastguard Worker bitreservoir = nEffChannels*6144 - (bitrate*framelength/samplerate)
423*e5436536SAndroid Build Coastguard Worker \f]
424*e5436536SAndroid Build Coastguard Worker Due to audio quality concerns it is not recommended to change the bitreservoir
425*e5436536SAndroid Build Coastguard Worker size to a lower value than the default setting! However, for minimizing the
426*e5436536SAndroid Build Coastguard Worker delay for streaming applications or for achieving a constant size of the
427*e5436536SAndroid Build Coastguard Worker bitstream packages in each frame, it may be necessaray to limit the maximum bits
428*e5436536SAndroid Build Coastguard Worker per frame size. This can be done with the ::AACENC_PEAK_BITRATE parameter. \code
429*e5436536SAndroid Build Coastguard Worker aacEncoder_SetParam(hAacEncoder, AACENC_PEAK_BITRATE, value);
430*e5436536SAndroid Build Coastguard Worker \endcode
431*e5436536SAndroid Build Coastguard Worker 
432*e5436536SAndroid Build Coastguard Worker To achieve acceptable audio quality with a reduced bitreservoir size setting at
433*e5436536SAndroid Build Coastguard Worker least 1000 bits per audio channel is recommended. For a multichannel audio file
434*e5436536SAndroid Build Coastguard Worker with 5.1 channels the bitreservoir reduced to 5000 bits results in acceptable
435*e5436536SAndroid Build Coastguard Worker audio quality.
436*e5436536SAndroid Build Coastguard Worker 
437*e5436536SAndroid Build Coastguard Worker 
438*e5436536SAndroid Build Coastguard Worker \subsection vbrmode Variable Bitrate Mode
439*e5436536SAndroid Build Coastguard Worker The variable bitrate (VBR) mode coding adapts the bit consumption to the
440*e5436536SAndroid Build Coastguard Worker psychoacoustic requirements of the signal. The encoder ignores the user-defined
441*e5436536SAndroid Build Coastguard Worker bit rate and selects a suitable pre-defined configuration based on the provided
442*e5436536SAndroid Build Coastguard Worker AOT. The VBR mode 1 is tuned for HE-AACv2, for VBR mode 2, HE-AACv1 should be
443*e5436536SAndroid Build Coastguard Worker used. VBR modes 3-5 should be used with Low-Complexity AAC. When encoding
444*e5436536SAndroid Build Coastguard Worker AAC-ELD, the best mode is selected automatically.
445*e5436536SAndroid Build Coastguard Worker 
446*e5436536SAndroid Build Coastguard Worker The bitrates given in the table are averages over time and different encoder
447*e5436536SAndroid Build Coastguard Worker settings. They strongly depend on the type of audio signal. The VBR
448*e5436536SAndroid Build Coastguard Worker configurations can be adjusted with the ::AACENC_BITRATEMODE encoder parameter.
449*e5436536SAndroid Build Coastguard Worker \verbatim
450*e5436536SAndroid Build Coastguard Worker -----------------------------------------------
451*e5436536SAndroid Build Coastguard Worker  VBR_MODE | Approx. Bitrate in kbps for stereo
452*e5436536SAndroid Build Coastguard Worker           |     AAC-LC    |      AAC-ELD
453*e5436536SAndroid Build Coastguard Worker ----------+---------------+--------------------
454*e5436536SAndroid Build Coastguard Worker     VBR_1 | 32 (HE-AACv2) |         48
455*e5436536SAndroid Build Coastguard Worker     VBR_2 | 72 (HE-AACv1) |         56
456*e5436536SAndroid Build Coastguard Worker     VBR_3 |      112      |         72
457*e5436536SAndroid Build Coastguard Worker     VBR_4 |      148      |        148
458*e5436536SAndroid Build Coastguard Worker     VBR_5 |      228      |        224
459*e5436536SAndroid Build Coastguard Worker --------------------------------------------
460*e5436536SAndroid Build Coastguard Worker \endverbatim
461*e5436536SAndroid Build Coastguard Worker Note that these figures are valid for stereo encoding only. VBR modes 2-5 will
462*e5436536SAndroid Build Coastguard Worker yield much lower bit rates when encoding single-channel input. For
463*e5436536SAndroid Build Coastguard Worker configurations which are making use of downmix modules the AAC core channels
464*e5436536SAndroid Build Coastguard Worker respectively downmix channels shall be considered.
465*e5436536SAndroid Build Coastguard Worker 
466*e5436536SAndroid Build Coastguard Worker \subsection encQual Audio Quality Considerations
467*e5436536SAndroid Build Coastguard Worker The default encoder configuration is suggested to be used. Encoder tools such as
468*e5436536SAndroid Build Coastguard Worker TNS and PNS are activated by default and are internally controlled (see \ref
469*e5436536SAndroid Build Coastguard Worker BEHAVIOUR_TOOLS).
470*e5436536SAndroid Build Coastguard Worker 
471*e5436536SAndroid Build Coastguard Worker There is an additional quality parameter called ::AACENC_AFTERBURNER. In the
472*e5436536SAndroid Build Coastguard Worker default configuration this quality switch is deactivated because it would cause
473*e5436536SAndroid Build Coastguard Worker a workload increase which might be significant. If workload is not an issue in
474*e5436536SAndroid Build Coastguard Worker the application we recommended to activate this feature. \code
475*e5436536SAndroid Build Coastguard Worker aacEncoder_SetParam(hAacEncoder, AACENC_AFTERBURNER, 0/1); \endcode
476*e5436536SAndroid Build Coastguard Worker 
477*e5436536SAndroid Build Coastguard Worker \subsection encELD ELD Auto Configuration Mode
478*e5436536SAndroid Build Coastguard Worker For ELD configuration a so called auto configurator is available which
479*e5436536SAndroid Build Coastguard Worker configures SBR and the SBR ratio by itself. The configurator is used when the
480*e5436536SAndroid Build Coastguard Worker encoder parameter ::AACENC_SBR_MODE and ::AACENC_SBR_RATIO are not set
481*e5436536SAndroid Build Coastguard Worker explicitly.
482*e5436536SAndroid Build Coastguard Worker 
483*e5436536SAndroid Build Coastguard Worker Based on sampling rate and chosen bitrate a reasonable SBR configuration will be
484*e5436536SAndroid Build Coastguard Worker used. \verbatim
485*e5436536SAndroid Build Coastguard Worker ------------------------------------------------------------------
486*e5436536SAndroid Build Coastguard Worker  Sampling Rate |   Total Bitrate | No. of | SBR |       SBR Ratio
487*e5436536SAndroid Build Coastguard Worker      [kHz]     |      [bit/s]    |  Chan  |     |
488*e5436536SAndroid Build Coastguard Worker                |                 |        |     |
489*e5436536SAndroid Build Coastguard Worker ---------------+-----------------+--------+-----+-----------------
490*e5436536SAndroid Build Coastguard Worker      ]min, 16[ |    min -    max |      1 | off |             ---
491*e5436536SAndroid Build Coastguard Worker ---------------+-----------------+--------------+-----------------
492*e5436536SAndroid Build Coastguard Worker           [16] |    min -  27999 |      1 |  on | downsampled SBR
493*e5436536SAndroid Build Coastguard Worker                |  28000 -    max |      1 | off |             ---
494*e5436536SAndroid Build Coastguard Worker ---------------+-----------------+--------------+-----------------
495*e5436536SAndroid Build Coastguard Worker      ]16 - 24] |    min -  39999 |      1 |  on | downsampled SBR
496*e5436536SAndroid Build Coastguard Worker                |  40000 -    max |      1 | off |             ---
497*e5436536SAndroid Build Coastguard Worker ---------------+-----------------+--------------+-----------------
498*e5436536SAndroid Build Coastguard Worker      ]24 - 32] |    min -  27999 |      1 |  on |    dualrate SBR
499*e5436536SAndroid Build Coastguard Worker                |  28000 -  55999 |      1 |  on | downsampled SBR
500*e5436536SAndroid Build Coastguard Worker                |  56000 -    max |      1 | off |             ---
501*e5436536SAndroid Build Coastguard Worker ---------------+-----------------+--------------+-----------------
502*e5436536SAndroid Build Coastguard Worker    ]32 - 44.1] |    min -  63999 |      1 |  on |    dualrate SBR
503*e5436536SAndroid Build Coastguard Worker                |  64000 -    max |      1 | off |             ---
504*e5436536SAndroid Build Coastguard Worker ---------------+-----------------+--------------+-----------------
505*e5436536SAndroid Build Coastguard Worker    ]44.1 - 48] |    min -  63999 |      1 |  on |    dualrate SBR
506*e5436536SAndroid Build Coastguard Worker                |  64000 -  max   |      1 | off |             ---
507*e5436536SAndroid Build Coastguard Worker                |                 |        |     |
508*e5436536SAndroid Build Coastguard Worker ---------------+-----------------+--------+-----+-----------------
509*e5436536SAndroid Build Coastguard Worker      ]min, 16[ |    min -    max |      2 | off |             ---
510*e5436536SAndroid Build Coastguard Worker ---------------+-----------------+--------------+-----------------
511*e5436536SAndroid Build Coastguard Worker           [16] |    min -  31999 |      2 |  on | downsampled SBR
512*e5436536SAndroid Build Coastguard Worker                |  32000 -  63999 |      2 |  on | downsampled SBR
513*e5436536SAndroid Build Coastguard Worker                |  64000 -    max |      2 | off |             ---
514*e5436536SAndroid Build Coastguard Worker ---------------+-----------------+--------------+-----------------
515*e5436536SAndroid Build Coastguard Worker      ]16 - 24] |    min -  47999 |      2 |  on | downsampled SBR
516*e5436536SAndroid Build Coastguard Worker                |  48000 -  79999 |      2 |  on | downsampled SBR
517*e5436536SAndroid Build Coastguard Worker                |  80000 -    max |      2 | off |             ---
518*e5436536SAndroid Build Coastguard Worker ---------------+-----------------+--------------+-----------------
519*e5436536SAndroid Build Coastguard Worker      ]24 - 32] |    min -  31999 |      2 |  on |    dualrate SBR
520*e5436536SAndroid Build Coastguard Worker                |  32000 -  67999 |      2 |  on |    dualrate SBR
521*e5436536SAndroid Build Coastguard Worker                |  68000 -  95999 |      2 |  on | downsampled SBR
522*e5436536SAndroid Build Coastguard Worker                |  96000 -    max |      2 | off |             ---
523*e5436536SAndroid Build Coastguard Worker ---------------+-----------------+--------------+-----------------
524*e5436536SAndroid Build Coastguard Worker    ]32 - 44.1] |    min -  43999 |      2 |  on |    dualrate SBR
525*e5436536SAndroid Build Coastguard Worker                |  44000 - 127999 |      2 |  on |    dualrate SBR
526*e5436536SAndroid Build Coastguard Worker                | 128000 -    max |      2 | off |             ---
527*e5436536SAndroid Build Coastguard Worker ---------------+-----------------+--------------+-----------------
528*e5436536SAndroid Build Coastguard Worker    ]44.1 - 48] |    min -  43999 |      2 |  on |    dualrate SBR
529*e5436536SAndroid Build Coastguard Worker                |  44000 - 127999 |      2 |  on |    dualrate SBR
530*e5436536SAndroid Build Coastguard Worker                | 128000 -  max   |      2 | off |             ---
531*e5436536SAndroid Build Coastguard Worker                |                 |              |
532*e5436536SAndroid Build Coastguard Worker ------------------------------------------------------------------
533*e5436536SAndroid Build Coastguard Worker \endverbatim
534*e5436536SAndroid Build Coastguard Worker 
535*e5436536SAndroid Build Coastguard Worker \subsection encDsELD Reduced Delay (Downscaled) Mode
536*e5436536SAndroid Build Coastguard Worker The downscaled mode of AAC-ELD reduces the algorithmic delay of AAC-ELD by
537*e5436536SAndroid Build Coastguard Worker virtually increasing the sampling rate. When using the downscaled mode, the
538*e5436536SAndroid Build Coastguard Worker bitrate should be increased for keeping the same audio quality level. For common
539*e5436536SAndroid Build Coastguard Worker signals, the bitrate should be increased by 25% for a downscale factor of 2.
540*e5436536SAndroid Build Coastguard Worker 
541*e5436536SAndroid Build Coastguard Worker Currently, downscaling factors 2 and 4 are supported.
542*e5436536SAndroid Build Coastguard Worker To enable the downscaled mode in the encoder, the framelength parameter
543*e5436536SAndroid Build Coastguard Worker AACENC_GRANULE_LENGTH must be set accordingly to 256 or 240 for a downscale
544*e5436536SAndroid Build Coastguard Worker factor of 2 or 128 or 120 for a downscale factor of 4. The default values of 512
545*e5436536SAndroid Build Coastguard Worker or 480 mean that no downscaling is applied. \code
546*e5436536SAndroid Build Coastguard Worker aacEncoder_SetParam(hAacEncoder, AACENC_GRANULE_LENGTH, 256);
547*e5436536SAndroid Build Coastguard Worker aacEncoder_SetParam(hAacEncoder, AACENC_GRANULE_LENGTH, 128);
548*e5436536SAndroid Build Coastguard Worker \endcode
549*e5436536SAndroid Build Coastguard Worker 
550*e5436536SAndroid Build Coastguard Worker Downscaled bitstreams are fully backwards compatible. However, the legacy
551*e5436536SAndroid Build Coastguard Worker decoder needs to support high sample rate, e.g. 96kHz. The signaled sampling
552*e5436536SAndroid Build Coastguard Worker rate is multiplied by the downscale factor. Although not required, downscaling
553*e5436536SAndroid Build Coastguard Worker should be applied when decoding downscaled bitstreams. It reduces CPU workload
554*e5436536SAndroid Build Coastguard Worker and the output will have the same sampling rate as the input. In an ideal
555*e5436536SAndroid Build Coastguard Worker configuration both encoder and decoder should run with the same downscale
556*e5436536SAndroid Build Coastguard Worker factor.
557*e5436536SAndroid Build Coastguard Worker 
558*e5436536SAndroid Build Coastguard Worker The following table shows approximate filter bank delays in ms for common
559*e5436536SAndroid Build Coastguard Worker sampling rates(sr) at framesize(fs), and downscale factor(dsf), based on this
560*e5436536SAndroid Build Coastguard Worker formula: \f[ 1000 * fs / (dsf * sr) \f]
561*e5436536SAndroid Build Coastguard Worker 
562*e5436536SAndroid Build Coastguard Worker \verbatim
563*e5436536SAndroid Build Coastguard Worker --------------------------------------
564*e5436536SAndroid Build Coastguard Worker       | 512/2 | 512/4 | 480/2 | 480/4
565*e5436536SAndroid Build Coastguard Worker ------+-------+-------+-------+-------
566*e5436536SAndroid Build Coastguard Worker 22050 | 17.41 |  8.71 | 16.33 |  8.16
567*e5436536SAndroid Build Coastguard Worker 32000 | 12.00 |  6.00 | 11.25 |  5.62
568*e5436536SAndroid Build Coastguard Worker 44100 |  8.71 |  4.35 |  8.16 |  4.08
569*e5436536SAndroid Build Coastguard Worker 48000 |  8.00 |  4.00 |  7.50 |  3.75
570*e5436536SAndroid Build Coastguard Worker --------------------------------------
571*e5436536SAndroid Build Coastguard Worker \endverbatim
572*e5436536SAndroid Build Coastguard Worker 
573*e5436536SAndroid Build Coastguard Worker \section audiochCfg Audio Channel Configuration
574*e5436536SAndroid Build Coastguard Worker The MPEG standard refers often to the so-called Channel Configuration. This
575*e5436536SAndroid Build Coastguard Worker Channel Configuration is used for a fixed Channel Mapping. The configurations
576*e5436536SAndroid Build Coastguard Worker 1-7 and 11,12,14 are predefined in MPEG standard and used for implicit
577*e5436536SAndroid Build Coastguard Worker signalling within the encoded bitstream. For user defined Configurations the
578*e5436536SAndroid Build Coastguard Worker Channel Configuration is set to 0 and the Channel Mapping must be explecitly
579*e5436536SAndroid Build Coastguard Worker described with an appropriate Program Config Element. The present Encoder
580*e5436536SAndroid Build Coastguard Worker implementation does not allow the user to configure this Channel Configuration
581*e5436536SAndroid Build Coastguard Worker from extern. The Encoder implementation supports fixed Channel Modes which are
582*e5436536SAndroid Build Coastguard Worker mapped to Channel Configuration as follow. \verbatim
583*e5436536SAndroid Build Coastguard Worker ----------------------------------------------------------------------------------------
584*e5436536SAndroid Build Coastguard Worker  ChannelMode           | ChCfg | Height | front_El      | side_El  | back_El  |
585*e5436536SAndroid Build Coastguard Worker lfe_El
586*e5436536SAndroid Build Coastguard Worker -----------------------+-------+--------+---------------+----------+----------+---------
587*e5436536SAndroid Build Coastguard Worker MODE_1                 |     1 | NORM   | SCE           |          |          |
588*e5436536SAndroid Build Coastguard Worker MODE_2                 |     2 | NORM   | CPE           |          |          |
589*e5436536SAndroid Build Coastguard Worker MODE_1_2               |     3 | NORM   | SCE, CPE      |          |          |
590*e5436536SAndroid Build Coastguard Worker MODE_1_2_1             |     4 | NORM   | SCE, CPE      |          | SCE      |
591*e5436536SAndroid Build Coastguard Worker MODE_1_2_2             |     5 | NORM   | SCE, CPE      |          | CPE      |
592*e5436536SAndroid Build Coastguard Worker MODE_1_2_2_1           |     6 | NORM   | SCE, CPE      |          | CPE      |
593*e5436536SAndroid Build Coastguard Worker LFE MODE_1_2_2_2_1         |     7 | NORM   | SCE, CPE, CPE |          | CPE
594*e5436536SAndroid Build Coastguard Worker | LFE MODE_6_1               |    11 | NORM   | SCE, CPE      |          | CPE,
595*e5436536SAndroid Build Coastguard Worker SCE | LFE MODE_7_1_BACK          |    12 | NORM   | SCE, CPE      |          |
596*e5436536SAndroid Build Coastguard Worker CPE, CPE | LFE
597*e5436536SAndroid Build Coastguard Worker -----------------------+-------+--------+---------------+----------+----------+---------
598*e5436536SAndroid Build Coastguard Worker MODE_7_1_TOP_FRONT     |    14 | NORM   | SCE, CPE      |          | CPE      |
599*e5436536SAndroid Build Coastguard Worker LFE |       | TOP    | CPE           |          |          |
600*e5436536SAndroid Build Coastguard Worker -----------------------+-------+--------+---------------+----------+----------+---------
601*e5436536SAndroid Build Coastguard Worker MODE_7_1_REAR_SURROUND |     0 | NORM   | SCE, CPE      |          | CPE, CPE |
602*e5436536SAndroid Build Coastguard Worker LFE MODE_7_1_FRONT_CENTER  |     0 | NORM   | SCE, CPE, CPE |          | CPE
603*e5436536SAndroid Build Coastguard Worker | LFE
604*e5436536SAndroid Build Coastguard Worker ----------------------------------------------------------------------------------------
605*e5436536SAndroid Build Coastguard Worker - NORM: Normal Height Layer.     - TOP: Top Height Layer.  - BTM: Bottom Height
606*e5436536SAndroid Build Coastguard Worker Layer.
607*e5436536SAndroid Build Coastguard Worker - SCE: Single Channel Element.   - CPE: Channel Pair.      - LFE: Low Frequency
608*e5436536SAndroid Build Coastguard Worker Element. \endverbatim
609*e5436536SAndroid Build Coastguard Worker 
610*e5436536SAndroid Build Coastguard Worker The Table describes all fixed Channel Elements for each Channel Mode which are
611*e5436536SAndroid Build Coastguard Worker assigned to a speaker arrangement. The arrangement includes front, side, back
612*e5436536SAndroid Build Coastguard Worker and lfe Audio Channel Elements in the normal height layer, possibly followed by
613*e5436536SAndroid Build Coastguard Worker front, side, and back elements in the top and bottom layer (Channel
614*e5436536SAndroid Build Coastguard Worker Configuration 14). \n This mapping of Audio Channel Elements is defined in MPEG
615*e5436536SAndroid Build Coastguard Worker standard for Channel Config 1-7 and 11,12,14.\n In case of Channel Config 0 or
616*e5436536SAndroid Build Coastguard Worker writing matrix mixdown coefficients, the encoder enables the writing of Program
617*e5436536SAndroid Build Coastguard Worker Config Element itself as described in \ref encPCE. The configuration used in
618*e5436536SAndroid Build Coastguard Worker Program Config Element refers to the denoted Table.\n Beside the Channel Element
619*e5436536SAndroid Build Coastguard Worker assignment the Channel Modes are resposible for audio input data channel
620*e5436536SAndroid Build Coastguard Worker mapping. The Channel Mapping of the audio data depends on the selected
621*e5436536SAndroid Build Coastguard Worker ::AACENC_CHANNELORDER which can be MPEG or WAV like order.\n Following table
622*e5436536SAndroid Build Coastguard Worker describes the complete channel mapping for both Channel Order configurations.
623*e5436536SAndroid Build Coastguard Worker \verbatim
624*e5436536SAndroid Build Coastguard Worker ---------------------------------------------------------------------------------------
625*e5436536SAndroid Build Coastguard Worker ChannelMode            |  MPEG-Channelorder            |  WAV-Channelorder
626*e5436536SAndroid Build Coastguard Worker -----------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
627*e5436536SAndroid Build Coastguard Worker MODE_1                 | 0 |   |   |   |   |   |   |   | 0 |   |   |   |   |   |
628*e5436536SAndroid Build Coastguard Worker | MODE_2                 | 0 | 1 |   |   |   |   |   |   | 0 | 1 |   |   |   |
629*e5436536SAndroid Build Coastguard Worker |   | MODE_1_2               | 0 | 1 | 2 |   |   |   |   |   | 2 | 0 | 1 |   |
630*e5436536SAndroid Build Coastguard Worker |   |   | MODE_1_2_1             | 0 | 1 | 2 | 3 |   |   |   |   | 2 | 0 | 1 | 3
631*e5436536SAndroid Build Coastguard Worker |   |   |   | MODE_1_2_2             | 0 | 1 | 2 | 3 | 4 |   |   |   | 2 | 0 | 1
632*e5436536SAndroid Build Coastguard Worker | 3 | 4 |   |   | MODE_1_2_2_1           | 0 | 1 | 2 | 3 | 4 | 5 |   |   | 2 | 0
633*e5436536SAndroid Build Coastguard Worker | 1 | 4 | 5 | 3 |   | MODE_1_2_2_2_1         | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2
634*e5436536SAndroid Build Coastguard Worker | 6 | 7 | 0 | 1 | 4 | 5 | 3 MODE_6_1               | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
635*e5436536SAndroid Build Coastguard Worker | 2 | 0 | 1 | 4 | 5 | 6 | 3 | MODE_7_1_BACK          | 0 | 1 | 2 | 3 | 4 | 5 | 6
636*e5436536SAndroid Build Coastguard Worker | 7 | 2 | 0 | 1 | 6 | 7 | 4 | 5 | 3 MODE_7_1_TOP_FRONT     | 0 | 1 | 2 | 3 | 4 |
637*e5436536SAndroid Build Coastguard Worker 5 | 6 | 7 | 2 | 0 | 1 | 4 | 5 | 3 | 6 | 7
638*e5436536SAndroid Build Coastguard Worker -----------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
639*e5436536SAndroid Build Coastguard Worker MODE_7_1_REAR_SURROUND | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 0 | 1 | 6 | 7 | 4 |
640*e5436536SAndroid Build Coastguard Worker 5 | 3 MODE_7_1_FRONT_CENTER  | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 6 | 7 | 0 | 1
641*e5436536SAndroid Build Coastguard Worker | 4 | 5 | 3
642*e5436536SAndroid Build Coastguard Worker ---------------------------------------------------------------------------------------
643*e5436536SAndroid Build Coastguard Worker \endverbatim
644*e5436536SAndroid Build Coastguard Worker 
645*e5436536SAndroid Build Coastguard Worker The denoted mapping is important for correct audio channel assignment when using
646*e5436536SAndroid Build Coastguard Worker MPEG or WAV ordering. The incoming audio channels are distributed MPEG like
647*e5436536SAndroid Build Coastguard Worker starting at the front channels and ending at the back channels. The distribution
648*e5436536SAndroid Build Coastguard Worker is used as described in Table concering Channel Config and fix channel elements.
649*e5436536SAndroid Build Coastguard Worker Please see the following example for clarification.
650*e5436536SAndroid Build Coastguard Worker 
651*e5436536SAndroid Build Coastguard Worker \verbatim
652*e5436536SAndroid Build Coastguard Worker Example: MODE_1_2_2_1 - WAV-Channelorder 5.1
653*e5436536SAndroid Build Coastguard Worker ------------------------------------------
654*e5436536SAndroid Build Coastguard Worker  Input Channel      | Coder Channel
655*e5436536SAndroid Build Coastguard Worker --------------------+---------------------
656*e5436536SAndroid Build Coastguard Worker  2 (front center)   | 0 (SCE channel)
657*e5436536SAndroid Build Coastguard Worker  0 (left center)    | 1 (1st of 1st CPE)
658*e5436536SAndroid Build Coastguard Worker  1 (right center)   | 2 (2nd of 1st CPE)
659*e5436536SAndroid Build Coastguard Worker  4 (left surround)  | 3 (1st of 2nd CPE)
660*e5436536SAndroid Build Coastguard Worker  5 (right surround) | 4 (2nd of 2nd CPE)
661*e5436536SAndroid Build Coastguard Worker  3 (LFE)            | 5 (LFE)
662*e5436536SAndroid Build Coastguard Worker ------------------------------------------
663*e5436536SAndroid Build Coastguard Worker \endverbatim
664*e5436536SAndroid Build Coastguard Worker 
665*e5436536SAndroid Build Coastguard Worker 
666*e5436536SAndroid Build Coastguard Worker \section suppBitrates Supported Bitrates
667*e5436536SAndroid Build Coastguard Worker 
668*e5436536SAndroid Build Coastguard Worker The FDK AAC Encoder provides a wide range of supported bitrates.
669*e5436536SAndroid Build Coastguard Worker The minimum and maximum allowed bitrate depends on the Audio Object Type. For
670*e5436536SAndroid Build Coastguard Worker AAC-LC the minimum bitrate is the bitrate that is required to write the most
671*e5436536SAndroid Build Coastguard Worker basic and minimal valid bitstream. It consists of the bitstream format header
672*e5436536SAndroid Build Coastguard Worker information and other static/mandatory information within the AAC payload. The
673*e5436536SAndroid Build Coastguard Worker maximum AAC framesize allowed by the MPEG-4 standard determines the maximum
674*e5436536SAndroid Build Coastguard Worker allowed bitrate for AAC-LC. For HE-AAC and HE-AAC v2 a library internal look-up
675*e5436536SAndroid Build Coastguard Worker table is used.
676*e5436536SAndroid Build Coastguard Worker 
677*e5436536SAndroid Build Coastguard Worker A good working point in terms of audio quality, sampling rate and bitrate, is at
678*e5436536SAndroid Build Coastguard Worker 1 to 1.5 bits/audio sample for AAC-LC, 0.625 bits/audio sample for dualrate
679*e5436536SAndroid Build Coastguard Worker HE-AAC, 1.125 bits/audio sample for downsampled HE-AAC and 0.5 bits/audio sample
680*e5436536SAndroid Build Coastguard Worker for HE-AAC v2. For example for one channel with a sampling frequency of 48 kHz,
681*e5436536SAndroid Build Coastguard Worker the range from 48 kbit/s to 72 kbit/s achieves reasonable audio quality for
682*e5436536SAndroid Build Coastguard Worker AAC-LC.
683*e5436536SAndroid Build Coastguard Worker 
684*e5436536SAndroid Build Coastguard Worker For HE-AAC and HE-AAC v2 the lowest possible audio input sampling frequency is
685*e5436536SAndroid Build Coastguard Worker 16 kHz because then the AAC-LC core encoder operates in dual rate mode at its
686*e5436536SAndroid Build Coastguard Worker lowest possible sampling frequency, which is 8 kHz. HE-AAC v2 requires stereo
687*e5436536SAndroid Build Coastguard Worker input audio data.
688*e5436536SAndroid Build Coastguard Worker 
689*e5436536SAndroid Build Coastguard Worker Please note that in HE-AAC or HE-AAC v2 mode the encoder supports much higher
690*e5436536SAndroid Build Coastguard Worker bitrates than are appropriate for HE-AAC or HE-AAC v2. For example, at a bitrate
691*e5436536SAndroid Build Coastguard Worker of more than 64 kbit/s for a stereo audio signal at 44.1 kHz it usually makes
692*e5436536SAndroid Build Coastguard Worker sense to use AAC-LC, which will produce better audio quality at that bitrate
693*e5436536SAndroid Build Coastguard Worker than HE-AAC or HE-AAC v2.
694*e5436536SAndroid Build Coastguard Worker 
695*e5436536SAndroid Build Coastguard Worker \section reommendedConfig Recommended Sampling Rate and Bitrate Combinations
696*e5436536SAndroid Build Coastguard Worker 
697*e5436536SAndroid Build Coastguard Worker The following table provides an overview of recommended encoder configuration
698*e5436536SAndroid Build Coastguard Worker parameters which we determined by virtue of numerous listening tests.
699*e5436536SAndroid Build Coastguard Worker 
700*e5436536SAndroid Build Coastguard Worker \subsection reommendedConfigLC AAC-LC, HE-AAC, HE-AACv2 in Dualrate SBR mode.
701*e5436536SAndroid Build Coastguard Worker \verbatim
702*e5436536SAndroid Build Coastguard Worker -----------------------------------------------------------------------------------
703*e5436536SAndroid Build Coastguard Worker Audio Object Type  |  Bit Rate Range  |            Supported  | Preferred  | No.
704*e5436536SAndroid Build Coastguard Worker of |         [bit/s]  |       Sampling Rates  |    Sampl.  |  Chan. |
705*e5436536SAndroid Build Coastguard Worker |                [kHz]  |      Rate  | |                  |
706*e5436536SAndroid Build Coastguard Worker |     [kHz]  |
707*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
708*e5436536SAndroid Build Coastguard Worker AAC LC + SBR + PS  |   8000 -  11999  |         22.05, 24.00  |     24.00  | 2
709*e5436536SAndroid Build Coastguard Worker AAC LC + SBR + PS  |  12000 -  17999  |                32.00  |     32.00  | 2
710*e5436536SAndroid Build Coastguard Worker AAC LC + SBR + PS  |  18000 -  39999  |  32.00, 44.10, 48.00  |     44.10  | 2
711*e5436536SAndroid Build Coastguard Worker AAC LC + SBR + PS  |  40000 -  64000  |  32.00, 44.10, 48.00  |     48.00  | 2
712*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
713*e5436536SAndroid Build Coastguard Worker AAC LC + SBR       |   8000 -  11999  |         22.05, 24.00  |     24.00  | 1
714*e5436536SAndroid Build Coastguard Worker AAC LC + SBR       |  12000 -  17999  |                32.00  |     32.00  | 1
715*e5436536SAndroid Build Coastguard Worker AAC LC + SBR       |  18000 -  39999  |  32.00, 44.10, 48.00  |     44.10  | 1
716*e5436536SAndroid Build Coastguard Worker AAC LC + SBR       |  40000 -  64000  |  32.00, 44.10, 48.00  |     48.00  | 1
717*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
718*e5436536SAndroid Build Coastguard Worker AAC LC + SBR       |  16000 -  27999  |  32.00, 44.10, 48.00  |     32.00  | 2
719*e5436536SAndroid Build Coastguard Worker AAC LC + SBR       |  28000 -  63999  |  32.00, 44.10, 48.00  |     44.10  | 2
720*e5436536SAndroid Build Coastguard Worker AAC LC + SBR       |  64000 - 128000  |  32.00, 44.10, 48.00  |     48.00  | 2
721*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
722*e5436536SAndroid Build Coastguard Worker AAC LC + SBR       |  64000 -  69999  |  32.00, 44.10, 48.00  |     32.00  |
723*e5436536SAndroid Build Coastguard Worker 5, 5.1 AAC LC + SBR       |  70000 - 239999  |  32.00, 44.10, 48.00  |     44.10
724*e5436536SAndroid Build Coastguard Worker | 5, 5.1 AAC LC + SBR       | 240000 - 319999  |  32.00, 44.10, 48.00  |
725*e5436536SAndroid Build Coastguard Worker 48.00  | 5, 5.1
726*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
727*e5436536SAndroid Build Coastguard Worker AAC LC             |   8000 -  15999  | 11.025, 12.00, 16.00  |     12.00  | 1
728*e5436536SAndroid Build Coastguard Worker AAC LC             |  16000 -  23999  |                16.00  |     16.00  | 1
729*e5436536SAndroid Build Coastguard Worker AAC LC             |  24000 -  31999  |  16.00, 22.05, 24.00  |     24.00  | 1
730*e5436536SAndroid Build Coastguard Worker AAC LC             |  32000 -  55999  |                32.00  |     32.00  | 1
731*e5436536SAndroid Build Coastguard Worker AAC LC             |  56000 - 160000  |  32.00, 44.10, 48.00  |     44.10  | 1
732*e5436536SAndroid Build Coastguard Worker AAC LC             | 160001 - 288000  |                48.00  |     48.00  | 1
733*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
734*e5436536SAndroid Build Coastguard Worker AAC LC             |  16000 -  23999  | 11.025, 12.00, 16.00  |     12.00  | 2
735*e5436536SAndroid Build Coastguard Worker AAC LC             |  24000 -  31999  |                16.00  |     16.00  | 2
736*e5436536SAndroid Build Coastguard Worker AAC LC             |  32000 -  39999  |  16.00, 22.05, 24.00  |     22.05  | 2
737*e5436536SAndroid Build Coastguard Worker AAC LC             |  40000 -  95999  |                32.00  |     32.00  | 2
738*e5436536SAndroid Build Coastguard Worker AAC LC             |  96000 - 111999  |  32.00, 44.10, 48.00  |     32.00  | 2
739*e5436536SAndroid Build Coastguard Worker AAC LC             | 112000 - 320001  |  32.00, 44.10, 48.00  |     44.10  | 2
740*e5436536SAndroid Build Coastguard Worker AAC LC             | 320002 - 576000  |                48.00  |     48.00  | 2
741*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
742*e5436536SAndroid Build Coastguard Worker AAC LC             | 160000 - 239999  |                32.00  |     32.00  |
743*e5436536SAndroid Build Coastguard Worker 5, 5.1 AAC LC             | 240000 - 279999  |  32.00, 44.10, 48.00  |     32.00
744*e5436536SAndroid Build Coastguard Worker | 5, 5.1 AAC LC             | 280000 - 800000  |  32.00, 44.10, 48.00  |
745*e5436536SAndroid Build Coastguard Worker 44.10  | 5, 5.1
746*e5436536SAndroid Build Coastguard Worker -----------------------------------------------------------------------------------
747*e5436536SAndroid Build Coastguard Worker \endverbatim \n
748*e5436536SAndroid Build Coastguard Worker 
749*e5436536SAndroid Build Coastguard Worker \subsection reommendedConfigLD AAC-LD, AAC-ELD, AAC-ELD with SBR in Dualrate SBR
750*e5436536SAndroid Build Coastguard Worker mode. Unlike to HE-AAC configuration the SBR is not covered by ELD audio object
751*e5436536SAndroid Build Coastguard Worker type and needs to be enabled explicitly. Use ::AACENC_SBR_MODE to configure SBR
752*e5436536SAndroid Build Coastguard Worker and its samplingrate ratio with ::AACENC_SBR_RATIO parameter. \verbatim
753*e5436536SAndroid Build Coastguard Worker -----------------------------------------------------------------------------------
754*e5436536SAndroid Build Coastguard Worker Audio Object Type  |  Bit Rate Range  |            Supported  | Preferred  | No.
755*e5436536SAndroid Build Coastguard Worker of |         [bit/s]  |       Sampling Rates  |    Sampl.  |  Chan. |
756*e5436536SAndroid Build Coastguard Worker |                [kHz]  |      Rate  | |                  |
757*e5436536SAndroid Build Coastguard Worker |     [kHz]  |
758*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
759*e5436536SAndroid Build Coastguard Worker ELD + SBR          |  18000 -  24999  |        32.00 - 44.10  |     32.00  | 1
760*e5436536SAndroid Build Coastguard Worker ELD + SBR          |  25000 -  31999  |        32.00 - 48.00  |     32.00  | 1
761*e5436536SAndroid Build Coastguard Worker ELD + SBR          |  32000 -  64000  |        32.00 - 48.00  |     48.00  | 1
762*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
763*e5436536SAndroid Build Coastguard Worker ELD + SBR          |  32000 -  51999  |        32.00 - 48.00  |     44.10  | 2
764*e5436536SAndroid Build Coastguard Worker ELD + SBR          |  52000 - 128000  |        32.00 - 48.00  |     48.00  | 2
765*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
766*e5436536SAndroid Build Coastguard Worker ELD + SBR          |  78000 - 160000  |        32.00 - 48.00  |     48.00  | 3
767*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
768*e5436536SAndroid Build Coastguard Worker ELD + SBR          | 104000 - 212000  |        32.00 - 48.00  |     48.00  | 4
769*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
770*e5436536SAndroid Build Coastguard Worker ELD + SBR          | 130000 - 246000  |        32.00 - 48.00  |     48.00  |
771*e5436536SAndroid Build Coastguard Worker 5, 5.1
772*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
773*e5436536SAndroid Build Coastguard Worker LD, ELD            |  16000 -  19999  |        16.00 - 24.00  |     16.00  | 1
774*e5436536SAndroid Build Coastguard Worker LD, ELD            |  20000 -  39999  |        16.00 - 32.00  |     24.00  | 1
775*e5436536SAndroid Build Coastguard Worker LD, ELD            |  40000 -  49999  |        22.05 - 32.00  |     32.00  | 1
776*e5436536SAndroid Build Coastguard Worker LD, ELD            |  50000 -  61999  |        24.00 - 44.10  |     32.00  | 1
777*e5436536SAndroid Build Coastguard Worker LD, ELD            |  62000 -  84999  |        32.00 - 48.00  |     44.10  | 1
778*e5436536SAndroid Build Coastguard Worker LD, ELD            |  85000 - 192000  |        44.10 - 48.00  |     48.00  | 1
779*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
780*e5436536SAndroid Build Coastguard Worker LD, ELD            |  64000 -  75999  |        24.00 - 32.00  |     32.00  | 2
781*e5436536SAndroid Build Coastguard Worker LD, ELD            |  76000 -  97999  |        24.00 - 44.10  |     32.00  | 2
782*e5436536SAndroid Build Coastguard Worker LD, ELD            |  98000 - 135999  |        32.00 - 48.00  |     44.10  | 2
783*e5436536SAndroid Build Coastguard Worker LD, ELD            | 136000 - 384000  |        44.10 - 48.00  |     48.00  | 2
784*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
785*e5436536SAndroid Build Coastguard Worker LD, ELD            |  96000 - 113999  |        24.00 - 32.00  |     32.00  | 3
786*e5436536SAndroid Build Coastguard Worker LD, ELD            | 114000 - 146999  |        24.00 - 44.10  |     32.00  | 3
787*e5436536SAndroid Build Coastguard Worker LD, ELD            | 147000 - 203999  |        32.00 - 48.00  |     44.10  | 3
788*e5436536SAndroid Build Coastguard Worker LD, ELD            | 204000 - 576000  |        44.10 - 48.00  |     48.00  | 3
789*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
790*e5436536SAndroid Build Coastguard Worker LD, ELD            | 128000 - 151999  |        24.00 - 32.00  |     32.00  | 4
791*e5436536SAndroid Build Coastguard Worker LD, ELD            | 152000 - 195999  |        24.00 - 44.10  |     32.00  | 4
792*e5436536SAndroid Build Coastguard Worker LD, ELD            | 196000 - 271999  |        32.00 - 48.00  |     44.10  | 4
793*e5436536SAndroid Build Coastguard Worker LD, ELD            | 272000 - 768000  |        44.10 - 48.00  |     48.00  | 4
794*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
795*e5436536SAndroid Build Coastguard Worker LD, ELD            | 160000 - 189999  |        24.00 - 32.00  |     32.00  |
796*e5436536SAndroid Build Coastguard Worker 5, 5.1 LD, ELD            | 190000 - 244999  |        24.00 - 44.10  |     32.00
797*e5436536SAndroid Build Coastguard Worker | 5, 5.1 LD, ELD            | 245000 - 339999  |        32.00 - 48.00  |
798*e5436536SAndroid Build Coastguard Worker 44.10  | 5, 5.1 LD, ELD            | 340000 - 960000  |        44.10 - 48.00  |
799*e5436536SAndroid Build Coastguard Worker 48.00  | 5, 5.1
800*e5436536SAndroid Build Coastguard Worker -----------------------------------------------------------------------------------
801*e5436536SAndroid Build Coastguard Worker \endverbatim \n
802*e5436536SAndroid Build Coastguard Worker 
803*e5436536SAndroid Build Coastguard Worker \subsection reommendedConfigELD AAC-ELD with SBR in Downsampled SBR mode.
804*e5436536SAndroid Build Coastguard Worker \verbatim
805*e5436536SAndroid Build Coastguard Worker -----------------------------------------------------------------------------------
806*e5436536SAndroid Build Coastguard Worker Audio Object Type  |  Bit Rate Range  |            Supported  | Preferred  | No.
807*e5436536SAndroid Build Coastguard Worker of |         [bit/s]  |       Sampling Rates  |    Sampl.  |  Chan. |
808*e5436536SAndroid Build Coastguard Worker |                [kHz]  |      Rate  | |                  |
809*e5436536SAndroid Build Coastguard Worker |     [kHz]  |
810*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
811*e5436536SAndroid Build Coastguard Worker ELD + SBR          |  18000 - 24999   |        16.00 - 22.05  |     22.05  | 1
812*e5436536SAndroid Build Coastguard Worker (downsampled SBR)  |  25000 - 31999   |        16.00 - 24.00  |     24.00  | 1
813*e5436536SAndroid Build Coastguard Worker                    |  32000 - 47999   |        22.05 - 32.00  |     32.00  | 1
814*e5436536SAndroid Build Coastguard Worker                    |  48000 - 64000   |        22.05 - 48.00  |     32.00  | 1
815*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
816*e5436536SAndroid Build Coastguard Worker ELD + SBR          |  32000 - 51999   |        16.00 - 24.00  |     24.00  | 2
817*e5436536SAndroid Build Coastguard Worker (downsampled SBR)  |  52000 - 59999   |        22.05 - 24.00  |     24.00  | 2
818*e5436536SAndroid Build Coastguard Worker                    |  60000 - 95999   |        22.05 - 32.00  |     32.00  | 2
819*e5436536SAndroid Build Coastguard Worker                    |  96000 - 128000  |        22.05 - 48.00  |     32.00  | 2
820*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
821*e5436536SAndroid Build Coastguard Worker ELD + SBR          |  78000 -  99999  |        22.05 - 24.00  |     24.00  | 3
822*e5436536SAndroid Build Coastguard Worker (downsampled SBR)  | 100000 - 143999  |        22.05 - 32.00  |     32.00  | 3
823*e5436536SAndroid Build Coastguard Worker                    | 144000 - 159999  |        22.05 - 48.00  |     32.00  | 3
824*e5436536SAndroid Build Coastguard Worker                    | 160000 - 192000  |        32.00 - 48.00  |     32.00  | 3
825*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
826*e5436536SAndroid Build Coastguard Worker ELD + SBR          | 104000 - 149999  |        22.05 - 24.00  |     24.00  | 4
827*e5436536SAndroid Build Coastguard Worker (downsampled SBR)  | 150000 - 191999  |        22.05 - 32.00  |     32.00  | 4
828*e5436536SAndroid Build Coastguard Worker                    | 192000 - 211999  |        22.05 - 48.00  |     32.00  | 4
829*e5436536SAndroid Build Coastguard Worker                    | 212000 - 256000  |        32.00 - 48.00  |     32.00  | 4
830*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
831*e5436536SAndroid Build Coastguard Worker ELD + SBR          | 130000 - 171999  |        22.05 - 24.00  |     24.00  |
832*e5436536SAndroid Build Coastguard Worker 5, 5.1 (downsampled SBR)  | 172000 - 239999  |        22.05 - 32.00  |     32.00
833*e5436536SAndroid Build Coastguard Worker | 5, 5.1 | 240000 - 320000  |        32.00 - 48.00  |     32.00  | 5, 5.1
834*e5436536SAndroid Build Coastguard Worker -----------------------------------------------------------------------------------
835*e5436536SAndroid Build Coastguard Worker \endverbatim \n
836*e5436536SAndroid Build Coastguard Worker 
837*e5436536SAndroid Build Coastguard Worker \subsection reommendedConfigELDv2 AAC-ELD v2, AAC-ELD v2 with SBR.
838*e5436536SAndroid Build Coastguard Worker The ELD v2 212 configuration must be configured explicitly with
839*e5436536SAndroid Build Coastguard Worker ::AACENC_CHANNELMODE parameter according MODE_212 value. SBR can be configured
840*e5436536SAndroid Build Coastguard Worker separately through ::AACENC_SBR_MODE and ::AACENC_SBR_RATIO parameter. Following
841*e5436536SAndroid Build Coastguard Worker configurations shall apply to both framelengths 480 and 512. For ELD v2
842*e5436536SAndroid Build Coastguard Worker configuration without SBR and framelength 480 the supported sampling rate is
843*e5436536SAndroid Build Coastguard Worker restricted to the range from 16 kHz up to 24 kHz. \verbatim
844*e5436536SAndroid Build Coastguard Worker -----------------------------------------------------------------------------------
845*e5436536SAndroid Build Coastguard Worker Audio Object Type  |  Bit Rate Range  |            Supported  | Preferred  | No.
846*e5436536SAndroid Build Coastguard Worker of |         [bit/s]  |       Sampling Rates  |    Sampl.  |  Chan. |
847*e5436536SAndroid Build Coastguard Worker |                [kHz]  |      Rate  | |                  |
848*e5436536SAndroid Build Coastguard Worker |     [kHz]  |
849*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
850*e5436536SAndroid Build Coastguard Worker ELD-212            |  16000 -  19999  |        16.00 - 24.00  |     16.00  | 2
851*e5436536SAndroid Build Coastguard Worker (without SBR)      |  20000 -  39999  |        16.00 - 32.00  |     24.00  | 2
852*e5436536SAndroid Build Coastguard Worker                    |  40000 -  49999  |        22.05 - 32.00  |     32.00  | 2
853*e5436536SAndroid Build Coastguard Worker                    |  50000 -  61999  |        24.00 - 44.10  |     32.00  | 2
854*e5436536SAndroid Build Coastguard Worker                    |  62000 -  84999  |        32.00 - 48.00  |     44.10  | 2
855*e5436536SAndroid Build Coastguard Worker                    |  85000 - 192000  |        44.10 - 48.00  |     48.00  | 2
856*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
857*e5436536SAndroid Build Coastguard Worker ELD-212 + SBR      |  18000 -  20999  |                32.00  |     32.00  | 2
858*e5436536SAndroid Build Coastguard Worker (dualrate SBR)     |  21000 -  25999  |        32.00 - 44.10  |     32.00  | 2
859*e5436536SAndroid Build Coastguard Worker                    |  26000 -  31999  |        32.00 - 48.00  |     44.10  | 2
860*e5436536SAndroid Build Coastguard Worker                    |  32000 -  64000  |        32.00 - 48.00  |     48.00  | 2
861*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
862*e5436536SAndroid Build Coastguard Worker ELD-212 + SBR      |  18000 -  19999  |        16.00 - 22.05  |     22.05  | 2
863*e5436536SAndroid Build Coastguard Worker (downsampled SBR)  |  20000 -  24999  |        16.00 - 24.00  |     22.05  | 2
864*e5436536SAndroid Build Coastguard Worker                    |  25000 -  31999  |        16.00 - 24.00  |     24.00  | 2
865*e5436536SAndroid Build Coastguard Worker                    |  32000 -  64000  |        24.00 - 24.00  |     24.00  | 2
866*e5436536SAndroid Build Coastguard Worker -------------------+------------------+-----------------------+------------+-------
867*e5436536SAndroid Build Coastguard Worker \endverbatim \n
868*e5436536SAndroid Build Coastguard Worker 
869*e5436536SAndroid Build Coastguard Worker \page ENCODERBEHAVIOUR Encoder Behaviour
870*e5436536SAndroid Build Coastguard Worker 
871*e5436536SAndroid Build Coastguard Worker \section BEHAVIOUR_BANDWIDTH Bandwidth
872*e5436536SAndroid Build Coastguard Worker 
873*e5436536SAndroid Build Coastguard Worker The FDK AAC encoder usually does not use the full frequency range of the input
874*e5436536SAndroid Build Coastguard Worker signal, but restricts the bandwidth according to certain library-internal
875*e5436536SAndroid Build Coastguard Worker settings. They can be changed in the table "bandWidthTable" in the file
876*e5436536SAndroid Build Coastguard Worker bandwidth.cpp (if available).
877*e5436536SAndroid Build Coastguard Worker 
878*e5436536SAndroid Build Coastguard Worker The encoder API provides the ::AACENC_BANDWIDTH parameter to adjust the
879*e5436536SAndroid Build Coastguard Worker bandwidth explicitly. \code aacEncoder_SetParam(hAacEncoder, AACENC_BANDWIDTH,
880*e5436536SAndroid Build Coastguard Worker value); \endcode
881*e5436536SAndroid Build Coastguard Worker 
882*e5436536SAndroid Build Coastguard Worker However it is not recommended to change these settings, because they are based
883*e5436536SAndroid Build Coastguard Worker on numerous listening tests and careful tweaks to ensure the best overall
884*e5436536SAndroid Build Coastguard Worker encoding quality. Also, the maximum bandwidth that can be set manually by the
885*e5436536SAndroid Build Coastguard Worker user is 20kHz or fs/2, whichever value is smaller.
886*e5436536SAndroid Build Coastguard Worker 
887*e5436536SAndroid Build Coastguard Worker Theoretically a signal of for example 48 kHz can contain frequencies up to 24
888*e5436536SAndroid Build Coastguard Worker kHz, but to use this full range in an audio encoder usually does not make sense.
889*e5436536SAndroid Build Coastguard Worker Usually the encoder has a very limited amount of bits to spend (typically 128
890*e5436536SAndroid Build Coastguard Worker kbit/s for stereo 48 kHz content) and to allow full range bandwidth would waste
891*e5436536SAndroid Build Coastguard Worker a lot of these bits for frequencies the human ear is hardly able to perceive
892*e5436536SAndroid Build Coastguard Worker anyway, if at all. Hence it is wise to use the available bits for the really
893*e5436536SAndroid Build Coastguard Worker important frequency range and just skip the rest. At lower bitrates (e. g. <= 80
894*e5436536SAndroid Build Coastguard Worker kbit/s for stereo 48 kHz content) the encoder will choose an even smaller
895*e5436536SAndroid Build Coastguard Worker bandwidth, because an encoded signal with smaller bandwidth and hence less
896*e5436536SAndroid Build Coastguard Worker artifacts sounds better than a signal with higher bandwidth but then more coding
897*e5436536SAndroid Build Coastguard Worker artefacts across all frequencies. These artefacts would occur if small bitrates
898*e5436536SAndroid Build Coastguard Worker and high bandwidths are chosen because the available bits are just not enough to
899*e5436536SAndroid Build Coastguard Worker encode all frequencies well.
900*e5436536SAndroid Build Coastguard Worker 
901*e5436536SAndroid Build Coastguard Worker Unfortunately some people evaluate encoding quality based on possible bandwidth
902*e5436536SAndroid Build Coastguard Worker as well, but it is a double-edged sword considering the trade-off described
903*e5436536SAndroid Build Coastguard Worker above.
904*e5436536SAndroid Build Coastguard Worker 
905*e5436536SAndroid Build Coastguard Worker Another aspect is workload consumption. The higher the allowed bandwidth, the
906*e5436536SAndroid Build Coastguard Worker more frequency lines have to be processed, which in turn increases the workload.
907*e5436536SAndroid Build Coastguard Worker 
908*e5436536SAndroid Build Coastguard Worker \section FRAMESIZES_AND_BIT_RESERVOIR Frame Sizes & Bit Reservoir
909*e5436536SAndroid Build Coastguard Worker 
910*e5436536SAndroid Build Coastguard Worker For AAC there is a difference between constant bit rate and constant frame
911*e5436536SAndroid Build Coastguard Worker length due to the so-called bit reservoir technique, which allows the encoder to
912*e5436536SAndroid Build Coastguard Worker use less bits in an AAC frame for those audio signal sections which are easy to
913*e5436536SAndroid Build Coastguard Worker encode, and then spend them at a later point in time for more complex audio
914*e5436536SAndroid Build Coastguard Worker sections. The extent to which this "bit exchange" is done is limited to allow
915*e5436536SAndroid Build Coastguard Worker for reliable and relatively low delay real time streaming. Therefore, for
916*e5436536SAndroid Build Coastguard Worker AAC-ELD, the bitreservoir is limited. It varies between 500 and 4000 bits/frame,
917*e5436536SAndroid Build Coastguard Worker depending on the bitrate/channel.
918*e5436536SAndroid Build Coastguard Worker - For a bitrate of 12kbps/channel and below, the AAC-ELD bitreservoir is 500
919*e5436536SAndroid Build Coastguard Worker bits/frame.
920*e5436536SAndroid Build Coastguard Worker - For a bitrate of 70kbps/channel and above, the AAC-ELD bitreservoir is 4000
921*e5436536SAndroid Build Coastguard Worker bits/frame.
922*e5436536SAndroid Build Coastguard Worker - Between 12kbps/channel and 70kbps/channel, the AAC-ELD bitrervoir is increased
923*e5436536SAndroid Build Coastguard Worker linearly.
924*e5436536SAndroid Build Coastguard Worker - For AAC-LC, the bitrate is only limited by the maximum AAC frame length. It
925*e5436536SAndroid Build Coastguard Worker is, regardless of the available bit reservoir, defined as 6144 bits per channel.
926*e5436536SAndroid Build Coastguard Worker 
927*e5436536SAndroid Build Coastguard Worker Over a longer period in time the bitrate will be constant in the AAC constant
928*e5436536SAndroid Build Coastguard Worker bitrate mode, e.g. for ISDN transmission. This means that in AAC each bitstream
929*e5436536SAndroid Build Coastguard Worker frame will in general have a different length in bytes but over time it
930*e5436536SAndroid Build Coastguard Worker will reach the target bitrate.
931*e5436536SAndroid Build Coastguard Worker 
932*e5436536SAndroid Build Coastguard Worker 
933*e5436536SAndroid Build Coastguard Worker One could also make an MPEG compliant
934*e5436536SAndroid Build Coastguard Worker AAC encoder which always produces constant length packages for each AAC frame,
935*e5436536SAndroid Build Coastguard Worker but the audio quality would be considerably worse since the bit reservoir
936*e5436536SAndroid Build Coastguard Worker technique would have to be switched off completely. A higher bit rate would have
937*e5436536SAndroid Build Coastguard Worker to be used to get the same audio quality as with an enabled bit reservoir.
938*e5436536SAndroid Build Coastguard Worker 
939*e5436536SAndroid Build Coastguard Worker For mp3 by the way, the same bit reservoir technique exists, but there each bit
940*e5436536SAndroid Build Coastguard Worker stream frame has a constant length for a given bit rate (ignoring the
941*e5436536SAndroid Build Coastguard Worker padding byte). In mp3 there is a so-called "back pointer" which tells
942*e5436536SAndroid Build Coastguard Worker the decoder which bits belong to the current mp3 frame - and in general some or
943*e5436536SAndroid Build Coastguard Worker many bits have been transmitted in an earlier mp3 frame. Basically this leads to
944*e5436536SAndroid Build Coastguard Worker the same "bit exchange between mp3 frames" as in AAC but with virtually constant
945*e5436536SAndroid Build Coastguard Worker length frames.
946*e5436536SAndroid Build Coastguard Worker 
947*e5436536SAndroid Build Coastguard Worker This variable frame length at "constant bit rate" is not something special
948*e5436536SAndroid Build Coastguard Worker in this Fraunhofer IIS AAC encoder. AAC has been designed in that way.
949*e5436536SAndroid Build Coastguard Worker 
950*e5436536SAndroid Build Coastguard Worker \subsection BEHAVIOUR_ESTIM_AVG_FRAMESIZES Estimating Average Frame Sizes
951*e5436536SAndroid Build Coastguard Worker 
952*e5436536SAndroid Build Coastguard Worker A HE-AAC v1 or v2 audio frame contains 2048 PCM samples per channel.
953*e5436536SAndroid Build Coastguard Worker 
954*e5436536SAndroid Build Coastguard Worker The number of HE-AAC frames \f$N\_FRAMES\f$ per second at 44.1 kHz is:
955*e5436536SAndroid Build Coastguard Worker 
956*e5436536SAndroid Build Coastguard Worker \f[
957*e5436536SAndroid Build Coastguard Worker N\_FRAMES = 44100 / 2048 = 21.5332
958*e5436536SAndroid Build Coastguard Worker \f]
959*e5436536SAndroid Build Coastguard Worker 
960*e5436536SAndroid Build Coastguard Worker At a bit rate of 8 kbps the average number of bits per frame
961*e5436536SAndroid Build Coastguard Worker \f$N\_BITS\_PER\_FRAME\f$ is:
962*e5436536SAndroid Build Coastguard Worker 
963*e5436536SAndroid Build Coastguard Worker \f[
964*e5436536SAndroid Build Coastguard Worker N\_BITS\_PER\_FRAME = 8000 / 21.5332 = 371.52
965*e5436536SAndroid Build Coastguard Worker \f]
966*e5436536SAndroid Build Coastguard Worker 
967*e5436536SAndroid Build Coastguard Worker which is about 46.44 bytes per encoded frame.
968*e5436536SAndroid Build Coastguard Worker 
969*e5436536SAndroid Build Coastguard Worker At a bit rate of 32 kbps, which is quite high for single channel HE-AAC v1, it
970*e5436536SAndroid Build Coastguard Worker is:
971*e5436536SAndroid Build Coastguard Worker 
972*e5436536SAndroid Build Coastguard Worker \f[
973*e5436536SAndroid Build Coastguard Worker N\_BITS\_PER\_FRAME = 32000 / 21.5332 = 1486
974*e5436536SAndroid Build Coastguard Worker \f]
975*e5436536SAndroid Build Coastguard Worker 
976*e5436536SAndroid Build Coastguard Worker which is about 185.76 bytes per encoded frame.
977*e5436536SAndroid Build Coastguard Worker 
978*e5436536SAndroid Build Coastguard Worker These bits/frame figures are average figures where each AAC frame generally has
979*e5436536SAndroid Build Coastguard Worker a different size in bytes. To calculate the same for AAC-LC just use 1024
980*e5436536SAndroid Build Coastguard Worker instead of 2048 PCM samples per frame and channel. For AAC-LD/ELD it is either
981*e5436536SAndroid Build Coastguard Worker 480 or 512 PCM samples per frame and channel.
982*e5436536SAndroid Build Coastguard Worker 
983*e5436536SAndroid Build Coastguard Worker 
984*e5436536SAndroid Build Coastguard Worker \section BEHAVIOUR_TOOLS Encoder Tools
985*e5436536SAndroid Build Coastguard Worker 
986*e5436536SAndroid Build Coastguard Worker The AAC encoder supports TNS, PNS, MS, Intensity and activates these tools
987*e5436536SAndroid Build Coastguard Worker depending on the audio signal and the encoder configuration (i.e. bitrate or
988*e5436536SAndroid Build Coastguard Worker AOT). It is not required to configure these tools manually.
989*e5436536SAndroid Build Coastguard Worker 
990*e5436536SAndroid Build Coastguard Worker PNS improves encoding quality only for certain bitrates. Therefore it makes
991*e5436536SAndroid Build Coastguard Worker sense to activate PNS only for these bitrates and save the processing power
992*e5436536SAndroid Build Coastguard Worker required for PNS (about 10 % of the encoder) when using other bitrates. This is
993*e5436536SAndroid Build Coastguard Worker done automatically inside the encoder library. PNS is disabled inside the
994*e5436536SAndroid Build Coastguard Worker encoder library if an MPEG-2 AOT is choosen since PNS is an MPEG-4 AAC feature.
995*e5436536SAndroid Build Coastguard Worker 
996*e5436536SAndroid Build Coastguard Worker If SBR is activated, the encoder automatically deactivates PNS internally. If
997*e5436536SAndroid Build Coastguard Worker TNS is disabled but PNS is allowed, the encoder deactivates PNS calculation
998*e5436536SAndroid Build Coastguard Worker internally.
999*e5436536SAndroid Build Coastguard Worker 
1000*e5436536SAndroid Build Coastguard Worker */
1001*e5436536SAndroid Build Coastguard Worker 
1002*e5436536SAndroid Build Coastguard Worker #ifndef AACENC_LIB_H
1003*e5436536SAndroid Build Coastguard Worker #define AACENC_LIB_H
1004*e5436536SAndroid Build Coastguard Worker 
1005*e5436536SAndroid Build Coastguard Worker #include "machine_type.h"
1006*e5436536SAndroid Build Coastguard Worker #include "FDK_audio.h"
1007*e5436536SAndroid Build Coastguard Worker 
1008*e5436536SAndroid Build Coastguard Worker #define AACENCODER_LIB_VL0 4
1009*e5436536SAndroid Build Coastguard Worker #define AACENCODER_LIB_VL1 0
1010*e5436536SAndroid Build Coastguard Worker #define AACENCODER_LIB_VL2 1
1011*e5436536SAndroid Build Coastguard Worker 
1012*e5436536SAndroid Build Coastguard Worker /**
1013*e5436536SAndroid Build Coastguard Worker  *  AAC encoder error codes.
1014*e5436536SAndroid Build Coastguard Worker  */
1015*e5436536SAndroid Build Coastguard Worker typedef enum {
1016*e5436536SAndroid Build Coastguard Worker   AACENC_OK = 0x0000, /*!< No error happened. All fine. */
1017*e5436536SAndroid Build Coastguard Worker 
1018*e5436536SAndroid Build Coastguard Worker   AACENC_INVALID_HANDLE =
1019*e5436536SAndroid Build Coastguard Worker       0x0020, /*!< Handle passed to function call was invalid. */
1020*e5436536SAndroid Build Coastguard Worker   AACENC_MEMORY_ERROR = 0x0021,          /*!< Memory allocation failed. */
1021*e5436536SAndroid Build Coastguard Worker   AACENC_UNSUPPORTED_PARAMETER = 0x0022, /*!< Parameter not available. */
1022*e5436536SAndroid Build Coastguard Worker   AACENC_INVALID_CONFIG = 0x0023,        /*!< Configuration not provided. */
1023*e5436536SAndroid Build Coastguard Worker 
1024*e5436536SAndroid Build Coastguard Worker   AACENC_INIT_ERROR = 0x0040,     /*!< General initialization error. */
1025*e5436536SAndroid Build Coastguard Worker   AACENC_INIT_AAC_ERROR = 0x0041, /*!< AAC library initialization error. */
1026*e5436536SAndroid Build Coastguard Worker   AACENC_INIT_SBR_ERROR = 0x0042, /*!< SBR library initialization error. */
1027*e5436536SAndroid Build Coastguard Worker   AACENC_INIT_TP_ERROR = 0x0043, /*!< Transport library initialization error. */
1028*e5436536SAndroid Build Coastguard Worker   AACENC_INIT_META_ERROR =
1029*e5436536SAndroid Build Coastguard Worker       0x0044, /*!< Meta data library initialization error. */
1030*e5436536SAndroid Build Coastguard Worker   AACENC_INIT_MPS_ERROR = 0x0045, /*!< MPS library initialization error. */
1031*e5436536SAndroid Build Coastguard Worker 
1032*e5436536SAndroid Build Coastguard Worker   AACENC_ENCODE_ERROR = 0x0060, /*!< The encoding process was interrupted by an
1033*e5436536SAndroid Build Coastguard Worker                                    unexpected error. */
1034*e5436536SAndroid Build Coastguard Worker 
1035*e5436536SAndroid Build Coastguard Worker   AACENC_ENCODE_EOF = 0x0080 /*!< End of file reached. */
1036*e5436536SAndroid Build Coastguard Worker 
1037*e5436536SAndroid Build Coastguard Worker } AACENC_ERROR;
1038*e5436536SAndroid Build Coastguard Worker 
1039*e5436536SAndroid Build Coastguard Worker /**
1040*e5436536SAndroid Build Coastguard Worker  *  AAC encoder buffer descriptors identifier.
1041*e5436536SAndroid Build Coastguard Worker  *  This identifier are used within buffer descriptors
1042*e5436536SAndroid Build Coastguard Worker  * AACENC_BufDesc::bufferIdentifiers.
1043*e5436536SAndroid Build Coastguard Worker  */
1044*e5436536SAndroid Build Coastguard Worker typedef enum {
1045*e5436536SAndroid Build Coastguard Worker   /* Input buffer identifier. */
1046*e5436536SAndroid Build Coastguard Worker   IN_AUDIO_DATA = 0,    /*!< Audio input buffer, interleaved INT_PCM samples. */
1047*e5436536SAndroid Build Coastguard Worker   IN_ANCILLRY_DATA = 1, /*!< Ancillary data to be embedded into bitstream. */
1048*e5436536SAndroid Build Coastguard Worker   IN_METADATA_SETUP = 2, /*!< Setup structure for embedding meta data. */
1049*e5436536SAndroid Build Coastguard Worker 
1050*e5436536SAndroid Build Coastguard Worker   /* Output buffer identifier. */
1051*e5436536SAndroid Build Coastguard Worker   OUT_BITSTREAM_DATA = 3, /*!< Buffer holds bitstream output data. */
1052*e5436536SAndroid Build Coastguard Worker   OUT_AU_SIZES =
1053*e5436536SAndroid Build Coastguard Worker       4 /*!< Buffer contains sizes of each access unit. This information
1054*e5436536SAndroid Build Coastguard Worker              is necessary for superframing. */
1055*e5436536SAndroid Build Coastguard Worker 
1056*e5436536SAndroid Build Coastguard Worker } AACENC_BufferIdentifier;
1057*e5436536SAndroid Build Coastguard Worker 
1058*e5436536SAndroid Build Coastguard Worker /**
1059*e5436536SAndroid Build Coastguard Worker  *  AAC encoder handle.
1060*e5436536SAndroid Build Coastguard Worker  */
1061*e5436536SAndroid Build Coastguard Worker typedef struct AACENCODER *HANDLE_AACENCODER;
1062*e5436536SAndroid Build Coastguard Worker 
1063*e5436536SAndroid Build Coastguard Worker /**
1064*e5436536SAndroid Build Coastguard Worker  *  Provides some info about the encoder configuration.
1065*e5436536SAndroid Build Coastguard Worker  */
1066*e5436536SAndroid Build Coastguard Worker typedef struct {
1067*e5436536SAndroid Build Coastguard Worker   UINT maxOutBufBytes; /*!< Maximum number of encoder bitstream bytes within one
1068*e5436536SAndroid Build Coastguard Worker                           frame. Size depends on maximum number of supported
1069*e5436536SAndroid Build Coastguard Worker                           channels in encoder instance. */
1070*e5436536SAndroid Build Coastguard Worker 
1071*e5436536SAndroid Build Coastguard Worker   UINT maxAncBytes; /*!< Maximum number of ancillary data bytes which can be
1072*e5436536SAndroid Build Coastguard Worker                        inserted into bitstream within one frame. */
1073*e5436536SAndroid Build Coastguard Worker 
1074*e5436536SAndroid Build Coastguard Worker   UINT inBufFillLevel; /*!< Internal input buffer fill level in samples per
1075*e5436536SAndroid Build Coastguard Worker                           channel. This parameter will automatically be cleared
1076*e5436536SAndroid Build Coastguard Worker                           if samplingrate or channel(Mode/Order) changes. */
1077*e5436536SAndroid Build Coastguard Worker 
1078*e5436536SAndroid Build Coastguard Worker   UINT inputChannels; /*!< Number of input channels expected in encoding
1079*e5436536SAndroid Build Coastguard Worker                          process. */
1080*e5436536SAndroid Build Coastguard Worker 
1081*e5436536SAndroid Build Coastguard Worker   UINT frameLength; /*!< Amount of input audio samples consumed each frame per
1082*e5436536SAndroid Build Coastguard Worker                        channel, depending on audio object type configuration. */
1083*e5436536SAndroid Build Coastguard Worker 
1084*e5436536SAndroid Build Coastguard Worker   UINT nDelay; /*!< Codec delay in PCM samples/channel. Depends on framelength
1085*e5436536SAndroid Build Coastguard Worker                   and AOT. Does not include framing delay for filling up encoder
1086*e5436536SAndroid Build Coastguard Worker                   PCM input buffer. */
1087*e5436536SAndroid Build Coastguard Worker 
1088*e5436536SAndroid Build Coastguard Worker   UINT nDelayCore; /*!< Codec delay in PCM samples/channel, w/o delay caused by
1089*e5436536SAndroid Build Coastguard Worker                       the decoder SBR module. This delay is needed to correctly
1090*e5436536SAndroid Build Coastguard Worker                       write edit lists for gapless playback. The decoder may not
1091*e5436536SAndroid Build Coastguard Worker                       know how much delay is introdcued by SBR, since it may not
1092*e5436536SAndroid Build Coastguard Worker                       know if SBR is active at all (implicit signaling),
1093*e5436536SAndroid Build Coastguard Worker                       therefore the decoder must take into account any delay
1094*e5436536SAndroid Build Coastguard Worker                       caused by the SBR module. */
1095*e5436536SAndroid Build Coastguard Worker 
1096*e5436536SAndroid Build Coastguard Worker   UCHAR confBuf[64]; /*!< Configuration buffer in binary format as an
1097*e5436536SAndroid Build Coastguard Worker                         AudioSpecificConfig or StreamMuxConfig according to the
1098*e5436536SAndroid Build Coastguard Worker                         selected transport type. */
1099*e5436536SAndroid Build Coastguard Worker 
1100*e5436536SAndroid Build Coastguard Worker   UINT confSize; /*!< Number of valid bytes in confBuf. */
1101*e5436536SAndroid Build Coastguard Worker 
1102*e5436536SAndroid Build Coastguard Worker } AACENC_InfoStruct;
1103*e5436536SAndroid Build Coastguard Worker 
1104*e5436536SAndroid Build Coastguard Worker /**
1105*e5436536SAndroid Build Coastguard Worker  *  Describes the input and output buffers for an aacEncEncode() call.
1106*e5436536SAndroid Build Coastguard Worker  */
1107*e5436536SAndroid Build Coastguard Worker typedef struct {
1108*e5436536SAndroid Build Coastguard Worker   INT numBufs;            /*!< Number of buffers. */
1109*e5436536SAndroid Build Coastguard Worker   void **bufs;            /*!< Pointer to vector containing buffer addresses. */
1110*e5436536SAndroid Build Coastguard Worker   INT *bufferIdentifiers; /*!< Identifier of each buffer element. See
1111*e5436536SAndroid Build Coastguard Worker                              ::AACENC_BufferIdentifier. */
1112*e5436536SAndroid Build Coastguard Worker   INT *bufSizes;          /*!< Size of each buffer in 8-bit bytes. */
1113*e5436536SAndroid Build Coastguard Worker   INT *bufElSizes;        /*!< Size of each buffer element in bytes. */
1114*e5436536SAndroid Build Coastguard Worker 
1115*e5436536SAndroid Build Coastguard Worker } AACENC_BufDesc;
1116*e5436536SAndroid Build Coastguard Worker 
1117*e5436536SAndroid Build Coastguard Worker /**
1118*e5436536SAndroid Build Coastguard Worker  *  Defines the input arguments for an aacEncEncode() call.
1119*e5436536SAndroid Build Coastguard Worker  */
1120*e5436536SAndroid Build Coastguard Worker typedef struct {
1121*e5436536SAndroid Build Coastguard Worker   INT numInSamples; /*!< Number of valid input audio samples (multiple of input
1122*e5436536SAndroid Build Coastguard Worker                        channels). */
1123*e5436536SAndroid Build Coastguard Worker   INT numAncBytes;  /*!< Number of ancillary data bytes to be encoded. */
1124*e5436536SAndroid Build Coastguard Worker 
1125*e5436536SAndroid Build Coastguard Worker } AACENC_InArgs;
1126*e5436536SAndroid Build Coastguard Worker 
1127*e5436536SAndroid Build Coastguard Worker /**
1128*e5436536SAndroid Build Coastguard Worker  *  Defines the output arguments for an aacEncEncode() call.
1129*e5436536SAndroid Build Coastguard Worker  */
1130*e5436536SAndroid Build Coastguard Worker typedef struct {
1131*e5436536SAndroid Build Coastguard Worker   INT numOutBytes;  /*!< Number of valid bitstream bytes generated during
1132*e5436536SAndroid Build Coastguard Worker                        aacEncEncode(). */
1133*e5436536SAndroid Build Coastguard Worker   INT numInSamples; /*!< Number of input audio samples consumed by the encoder.
1134*e5436536SAndroid Build Coastguard Worker                      */
1135*e5436536SAndroid Build Coastguard Worker   INT numAncBytes;  /*!< Number of ancillary data bytes consumed by the encoder.
1136*e5436536SAndroid Build Coastguard Worker                      */
1137*e5436536SAndroid Build Coastguard Worker   INT bitResState;  /*!< State of the bit reservoir in bits. */
1138*e5436536SAndroid Build Coastguard Worker 
1139*e5436536SAndroid Build Coastguard Worker } AACENC_OutArgs;
1140*e5436536SAndroid Build Coastguard Worker 
1141*e5436536SAndroid Build Coastguard Worker /**
1142*e5436536SAndroid Build Coastguard Worker  *  Meta Data Compression Profiles.
1143*e5436536SAndroid Build Coastguard Worker  */
1144*e5436536SAndroid Build Coastguard Worker typedef enum {
1145*e5436536SAndroid Build Coastguard Worker   AACENC_METADATA_DRC_NONE = 0,          /*!< None. */
1146*e5436536SAndroid Build Coastguard Worker   AACENC_METADATA_DRC_FILMSTANDARD = 1,  /*!< Film standard. */
1147*e5436536SAndroid Build Coastguard Worker   AACENC_METADATA_DRC_FILMLIGHT = 2,     /*!< Film light. */
1148*e5436536SAndroid Build Coastguard Worker   AACENC_METADATA_DRC_MUSICSTANDARD = 3, /*!< Music standard. */
1149*e5436536SAndroid Build Coastguard Worker   AACENC_METADATA_DRC_MUSICLIGHT = 4,    /*!< Music light. */
1150*e5436536SAndroid Build Coastguard Worker   AACENC_METADATA_DRC_SPEECH = 5,        /*!< Speech. */
1151*e5436536SAndroid Build Coastguard Worker   AACENC_METADATA_DRC_NOT_PRESENT =
1152*e5436536SAndroid Build Coastguard Worker       256 /*!< Disable writing gain factor (used for comp_profile only). */
1153*e5436536SAndroid Build Coastguard Worker 
1154*e5436536SAndroid Build Coastguard Worker } AACENC_METADATA_DRC_PROFILE;
1155*e5436536SAndroid Build Coastguard Worker 
1156*e5436536SAndroid Build Coastguard Worker /**
1157*e5436536SAndroid Build Coastguard Worker  *  Meta Data setup structure.
1158*e5436536SAndroid Build Coastguard Worker  */
1159*e5436536SAndroid Build Coastguard Worker typedef struct {
1160*e5436536SAndroid Build Coastguard Worker   AACENC_METADATA_DRC_PROFILE
1161*e5436536SAndroid Build Coastguard Worker   drc_profile; /*!< MPEG DRC compression profile. See
1162*e5436536SAndroid Build Coastguard Worker                   ::AACENC_METADATA_DRC_PROFILE. */
1163*e5436536SAndroid Build Coastguard Worker   AACENC_METADATA_DRC_PROFILE
1164*e5436536SAndroid Build Coastguard Worker   comp_profile; /*!< ETSI heavy compression profile. See
1165*e5436536SAndroid Build Coastguard Worker                    ::AACENC_METADATA_DRC_PROFILE. */
1166*e5436536SAndroid Build Coastguard Worker 
1167*e5436536SAndroid Build Coastguard Worker   INT drc_TargetRefLevel;  /*!< Used to define expected level to:
1168*e5436536SAndroid Build Coastguard Worker                                 Scaled with 16 bit. x*2^16. */
1169*e5436536SAndroid Build Coastguard Worker   INT comp_TargetRefLevel; /*!< Adjust limiter to avoid overload.
1170*e5436536SAndroid Build Coastguard Worker                                 Scaled with 16 bit. x*2^16. */
1171*e5436536SAndroid Build Coastguard Worker 
1172*e5436536SAndroid Build Coastguard Worker   INT prog_ref_level_present; /*!< Flag, if prog_ref_level is present */
1173*e5436536SAndroid Build Coastguard Worker   INT prog_ref_level;         /*!< Programme Reference Level = Dialogue Level:
1174*e5436536SAndroid Build Coastguard Worker                                    -31.75dB .. 0 dB ; stepsize: 0.25dB
1175*e5436536SAndroid Build Coastguard Worker                                    Scaled with 16 bit. x*2^16.*/
1176*e5436536SAndroid Build Coastguard Worker 
1177*e5436536SAndroid Build Coastguard Worker   UCHAR PCE_mixdown_idx_present; /*!< Flag, if dmx-idx should be written in
1178*e5436536SAndroid Build Coastguard Worker                                     programme config element */
1179*e5436536SAndroid Build Coastguard Worker   UCHAR ETSI_DmxLvl_present;     /*!< Flag, if dmx-lvl should be written in
1180*e5436536SAndroid Build Coastguard Worker                                     ETSI-ancData */
1181*e5436536SAndroid Build Coastguard Worker 
1182*e5436536SAndroid Build Coastguard Worker   SCHAR centerMixLevel; /*!< Center downmix level (0...7, according to table) */
1183*e5436536SAndroid Build Coastguard Worker   SCHAR surroundMixLevel; /*!< Surround downmix level (0...7, according to
1184*e5436536SAndroid Build Coastguard Worker                              table) */
1185*e5436536SAndroid Build Coastguard Worker 
1186*e5436536SAndroid Build Coastguard Worker   UCHAR
1187*e5436536SAndroid Build Coastguard Worker   dolbySurroundMode; /*!< Indication for Dolby Surround Encoding Mode.
1188*e5436536SAndroid Build Coastguard Worker                           - 0: Dolby Surround mode not indicated
1189*e5436536SAndroid Build Coastguard Worker                           - 1: 2-ch audio part is not Dolby surround encoded
1190*e5436536SAndroid Build Coastguard Worker                           - 2: 2-ch audio part is Dolby surround encoded */
1191*e5436536SAndroid Build Coastguard Worker 
1192*e5436536SAndroid Build Coastguard Worker   UCHAR drcPresentationMode; /*!< Indicatin for DRC Presentation Mode.
1193*e5436536SAndroid Build Coastguard Worker                                   - 0: Presentation mode not inticated
1194*e5436536SAndroid Build Coastguard Worker                                   - 1: Presentation mode 1
1195*e5436536SAndroid Build Coastguard Worker                                   - 2: Presentation mode 2 */
1196*e5436536SAndroid Build Coastguard Worker 
1197*e5436536SAndroid Build Coastguard Worker   struct {
1198*e5436536SAndroid Build Coastguard Worker     /* extended ancillary data */
1199*e5436536SAndroid Build Coastguard Worker     UCHAR extAncDataEnable; /*< Indicates if MPEG4_ext_ancillary_data() exists.
1200*e5436536SAndroid Build Coastguard Worker                                 - 0: No MPEG4_ext_ancillary_data().
1201*e5436536SAndroid Build Coastguard Worker                                 - 1: Insert MPEG4_ext_ancillary_data(). */
1202*e5436536SAndroid Build Coastguard Worker 
1203*e5436536SAndroid Build Coastguard Worker     UCHAR
1204*e5436536SAndroid Build Coastguard Worker     extDownmixLevelEnable;   /*< Indicates if ext_downmixing_levels() exists.
1205*e5436536SAndroid Build Coastguard Worker                                  - 0: No ext_downmixing_levels().
1206*e5436536SAndroid Build Coastguard Worker                                  - 1: Insert ext_downmixing_levels(). */
1207*e5436536SAndroid Build Coastguard Worker     UCHAR extDownmixLevel_A; /*< Downmix level index A (0...7, according to
1208*e5436536SAndroid Build Coastguard Worker                                 table) */
1209*e5436536SAndroid Build Coastguard Worker     UCHAR extDownmixLevel_B; /*< Downmix level index B (0...7, according to
1210*e5436536SAndroid Build Coastguard Worker                                 table) */
1211*e5436536SAndroid Build Coastguard Worker 
1212*e5436536SAndroid Build Coastguard Worker     UCHAR dmxGainEnable; /*< Indicates if ext_downmixing_global_gains() exists.
1213*e5436536SAndroid Build Coastguard Worker                              - 0: No ext_downmixing_global_gains().
1214*e5436536SAndroid Build Coastguard Worker                              - 1: Insert ext_downmixing_global_gains(). */
1215*e5436536SAndroid Build Coastguard Worker     INT dmxGain5;        /*< Gain factor for downmix to 5 channels.
1216*e5436536SAndroid Build Coastguard Worker                               -15.75dB .. -15.75dB; stepsize: 0.25dB
1217*e5436536SAndroid Build Coastguard Worker                               Scaled with 16 bit. x*2^16.*/
1218*e5436536SAndroid Build Coastguard Worker     INT dmxGain2;        /*< Gain factor for downmix to 2 channels.
1219*e5436536SAndroid Build Coastguard Worker                               -15.75dB .. -15.75dB; stepsize: 0.25dB
1220*e5436536SAndroid Build Coastguard Worker                               Scaled with 16 bit. x*2^16.*/
1221*e5436536SAndroid Build Coastguard Worker 
1222*e5436536SAndroid Build Coastguard Worker     UCHAR lfeDmxEnable; /*< Indicates if ext_downmixing_lfe_level() exists.
1223*e5436536SAndroid Build Coastguard Worker                             - 0: No ext_downmixing_lfe_level().
1224*e5436536SAndroid Build Coastguard Worker                             - 1: Insert ext_downmixing_lfe_level(). */
1225*e5436536SAndroid Build Coastguard Worker     UCHAR lfeDmxLevel;  /*< Downmix level index for LFE (0..15, according to
1226*e5436536SAndroid Build Coastguard Worker                            table) */
1227*e5436536SAndroid Build Coastguard Worker 
1228*e5436536SAndroid Build Coastguard Worker   } ExtMetaData;
1229*e5436536SAndroid Build Coastguard Worker 
1230*e5436536SAndroid Build Coastguard Worker } AACENC_MetaData;
1231*e5436536SAndroid Build Coastguard Worker 
1232*e5436536SAndroid Build Coastguard Worker /**
1233*e5436536SAndroid Build Coastguard Worker  * AAC encoder control flags.
1234*e5436536SAndroid Build Coastguard Worker  *
1235*e5436536SAndroid Build Coastguard Worker  * In interaction with the ::AACENC_CONTROL_STATE parameter it is possible to
1236*e5436536SAndroid Build Coastguard Worker  * get information about the internal initialization process. It is also
1237*e5436536SAndroid Build Coastguard Worker  * possible to overwrite the internal state from extern when necessary.
1238*e5436536SAndroid Build Coastguard Worker  */
1239*e5436536SAndroid Build Coastguard Worker typedef enum {
1240*e5436536SAndroid Build Coastguard Worker   AACENC_INIT_NONE = 0x0000, /*!< Do not trigger initialization. */
1241*e5436536SAndroid Build Coastguard Worker   AACENC_INIT_CONFIG =
1242*e5436536SAndroid Build Coastguard Worker       0x0001, /*!< Initialize all encoder modules configuration. */
1243*e5436536SAndroid Build Coastguard Worker   AACENC_INIT_STATES = 0x0002, /*!< Reset all encoder modules history buffer. */
1244*e5436536SAndroid Build Coastguard Worker   AACENC_INIT_TRANSPORT =
1245*e5436536SAndroid Build Coastguard Worker       0x1000, /*!< Initialize transport lib with new parameters. */
1246*e5436536SAndroid Build Coastguard Worker   AACENC_RESET_INBUFFER =
1247*e5436536SAndroid Build Coastguard Worker       0x2000,              /*!< Reset fill level of internal input buffer. */
1248*e5436536SAndroid Build Coastguard Worker   AACENC_INIT_ALL = 0xFFFF /*!< Initialize all. */
1249*e5436536SAndroid Build Coastguard Worker } AACENC_CTRLFLAGS;
1250*e5436536SAndroid Build Coastguard Worker 
1251*e5436536SAndroid Build Coastguard Worker /**
1252*e5436536SAndroid Build Coastguard Worker  * \brief  AAC encoder setting parameters.
1253*e5436536SAndroid Build Coastguard Worker  *
1254*e5436536SAndroid Build Coastguard Worker  * Use aacEncoder_SetParam() function to configure, or use aacEncoder_GetParam()
1255*e5436536SAndroid Build Coastguard Worker  * function to read the internal status of the following parameters.
1256*e5436536SAndroid Build Coastguard Worker  */
1257*e5436536SAndroid Build Coastguard Worker typedef enum {
1258*e5436536SAndroid Build Coastguard Worker   AACENC_AOT =
1259*e5436536SAndroid Build Coastguard Worker       0x0100, /*!< Audio object type. See ::AUDIO_OBJECT_TYPE in FDK_audio.h.
1260*e5436536SAndroid Build Coastguard Worker                    - 2: MPEG-4 AAC Low Complexity.
1261*e5436536SAndroid Build Coastguard Worker                    - 5: MPEG-4 AAC Low Complexity with Spectral Band Replication
1262*e5436536SAndroid Build Coastguard Worker                  (HE-AAC).
1263*e5436536SAndroid Build Coastguard Worker                    - 29: MPEG-4 AAC Low Complexity with Spectral Band
1264*e5436536SAndroid Build Coastguard Worker                  Replication and Parametric Stereo (HE-AAC v2). This
1265*e5436536SAndroid Build Coastguard Worker                  configuration can be used only with stereo input audio data.
1266*e5436536SAndroid Build Coastguard Worker                    - 23: MPEG-4 AAC Low-Delay.
1267*e5436536SAndroid Build Coastguard Worker                    - 39: MPEG-4 AAC Enhanced Low-Delay. Since there is no
1268*e5436536SAndroid Build Coastguard Worker                  ::AUDIO_OBJECT_TYPE for ELD in combination with SBR defined,
1269*e5436536SAndroid Build Coastguard Worker                  enable SBR explicitely by ::AACENC_SBR_MODE parameter. The ELD
1270*e5436536SAndroid Build Coastguard Worker                  v2 212 configuration can be configured by ::AACENC_CHANNELMODE
1271*e5436536SAndroid Build Coastguard Worker                  parameter.
1272*e5436536SAndroid Build Coastguard Worker                    - 129: MPEG-2 AAC Low Complexity.
1273*e5436536SAndroid Build Coastguard Worker                    - 132: MPEG-2 AAC Low Complexity with Spectral Band
1274*e5436536SAndroid Build Coastguard Worker                  Replication (HE-AAC).
1275*e5436536SAndroid Build Coastguard Worker 
1276*e5436536SAndroid Build Coastguard Worker                    Please note that the virtual MPEG-2 AOT's basically disables
1277*e5436536SAndroid Build Coastguard Worker                  non-existing Perceptual Noise Substitution tool in AAC encoder
1278*e5436536SAndroid Build Coastguard Worker                  and controls the MPEG_ID flag in adts header. The virtual
1279*e5436536SAndroid Build Coastguard Worker                  MPEG-2 AOT doesn't prohibit specific transport formats. */
1280*e5436536SAndroid Build Coastguard Worker 
1281*e5436536SAndroid Build Coastguard Worker   AACENC_BITRATE = 0x0101, /*!< Total encoder bitrate. This parameter is
1282*e5436536SAndroid Build Coastguard Worker                               mandatory and interacts with ::AACENC_BITRATEMODE.
1283*e5436536SAndroid Build Coastguard Worker                                 - CBR: Bitrate in bits/second.
1284*e5436536SAndroid Build Coastguard Worker                                 - VBR: Variable bitrate. Bitrate argument will
1285*e5436536SAndroid Build Coastguard Worker                               be ignored. See \ref suppBitrates for details. */
1286*e5436536SAndroid Build Coastguard Worker 
1287*e5436536SAndroid Build Coastguard Worker   AACENC_BITRATEMODE = 0x0102, /*!< Bitrate mode. Configuration can be different
1288*e5436536SAndroid Build Coastguard Worker                                   kind of bitrate configurations:
1289*e5436536SAndroid Build Coastguard Worker                                     - 0: Constant bitrate, use bitrate according
1290*e5436536SAndroid Build Coastguard Worker                                   to ::AACENC_BITRATE. (default) Within none
1291*e5436536SAndroid Build Coastguard Worker                                   LD/ELD ::AUDIO_OBJECT_TYPE, the CBR mode makes
1292*e5436536SAndroid Build Coastguard Worker                                   use of full allowed bitreservoir. In contrast,
1293*e5436536SAndroid Build Coastguard Worker                                   at Low-Delay ::AUDIO_OBJECT_TYPE the
1294*e5436536SAndroid Build Coastguard Worker                                   bitreservoir is kept very small.
1295*e5436536SAndroid Build Coastguard Worker                                     - 1: Variable bitrate mode, \ref vbrmode
1296*e5436536SAndroid Build Coastguard Worker                                   "very low bitrate".
1297*e5436536SAndroid Build Coastguard Worker                                     - 2: Variable bitrate mode, \ref vbrmode
1298*e5436536SAndroid Build Coastguard Worker                                   "low bitrate".
1299*e5436536SAndroid Build Coastguard Worker                                     - 3: Variable bitrate mode, \ref vbrmode
1300*e5436536SAndroid Build Coastguard Worker                                   "medium bitrate".
1301*e5436536SAndroid Build Coastguard Worker                                     - 4: Variable bitrate mode, \ref vbrmode
1302*e5436536SAndroid Build Coastguard Worker                                   "high bitrate".
1303*e5436536SAndroid Build Coastguard Worker                                     - 5: Variable bitrate mode, \ref vbrmode
1304*e5436536SAndroid Build Coastguard Worker                                   "very high bitrate". */
1305*e5436536SAndroid Build Coastguard Worker 
1306*e5436536SAndroid Build Coastguard Worker   AACENC_SAMPLERATE = 0x0103, /*!< Audio input data sampling rate. Encoder
1307*e5436536SAndroid Build Coastguard Worker                                  supports following sampling rates: 8000, 11025,
1308*e5436536SAndroid Build Coastguard Worker                                  12000, 16000, 22050, 24000, 32000, 44100,
1309*e5436536SAndroid Build Coastguard Worker                                  48000, 64000, 88200, 96000 */
1310*e5436536SAndroid Build Coastguard Worker 
1311*e5436536SAndroid Build Coastguard Worker   AACENC_SBR_MODE = 0x0104, /*!< Configure SBR independently of the chosen Audio
1312*e5436536SAndroid Build Coastguard Worker                                Object Type ::AUDIO_OBJECT_TYPE. This parameter
1313*e5436536SAndroid Build Coastguard Worker                                is for ELD audio object type only.
1314*e5436536SAndroid Build Coastguard Worker                                  - -1: Use ELD SBR auto configurator (default).
1315*e5436536SAndroid Build Coastguard Worker                                  - 0: Disable Spectral Band Replication.
1316*e5436536SAndroid Build Coastguard Worker                                  - 1: Enable Spectral Band Replication. */
1317*e5436536SAndroid Build Coastguard Worker 
1318*e5436536SAndroid Build Coastguard Worker   AACENC_GRANULE_LENGTH =
1319*e5436536SAndroid Build Coastguard Worker       0x0105, /*!< Core encoder (AAC) audio frame length in samples:
1320*e5436536SAndroid Build Coastguard Worker                    - 1024: Default configuration.
1321*e5436536SAndroid Build Coastguard Worker                    - 512: Default length in LD/ELD configuration.
1322*e5436536SAndroid Build Coastguard Worker                    - 480: Length in LD/ELD configuration.
1323*e5436536SAndroid Build Coastguard Worker                    - 256: Length for ELD reduced delay mode (x2).
1324*e5436536SAndroid Build Coastguard Worker                    - 240: Length for ELD reduced delay mode (x2).
1325*e5436536SAndroid Build Coastguard Worker                    - 128: Length for ELD reduced delay mode (x4).
1326*e5436536SAndroid Build Coastguard Worker                    - 120: Length for ELD reduced delay mode (x4). */
1327*e5436536SAndroid Build Coastguard Worker 
1328*e5436536SAndroid Build Coastguard Worker   AACENC_CHANNELMODE = 0x0106, /*!< Set explicit channel mode. Channel mode must
1329*e5436536SAndroid Build Coastguard Worker                                   match with number of input channels.
1330*e5436536SAndroid Build Coastguard Worker                                     - 1-7, 11,12,14 and 33,34: MPEG channel
1331*e5436536SAndroid Build Coastguard Worker                                   modes supported, see ::CHANNEL_MODE in
1332*e5436536SAndroid Build Coastguard Worker                                   FDK_audio.h. */
1333*e5436536SAndroid Build Coastguard Worker 
1334*e5436536SAndroid Build Coastguard Worker   AACENC_CHANNELORDER =
1335*e5436536SAndroid Build Coastguard Worker       0x0107, /*!< Input audio data channel ordering scheme:
1336*e5436536SAndroid Build Coastguard Worker                    - 0: MPEG channel ordering (e. g. 5.1: C, L, R, SL, SR, LFE).
1337*e5436536SAndroid Build Coastguard Worker                  (default)
1338*e5436536SAndroid Build Coastguard Worker                    - 1: WAVE file format channel ordering (e. g. 5.1: L, R, C,
1339*e5436536SAndroid Build Coastguard Worker                  LFE, SL, SR). */
1340*e5436536SAndroid Build Coastguard Worker 
1341*e5436536SAndroid Build Coastguard Worker   AACENC_SBR_RATIO =
1342*e5436536SAndroid Build Coastguard Worker       0x0108, /*!<  Controls activation of downsampled SBR. With downsampled
1343*e5436536SAndroid Build Coastguard Worker                  SBR, the delay will be shorter. On the other hand, for
1344*e5436536SAndroid Build Coastguard Worker                  achieving the same quality level, downsampled SBR needs more
1345*e5436536SAndroid Build Coastguard Worker                  bits than dual-rate SBR. With downsampled SBR, the AAC encoder
1346*e5436536SAndroid Build Coastguard Worker                  will work at the same sampling rate as the SBR encoder (single
1347*e5436536SAndroid Build Coastguard Worker                  rate). Downsampled SBR is supported for AAC-ELD and HE-AACv1.
1348*e5436536SAndroid Build Coastguard Worker                     - 1: Downsampled SBR (default for ELD).
1349*e5436536SAndroid Build Coastguard Worker                     - 2: Dual-rate SBR   (default for HE-AAC). */
1350*e5436536SAndroid Build Coastguard Worker 
1351*e5436536SAndroid Build Coastguard Worker   AACENC_AFTERBURNER =
1352*e5436536SAndroid Build Coastguard Worker       0x0200, /*!< This parameter controls the use of the afterburner feature.
1353*e5436536SAndroid Build Coastguard Worker                    The afterburner is a type of analysis by synthesis algorithm
1354*e5436536SAndroid Build Coastguard Worker                  which increases the audio quality but also the required
1355*e5436536SAndroid Build Coastguard Worker                  processing power. It is recommended to always activate this if
1356*e5436536SAndroid Build Coastguard Worker                  additional memory consumption and processing power consumption
1357*e5436536SAndroid Build Coastguard Worker                    is not a problem. If increased MHz and memory consumption are
1358*e5436536SAndroid Build Coastguard Worker                  an issue then the MHz and memory cost of this optional module
1359*e5436536SAndroid Build Coastguard Worker                  need to be evaluated against the improvement in audio quality
1360*e5436536SAndroid Build Coastguard Worker                  on a case by case basis.
1361*e5436536SAndroid Build Coastguard Worker                    - 0: Disable afterburner (default).
1362*e5436536SAndroid Build Coastguard Worker                    - 1: Enable afterburner. */
1363*e5436536SAndroid Build Coastguard Worker 
1364*e5436536SAndroid Build Coastguard Worker   AACENC_BANDWIDTH = 0x0203, /*!< Core encoder audio bandwidth:
1365*e5436536SAndroid Build Coastguard Worker                                   - 0: Determine audio bandwidth internally
1366*e5436536SAndroid Build Coastguard Worker                                 (default, see chapter \ref BEHAVIOUR_BANDWIDTH).
1367*e5436536SAndroid Build Coastguard Worker                                   - 1 to fs/2: Audio bandwidth in Hertz. Limited
1368*e5436536SAndroid Build Coastguard Worker                                 to 20kHz max. Not usable if SBR is active. This
1369*e5436536SAndroid Build Coastguard Worker                                 setting is for experts only, better do not touch
1370*e5436536SAndroid Build Coastguard Worker                                 this value to avoid degraded audio quality. */
1371*e5436536SAndroid Build Coastguard Worker 
1372*e5436536SAndroid Build Coastguard Worker   AACENC_PEAK_BITRATE =
1373*e5436536SAndroid Build Coastguard Worker       0x0207, /*!< Peak bitrate configuration parameter to adjust maximum bits
1374*e5436536SAndroid Build Coastguard Worker                  per audio frame. Bitrate is in bits/second. The peak bitrate
1375*e5436536SAndroid Build Coastguard Worker                  will internally be limited to the chosen bitrate
1376*e5436536SAndroid Build Coastguard Worker                  ::AACENC_BITRATE as lower limit and the
1377*e5436536SAndroid Build Coastguard Worker                  number_of_effective_channels*6144 bit as upper limit.
1378*e5436536SAndroid Build Coastguard Worker 
1379*e5436536SAndroid Build Coastguard Worker                    Setting the peak bitrate equal to ::AACENC_BITRATE does not
1380*e5436536SAndroid Build Coastguard Worker                  necessarily mean that the audio frames will be of constant
1381*e5436536SAndroid Build Coastguard Worker                  size. Since the peak bitate is in bits/second, the frame sizes
1382*e5436536SAndroid Build Coastguard Worker                  can vary by one byte in one or the other direction over various
1383*e5436536SAndroid Build Coastguard Worker                  frames. However, it is not recommended to reduce the peak
1384*e5436536SAndroid Build Coastguard Worker                  pitrate to ::AACENC_BITRATE - it would disable the
1385*e5436536SAndroid Build Coastguard Worker                  bitreservoir, which would affect the audio quality by a large
1386*e5436536SAndroid Build Coastguard Worker                  amount. */
1387*e5436536SAndroid Build Coastguard Worker 
1388*e5436536SAndroid Build Coastguard Worker   AACENC_TRANSMUX = 0x0300, /*!< Transport type to be used. See ::TRANSPORT_TYPE
1389*e5436536SAndroid Build Coastguard Worker                                in FDK_audio.h. Following types can be configured
1390*e5436536SAndroid Build Coastguard Worker                                in encoder library:
1391*e5436536SAndroid Build Coastguard Worker                                  - 0: raw access units
1392*e5436536SAndroid Build Coastguard Worker                                  - 1: ADIF bitstream format
1393*e5436536SAndroid Build Coastguard Worker                                  - 2: ADTS bitstream format
1394*e5436536SAndroid Build Coastguard Worker                                  - 6: Audio Mux Elements (LATM) with
1395*e5436536SAndroid Build Coastguard Worker                                muxConfigPresent = 1
1396*e5436536SAndroid Build Coastguard Worker                                  - 7: Audio Mux Elements (LATM) with
1397*e5436536SAndroid Build Coastguard Worker                                muxConfigPresent = 0, out of band StreamMuxConfig
1398*e5436536SAndroid Build Coastguard Worker                                  - 10: Audio Sync Stream (LOAS) */
1399*e5436536SAndroid Build Coastguard Worker 
1400*e5436536SAndroid Build Coastguard Worker   AACENC_HEADER_PERIOD =
1401*e5436536SAndroid Build Coastguard Worker       0x0301, /*!< Frame count period for sending in-band configuration buffers
1402*e5436536SAndroid Build Coastguard Worker                  within LATM/LOAS transport layer. Additionally this parameter
1403*e5436536SAndroid Build Coastguard Worker                  configures the PCE repetition period in raw_data_block(). See
1404*e5436536SAndroid Build Coastguard Worker                  \ref encPCE.
1405*e5436536SAndroid Build Coastguard Worker                    - 0xFF: auto-mode default 10 for TT_MP4_ADTS, TT_MP4_LOAS and
1406*e5436536SAndroid Build Coastguard Worker                  TT_MP4_LATM_MCP1, otherwise 0.
1407*e5436536SAndroid Build Coastguard Worker                    - n: Frame count period. */
1408*e5436536SAndroid Build Coastguard Worker 
1409*e5436536SAndroid Build Coastguard Worker   AACENC_SIGNALING_MODE =
1410*e5436536SAndroid Build Coastguard Worker       0x0302, /*!< Signaling mode of the extension AOT:
1411*e5436536SAndroid Build Coastguard Worker                    - 0: Implicit backward compatible signaling (default for
1412*e5436536SAndroid Build Coastguard Worker                  non-MPEG-4 based AOT's and for the transport formats ADIF and
1413*e5436536SAndroid Build Coastguard Worker                  ADTS)
1414*e5436536SAndroid Build Coastguard Worker                         - A stream that uses implicit signaling can be decoded
1415*e5436536SAndroid Build Coastguard Worker                  by every AAC decoder, even AAC-LC-only decoders
1416*e5436536SAndroid Build Coastguard Worker                         - An AAC-LC-only decoder will only decode the
1417*e5436536SAndroid Build Coastguard Worker                  low-frequency part of the stream, resulting in a band-limited
1418*e5436536SAndroid Build Coastguard Worker                  output
1419*e5436536SAndroid Build Coastguard Worker                         - This method works with all transport formats
1420*e5436536SAndroid Build Coastguard Worker                         - This method does not work with downsampled SBR
1421*e5436536SAndroid Build Coastguard Worker                    - 1: Explicit backward compatible signaling
1422*e5436536SAndroid Build Coastguard Worker                         - A stream that uses explicit backward compatible
1423*e5436536SAndroid Build Coastguard Worker                  signaling can be decoded by every AAC decoder, even AAC-LC-only
1424*e5436536SAndroid Build Coastguard Worker                  decoders
1425*e5436536SAndroid Build Coastguard Worker                         - An AAC-LC-only decoder will only decode the
1426*e5436536SAndroid Build Coastguard Worker                  low-frequency part of the stream, resulting in a band-limited
1427*e5436536SAndroid Build Coastguard Worker                  output
1428*e5436536SAndroid Build Coastguard Worker                         - A decoder not capable of decoding PS will only decode
1429*e5436536SAndroid Build Coastguard Worker                  the AAC-LC+SBR part. If the stream contained PS, the result
1430*e5436536SAndroid Build Coastguard Worker                  will be a a decoded mono downmix
1431*e5436536SAndroid Build Coastguard Worker                         - This method does not work with ADIF or ADTS. For
1432*e5436536SAndroid Build Coastguard Worker                  LOAS/LATM, it only works with AudioMuxVersion==1
1433*e5436536SAndroid Build Coastguard Worker                         - This method does work with downsampled SBR
1434*e5436536SAndroid Build Coastguard Worker                    - 2: Explicit hierarchical signaling (default for MPEG-4
1435*e5436536SAndroid Build Coastguard Worker                  based AOT's and for all transport formats excluding ADIF and
1436*e5436536SAndroid Build Coastguard Worker                  ADTS)
1437*e5436536SAndroid Build Coastguard Worker                         - A stream that uses explicit hierarchical signaling can
1438*e5436536SAndroid Build Coastguard Worker                  be decoded only by HE-AAC decoders
1439*e5436536SAndroid Build Coastguard Worker                         - An AAC-LC-only decoder will not decode a stream that
1440*e5436536SAndroid Build Coastguard Worker                  uses explicit hierarchical signaling
1441*e5436536SAndroid Build Coastguard Worker                         - A decoder not capable of decoding PS will not decode
1442*e5436536SAndroid Build Coastguard Worker                  the stream at all if it contained PS
1443*e5436536SAndroid Build Coastguard Worker                         - This method does not work with ADIF or ADTS. It works
1444*e5436536SAndroid Build Coastguard Worker                  with LOAS/LATM and the MPEG-4 File format
1445*e5436536SAndroid Build Coastguard Worker                         - This method does work with downsampled SBR
1446*e5436536SAndroid Build Coastguard Worker 
1447*e5436536SAndroid Build Coastguard Worker                     For making sure that the listener always experiences the
1448*e5436536SAndroid Build Coastguard Worker                  best audio quality, explicit hierarchical signaling should be
1449*e5436536SAndroid Build Coastguard Worker                  used. This makes sure that only a full HE-AAC-capable decoder
1450*e5436536SAndroid Build Coastguard Worker                  will decode those streams. The audio is played at full
1451*e5436536SAndroid Build Coastguard Worker                  bandwidth. For best backwards compatibility, it is recommended
1452*e5436536SAndroid Build Coastguard Worker                  to encode with implicit SBR signaling. A decoder capable of
1453*e5436536SAndroid Build Coastguard Worker                  AAC-LC only will then only decode the AAC part, which means the
1454*e5436536SAndroid Build Coastguard Worker                  decoded audio will sound band-limited.
1455*e5436536SAndroid Build Coastguard Worker 
1456*e5436536SAndroid Build Coastguard Worker                     For MPEG-2 transport types (ADTS,ADIF), only implicit
1457*e5436536SAndroid Build Coastguard Worker                  signaling is possible.
1458*e5436536SAndroid Build Coastguard Worker 
1459*e5436536SAndroid Build Coastguard Worker                     For LOAS and LATM, explicit backwards compatible signaling
1460*e5436536SAndroid Build Coastguard Worker                  only works together with AudioMuxVersion==1. The reason is
1461*e5436536SAndroid Build Coastguard Worker                  that, for explicit backwards compatible signaling, additional
1462*e5436536SAndroid Build Coastguard Worker                  information will be appended to the ASC. A decoder that is only
1463*e5436536SAndroid Build Coastguard Worker                  capable of decoding AAC-LC will skip this part. Nevertheless,
1464*e5436536SAndroid Build Coastguard Worker                  for jumping to the end of the ASC, it needs to know the ASC
1465*e5436536SAndroid Build Coastguard Worker                  length. Transmitting the length of the ASC is a feature of
1466*e5436536SAndroid Build Coastguard Worker                  AudioMuxVersion==1, it is not possible to transmit the length
1467*e5436536SAndroid Build Coastguard Worker                  of the ASC with AudioMuxVersion==0, therefore an AAC-LC-only
1468*e5436536SAndroid Build Coastguard Worker                  decoder will not be able to parse a LOAS/LATM stream that was
1469*e5436536SAndroid Build Coastguard Worker                  being encoded with AudioMuxVersion==0.
1470*e5436536SAndroid Build Coastguard Worker 
1471*e5436536SAndroid Build Coastguard Worker                     For downsampled SBR, explicit signaling is mandatory. The
1472*e5436536SAndroid Build Coastguard Worker                  reason for this is that the extension sampling frequency (which
1473*e5436536SAndroid Build Coastguard Worker                  is in case of SBR the sampling frequqncy of the SBR part) can
1474*e5436536SAndroid Build Coastguard Worker                  only be signaled in explicit mode.
1475*e5436536SAndroid Build Coastguard Worker 
1476*e5436536SAndroid Build Coastguard Worker                     For AAC-ELD, the SBR information is transmitted in the
1477*e5436536SAndroid Build Coastguard Worker                  ELDSpecific Config, which is part of the AudioSpecificConfig.
1478*e5436536SAndroid Build Coastguard Worker                  Therefore, the settings here will have no effect on AAC-ELD.*/
1479*e5436536SAndroid Build Coastguard Worker 
1480*e5436536SAndroid Build Coastguard Worker   AACENC_TPSUBFRAMES =
1481*e5436536SAndroid Build Coastguard Worker       0x0303, /*!< Number of sub frames in a transport frame for LOAS/LATM or
1482*e5436536SAndroid Build Coastguard Worker                  ADTS (default 1).
1483*e5436536SAndroid Build Coastguard Worker                    - ADTS: Maximum number of sub frames restricted to 4.
1484*e5436536SAndroid Build Coastguard Worker                    - LOAS/LATM: Maximum number of sub frames restricted to 2.*/
1485*e5436536SAndroid Build Coastguard Worker 
1486*e5436536SAndroid Build Coastguard Worker   AACENC_AUDIOMUXVER =
1487*e5436536SAndroid Build Coastguard Worker       0x0304, /*!< AudioMuxVersion to be used for LATM. (AudioMuxVersionA,
1488*e5436536SAndroid Build Coastguard Worker                  currently not implemented):
1489*e5436536SAndroid Build Coastguard Worker                    - 0: Default, no transmission of tara Buffer fullness, no ASC
1490*e5436536SAndroid Build Coastguard Worker                  length and including actual latm Buffer fullnes.
1491*e5436536SAndroid Build Coastguard Worker                    - 1: Transmission of tara Buffer fullness, ASC length and
1492*e5436536SAndroid Build Coastguard Worker                  actual latm Buffer fullness.
1493*e5436536SAndroid Build Coastguard Worker                    - 2: Transmission of tara Buffer fullness, ASC length and
1494*e5436536SAndroid Build Coastguard Worker                  maximum level of latm Buffer fullness. */
1495*e5436536SAndroid Build Coastguard Worker 
1496*e5436536SAndroid Build Coastguard Worker   AACENC_PROTECTION = 0x0306, /*!< Configure protection in transport layer:
1497*e5436536SAndroid Build Coastguard Worker                                    - 0: No protection. (default)
1498*e5436536SAndroid Build Coastguard Worker                                    - 1: CRC active for ADTS transport format. */
1499*e5436536SAndroid Build Coastguard Worker 
1500*e5436536SAndroid Build Coastguard Worker   AACENC_ANCILLARY_BITRATE =
1501*e5436536SAndroid Build Coastguard Worker       0x0500, /*!< Constant ancillary data bitrate in bits/second.
1502*e5436536SAndroid Build Coastguard Worker                    - 0: Either no ancillary data or insert exact number of
1503*e5436536SAndroid Build Coastguard Worker                  bytes, denoted via input parameter, numAncBytes in
1504*e5436536SAndroid Build Coastguard Worker                  AACENC_InArgs.
1505*e5436536SAndroid Build Coastguard Worker                    - else: Insert ancillary data with specified bitrate. */
1506*e5436536SAndroid Build Coastguard Worker 
1507*e5436536SAndroid Build Coastguard Worker   AACENC_METADATA_MODE = 0x0600, /*!< Configure Meta Data. See ::AACENC_MetaData
1508*e5436536SAndroid Build Coastguard Worker                                     for further details:
1509*e5436536SAndroid Build Coastguard Worker                                       - 0: Do not embed any metadata.
1510*e5436536SAndroid Build Coastguard Worker                                       - 1: Embed dynamic_range_info metadata.
1511*e5436536SAndroid Build Coastguard Worker                                       - 2: Embed dynamic_range_info and
1512*e5436536SAndroid Build Coastguard Worker                                     ancillary_data metadata.
1513*e5436536SAndroid Build Coastguard Worker                                       - 3: Embed ancillary_data metadata. */
1514*e5436536SAndroid Build Coastguard Worker 
1515*e5436536SAndroid Build Coastguard Worker   AACENC_CONTROL_STATE =
1516*e5436536SAndroid Build Coastguard Worker       0xFF00, /*!< There is an automatic process which internally reconfigures
1517*e5436536SAndroid Build Coastguard Worker                  the encoder instance when a configuration parameter changed or
1518*e5436536SAndroid Build Coastguard Worker                  an error occured. This paramerter allows overwriting or getting
1519*e5436536SAndroid Build Coastguard Worker                  the control status of this process. See ::AACENC_CTRLFLAGS. */
1520*e5436536SAndroid Build Coastguard Worker 
1521*e5436536SAndroid Build Coastguard Worker   AACENC_NONE = 0xFFFF /*!< ------ */
1522*e5436536SAndroid Build Coastguard Worker 
1523*e5436536SAndroid Build Coastguard Worker } AACENC_PARAM;
1524*e5436536SAndroid Build Coastguard Worker 
1525*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus
1526*e5436536SAndroid Build Coastguard Worker extern "C" {
1527*e5436536SAndroid Build Coastguard Worker #endif
1528*e5436536SAndroid Build Coastguard Worker 
1529*e5436536SAndroid Build Coastguard Worker /**
1530*e5436536SAndroid Build Coastguard Worker  * \brief  Open an instance of the encoder.
1531*e5436536SAndroid Build Coastguard Worker  *
1532*e5436536SAndroid Build Coastguard Worker  * Allocate memory for an encoder instance with a functional range denoted by
1533*e5436536SAndroid Build Coastguard Worker  * the function parameters. Preinitialize encoder instance with default
1534*e5436536SAndroid Build Coastguard Worker  * configuration.
1535*e5436536SAndroid Build Coastguard Worker  *
1536*e5436536SAndroid Build Coastguard Worker  * \param phAacEncoder  A pointer to an encoder handle. Initialized on return.
1537*e5436536SAndroid Build Coastguard Worker  * \param encModules    Specify encoder modules to be supported in this encoder
1538*e5436536SAndroid Build Coastguard Worker  * instance:
1539*e5436536SAndroid Build Coastguard Worker  *                      - 0x0: Allocate memory for all available encoder
1540*e5436536SAndroid Build Coastguard Worker  * modules.
1541*e5436536SAndroid Build Coastguard Worker  *                      - else: Select memory allocation regarding encoder
1542*e5436536SAndroid Build Coastguard Worker  * modules. Following flags are possible and can be combined.
1543*e5436536SAndroid Build Coastguard Worker  *                              - 0x01: AAC module.
1544*e5436536SAndroid Build Coastguard Worker  *                              - 0x02: SBR module.
1545*e5436536SAndroid Build Coastguard Worker  *                              - 0x04: PS module.
1546*e5436536SAndroid Build Coastguard Worker  *                              - 0x08: MPS module.
1547*e5436536SAndroid Build Coastguard Worker  *                              - 0x10: Metadata module.
1548*e5436536SAndroid Build Coastguard Worker  *                              - example: (0x01|0x02|0x04|0x08|0x10) allocates
1549*e5436536SAndroid Build Coastguard Worker  * all modules and is equivalent to default configuration denotet by 0x0.
1550*e5436536SAndroid Build Coastguard Worker  * \param maxChannels   Number of channels to be allocated. This parameter can
1551*e5436536SAndroid Build Coastguard Worker  * be used in different ways:
1552*e5436536SAndroid Build Coastguard Worker  *                      - 0: Allocate maximum number of AAC and SBR channels as
1553*e5436536SAndroid Build Coastguard Worker  * supported by the library.
1554*e5436536SAndroid Build Coastguard Worker  *                      - nChannels: Use same maximum number of channels for
1555*e5436536SAndroid Build Coastguard Worker  * allocating memory in AAC and SBR module.
1556*e5436536SAndroid Build Coastguard Worker  *                      - nChannels | (nSbrCh<<8): Number of SBR channels can be
1557*e5436536SAndroid Build Coastguard Worker  * different to AAC channels to save data memory.
1558*e5436536SAndroid Build Coastguard Worker  *
1559*e5436536SAndroid Build Coastguard Worker  * \return
1560*e5436536SAndroid Build Coastguard Worker  *          - AACENC_OK, on succes.
1561*e5436536SAndroid Build Coastguard Worker  *          - AACENC_INVALID_HANDLE, AACENC_MEMORY_ERROR, AACENC_INVALID_CONFIG,
1562*e5436536SAndroid Build Coastguard Worker  * on failure.
1563*e5436536SAndroid Build Coastguard Worker  */
1564*e5436536SAndroid Build Coastguard Worker AACENC_ERROR aacEncOpen(HANDLE_AACENCODER *phAacEncoder, const UINT encModules,
1565*e5436536SAndroid Build Coastguard Worker                         const UINT maxChannels);
1566*e5436536SAndroid Build Coastguard Worker 
1567*e5436536SAndroid Build Coastguard Worker /**
1568*e5436536SAndroid Build Coastguard Worker  * \brief  Close the encoder instance.
1569*e5436536SAndroid Build Coastguard Worker  *
1570*e5436536SAndroid Build Coastguard Worker  * Deallocate encoder instance and free whole memory.
1571*e5436536SAndroid Build Coastguard Worker  *
1572*e5436536SAndroid Build Coastguard Worker  * \param phAacEncoder  Pointer to the encoder handle to be deallocated.
1573*e5436536SAndroid Build Coastguard Worker  *
1574*e5436536SAndroid Build Coastguard Worker  * \return
1575*e5436536SAndroid Build Coastguard Worker  *          - AACENC_OK, on success.
1576*e5436536SAndroid Build Coastguard Worker  *          - AACENC_INVALID_HANDLE, on failure.
1577*e5436536SAndroid Build Coastguard Worker  */
1578*e5436536SAndroid Build Coastguard Worker AACENC_ERROR aacEncClose(HANDLE_AACENCODER *phAacEncoder);
1579*e5436536SAndroid Build Coastguard Worker 
1580*e5436536SAndroid Build Coastguard Worker /**
1581*e5436536SAndroid Build Coastguard Worker  * \brief Encode audio data.
1582*e5436536SAndroid Build Coastguard Worker  *
1583*e5436536SAndroid Build Coastguard Worker  * This function is mainly for encoding audio data. In addition the function can
1584*e5436536SAndroid Build Coastguard Worker  * be used for an encoder (re)configuration process.
1585*e5436536SAndroid Build Coastguard Worker  * - PCM input data will be retrieved from external input buffer until the fill
1586*e5436536SAndroid Build Coastguard Worker  * level allows encoding a single frame. This functionality allows an external
1587*e5436536SAndroid Build Coastguard Worker  * buffer with reduced size in comparison to the AAC or HE-AAC audio frame
1588*e5436536SAndroid Build Coastguard Worker  * length.
1589*e5436536SAndroid Build Coastguard Worker  * - If the value of the input samples argument is zero, just internal
1590*e5436536SAndroid Build Coastguard Worker  * reinitialization will be applied if it is requested.
1591*e5436536SAndroid Build Coastguard Worker  * - At the end of a file the flushing process can be triggerd via setting the
1592*e5436536SAndroid Build Coastguard Worker  * value of the input samples argument to -1. The encoder delay lines are fully
1593*e5436536SAndroid Build Coastguard Worker  * flushed when the encoder returns no valid bitstream data
1594*e5436536SAndroid Build Coastguard Worker  * AACENC_OutArgs::numOutBytes. Furthermore the end of file is signaled by the
1595*e5436536SAndroid Build Coastguard Worker  * return value AACENC_ENCODE_EOF.
1596*e5436536SAndroid Build Coastguard Worker  * - If an error occured in the previous frame or any of the encoder parameters
1597*e5436536SAndroid Build Coastguard Worker  * changed, an internal reinitialization process will be applied before encoding
1598*e5436536SAndroid Build Coastguard Worker  * the incoming audio samples.
1599*e5436536SAndroid Build Coastguard Worker  * - The function can also be used for an independent reconfiguration process
1600*e5436536SAndroid Build Coastguard Worker  * without encoding. The first parameter has to be a valid encoder handle and
1601*e5436536SAndroid Build Coastguard Worker  * all other parameters can be set to NULL.
1602*e5436536SAndroid Build Coastguard Worker  * - If the size of the external bitbuffer in outBufDesc is not sufficient for
1603*e5436536SAndroid Build Coastguard Worker  * writing the whole bitstream, an internal error will be the return value and a
1604*e5436536SAndroid Build Coastguard Worker  * reconfiguration will be triggered.
1605*e5436536SAndroid Build Coastguard Worker  *
1606*e5436536SAndroid Build Coastguard Worker  * \param hAacEncoder           A valid AAC encoder handle.
1607*e5436536SAndroid Build Coastguard Worker  * \param inBufDesc             Input buffer descriptor, see AACENC_BufDesc:
1608*e5436536SAndroid Build Coastguard Worker  *                              - At least one input buffer with audio data is
1609*e5436536SAndroid Build Coastguard Worker  * expected.
1610*e5436536SAndroid Build Coastguard Worker  *                              - Optionally a second input buffer with
1611*e5436536SAndroid Build Coastguard Worker  * ancillary data can be fed.
1612*e5436536SAndroid Build Coastguard Worker  * \param outBufDesc            Output buffer descriptor, see AACENC_BufDesc:
1613*e5436536SAndroid Build Coastguard Worker  *                              - Provide one output buffer for the encoded
1614*e5436536SAndroid Build Coastguard Worker  * bitstream.
1615*e5436536SAndroid Build Coastguard Worker  * \param inargs                Input arguments, see AACENC_InArgs.
1616*e5436536SAndroid Build Coastguard Worker  * \param outargs               Output arguments, AACENC_OutArgs.
1617*e5436536SAndroid Build Coastguard Worker  *
1618*e5436536SAndroid Build Coastguard Worker  * \return
1619*e5436536SAndroid Build Coastguard Worker  *          - AACENC_OK, on success.
1620*e5436536SAndroid Build Coastguard Worker  *          - AACENC_INVALID_HANDLE, AACENC_ENCODE_ERROR, on failure in encoding
1621*e5436536SAndroid Build Coastguard Worker  * process.
1622*e5436536SAndroid Build Coastguard Worker  *          - AACENC_INVALID_CONFIG, AACENC_INIT_ERROR, AACENC_INIT_AAC_ERROR,
1623*e5436536SAndroid Build Coastguard Worker  * AACENC_INIT_SBR_ERROR, AACENC_INIT_TP_ERROR, AACENC_INIT_META_ERROR,
1624*e5436536SAndroid Build Coastguard Worker  * AACENC_INIT_MPS_ERROR, on failure in encoder initialization.
1625*e5436536SAndroid Build Coastguard Worker  *          - AACENC_UNSUPPORTED_PARAMETER, on incorrect input or output buffer
1626*e5436536SAndroid Build Coastguard Worker  * descriptor initialization.
1627*e5436536SAndroid Build Coastguard Worker  *          - AACENC_ENCODE_EOF, when flushing fully concluded.
1628*e5436536SAndroid Build Coastguard Worker  */
1629*e5436536SAndroid Build Coastguard Worker AACENC_ERROR aacEncEncode(const HANDLE_AACENCODER hAacEncoder,
1630*e5436536SAndroid Build Coastguard Worker                           const AACENC_BufDesc *inBufDesc,
1631*e5436536SAndroid Build Coastguard Worker                           const AACENC_BufDesc *outBufDesc,
1632*e5436536SAndroid Build Coastguard Worker                           const AACENC_InArgs *inargs, AACENC_OutArgs *outargs);
1633*e5436536SAndroid Build Coastguard Worker 
1634*e5436536SAndroid Build Coastguard Worker /**
1635*e5436536SAndroid Build Coastguard Worker  * \brief  Acquire info about present encoder instance.
1636*e5436536SAndroid Build Coastguard Worker  *
1637*e5436536SAndroid Build Coastguard Worker  * This function retrieves information of the encoder configuration. In addition
1638*e5436536SAndroid Build Coastguard Worker  * to informative internal states, a configuration data block of the current
1639*e5436536SAndroid Build Coastguard Worker  * encoder settings will be returned. The format is either Audio Specific Config
1640*e5436536SAndroid Build Coastguard Worker  * in case of Raw Packets transport format or StreamMuxConfig in case of
1641*e5436536SAndroid Build Coastguard Worker  * LOAS/LATM transport format. The configuration data block is binary coded as
1642*e5436536SAndroid Build Coastguard Worker  * specified in ISO/IEC 14496-3 (MPEG-4 audio), to be used directly for MPEG-4
1643*e5436536SAndroid Build Coastguard Worker  * File Format or RFC3016 or RFC3640 applications.
1644*e5436536SAndroid Build Coastguard Worker  *
1645*e5436536SAndroid Build Coastguard Worker  * \param hAacEncoder           A valid AAC encoder handle.
1646*e5436536SAndroid Build Coastguard Worker  * \param pInfo                 Pointer to AACENC_InfoStruct. Filled on return.
1647*e5436536SAndroid Build Coastguard Worker  *
1648*e5436536SAndroid Build Coastguard Worker  * \return
1649*e5436536SAndroid Build Coastguard Worker  *          - AACENC_OK, on succes.
1650*e5436536SAndroid Build Coastguard Worker  *          - AACENC_INVALID_HANDLE, AACENC_INIT_ERROR, on failure.
1651*e5436536SAndroid Build Coastguard Worker  */
1652*e5436536SAndroid Build Coastguard Worker AACENC_ERROR aacEncInfo(const HANDLE_AACENCODER hAacEncoder,
1653*e5436536SAndroid Build Coastguard Worker                         AACENC_InfoStruct *pInfo);
1654*e5436536SAndroid Build Coastguard Worker 
1655*e5436536SAndroid Build Coastguard Worker /**
1656*e5436536SAndroid Build Coastguard Worker  * \brief  Set one single AAC encoder parameter.
1657*e5436536SAndroid Build Coastguard Worker  *
1658*e5436536SAndroid Build Coastguard Worker  * This function allows configuration of all encoder parameters specified in
1659*e5436536SAndroid Build Coastguard Worker  * ::AACENC_PARAM. Each parameter must be set with a separate function call. An
1660*e5436536SAndroid Build Coastguard Worker  * internal validation of the configuration value range will be done and an
1661*e5436536SAndroid Build Coastguard Worker  * internal reconfiguration will be signaled. The actual configuration adoption
1662*e5436536SAndroid Build Coastguard Worker  * is part of the subsequent aacEncEncode() call.
1663*e5436536SAndroid Build Coastguard Worker  *
1664*e5436536SAndroid Build Coastguard Worker  * \param hAacEncoder           A valid AAC encoder handle.
1665*e5436536SAndroid Build Coastguard Worker  * \param param                 Parameter to be set. See ::AACENC_PARAM.
1666*e5436536SAndroid Build Coastguard Worker  * \param value                 Parameter value. See parameter description in
1667*e5436536SAndroid Build Coastguard Worker  * ::AACENC_PARAM.
1668*e5436536SAndroid Build Coastguard Worker  *
1669*e5436536SAndroid Build Coastguard Worker  * \return
1670*e5436536SAndroid Build Coastguard Worker  *          - AACENC_OK, on success.
1671*e5436536SAndroid Build Coastguard Worker  *          - AACENC_INVALID_HANDLE, AACENC_UNSUPPORTED_PARAMETER,
1672*e5436536SAndroid Build Coastguard Worker  * AACENC_INVALID_CONFIG, on failure.
1673*e5436536SAndroid Build Coastguard Worker  */
1674*e5436536SAndroid Build Coastguard Worker AACENC_ERROR aacEncoder_SetParam(const HANDLE_AACENCODER hAacEncoder,
1675*e5436536SAndroid Build Coastguard Worker                                  const AACENC_PARAM param, const UINT value);
1676*e5436536SAndroid Build Coastguard Worker 
1677*e5436536SAndroid Build Coastguard Worker /**
1678*e5436536SAndroid Build Coastguard Worker  * \brief  Get one single AAC encoder parameter.
1679*e5436536SAndroid Build Coastguard Worker  *
1680*e5436536SAndroid Build Coastguard Worker  * This function is the complement to aacEncoder_SetParam(). After encoder
1681*e5436536SAndroid Build Coastguard Worker  * reinitialization with user defined settings, the internal status can be
1682*e5436536SAndroid Build Coastguard Worker  * obtained of each parameter, specified with ::AACENC_PARAM.
1683*e5436536SAndroid Build Coastguard Worker  *
1684*e5436536SAndroid Build Coastguard Worker  * \param hAacEncoder           A valid AAC encoder handle.
1685*e5436536SAndroid Build Coastguard Worker  * \param param                 Parameter to be returned. See ::AACENC_PARAM.
1686*e5436536SAndroid Build Coastguard Worker  *
1687*e5436536SAndroid Build Coastguard Worker  * \return  Internal configuration value of specifed parameter ::AACENC_PARAM.
1688*e5436536SAndroid Build Coastguard Worker  */
1689*e5436536SAndroid Build Coastguard Worker UINT aacEncoder_GetParam(const HANDLE_AACENCODER hAacEncoder,
1690*e5436536SAndroid Build Coastguard Worker                          const AACENC_PARAM param);
1691*e5436536SAndroid Build Coastguard Worker 
1692*e5436536SAndroid Build Coastguard Worker /**
1693*e5436536SAndroid Build Coastguard Worker  * \brief  Get information about encoder library build.
1694*e5436536SAndroid Build Coastguard Worker  *
1695*e5436536SAndroid Build Coastguard Worker  * Fill a given LIB_INFO structure with library version information.
1696*e5436536SAndroid Build Coastguard Worker  *
1697*e5436536SAndroid Build Coastguard Worker  * \param info  Pointer to an allocated LIB_INFO struct.
1698*e5436536SAndroid Build Coastguard Worker  *
1699*e5436536SAndroid Build Coastguard Worker  * \return
1700*e5436536SAndroid Build Coastguard Worker  *          - AACENC_OK, on success.
1701*e5436536SAndroid Build Coastguard Worker  *          - AACENC_INVALID_HANDLE, AACENC_INIT_ERROR, on failure.
1702*e5436536SAndroid Build Coastguard Worker  */
1703*e5436536SAndroid Build Coastguard Worker AACENC_ERROR aacEncGetLibInfo(LIB_INFO *info);
1704*e5436536SAndroid Build Coastguard Worker 
1705*e5436536SAndroid Build Coastguard Worker #ifdef __cplusplus
1706*e5436536SAndroid Build Coastguard Worker }
1707*e5436536SAndroid Build Coastguard Worker #endif
1708*e5436536SAndroid Build Coastguard Worker 
1709*e5436536SAndroid Build Coastguard Worker #endif /* AACENC_LIB_H */
1710