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