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