12228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
22228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/* -----------------------------------------------------------------------------------------------------------
32228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectSoftware License for The Fraunhofer FDK AAC Codec Library for Android
42228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi� Copyright  1995 - 2015 Fraunhofer-Gesellschaft zur F�rderung der angewandten Forschung e.V.
62228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  All rights reserved.
72228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
82228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1.    INTRODUCTION
92228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements
102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthe MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio.
112228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThis FDK AAC Codec software is intended to be used on a wide variety of Android devices.
122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
132228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual
142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectaudio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by
152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectindependent studies and is widely deployed. AAC has been standardized by ISO and IEC as part
162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectof the MPEG specifications.
172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
182228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectPatent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer)
192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectmay be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners
202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectindividually for the purpose of encoding or decoding bit streams in products that are compliant with
212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthe ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license
222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthese patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec
232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectsoftware may already be covered under those patent licenses when it is used for those licensed purposes only.
242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
252228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectCommercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality,
262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectare also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional
272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectapplications information and documentation.
282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project2.    COPYRIGHT LICENSE
302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
312228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectRedistribution and use in source and binary forms, with or without modification, are permitted without
322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectpayment of copyright license fees provided that you satisfy the following conditions:
332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
342228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou must retain the complete text of this software license in redistributions of the FDK AAC Codec or
352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectyour modifications thereto in source code form.
362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
372228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou must retain the complete text of this software license in the documentation and/or other materials
382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectprovided with redistributions of the FDK AAC Codec or your modifications thereto in binary form.
392228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou must make available free of charge copies of the complete source code of the FDK AAC Codec and your
402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectmodifications thereto to recipients of copies in binary form.
412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
422228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe name of Fraunhofer may not be used to endorse or promote products derived from this library without
432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectprior written permission.
442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
452228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec
462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectsoftware or your modifications thereto.
472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
482228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYour modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software
492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectand the date of any change. For modified versions of the FDK AAC Codec, the term
502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project"Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term
512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project"Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android."
522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project3.    NO PATENT LICENSE
542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
552228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectNO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer,
562228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with
572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectrespect to this software.
582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
592228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectYou may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized
602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectby appropriate patent licenses.
612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project4.    DISCLAIMER
632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
642228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThis FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors
652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project"AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties
662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectof merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
672228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectCONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages,
682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectincluding but not limited to procurement of substitute goods or services; loss of use, data, or profits,
692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projector business interruption, however caused and on any theory of liability, whether in contract, strict
702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectliability, or tort (including negligence), arising in any way out of the use of this software, even if
712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectadvised of the possibility of such damage.
722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project5.    CONTACT INFORMATION
742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
752228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFraunhofer Institute for Integrated Circuits IIS
762228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAttention: Audio and Multimedia Departments - FDK AAC LL
772228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAm Wolfsmantel 33
782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project91058 Erlangen, Germany
792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwww.iis.fraunhofer.de/amm
812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectamm-info@iis.fraunhofer.de
822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project----------------------------------------------------------------------------------------------------------- */
832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**************************** MPEG-4 HE-AAC Encoder **************************
852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  Initial author:       M. Lohwasser
872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project******************************************************************************/
882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \file   aacenc_lib.h
912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief  FDK AAC Encoder library interface header file.
922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\mainpage  Introduction
942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section Scope
962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
972228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThis document describes the high-level interface and usage of the ISO/MPEG-2/4 AAC Encoder
982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectlibrary developed by the Fraunhofer Institute for Integrated Circuits (IIS).
992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1002228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe library implements encoding on the basis of the MPEG-2 and MPEG-4 AAC Low-Complexity
1012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstandard, and depending on the library's configuration, MPEG-4 High-Efficiency AAC v2 and/or AAC-ELD standard.
1022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1032228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAll references to SBR (Spectral Band Replication) are only applicable to HE-AAC or AAC-ELD versions
1042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectof the library. All references to PS (Parametric Stereo) are only applicable to HE-AAC v2
1052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectversions of the library.
1062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section encBasics Encoder Basics
1082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1092228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThis document can only give a rough overview about the ISO/MPEG-2 and ISO/MPEG-4 AAC audio coding
1102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstandard. To understand all the terms in this document, you are encouraged to read the following documents.
1112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project- ISO/IEC 13818-7 (MPEG-2 AAC), which defines the syntax of MPEG-2 AAC audio bitstreams.
1132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project- ISO/IEC 14496-3 (MPEG-4 AAC, subparts 1 and 4), which defines the syntax of MPEG-4 AAC audio bitstreams.
1142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project- Lutzky, Schuller, Gayer, Krämer, Wabnik, "A guideline to audio codec delay", 116th AES Convention, May 8, 2004
1152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1162228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectMPEG Advanced Audio Coding is based on a time-to-frequency mapping of the signal. The signal is
1172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectpartitioned into overlapping portions and transformed into frequency domain. The spectral components
1182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectare then quantized and coded. \n
1192228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAn MPEG-2 or MPEG-4 AAC audio bitstream is composed of frames. Contrary to MPEG-1/2 Layer-3 (mp3), the
1202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectlength of individual frames is not restricted to a fixed number of bytes, but can take on any length
1212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectbetween 1 and 768 bytes.
1222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\page LIBUSE Library Usage
1252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section InterfaceDescription API Files
1272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1282228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAll API header files are located in the folder /include of the release package. All header files
1292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectare provided for usage in C/C++ programs. The AAC encoder library API functions are located at
1302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectaacenc_lib.h.
1312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1322228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectIn binary releases the encoder core resides in statically linkable libraries called for example
1332228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectlibAACenc.a/libFDK.a (LINUX) or FDK_fastaaclib.lib (MS Visual C++) for the plain AAC-LC core encoder
1342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectand libSBRenc.a (LINUX) or FDK_sbrEncLib.lib (MS Visual C++) for the SBR (Spectral Band
1352228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectReplication) and PS (Parametric Stereo) modules.
1362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section CallingSequence Calling Sequence
1382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1392228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFor encoding of ISO/MPEG-2/4 AAC bitstreams the following sequence is mandatory. Input read and output
1402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwrite functions as well as the corresponding open and close functions are left out, since they may be
1412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectimplemented differently according to the user's specific requirements. The example implementation in
1422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectmain.cpp uses file-based input/output.
1432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-# Call aacEncOpen() to allocate encoder instance with required \ref encOpen "configuration".\n
1452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\dontinclude main.cpp
1462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline hAacEncoder =
1472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline aacEncOpen
1482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-# Call aacEncoder_SetParam() for each parameter to be set. AOT, samplingrate, channelMode, bitrate and transport type are \ref encParams "mandatory".
1492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\code
1502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    ErrorStatus = aacEncoder_SetParam(hAacEncoder, parameter, value);
1512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\endcode
1522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-# Call aacEncEncode() with NULL parameters to \ref encReconf "initialize" encoder instance with present parameter set.
1532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline aacEncEncode
1542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-# Call aacEncInfo() to retrieve a configuration data block to be transmitted out of band. This is required when using RFC3640 or RFC3016 like transport.
1552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\dontinclude main.cpp
1562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline encInfo
1572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline aacEncInfo
1582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-# Encode input audio data in loop.
1592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skip Encode as long as
1602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline do
1612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\until {
1622228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFeed \ref feedInBuf "input buffer" with new audio data and provide input/output \ref bufDes "arguments" to aacEncEncode().
1632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline aacEncEncode
1642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\until ;
1652228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectWrite \ref writeOutData "output data" to file or audio device. \skipline while
1662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-# Call aacEncClose() and destroy encoder instance.
1672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline aacEncClose
1682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section encOpen Encoder Instance Allocation
1702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1712228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe assignment of the aacEncOpen() function is very flexible and can be used in the following way.
1722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project- If the amount of memory consumption is not an issue, the encoder instance can be allocated
1732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectfor the maximum number of possible audio channels (for example 6 or 8) with the full functional range supported by the library.
1742228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThis is the default open procedure for the AAC encoder if memory consumption does not need to be minimized.
1752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\code aacEncOpen(&hAacEncoder,0,0) \endcode
1762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project- If the required MPEG-4 AOTs do not call for the full functional range of the library, encoder modules can be allocated selectively.
1772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\verbatim
1782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project------------------------------------------------------
1792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project AAC | SBR |  PS | MD |         FLAGS         | value
1802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-----+-----+-----+----+-----------------------+-------
1812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  X  |  -  |  -  |  - | (0x01)                |  0x01
1822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  X  |  X  |  -  |  - | (0x01|0x02)           |  0x03
1832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  X  |  X  |  X  |  - | (0x01|0x02|0x04)      |  0x07
1842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  X  |  -  |  -  |  X | (0x01          |0x10) |  0x11
1852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  X  |  X  |  -  |  X | (0x01|0x02     |0x10) |  0x13
1862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  X  |  X  |  X  |  X | (0x01|0x02|0x04|0x10) |  0x17
1872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project------------------------------------------------------
1882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project - AAC: Allocate AAC Core Encoder module.
1892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project - SBR: Allocate Spectral Band Replication module.
1902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project - PS: Allocate Parametric Stereo module.
1912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project - MD: Allocate Meta Data module within AAC encoder.
1922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\endverbatim
1932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\code aacEncOpen(&hAacEncoder,value,0) \endcode
1942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project- Specifying the maximum number of channels to be supported in the encoder instance can be done as follows.
1952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project - For example allocate an encoder instance which supports 2 channels for all supported AOTs.
1962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   The library itself may be capable of encoding up to 6 or 8 channels but in this example only 2 channel encoding is required and thus only buffers for 2 channels are allocated to save data memory.
1972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\code aacEncOpen(&hAacEncoder,0,2) \endcode
1982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project - Additionally the maximum number of supported channels in the SBR module can be denoted separately.\n
1992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   In this example the encoder instance provides a maximum of 6 channels out of which up to 2 channels support SBR.
2002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   This encoder instance can produce for example 5.1 channel AAC-LC streams or stereo HE-AAC (v2) streams.
2012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project   HE-AAC 5.1 multi channel is not possible since only 2 out of 6 channels support SBR, which saves data memory.
2022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\code aacEncOpen(&hAacEncoder,0,6|(2<<8)) \endcode
2032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\n
2042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section bufDes Input/Output Arguments
2062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\subsection allocIOBufs Provide Buffer Descriptors
2082228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectIn the present encoder API, the input and output buffers are described with \ref AACENC_BufDesc "buffer descriptors". This mechanism allows a flexible handling
2092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectof input and output buffers without impact to the actual encoding call. Optional buffers are necessary e.g. for ancillary data, meta data input or additional output
2102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectbuffers describing superframing data in DAB+ or DRM+.\n
2112228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAt least one input buffer for audio input data and one output buffer for bitstream data must be allocated. The input buffer size can be a user defined multiple
2122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectof the number of input channels. PCM input data will be copied from the user defined PCM buffer to an internal input buffer and so input data can be less than one AAC audio frame.
2132228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe output buffer size should be 6144 bits per channel excluding the LFE channel.
2142228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectIf the output data does not fit into the provided buffer, an AACENC_ERROR will be returned by aacEncEncode().
2152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\dontinclude main.cpp
2162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline inputBuffer
2172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\until outputBuffer
2182228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAll input and output buffer must be clustered in input and output buffer arrays.
2192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline inBuffer
2202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\until outBufferElSize
2212228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAllocate buffer descriptors
2222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline AACENC_BufDesc
2232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline AACENC_BufDesc
2242228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectInitialize input buffer descriptor
2252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline inBufDesc
2262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\until bufElSizes
2272228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectInitialize output buffer descriptor
2282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline outBufDesc
2292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\until bufElSizes
2302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\subsection argLists Provide Input/Output Argument Lists
2322228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe input and output arguments of an aacEncEncode() call are described in argument structures.
2332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\dontinclude main.cpp
2342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline AACENC_InArgs
2352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline AACENC_OutArgs
2362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section feedInBuf Feed Input Buffer
2382228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe input buffer should be handled as a modulo buffer. New audio data in the form of pulse-code-
2392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectmodulated samples (PCM) must be read from external and be fed to the input buffer depending on its
2402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectfill level. The required sample bitrate (represented by the data type INT_PCM which is 16, 24 or 32
2412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectbits wide) is fixed and depends on library configuration (usually 16 bit).
2422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\dontinclude main.cpp
2442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline WAV_InputRead
2452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\until ;
2462228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAfter the encoder's internal buffer is fed with incoming audio samples, and aacEncEncode()
2472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectprocessed the new input data, update/move remaining samples in input buffer, simulating a modulo buffer:
2482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline outargs.numInSamples>0
2492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\until }
2502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section writeOutData Output Bitstream Data
2522228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectIf any AAC bitstream data is available, write it to output file or device. This can be done once the
2532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectfollowing condition is true:
2542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\dontinclude main.cpp
2552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skip Valid bitstream available
2562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline outargs
2572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline outBytes>0
2592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2602228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectIf you use file I/O then for example call mpegFileWrite_Write() from the library libMpegFileWrite
2612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\dontinclude main.cpp
2632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skipline mpegFileWrite_Write
2642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section cfgMetaData Meta Data Configuration
2662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2672228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectIf the present library is configured with Metadata support, it is possible to insert meta data side info into the generated
2682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectaudio bitstream while encoding.
2692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2702228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectTo work with meta data the encoder instance has to be \ref encOpen "allocated" with meta data support. The meta data mode must be be configured with
2712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthe ::AACENC_METADATA_MODE parameter and aacEncoder_SetParam() function.
2722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\code aacEncoder_SetParam(hAacEncoder, AACENC_METADATA_MODE, 0-2); \endcode
2732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2742228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThis configuration indicates how to embed meta data into bitstrem. Either no insertion, MPEG or ETSI style.
2752228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe meta data itself must be specified within the meta data setup structure AACENC_MetaData.
2762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2772228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectChanging one of the AACENC_MetaData setup parameters can be achieved from outside the library within ::IN_METADATA_SETUP input
2782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectbuffer. There is no need to supply meta data setup structure every frame. If there is no new meta setup data available, the
2792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectencoder uses the previous setup or the default configuration in initial state.
2802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2812228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectIn general the audio compressor and limiter within the encoder library can be configured with the ::AACENC_METADATA_DRC_PROFILE parameter
2822228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAACENC_MetaData::drc_profile and and AACENC_MetaData::comp_profile.
2832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\n
2842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section encReconf Encoder Reconfiguration
2862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
2872228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe encoder library allows reconfiguration of the encoder instance with new settings
2882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectcontinuously between encoding frames. Each parameter to be changed must be set with
2892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecta single aacEncoder_SetParam() call. The internal status of each parameter can be
2902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectretrieved with an aacEncoder_GetParam() call.\n
2912228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThere is no stand-alone reconfiguration function available. When parameters were
2922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectmodified from outside the library, an internal control mechanism triggers the necessary
2932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectreconfiguration process which will be applied at the beginning of the following
2942228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectaacEncEncode() call. This state can be observed from external via the AACENC_INIT_STATUS
2952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectand aacEncoder_GetParam() function. The reconfiguration process can also be applied
2962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectimmediately when all parameters of an aacEncEncode() call are NULL with a valid encoder
2972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecthandle.\n\n
2982228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe internal reconfiguration process can be controlled from extern with the following access.
2992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\code aacEncoder_SetParam(hAacEncoder, AACENC_CONTROL_STATE, AACENC_CTRLFLAGS); \endcode
3002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section encParams Encoder Parametrization
3032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3042228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAll parameteres listed in ::AACENC_PARAM can be modified within an encoder instance.
3052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\subsection encMandatory Mandatory Encoder Parameters
3072228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe following parameters must be specified when the encoder instance is initialized.
3082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\code
3092228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectaacEncoder_SetParam(hAacEncoder, AACENC_AOT, value);
3102228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectaacEncoder_SetParam(hAacEncoder, AACENC_BITRATE, value);
3112228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectaacEncoder_SetParam(hAacEncoder, AACENC_SAMPLERATE, value);
3122228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectaacEncoder_SetParam(hAacEncoder, AACENC_CHANNELMODE, value);
3132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\endcode
3142228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectBeyond that is an internal auto mode which preinitizializes the ::AACENC_BITRATE parameter
3152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectif the parameter was not set from extern. The bitrate depends on the number of effective
3162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectchannels and sampling rate and is determined as follows.
3172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\code
3182228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC-LC (AOT_AAC_LC): 1.5 bits per sample
3193aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviHE-AAC (AOT_SBR): 0.625 bits per sample (dualrate sbr)
3203aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviHE-AAC (AOT_SBR): 1.125 bits per sample (downsampled sbr)
3212228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectHE-AAC v2 (AOT_PS): 0.5 bits per sample
3222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\endcode
3232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\subsection channelMode Channel Mode Configuration
3252228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe input audio data is described with the ::AACENC_CHANNELMODE parameter in the
3262228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectaacEncoder_SetParam() call. It is not possible to use the encoder instance with a 'number of
3272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectinput channels' argument. Instead, the channelMode must be set as follows.
3282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\code aacEncoder_SetParam(hAacEncoder, AACENC_CHANNELMODE, value); \endcode
3292228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe parameter is specified in ::CHANNEL_MODE and can be mapped from the number of input channels
3302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectin the following way.
3312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\dontinclude main.cpp
3322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\skip CHANNEL_MODE chMode = MODE_INVALID;
3332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\until return
3342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\subsection encQual Audio Quality Considerations
3362228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe default encoder configuration is suggested to be used. Encoder tools such as TNS and PNS
3372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectare activated by default and are internally controlled (see \ref BEHAVIOUR_TOOLS).
3382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3392228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThere is an additional quality parameter called ::AACENC_AFTERBURNER. In the default
3402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectconfiguration this quality switch is deactivated because it would cause a workload
3412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectincrease which might be significant. If workload is not an issue in the application
3422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwe recommended to activate this feature.
3432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\code aacEncoder_SetParam(hAacEncoder, AACENC_AFTERBURNER, 1); \endcode
3442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3459f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi\subsection encELD ELD Auto Configuration Mode
3469f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel TriviFor ELD configuration a so called auto configurator is available which configures SBR and the SBR ratio by itself.
3479f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel TriviThe configurator is used when the encoder parameter ::AACENC_SBR_MODE and ::AACENC_SBR_RATIO are not set explicitely.
3489f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi
3499f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel TriviBased on sampling rate and chosen bitrate per channel a reasonable SBR configuration will be used.
3509f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi\verbatim
3519f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi------------------------------------------------------------
3529f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi  Sampling Rate  | Channel Bitrate |  SBR |       SBR Ratio
3539f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi-----------------+-----------------+------+-----------------
3549f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi ]min, 16] kHz   |     min - 27999 |   on | downsampled SBR
3559f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi                 |   28000 -   max |  off |             ---
3569f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi-----------------+-----------------+------+-----------------
3579f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi ]16 - 24] kHz   |     min - 39999 |   on | downsampled SBR
3589f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi                 |   40000 -   max |  off |             ---
3599f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi-----------------+-----------------+------+-----------------
3609f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi ]24 - 32] kHz   |     min - 27999 |   on |    dualrate SBR
3619f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi                 |   28000 - 55999 |   on | downsampled SBR
3629f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi                 |   56000 -   max |  off |             ---
3639f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi-----------------+-----------------+------+-----------------
3649f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi ]32 - 44.1] kHz |     min - 63999 |   on |    dualrate SBR
3659f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi                 |   64000 -   max |  off |             ---
3669f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi-----------------+-----------------+------+-----------------
3679f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi ]44.1 - 48] kHz |     min - 63999 |   on |    dualrate SBR
3689f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi                 |   64000 - max   |  off |             ---
3699f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi------------------------------------------------------------
3709f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi\endverbatim
3719f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi
3722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section audiochCfg Audio Channel Configuration
3742228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe MPEG standard refers often to the so-called Channel Configuration. This Channel Configuration is used for a fixed Channel
3752228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectMapping. The configurations 1-7 are predefined in MPEG standard and used for implicit signalling within the encoded bitstream.
3762228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFor user defined Configurations the Channel Configuration is set to 0 and the Channel Mapping must be explecitly described with an appropriate
3772228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectProgram Config Element. The present Encoder implementation does not allow the user to configure this Channel Configuration from
3782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectextern. The Encoder implementation supports fixed Channel Modes which are mapped to Channel Configuration as follow.
3792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\verbatim
380fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel Trivi-------------------------------------------------------------------------------
381fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel Trivi ChannelMode           | ChCfg  | front_El      | side_El  | back_El  | lfe_El
382fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel Trivi-----------------------+--------+---------------+----------+----------+--------
383fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_1                 |      1 | SCE           |          |          |
384fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_2                 |      2 | CPE           |          |          |
385fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_1_2               |      3 | SCE, CPE      |          |          |
386fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_1_2_1             |      4 | SCE, CPE      |          | SCE      |
387fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_1_2_2             |      5 | SCE, CPE      |          | CPE      |
388fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_1_2_2_1           |      6 | SCE, CPE      |          | CPE      | LFE
389fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_1_2_2_2_1         |      7 | SCE, CPE, CPE |          | CPE      | LFE
390fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel Trivi-----------------------+--------+---------------+----------+----------+--------
391fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_7_1_REAR_SURROUND |      0 | SCE, CPE      |          | CPE, CPE | LFE
392fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_7_1_FRONT_CENTER  |      0 | SCE, CPE, CPE |          | CPE      | LFE
393fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel Trivi-------------------------------------------------------------------------------
3942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project - SCE: Single Channel Element.
3952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project - CPE: Channel Pair.
3962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project - SCE: Low Frequency Element.
3972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\endverbatim
3982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
3992228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectMoreover, the Table describes all fixed Channel Elements for each Channel Mode which are assigned to a speaker arrangement. The
4002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectarrangement includes front, side, back and lfe Audio Channel Elements.\n
4012228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThis mapping of Audio Channel Elements is defined in MPEG standard for Channel Config 1-7. The Channel assignment for MODE_1_1,
4022228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectMODE_2_2 and MODE_2_1 is used from the ARIB standard. All other configurations are defined as suggested in MPEG.\n
4032228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectIn case of Channel Config 0 or writing matrix mixdown coefficients, the encoder enables the writing of Program Config Element
4042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectitself as described in \ref encPCE. The configuration used in Program Config Element refers to the denoted Table.\n
4052228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectBeside the Channel Element assignment the Channel Modes are resposible for audio input data channel mapping. The Channel Mapping
4062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectof the audio data depends on the selected ::AACENC_CHANNELORDER which can be MPEG or WAV like order.\n
4072228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFollowing Table describes the complete channel mapping for both Channel Order configurations.
4082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\verbatim
409fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel Trivi---------------------------------------------------------------------------------------
410fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviChannelMode            |  MPEG-Channelorder            |  WAV-Channelorder
411fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel Trivi-----------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
412fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_1                 | 0 |   |   |   |   |   |   |   | 0 |   |   |   |   |   |   |
413fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_2                 | 0 | 1 |   |   |   |   |   |   | 0 | 1 |   |   |   |   |   |
414fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_1_2               | 0 | 1 | 2 |   |   |   |   |   | 2 | 0 | 1 |   |   |   |   |
415fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_1_2_1             | 0 | 1 | 2 | 3 |   |   |   |   | 2 | 0 | 1 | 3 |   |   |   |
416fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_1_2_2             | 0 | 1 | 2 | 3 | 4 |   |   |   | 2 | 0 | 1 | 3 | 4 |   |   |
417fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_1_2_2_1           | 0 | 1 | 2 | 3 | 4 | 5 |   |   | 2 | 0 | 1 | 4 | 5 | 3 |   |
418fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_1_2_2_2_1         | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 6 | 7 | 0 | 1 | 4 | 5 | 3
419fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel Trivi-----------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
420fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_7_1_REAR_SURROUND | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 0 | 1 | 6 | 7 | 4 | 5 | 3
421fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel TriviMODE_7_1_FRONT_CENTER  | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 6 | 7 | 0 | 1 | 4 | 5 | 3
422fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel Trivi---------------------------------------------------------------------------------------
4232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\endverbatim
4242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4252228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe denoted mapping is important for correct audio channel assignment when using MPEG or WAV ordering. The incoming audio
4262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectchannels are distributed MPEG like starting at the front channels and ending at the back channels. The distribution is used as
4272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectdescribed in Table concering Channel Config and fix channel elements. Please see the following example for clarification.
4282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\verbatim
4302228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectExample: MODE_1_2_2_1 - WAV-Channelorder 5.1
4312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project------------------------------------------
4322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project Input Channel      | Coder Channel
4332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project--------------------+---------------------
4342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 2 (front center)   | 0 (SCE channel)
4352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 0 (left center)    | 1 (1st of 1st CPE)
4362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 1 (right center)   | 2 (2nd of 1st CPE)
4372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 4 (left surround)  | 3 (1st of 2nd CPE)
4382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 5 (right surround) | 4 (2nd of 2nd CPE)
4392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 3 (LFE)            | 5 (LFE)
4402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project------------------------------------------
4412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\endverbatim
4422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section suppBitrates Supported Bitrates
4452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4462228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe FDK AAC Encoder provides a wide range of supported bitrates.
4472228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe minimum and maximum allowed bitrate depends on the Audio Object Type. For AAC-LC the minimum
4482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectbitrate is the bitrate that is required to write the most basic and minimal valid bitstream.
4492228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectIt consists of the bitstream format header information and other static/mandatory information
4502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwithin the AAC payload. The maximum AAC framesize allowed by the MPEG-4 standard
4512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectdetermines the maximum allowed bitrate for AAC-LC. For HE-AAC and HE-AAC v2 a library internal
4522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectlook-up table is used.
4532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4542228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectA good working point in terms of audio quality, sampling rate and bitrate, is at 1 to 1.5
4553aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivibits/audio sample for AAC-LC, 0.625 bits/audio sample for dualrate HE-AAC, 1.125 bits/audio sample
4563aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivifor downsampled HE-AAC and 0.5 bits/audio sample for HE-AAC v2.
4573aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviFor example for one channel with a sampling frequency of 48 kHz, the range from
4582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project48 kbit/s to 72 kbit/s achieves reasonable audio quality for AAC-LC.
4592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4602228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFor HE-AAC and HE-AAC v2 the lowest possible audio input sampling frequency is 16 kHz because then the
4612228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC-LC core encoder operates in dual rate mode at its lowest possible sampling frequency, which is 8 kHz.
4622228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectHE-AAC v2 requires stereo input audio data.
4632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4642228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectPlease note that in HE-AAC or HE-AAC v2 mode the encoder supports much higher bitrates than are
4652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectappropriate for HE-AAC or HE-AAC v2. For example, at a bitrate of more than 64 kbit/s for a stereo
4662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectaudio signal at 44.1 kHz it usually makes sense to use AAC-LC, which will produce better audio
4672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectquality at that bitrate than HE-AAC or HE-AAC v2.
4682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section reommendedConfig Recommended Sampling Rate and Bitrate Combinations
4702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4712228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe following table provides an overview of recommended encoder configuration parameters
4722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwhich we determined by virtue of numerous listening tests.
4732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
4743aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi\subsection reommendedConfigLC AAC-LC, HE-AAC, HE-AACv2 in Dualrate SBR mode.
4752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\verbatim
4762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-----------------------------------------------------------------------------------
4772228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAudio Object Type  |  Bit Rate Range  |            Supported  | Preferred  | No. of
4782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   |         [bit/s]  |       Sampling Rates  |    Sampl.  |  Chan.
4792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   |                  |                [kHz]  |      Rate  |
4802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   |                  |                       |     [kHz]  |
4812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
4822228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR + PS  |   8000 -  11999  |         22.05, 24.00  |     24.00  |      2
4832228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR + PS  |  12000 -  17999  |                32.00  |     32.00  |      2
4842228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR + PS  |  18000 -  39999  |  32.00, 44.10, 48.00  |     44.10  |      2
4852228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR + PS  |  40000 -  56000  |  32.00, 44.10, 48.00  |     48.00  |      2
4862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
4872228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR       |   8000 -  11999  |         22.05, 24.00  |     24.00  |      1
4882228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR       |  12000 -  17999  |                32.00  |     32.00  |      1
4892228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR       |  18000 -  39999  |  32.00, 44.10, 48.00  |     44.10  |      1
4902228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR       |  40000 -  56000  |  32.00, 44.10, 48.00  |     48.00  |      1
4912228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR       |  16000 -  27999  |  32.00, 44.10, 48.00  |     32.00  |      2
4922228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR       |  28000 -  63999  |  32.00, 44.10, 48.00  |     44.10  |      2
4932228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR       |  64000 - 128000  |  32.00, 44.10, 48.00  |     48.00  |      2
4942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
4952228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR       |  64000 -  69999  |  32.00, 44.10, 48.00  |     32.00  | 5, 5.1
4962228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC + SBR       |  70000 - 159999  |  32.00, 44.10, 48.00  |     44.10  | 5, 5.1
4973aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviAAC LC + SBR       | 160000 - 245999  |  32.00, 44.10, 48.00  |     48.00  |      5
4983aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviAAC LC + SBR       | 160000 - 265999  |  32.00, 44.10, 48.00  |     48.00  |    5.1
4992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5002228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             |   8000 -  15999  | 11.025, 12.00, 16.00  |     12.00  |      1
5012228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             |  16000 -  23999  |                16.00  |     16.00  |      1
5022228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             |  24000 -  31999  |  16.00, 22.05, 24.00  |     24.00  |      1
5032228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             |  32000 -  55999  |                32.00  |     32.00  |      1
5042228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             |  56000 - 160000  |  32.00, 44.10, 48.00  |     44.10  |      1
5052228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             | 160001 - 288000  |                48.00  |     48.00  |      1
5062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5072228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             |  16000 -  23999  | 11.025, 12.00, 16.00  |     12.00  |      2
5082228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             |  24000 -  31999  |                16.00  |     16.00  |      2
5092228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             |  32000 -  39999  |  16.00, 22.05, 24.00  |     22.05  |      2
5102228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             |  40000 -  95999  |                32.00  |     32.00  |      2
5112228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             |  96000 - 111999  |  32.00, 44.10, 48.00  |     32.00  |      2
5122228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             | 112000 - 320001  |  32.00, 44.10, 48.00  |     44.10  |      2
5132228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             | 320002 - 576000  |                48.00  |     48.00  |      2
5142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5152228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             | 160000 - 239999  |                32.00  |     32.00  | 5, 5.1
5162228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             | 240000 - 279999  |  32.00, 44.10, 48.00  |     32.00  | 5, 5.1
5172228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC LC             | 280000 - 800000  |  32.00, 44.10, 48.00  |     44.10  | 5, 5.1
5182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-----------------------------------------------------------------------------------
5192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\endverbatim \n
5202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5213aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi\subsection reommendedConfigLD AAC-LD, AAC-ELD, AAC-ELD with SBR in Dualrate SBR mode.
5222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\verbatim
5232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-----------------------------------------------------------------------------------
5242228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAudio Object Type  |  Bit Rate Range  |            Supported  | Preferred  | No. of
5252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   |         [bit/s]  |       Sampling Rates  |    Sampl.  |  Chan.
5262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   |                  |                [kHz]  |      Rate  |
5272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                   |                  |                       |     [kHz]  |
5282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5293aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviELD + SBR          |  18000 -  24999  |        32.00 - 44.10  |     32.00  |      1
5302228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectELD + SBR          |  25000 -  31999  |        32.00 - 48.00  |     32.00  |      1
5312228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectELD + SBR          |  32000 -  64000  |        32.00 - 48.00  |     48.00  |      1
5322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5332228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectELD + SBR          |  32000 -  51999  |        32.00 - 48.00  |     44.10  |      2
5342228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectELD + SBR          |  52000 - 128000  |        32.00 - 48.00  |     48.00  |      2
5352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5363aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviELD + SBR          |  72000 - 160000  |        44.10 - 48.00  |     48.00  |      3
5372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5383aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviELD + SBR          |  96000 - 212000  |        44.10 - 48.00  |     48.00  |      4
5392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5403aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviELD + SBR          | 120000 - 246000  |        44.10 - 48.00  |     48.00  |      5
5413aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi-------------------+------------------+-----------------------+------------+-------
5423aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviELD + SBR          | 120000 - 266000  |        44.10 - 48.00  |     48.00  |    5.1
5432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5442228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            |  16000 -  19999  |        16.00 - 24.00  |     16.00  |      1
5452228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            |  20000 -  39999  |        16.00 - 32.00  |     24.00  |      1
5462228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            |  40000 -  49999  |        22.05 - 32.00  |     32.00  |      1
5472228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            |  50000 -  61999  |        24.00 - 44.10  |     32.00  |      1
5482228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            |  62000 -  84999  |        32.00 - 48.00  |     44.10  |      1
5492228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            |  85000 - 192000  |        44.10 - 48.00  |     48.00  |      1
5502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5512228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            |  64000 -  75999  |        24.00 - 32.00  |     32.00  |      2
5522228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            |  76000 -  97999  |        24.00 - 44.10  |     32.00  |      2
5532228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            |  98000 - 135999  |        32.00 - 48.00  |     44.10  |      2
5542228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            | 136000 - 384000  |        44.10 - 48.00  |     48.00  |      2
5552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5562228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            |  96000 - 113999  |        24.00 - 32.00  |     32.00  |      3
5572228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            | 114000 - 146999  |        24.00 - 44.10  |     32.00  |      3
5582228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            | 147000 - 203999  |        32.00 - 48.00  |     44.10  |      3
5592228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            | 204000 - 576000  |        44.10 - 48.00  |     48.00  |      3
5602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5612228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            | 128000 - 151999  |        24.00 - 32.00  |     32.00  |      4
5622228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            | 152000 - 195999  |        24.00 - 44.10  |     32.00  |      4
5632228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            | 196000 - 271999  |        32.00 - 48.00  |     44.10  |      4
5642228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            | 272000 - 768000  |        44.10 - 48.00  |     48.00  |      4
5652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-------------------+------------------+-----------------------+------------+-------
5662228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            | 160000 - 189999  |        24.00 - 32.00  |     32.00  |      5
5672228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            | 190000 - 244999  |        24.00 - 44.10  |     32.00  |      5
5682228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            | 245000 - 339999  |        32.00 - 48.00  |     44.10  |      5
5692228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectLD, ELD            | 340000 - 960000  |        44.10 - 48.00  |     48.00  |      5
5702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project-----------------------------------------------------------------------------------
5712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\endverbatim \n
5722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5733aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi\subsection reommendedConfigELD AAC-ELD with SBR in Downsampled SBR mode.
5743aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi\verbatim
5753aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi-----------------------------------------------------------------------------------
5763aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviAudio Object Type  |  Bit Rate Range  |            Supported  | Preferred  | No. of
5773aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi                   |         [bit/s]  |       Sampling Rates  |    Sampl.  |  Chan.
5783aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi                   |                  |                [kHz]  |      Rate  |
5793aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi                   |                  |                       |     [kHz]  |
5803aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi-------------------+------------------+-----------------------+------------+-------
5813aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviELD + SBR          |  18000 -  24999  |        16.00 - 22.05  |     22.05  |      1
5823aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi(downsampled SBR)  |  25000 -  35999  |        22.05 - 32.00  |     24.00  |      1
5833aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi                   |  36000 -  64000  |        32.00 - 48.00  |     32.00  |      1
5843aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi-----------------------------------------------------------------------------------
5853aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi\endverbatim \n
5863aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi
5873aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi
5882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\page ENCODERBEHAVIOUR Encoder Behaviour
5892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section BEHAVIOUR_BANDWIDTH Bandwidth
5912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
5922228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe FDK AAC encoder usually does not use the full frequency range of the input signal, but restricts the bandwidth
5932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectaccording to certain library-internal settings. They can be changed in the table "bandWidthTable" in the
5943aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivifile bandwidth.cpp (if available).
5953aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi
5963aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviThe encoder API provides the ::AACENC_BANDWIDTH parameter to adjust the bandwidth explicitly.
5973aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi\code
5983aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel TriviaacEncoder_SetParam(hAacEncoder, AACENC_BANDWIDTH, value);
5993aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi\endcode
6002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6012228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectHowever it is not recommended to change these settings, because they are based on numerious listening
6022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttests and careful tweaks to ensure the best overall encoding quality.
6032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6042228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectTheoretically a signal of for example 48 kHz can contain frequencies up to 24 kHz, but to use this full range
6052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectin an audio encoder usually does not make sense. Usually the encoder has a very limited amount of
6062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectbits to spend (typically 128 kbit/s for stereo 48 kHz content) and to allow full range bandwidth would
6072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwaste a lot of these bits for frequencies the human ear is hardly able to perceive anyway, if at all. Hence it
6082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectis wise to use the available bits for the really important frequency range and just skip the rest.
6092228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAt lower bitrates (e. g. <= 80 kbit/s for stereo 48 kHz content) the encoder will choose an even smaller
6102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectbandwidth, because an encoded signal with smaller bandwidth and hence less artifacts sounds better than a signal
6112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwith higher bandwidth but then more coding artefacts across all frequencies. These artefacts would occur if
6122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectsmall bitrates and high bandwidths are chosen because the available bits are just not enough to encode all
6132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectfrequencies well.
6142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6152228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectUnfortunately some people evaluate encoding quality based on possible bandwidth as well, but it is a two-sided
6162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectsword considering the trade-off described above.
6172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6182228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAnother aspect is workload consumption. The higher the allowed bandwidth, the more frequency lines have to be
6192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectprocessed, which in turn increases the workload.
6202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section FRAMESIZES_AND_BIT_RESERVOIR Frame Sizes & Bit Reservoir
6222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6232228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFor AAC there is a difference between constant bit rate and constant frame
6242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectlength due to the so-called bit reservoir technique, which allows the encoder to use less
6252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectbits in an AAC frame for those audio signal sections which are easy to encode,
6262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectand then spend them at a later point in
6272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttime for more complex audio sections. The extent to which this "bit exchange"
6282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectis done is limited to allow for reliable and relatively low delay real time
6292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstreaming.
6302228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectOver a longer period in time the bitrate will be constant in the AAC constant
6312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectbitrate mode, e.g. for ISDN transmission. This means that in AAC each bitstream
6322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectframe will in general have a different length in bytes but over time it
6332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwill reach the target bitrate. One could also make an MPEG compliant
6342228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAAC encoder which always produces constant length packages for each AAC frame,
6352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectbut the audio quality would be considerably worse since the bit reservoir
6362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttechnique would have to be switched off completely. A higher bit rate would have
6372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectto be used to get the same audio quality as with an enabled bit reservoir.
6382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6392228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe maximum AAC frame length, regardless of the available bit reservoir, is defined
6402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectas 6144 bits per channel.
6412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6422228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFor mp3 by the way, the same bit reservoir technique exists, but there each bit
6432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectstream frame has a constant length for a given bit rate (ignoring the
6442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectpadding byte). In mp3 there is a so-called "back pointer" which tells
6452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthe decoder which bits belong to the current mp3 frame - and in general some or
6462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectmany bits have been transmitted in an earlier mp3 frame. Basically this leads to
6472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthe same "bit exchange between mp3 frames" as in AAC but with virtually constant
6482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectlength frames.
6492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6502228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThis variable frame length at "constant bit rate" is not something special
6512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectin this Fraunhofer IIS AAC encoder. AAC has been designed in that way.
6522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\subsection BEHAVIOUR_ESTIM_AVG_FRAMESIZES Estimating Average Frame Sizes
6542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6552228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectA HE-AAC v1 or v2 audio frame contains 2048 PCM samples per channel (there is
6562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectalso one mode with 1920 samples per channel but this is only for special purposes
6572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectsuch as DAB+ digital radio).
6582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6592228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe number of HE-AAC frames \f$N\_FRAMES\f$ per second at 44.1 kHz is:
6602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\f[
6622228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectN\_FRAMES = 44100 / 2048 = 21.5332
6632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\f]
6642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6652228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAt a bit rate of 8 kbps the average number of bits per frame \f$N\_BITS\_PER\_FRAME\f$ is:
6662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\f[
6682228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectN\_BITS\_PER\_FRAME = 8000 / 21.5332 = 371.52
6692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\f]
6702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwhich is about 46.44 bytes per encoded frame.
6722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6732228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAt a bit rate of 32 kbps, which is quite high for single channel HE-AAC v1, it is:
6742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\f[
6762228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectN\_BITS\_PER\_FRAME = 32000 / 21.5332 = 1486
6772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\f]
6782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectwhich is about 185.76 bytes per encoded frame.
6802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6812228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThese bits/frame figures are average figures where each AAC frame generally has a different
6822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectsize in bytes. To calculate the same for AAC-LC just use 1024 instead of 2048 PCM samples per
6832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectframe and channel.
6842228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectFor AAC-LD/ELD it is either 480 or 512 PCM samples per frame and channel.
6852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project\section BEHAVIOUR_TOOLS Encoder Tools
6882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6892228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectThe AAC encoder supports TNS, PNS, MS, Intensity and activates these tools depending on the audio signal and
6902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthe encoder configuration (i.e. bitrate or AOT). It is not required to configure these tools manually.
6912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6922228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectPNS improves encoding quality only for certain bitrates. Therefore it makes sense to activate PNS only for
6932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthese bitrates and save the processing power required for PNS (about 10 % of the encoder) when using other
6942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectbitrates. This is done automatically inside the encoder library. PNS is disabled inside the encoder library if
6952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectan MPEG-2 AOT is choosen since PNS is an MPEG-4 AAC feature.
6962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
6972228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectIf SBR is activated, the encoder automatically deactivates PNS internally. If TNS is disabled but PNS is allowed,
6982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectthe encoder deactivates PNS calculation internally.
6992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project*/
7012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#ifndef _AAC_ENC_LIB_H_
7032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#define _AAC_ENC_LIB_H_
7042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "machine_type.h"
7062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#include "FDK_audio.h"
7072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
7102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *  AAC encoder error codes.
7112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
7122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef enum {
7132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_OK                     = 0x0000,  /*!< No error happened. All fine. */
7142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_INVALID_HANDLE         = 0x0020,  /*!< Handle passed to function call was invalid. */
7162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_MEMORY_ERROR           = 0x0021,  /*!< Memory allocation failed. */
7172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_UNSUPPORTED_PARAMETER  = 0x0022,  /*!< Parameter not available. */
7182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_INVALID_CONFIG         = 0x0023,  /*!< Configuration not provided. */
7192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_INIT_ERROR             = 0x0040,  /*!< General initialization error. */
7212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_INIT_AAC_ERROR         = 0x0041,  /*!< AAC library initialization error. */
7222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_INIT_SBR_ERROR         = 0x0042,  /*!< SBR library initialization error. */
7232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_INIT_TP_ERROR          = 0x0043,  /*!< Transport library initialization error. */
7242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_INIT_META_ERROR        = 0x0044,  /*!< Meta data library initialization error. */
7252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_ENCODE_ERROR           = 0x0060,  /*!< The encoding process was interrupted by an unexpected error. */
7272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_ENCODE_EOF             = 0x0080   /*!< End of file reached. */
7292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} AACENC_ERROR;
7312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
7342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *  AAC encoder buffer descriptors identifier.
7352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *  This identifier are used within buffer descriptors AACENC_BufDesc::bufferIdentifiers.
7362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
7372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef enum {
7382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* Input buffer identifier. */
7392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    IN_AUDIO_DATA      = 0,                  /*!< Audio input buffer, interleaved INT_PCM samples. */
7402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    IN_ANCILLRY_DATA   = 1,                  /*!< Ancillary data to be embedded into bitstream. */
7412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    IN_METADATA_SETUP  = 2,                  /*!< Setup structure for embedding meta data. */
7422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    /* Output buffer identifier. */
7442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    OUT_BITSTREAM_DATA = 3,                  /*!< Buffer holds bitstream output data. */
7452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    OUT_AU_SIZES       = 4                   /*!< Buffer contains sizes of each access unit. This information
7462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  is necessary for superframing. */
7472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} AACENC_BufferIdentifier;
7492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
7522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *  AAC encoder handle.
7532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
7542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef struct AACENCODER *HANDLE_AACENCODER;
7552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
7582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *  Provides some info about the encoder configuration.
7592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
7602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef struct {
7612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    UINT                maxOutBufBytes;      /*!< Maximum number of encoder bitstream bytes within one frame.
7632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  Size depends on maximum number of supported channels in encoder instance.
7642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  For superframing (as used for example in DAB+), size has to be a multiple accordingly. */
7652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    UINT                maxAncBytes;         /*!< Maximum number of ancillary data bytes which can be inserted into
7672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  bitstream within one frame. */
7682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    UINT                inBufFillLevel;      /*!< Internal input buffer fill level in samples per channel. This parameter
7702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  will automatically be cleared if samplingrate or channel(Mode/Order) changes. */
7712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    UINT                inputChannels;       /*!< Number of input channels expected in encoding process. */
7732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    UINT                frameLength;         /*!< Amount of input audio samples consumed each frame per channel, depending
7752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  on audio object type configuration. */
7762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    UINT                encoderDelay;        /*!< Codec delay in PCM samples/channel. Depends on framelength and AOT. Does not
7782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  include framing delay for filling up encoder PCM input buffer. */
7792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    UCHAR               confBuf[64];         /*!< Configuration buffer in binary format as an AudioSpecificConfig
7812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  or StreamMuxConfig according to the selected transport type. */
7822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    UINT                confSize;            /*!< Number of valid bytes in confBuf. */
7842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} AACENC_InfoStruct;
7862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
7892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *  Describes the input and output buffers for an aacEncEncode() call.
7902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
7912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef struct {
7922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    INT                 numBufs;             /*!< Number of buffers. */
7932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    void              **bufs;                /*!< Pointer to vector containing buffer addresses. */
7942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    INT                *bufferIdentifiers;   /*!< Identifier of each buffer element. See ::AACENC_BufferIdentifier. */
7952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    INT                *bufSizes;            /*!< Size of each buffer in 8-bit bytes. */
7962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    INT                *bufElSizes;          /*!< Size of each buffer element in bytes. */
7972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
7982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} AACENC_BufDesc;
7992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
8022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *  Defines the input arguments for an aacEncEncode() call.
8032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
8042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef struct {
8052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    INT                 numInSamples;        /*!< Number of valid input audio samples (multiple of input channels). */
8062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    INT                 numAncBytes;         /*!< Number of ancillary data bytes to be encoded. */
8072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} AACENC_InArgs;
8092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
8122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *  Defines the output arguments for an aacEncEncode() call.
8132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
8142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef struct {
8152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    INT                 numOutBytes;         /*!< Number of valid bitstream bytes generated during aacEncEncode(). */
8162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    INT                 numInSamples;        /*!< Number of input audio samples consumed by the encoder. */
8172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    INT                 numAncBytes;         /*!< Number of ancillary data bytes consumed by the encoder. */
8182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} AACENC_OutArgs;
8202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
8232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *  Meta Data Compression Profiles.
8242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
8252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef enum {
8262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_METADATA_DRC_NONE          = 0,   /*!< None. */
8272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_METADATA_DRC_FILMSTANDARD  = 1,   /*!< Film standard. */
8282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_METADATA_DRC_FILMLIGHT     = 2,   /*!< Film light. */
8292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_METADATA_DRC_MUSICSTANDARD = 3,   /*!< Music standard. */
8302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_METADATA_DRC_MUSICLIGHT    = 4,   /*!< Music light. */
8312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_METADATA_DRC_SPEECH        = 5    /*!< Speech. */
8322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} AACENC_METADATA_DRC_PROFILE;
8342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
8372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *  Meta Data setup structure.
8382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
8392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef struct {
8402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_METADATA_DRC_PROFILE drc_profile;             /*!< MPEG DRC compression profile. See ::AACENC_METADATA_DRC_PROFILE. */
8422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_METADATA_DRC_PROFILE comp_profile;            /*!< ETSI heavy compression profile. See ::AACENC_METADATA_DRC_PROFILE. */
8432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT                         drc_TargetRefLevel;      /*!< Used to define expected level to:
8452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                            Scaled with 16 bit. x*2^16. */
8462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT                         comp_TargetRefLevel;     /*!< Adjust limiter to avoid overload.
8472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                            Scaled with 16 bit. x*2^16. */
8482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT                         prog_ref_level_present;  /*!< Flag, if prog_ref_level is present */
8502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  INT                         prog_ref_level;          /*!< Programme Reference Level = Dialogue Level:
8512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                            -31.75dB .. 0 dB ; stepsize: 0.25dB
8522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                            Scaled with 16 bit. x*2^16.*/
8532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  UCHAR                       PCE_mixdown_idx_present; /*!< Flag, if dmx-idx should be written in programme config element */
8552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  UCHAR                       ETSI_DmxLvl_present;     /*!< Flag, if dmx-lvl should be written in ETSI-ancData */
8562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  SCHAR                       centerMixLevel;          /*!< Center downmix level (0...7, according to table) */
8582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  SCHAR                       surroundMixLevel;        /*!< Surround downmix level (0...7, according to table) */
8592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  UCHAR                       dolbySurroundMode;       /*!< Indication for Dolby Surround Encoding Mode.
8612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                            - 0: Dolby Surround mode not indicated
8622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                            - 1: 2-ch audio part is not Dolby surround encoded
8632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                            - 2: 2-ch audio part is Dolby surround encoded */
8642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} AACENC_MetaData;
8652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
8682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * AAC encoder control flags.
8692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
8702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * In interaction with the ::AACENC_CONTROL_STATE parameter it is possible to get information about the internal
8712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * initialization process. It is also possible to overwrite the internal state from extern when necessary.
8722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
8732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef enum
8742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
8752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_INIT_NONE              = 0x0000,  /*!< Do not trigger initialization. */
8762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_INIT_CONFIG            = 0x0001,  /*!< Initialize all encoder modules configuration. */
8772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_INIT_STATES            = 0x0002,  /*!< Reset all encoder modules history buffer. */
8782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_INIT_TRANSPORT         = 0x1000,  /*!< Initialize transport lib with new parameters. */
8792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_RESET_INBUFFER         = 0x2000,  /*!< Reset fill level of internal input buffer. */
8802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project    AACENC_INIT_ALL               = 0xFFFF   /*!< Initialize all. */
8812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
8822228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAACENC_CTRLFLAGS;
8832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
8852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
8862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief  AAC encoder setting parameters.
8872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
8882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * Use aacEncoder_SetParam() function to configure, or use aacEncoder_GetParam() function to read
8892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * the internal status of the following parameters.
8902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
8912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projecttypedef enum
8922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project{
8932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_AOT                      = 0x0100,  /*!< Audio object type. See ::AUDIO_OBJECT_TYPE in FDK_audio.h.
8942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 2: MPEG-4 AAC Low Complexity.
8952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 5: MPEG-4 AAC Low Complexity with Spectral Band Replication (HE-AAC).
8962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 29: MPEG-4 AAC Low Complexity with Spectral Band Replication and Parametric Stereo (HE-AAC v2).
8972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                        This configuration can be used only with stereo input audio data.
8982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 23: MPEG-4 AAC Low-Delay.
8992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 39: MPEG-4 AAC Enhanced Low-Delay. Since there is no ::AUDIO_OBJECT_TYPE for ELD in
900e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi                                                        combination with SBR defined, enable SBR explicitely by ::AACENC_SBR_MODE parameter. */
9012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_BITRATE                  = 0x0101,  /*!< Total encoder bitrate. This parameter is mandatory and interacts with ::AACENC_BITRATEMODE.
9032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - CBR: Bitrate in bits/second.
9042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                    See \ref suppBitrates for details. */
9052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_BITRATEMODE              = 0x0102,  /*!< Bitrate mode. Configuration can be different kind of bitrate configurations:
9072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 0: Constant bitrate, use bitrate according to ::AACENC_BITRATE. (default)
9082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                       Within none LD/ELD ::AUDIO_OBJECT_TYPE, the CBR mode makes use of full allowed bitreservoir.
9092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                       In contrast, at Low-Delay ::AUDIO_OBJECT_TYPE the bitreservoir is kept very small.
9102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 8: LD/ELD full bitreservoir for packet based transmission. */
9112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_SAMPLERATE               = 0x0103,  /*!< Audio input data sampling rate. Encoder supports following sampling rates:
9132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 */
9142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9159f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi  AACENC_SBR_MODE                 = 0x0104,  /*!< Configure SBR independently of the chosen Audio Object Type ::AUDIO_OBJECT_TYPE.
9169f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi                                                  This parameter is for ELD audio object type only.
9179f455bea1c38f7275a65ab79be2d41a34428fb8bJean-Michel Trivi                                                  - -1: Use ELD SBR auto configurator (default).
9182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 0: Disable Spectral Band Replication.
9192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 1: Enable Spectral Band Replication. */
9202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_GRANULE_LENGTH           = 0x0105,  /*!< Core encoder (AAC) audio frame length in samples:
9222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 1024: Default configuration.
923381d69840ad3af2259f0b7ef49236f9ee9c76b76Jean-Michel Trivi                                                  - 512: Default LD/ELD configuration.
924381d69840ad3af2259f0b7ef49236f9ee9c76b76Jean-Michel Trivi                                                  - 480: Optional length in LD/ELD configuration. */
9252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_CHANNELMODE              = 0x0106,  /*!< Set explicit channel mode. Channel mode must match with number of input channels.
927fa3eba16446cc8f2f5e2dfc20d86a49dbd37299eJean-Michel Trivi                                                  - 1-7 and 33,34: MPEG channel modes supported, see ::CHANNEL_MODE in FDK_audio.h. */
9282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_CHANNELORDER             = 0x0107,  /*!< Input audio data channel ordering scheme:
9302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 0: MPEG channel ordering (e. g. 5.1: C, L, R, SL, SR, LFE). (default)
9312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 1: WAVE file format channel ordering (e. g. 5.1: L, R, C, LFE, SL, SR). */
9322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9333aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi  AACENC_SBR_RATIO                = 0x0108,  /*!<  Controls activation of downsampled SBR. With downsampled SBR, the delay will be
9343aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi                                                   shorter. On the other hand, for achieving the same quality level, downsampled SBR
9353aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi                                                   needs more bits than dual-rate SBR.
9363aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi                                                   With downsampled SBR, the AAC encoder will work at the same sampling rate as the
9373aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi                                                   SBR encoder (single rate).
9383aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi                                                   Downsampled SBR is supported for AAC-ELD and HE-AACv1.
9393aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi                                                   - 1: Downsampled SBR (default for ELD).
9403aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi                                                   - 2: Dual-rate SBR   (default for HE-AAC). */
9413aec97e388e29a1d03f0197b27b893bc6aaf8ac3Jean-Michel Trivi
9422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_AFTERBURNER              = 0x0200,  /*!< This parameter controls the use of the afterburner feature.
9432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  The afterburner is a type of analysis by synthesis algorithm which increases the
9442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  audio quality but also the required processing power. It is recommended to always
9452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  activate this if additional memory consumption and processing power consumption
9462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  is not a problem. If increased MHz and memory consumption are an issue then the MHz
9472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  and memory cost of this optional module need to be evaluated against the improvement
9482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  in audio quality on a case by case basis.
9492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 0: Disable afterburner (default).
9502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 1: Enable afterburner. */
9512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_BANDWIDTH                = 0x0203,  /*!< Core encoder audio bandwidth:
9532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 0: Determine bandwidth internally (default, see chapter \ref BEHAVIOUR_BANDWIDTH).
9542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 1 to fs/2: Frequency bandwidth in Hertz. (Experts only, better do not
9552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                               touch this value to avoid degraded audio quality) */
9562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
957e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi  AACENC_PEAK_BITRATE             = 0x0207,  /*!< Peak bitrate configuration parameter to adjust maximum bits per audio frame. Bitrate is in bits/second.
958e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi                                                  The peak bitrate will internally be limited to the chosen bitrate ::AACENC_BITRATE as lower limit
959e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi                                                  and the number_of_effective_channels*6144 bit as upper limit.
960e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi
961e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi                                                  Setting the peak bitrate equal to ::AACENC_BITRATE does not necessarily mean that the audio frames
962e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi                                                  will be of constant size. Since the peak bitate is in bits/second, the frame sizes can vary by
963e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi                                                  one byte in one or the other direction over various frames. However, it is not recommended to reduce
964e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi                                                  the peak pitrate to ::AACENC_BITRATE - it would disable the bitreservoir, which would affect the
965e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi                                                  audio quality by a large amount. */
966e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi
9672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_TRANSMUX                 = 0x0300,  /*!< Transport type to be used. See ::TRANSPORT_TYPE in FDK_audio.h. Following
9682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  types can be configured in encoder library:
9692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 0: raw access units
9702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 1: ADIF bitstream format
9712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 2: ADTS bitstream format
9722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 6: Audio Mux Elements (LATM) with muxConfigPresent = 1
9732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 7: Audio Mux Elements (LATM) with muxConfigPresent = 0, out of band StreamMuxConfig
9742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 10: Audio Sync Stream (LOAS) */
9752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_HEADER_PERIOD            = 0x0301,  /*!< Frame count period for sending in-band configuration buffers within LATM/LOAS
9772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  transport layer. Additionally this parameter configures the PCE repetition period
9782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  in raw_data_block(). See \ref encPCE.
9792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 0xFF: auto-mode default 10 for TT_MP4_ADTS, TT_MP4_LOAS and TT_MP4_LATM_MCP1, otherwise 0.
9802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - n: Frame count period. */
9812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
9822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_SIGNALING_MODE           = 0x0302,  /*!< Signaling mode of the extension AOT:
983dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                  - 0: Implicit backward compatible signaling (default for non-MPEG-4 based
984dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       AOT's and for the transport formats ADIF and ADTS)
985dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - A stream that uses implicit signaling can be decoded by every AAC decoder, even AAC-LC-only decoders
986dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - An AAC-LC-only decoder will only decode the low-frequency part of the stream, resulting in a band-limited output
987dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - This method works with all transport formats
988dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - This method does not work with downsampled SBR
989dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                  - 1: Explicit backward compatible signaling
990dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - A stream that uses explicit backward compatible signaling can be decoded by every AAC decoder, even AAC-LC-only decoders
991dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - An AAC-LC-only decoder will only decode the low-frequency part of the stream, resulting in a band-limited output
992dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - A decoder not capable of decoding PS will only decode the AAC-LC+SBR part.
993dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                         If the stream contained PS, the result will be a a decoded mono downmix
994dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - This method does not work with ADIF or ADTS. For LOAS/LATM, it only works with AudioMuxVersion==1
995dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - This method does work with downsampled SBR
996dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                  - 2: Explicit hierarchical signaling (default for MPEG-4 based AOT's and for all transport formats excluding ADIF and ADTS)
997dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - A stream that uses explicit hierarchical signaling can be decoded only by HE-AAC decoders
998dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - An AAC-LC-only decoder will not decode a stream that uses explicit hierarchical signaling
999dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - A decoder not capable of decoding PS will not decode the stream at all if it contained PS
1000dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - This method does not work with ADIF or ADTS. It works with LOAS/LATM and the MPEG-4 File format
1001dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                       - This method does work with downsampled SBR
1002dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi
1003dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   For making sure that the listener always experiences the best audio quality,
1004dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   explicit hierarchical signaling should be used.
1005dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   This makes sure that only a full HE-AAC-capable decoder will decode those streams.
1006dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   The audio is played at full bandwidth.
1007dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   For best backwards compatibility, it is recommended to encode with implicit SBR signaling.
1008dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   A decoder capable of AAC-LC only will then only decode the AAC part, which means the decoded
1009dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   audio will sound band-limited.
1010dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi
1011dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   For MPEG-2 transport types (ADTS,ADIF), only implicit signaling is possible.
1012dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi
1013dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   For LOAS and LATM, explicit backwards compatible signaling only works together with AudioMuxVersion==1.
1014dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   The reason is that, for explicit backwards compatible signaling, additional information will be appended to the ASC.
1015dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   A decoder that is only capable of decoding AAC-LC will skip this part.
1016dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   Nevertheless, for jumping to the end of the ASC, it needs to know the ASC length.
1017dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   Transmitting the length of the ASC is a feature of AudioMuxVersion==1, it is not possible to transmit the
1018dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   length of the ASC with AudioMuxVersion==0, therefore an AAC-LC-only decoder will not be able to parse a
1019dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   LOAS/LATM stream that was being encoded with AudioMuxVersion==0.
1020dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi
1021dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   For downsampled SBR, explicit signaling is mandatory. The reason for this is that the
1022dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   extension sampling frequency (which is in case of SBR the sampling frequqncy of the SBR part)
1023dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   can only be signaled in explicit mode.
1024dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi
1025dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   For AAC-ELD, the SBR information is transmitted in the ELDSpecific Config, which is part of the
1026dbf96806482b2c48de4ba1da9a03e2bb7516b8c2Jean-Michel Trivi                                                   AudioSpecificConfig. Therefore, the settings here will have no effect on AAC-ELD.*/
10272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_TPSUBFRAMES              = 0x0303,  /*!< Number of sub frames in a transport frame for LOAS/LATM or ADTS (default 1).
10292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - ADTS: Maximum number of sub frames restricted to 4.
10302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - LOAS/LATM: Maximum number of sub frames restricted to 2.*/
10312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
1032e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi  AACENC_AUDIOMUXVER              = 0x0304,  /*!< AudioMuxVersion to be used for LATM. (AudioMuxVersionA, currently not implemented):
1033e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi                                                  - 0: Default, no transmission of tara Buffer fullness, no ASC length and including actual latm Buffer fullnes.
1034e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi                                                  - 1: Transmission of tara Buffer fullness, ASC length and actual latm Buffer fullness.
1035e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi                                                  - 2: Transmission of tara Buffer fullness, ASC length and maximum level of latm Buffer fullness. */
1036e1c78ed73faa51f2c7fcb0c4a17a92be9cc747f5Jean-Michel Trivi
10372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_PROTECTION               = 0x0306,  /*!< Configure protection in tranpsort layer:
10382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 0: No protection. (default)
10392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 1: CRC active for ADTS bitstream format. */
10402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_ANCILLARY_BITRATE        = 0x0500,  /*!< Constant ancillary data bitrate in bits/second.
10422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 0: Either no ancillary data or insert exact number of bytes, denoted via
10432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                       input parameter, numAncBytes in AACENC_InArgs.
10442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - else: Insert ancillary data with specified bitrate. */
10452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10462228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_METADATA_MODE            = 0x0600,  /*!< Configure Meta Data. See ::AACENC_MetaData for further details:
10472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 0: Do not embed any metadata.
10482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 1: Embed MPEG defined metadata only.
10492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  - 2: Embed all metadata. */
10502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_CONTROL_STATE            = 0xFF00,  /*!< There is an automatic process which internally reconfigures the encoder instance
10522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  when a configuration parameter changed or an error occured. This paramerter allows
10532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project                                                  overwriting or getting the control status of this process. See ::AACENC_CTRLFLAGS. */
10542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project  AACENC_NONE                     = 0xFFFF   /*!< ------ */
10562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project} AACENC_PARAM;
10582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#ifdef __cplusplus
10612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Projectextern "C" {
10622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif
10632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
10652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief  Open an instance of the encoder.
10662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
10672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * Allocate memory for an encoder instance with a functional range denoted by the function parameters.
10682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * Preinitialize encoder instance with default configuration.
10692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
10702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param phAacEncoder  A pointer to an encoder handle. Initialized on return.
10712228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param encModules    Specify encoder modules to be supported in this encoder instance:
10722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                      - 0x0: Allocate memory for all available encoder modules.
10732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                      - else: Select memory allocation regarding encoder modules. Following flags are possible and can be combined.
10742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                              - 0x01: AAC module.
10752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                              - 0x02: SBR module.
10762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                              - 0x04: PS module.
10772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                              - 0x10: Metadata module.
10782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                              - example: (0x01|0x02|0x04|0x10) allocates all modules and is equivalent to default configuration denotet by 0x0.
10792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param maxChannels   Number of channels to be allocated. This parameter can be used in different ways:
10802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                      - 0: Allocate maximum number of AAC and SBR channels as supported by the library.
10812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                      - nChannels: Use same maximum number of channels for allocating memory in AAC and SBR module.
10822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                      - nChannels | (nSbrCh<<8): Number of SBR channels can be different to AAC channels to save data memory.
10832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
10842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return
10852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_OK, on succes.
10862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_INVALID_HANDLE, AACENC_MEMORY_ERROR, AACENC_INVALID_CONFIG, on failure.
10872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
10882228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAACENC_ERROR aacEncOpen(
10892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        HANDLE_AACENCODER        *phAacEncoder,
10902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        const UINT                encModules,
10912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        const UINT                maxChannels
10922228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        );
10932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
10952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
10962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief  Close the encoder instance.
10972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
10982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * Deallocate encoder instance and free whole memory.
10992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
11002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param phAacEncoder  Pointer to the encoder handle to be deallocated.
11012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
11022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return
11032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_OK, on success.
11042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_INVALID_HANDLE, on failure.
11052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
11062228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAACENC_ERROR aacEncClose(
11072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        HANDLE_AACENCODER        *phAacEncoder
11082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        );
11092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11102228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
11122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief Encode audio data.
11132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
11142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * This function is mainly for encoding audio data. In addition the function can be used for an encoder (re)configuration
11152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * process.
11162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * - PCM input data will be retrieved from external input buffer until the fill level allows encoding a single frame.
11172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *   This functionality allows an external buffer with reduced size in comparison to the AAC or HE-AAC audio frame length.
11182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * - If the value of the input samples argument is zero, just internal reinitialization will be applied if it is
11192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *   requested.
11202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * - At the end of a file the flushing process can be triggerd via setting the value of the input samples argument to -1.
11212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *   The encoder delay lines are fully flushed when the encoder returns no valid bitstream data AACENC_OutArgs::numOutBytes.
11222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *   Furthermore the end of file is signaled by the return value AACENC_ENCODE_EOF.
11232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * - If an error occured in the previous frame or any of the encoder parameters changed, an internal reinitialization
11242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *   process will be applied before encoding the incoming audio samples.
11252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * - The function can also be used for an independent reconfiguration process without encoding. The first parameter has to be a
11262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *   valid encoder handle and all other parameters can be set to NULL.
11272228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * - If the size of the external bitbuffer in outBufDesc is not sufficient for writing the whole bitstream, an internal
11282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *   error will be the return value and a reconfiguration will be triggered.
11292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
11302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hAacEncoder           A valid AAC encoder handle.
11312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param inBufDesc             Input buffer descriptor, see AACENC_BufDesc:
11322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                              - At least one input buffer with audio data is expected.
11332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                              - Optionally a second input buffer with ancillary data can be fed.
11342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param outBufDesc            Output buffer descriptor, see AACENC_BufDesc:
11352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *                              - Provide one output buffer for the encoded bitstream.
11362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param inargs                Input arguments, see AACENC_InArgs.
11372228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param outargs               Output arguments, AACENC_OutArgs.
11382228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
11392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return
11402228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_OK, on success.
11412228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_INVALID_HANDLE, AACENC_ENCODE_ERROR, on failure in encoding process.
11422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_INVALID_CONFIG, AACENC_INIT_ERROR, AACENC_INIT_AAC_ERROR, AACENC_INIT_SBR_ERROR, AACENC_INIT_TP_ERROR,
11432228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *            AACENC_INIT_META_ERROR, on failure in encoder initialization.
11442228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_ENCODE_EOF, when flushing fully concluded.
11452228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
11462228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAACENC_ERROR aacEncEncode(
11472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        const HANDLE_AACENCODER   hAacEncoder,
11482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        const AACENC_BufDesc     *inBufDesc,
11492228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        const AACENC_BufDesc     *outBufDesc,
11502228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        const AACENC_InArgs      *inargs,
11512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        AACENC_OutArgs           *outargs
11522228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        );
11532228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11552228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
11562228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief  Acquire info about present encoder instance.
11572228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
11582228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * This function retrieves information of the encoder configuration. In addition to informative internal states,
11592228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * a configuration data block of the current encoder settings will be returned. The format is either Audio Specific Config
11602228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * in case of Raw Packets transport format or StreamMuxConfig in case of LOAS/LATM transport format. The configuration
11612228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * data block is binary coded as specified in ISO/IEC 14496-3 (MPEG-4 audio), to be used directly for MPEG-4 File Format
11622228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * or RFC3016 or RFC3640 applications.
11632228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
11642228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hAacEncoder           A valid AAC encoder handle.
11652228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param pInfo                 Pointer to AACENC_InfoStruct. Filled on return.
11662228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
11672228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return
11682228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_OK, on succes.
11692228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_INIT_ERROR, on failure.
11702228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
11712228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAACENC_ERROR aacEncInfo(
11722228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        const HANDLE_AACENCODER   hAacEncoder,
11732228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        AACENC_InfoStruct        *pInfo
11742228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        );
11752228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11762228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11772228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
11782228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief  Set one single AAC encoder parameter.
11792228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
11802228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * This function allows configuration of all encoder parameters specified in ::AACENC_PARAM. Each parameter must be
11812228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * set with a separate function call. An internal validation of the configuration value range will be done and an
11822228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * internal reconfiguration will be signaled. The actual configuration adoption is part of the subsequent aacEncEncode() call.
11832228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
11842228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hAacEncoder           A valid AAC encoder handle.
11852228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param param                 Parameter to be set. See ::AACENC_PARAM.
11862228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param value                 Parameter value. See parameter description in ::AACENC_PARAM.
11872228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
11882228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return
11892228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_OK, on success.
11902228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_INVALID_HANDLE, AACENC_UNSUPPORTED_PARAMETER, AACENC_INVALID_CONFIG, on failure.
11912228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
11922228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAACENC_ERROR aacEncoder_SetParam(
11932228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        const HANDLE_AACENCODER   hAacEncoder,
11942228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        const AACENC_PARAM        param,
11952228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        const UINT                value
11962228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        );
11972228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11982228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
11992228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
12002228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief  Get one single AAC encoder parameter.
12012228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
12022228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * This function is the complement to aacEncoder_SetParam(). After encoder reinitialization with user defined settings,
12032228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * the internal status can be obtained of each parameter, specified with ::AACENC_PARAM.
12042228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
12052228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param hAacEncoder           A valid AAC encoder handle.
12062228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param param                 Parameter to be returned. See ::AACENC_PARAM.
12072228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
12082228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return  Internal configuration value of specifed parameter ::AACENC_PARAM.
12092228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
12102228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectUINT aacEncoder_GetParam(
12112228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        const HANDLE_AACENCODER   hAacEncoder,
12122228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        const AACENC_PARAM        param
12132228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        );
12142228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12152228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12162228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project/**
12172228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \brief  Get information about encoder library build.
12182228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
12192228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * Fill a given LIB_INFO structure with library version information.
12202228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
12212228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \param info  Pointer to an allocated LIB_INFO struct.
12222228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *
12232228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * \return
12242228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_OK, on success.
12252228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project *          - AACENC_INVALID_HANDLE, AACENC_INIT_ERROR, on failure.
12262228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */
12272228e360595641dd906bf1773307f43d304f5b2The Android Open Source ProjectAACENC_ERROR aacEncGetLibInfo(
12282228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        LIB_INFO                 *info
12292228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project        );
12302228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12312228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12322228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#ifdef __cplusplus
12332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}
12342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif
12352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project
12362228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project#endif   /* _AAC_ENC_LIB_H_ */
1237