1 2 /* ----------------------------------------------------------------------------------------------------------- 3 Software License for The Fraunhofer FDK AAC Codec Library for Android 4 5 Copyright 1995 - 2012 Fraunhofer-Gesellschaft zur Frderung der angewandten Forschung e.V. 6 All rights reserved. 7 8 1. INTRODUCTION 9 The Fraunhofer FDK AAC Codec Library for Android ("FDK AAC Codec") is software that implements 10 the MPEG Advanced Audio Coding ("AAC") encoding and decoding scheme for digital audio. 11 This FDK AAC Codec software is intended to be used on a wide variety of Android devices. 12 13 AAC's HE-AAC and HE-AAC v2 versions are regarded as today's most efficient general perceptual 14 audio codecs. AAC-ELD is considered the best-performing full-bandwidth communications codec by 15 independent studies and is widely deployed. AAC has been standardized by ISO and IEC as part 16 of the MPEG specifications. 17 18 Patent licenses for necessary patent claims for the FDK AAC Codec (including those of Fraunhofer) 19 may be obtained through Via Licensing (www.vialicensing.com) or through the respective patent owners 20 individually for the purpose of encoding or decoding bit streams in products that are compliant with 21 the ISO/IEC MPEG audio standards. Please note that most manufacturers of Android devices already license 22 these patent claims through Via Licensing or directly from the patent owners, and therefore FDK AAC Codec 23 software may already be covered under those patent licenses when it is used for those licensed purposes only. 24 25 Commercially-licensed AAC software libraries, including floating-point versions with enhanced sound quality, 26 are also available from Fraunhofer. Users are encouraged to check the Fraunhofer website for additional 27 applications information and documentation. 28 29 2. COPYRIGHT LICENSE 30 31 Redistribution and use in source and binary forms, with or without modification, are permitted without 32 payment of copyright license fees provided that you satisfy the following conditions: 33 34 You must retain the complete text of this software license in redistributions of the FDK AAC Codec or 35 your modifications thereto in source code form. 36 37 You must retain the complete text of this software license in the documentation and/or other materials 38 provided with redistributions of the FDK AAC Codec or your modifications thereto in binary form. 39 You must make available free of charge copies of the complete source code of the FDK AAC Codec and your 40 modifications thereto to recipients of copies in binary form. 41 42 The name of Fraunhofer may not be used to endorse or promote products derived from this library without 43 prior written permission. 44 45 You may not charge copyright license fees for anyone to use, copy or distribute the FDK AAC Codec 46 software or your modifications thereto. 47 48 Your modified versions of the FDK AAC Codec must carry prominent notices stating that you changed the software 49 and the date of any change. For modified versions of the FDK AAC Codec, the term 50 "Fraunhofer FDK AAC Codec Library for Android" must be replaced by the term 51 "Third-Party Modified Version of the Fraunhofer FDK AAC Codec Library for Android." 52 53 3. NO PATENT LICENSE 54 55 NO EXPRESS OR IMPLIED LICENSES TO ANY PATENT CLAIMS, including without limitation the patents of Fraunhofer, 56 ARE GRANTED BY THIS SOFTWARE LICENSE. Fraunhofer provides no warranty of patent non-infringement with 57 respect to this software. 58 59 You may use this FDK AAC Codec software or modifications thereto only for purposes that are authorized 60 by appropriate patent licenses. 61 62 4. DISCLAIMER 63 64 This FDK AAC Codec software is provided by Fraunhofer on behalf of the copyright holders and contributors 65 "AS IS" and WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, including but not limited to the implied warranties 66 of merchantability and fitness for a particular purpose. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 67 CONTRIBUTORS BE LIABLE for any direct, indirect, incidental, special, exemplary, or consequential damages, 68 including but not limited to procurement of substitute goods or services; loss of use, data, or profits, 69 or business interruption, however caused and on any theory of liability, whether in contract, strict 70 liability, or tort (including negligence), arising in any way out of the use of this software, even if 71 advised of the possibility of such damage. 72 73 5. CONTACT INFORMATION 74 75 Fraunhofer Institute for Integrated Circuits IIS 76 Attention: Audio and Multimedia Departments - FDK AAC LL 77 Am Wolfsmantel 33 78 91058 Erlangen, Germany 79 80 www.iis.fraunhofer.de/amm 81 amm-info (at) iis.fraunhofer.de 82 ----------------------------------------------------------------------------------------------------------- */ 83 84 /**************************** MPEG-4 HE-AAC Encoder ************************** 85 86 Initial author: M. Lohwasser 87 ******************************************************************************/ 88 89 /** 90 * \file aacenc_lib.h 91 * \brief FDK AAC Encoder library interface header file. 92 * 93 \mainpage Introduction 94 95 \section Scope 96 97 This document describes the high-level interface and usage of the ISO/MPEG-2/4 AAC Encoder 98 library developed by the Fraunhofer Institute for Integrated Circuits (IIS). 99 100 The library implements encoding on the basis of the MPEG-2 and MPEG-4 AAC Low-Complexity 101 standard, and depending on the library's configuration, MPEG-4 High-Efficiency AAC v2 and/or AAC-ELD standard. 102 103 All references to SBR (Spectral Band Replication) are only applicable to HE-AAC or AAC-ELD versions 104 of the library. All references to PS (Parametric Stereo) are only applicable to HE-AAC v2 105 versions of the library. 106 107 \section encBasics Encoder Basics 108 109 This document can only give a rough overview about the ISO/MPEG-2 and ISO/MPEG-4 AAC audio coding 110 standard. To understand all the terms in this document, you are encouraged to read the following documents. 111 112 - ISO/IEC 13818-7 (MPEG-2 AAC), which defines the syntax of MPEG-2 AAC audio bitstreams. 113 - ISO/IEC 14496-3 (MPEG-4 AAC, subparts 1 and 4), which defines the syntax of MPEG-4 AAC audio bitstreams. 114 - Lutzky, Schuller, Gayer, Krämer, Wabnik, "A guideline to audio codec delay", 116th AES Convention, May 8, 2004 115 116 MPEG Advanced Audio Coding is based on a time-to-frequency mapping of the signal. The signal is 117 partitioned into overlapping portions and transformed into frequency domain. The spectral components 118 are then quantized and coded. \n 119 An MPEG-2 or MPEG-4 AAC audio bitstream is composed of frames. Contrary to MPEG-1/2 Layer-3 (mp3), the 120 length of individual frames is not restricted to a fixed number of bytes, but can take on any length 121 between 1 and 768 bytes. 122 123 124 \page LIBUSE Library Usage 125 126 \section InterfaceDescription API Files 127 128 All API header files are located in the folder /include of the release package. All header files 129 are provided for usage in C/C++ programs. The AAC encoder library API functions are located at 130 aacenc_lib.h. 131 132 In binary releases the encoder core resides in statically linkable libraries called for example 133 libAACenc.a/libFDK.a (LINUX) or FDK_fastaaclib.lib (MS Visual C++) for the plain AAC-LC core encoder 134 and libSBRenc.a (LINUX) or FDK_sbrEncLib.lib (MS Visual C++) for the SBR (Spectral Band 135 Replication) and PS (Parametric Stereo) modules. 136 137 \section CallingSequence Calling Sequence 138 139 For encoding of ISO/MPEG-2/4 AAC bitstreams the following sequence is mandatory. Input read and output 140 write functions as well as the corresponding open and close functions are left out, since they may be 141 implemented differently according to the user's specific requirements. The example implementation in 142 main.cpp uses file-based input/output. 143 144 -# Call aacEncOpen() to allocate encoder instance with required \ref encOpen "configuration".\n 145 \dontinclude main.cpp 146 \skipline hAacEncoder = 147 \skipline aacEncOpen 148 -# Call aacEncoder_SetParam() for each parameter to be set. AOT, samplingrate, channelMode, bitrate and transport type are \ref encParams "mandatory". 149 \code 150 ErrorStatus = aacEncoder_SetParam(hAacEncoder, parameter, value); 151 \endcode 152 -# Call aacEncEncode() with NULL parameters to \ref encReconf "initialize" encoder instance with present parameter set. 153 \skipline aacEncEncode 154 -# Call aacEncInfo() to retrieve a configuration data block to be transmitted out of band. This is required when using RFC3640 or RFC3016 like transport. 155 \dontinclude main.cpp 156 \skipline encInfo 157 \skipline aacEncInfo 158 -# Encode input audio data in loop. 159 \skip Encode as long as 160 \skipline do 161 \until { 162 Feed \ref feedInBuf "input buffer" with new audio data and provide input/output \ref bufDes "arguments" to aacEncEncode(). 163 \skipline aacEncEncode 164 \until ; 165 Write \ref writeOutData "output data" to file or audio device. \skipline while 166 -# Call aacEncClose() and destroy encoder instance. 167 \skipline aacEncClose 168 169 \section encOpen Encoder Instance Allocation 170 171 The assignment of the aacEncOpen() function is very flexible and can be used in the following way. 172 - If the amount of memory consumption is not an issue, the encoder instance can be allocated 173 for the maximum number of possible audio channels (for example 6 or 8) with the full functional range supported by the library. 174 This is the default open procedure for the AAC encoder if memory consumption does not need to be minimized. 175 \code aacEncOpen(&hAacEncoder,0,0) \endcode 176 - If the required MPEG-4 AOTs do not call for the full functional range of the library, encoder modules can be allocated selectively. 177 \verbatim 178 ------------------------------------------------------ 179 AAC | SBR | PS | MD | FLAGS | value 180 -----+-----+-----+----+-----------------------+------- 181 X | - | - | - | (0x01) | 0x01 182 X | X | - | - | (0x01|0x02) | 0x03 183 X | X | X | - | (0x01|0x02|0x04) | 0x07 184 X | - | - | X | (0x01 |0x10) | 0x11 185 X | X | - | X | (0x01|0x02 |0x10) | 0x13 186 X | X | X | X | (0x01|0x02|0x04|0x10) | 0x17 187 ------------------------------------------------------ 188 - AAC: Allocate AAC Core Encoder module. 189 - SBR: Allocate Spectral Band Replication module. 190 - PS: Allocate Parametric Stereo module. 191 - MD: Allocate Meta Data module within AAC encoder. 192 \endverbatim 193 \code aacEncOpen(&hAacEncoder,value,0) \endcode 194 - Specifying the maximum number of channels to be supported in the encoder instance can be done as follows. 195 - For example allocate an encoder instance which supports 2 channels for all supported AOTs. 196 The library itself may be capable of encoding up to 6 or 8 channels but in this example only 2 channel encoding is required and thus only buffers for 2 channels are allocated to save data memory. 197 \code aacEncOpen(&hAacEncoder,0,2) \endcode 198 - Additionally the maximum number of supported channels in the SBR module can be denoted separately.\n 199 In this example the encoder instance provides a maximum of 6 channels out of which up to 2 channels support SBR. 200 This encoder instance can produce for example 5.1 channel AAC-LC streams or stereo HE-AAC (v2) streams. 201 HE-AAC 5.1 multi channel is not possible since only 2 out of 6 channels support SBR, which saves data memory. 202 \code aacEncOpen(&hAacEncoder,0,6|(2<<8)) \endcode 203 \n 204 205 \section bufDes Input/Output Arguments 206 207 \subsection allocIOBufs Provide Buffer Descriptors 208 In the present encoder API, the input and output buffers are described with \ref AACENC_BufDesc "buffer descriptors". This mechanism allows a flexible handling 209 of input and output buffers without impact to the actual encoding call. Optional buffers are necessary e.g. for ancillary data, meta data input or additional output 210 buffers describing superframing data in DAB+ or DRM+.\n 211 At least one input buffer for audio input data and one output buffer for bitstream data must be allocated. The input buffer size can be a user defined multiple 212 of the number of input channels. PCM input data will be copied from the user defined PCM buffer to an internal input buffer and so input data can be less than one AAC audio frame. 213 The output buffer size should be 6144 bits per channel excluding the LFE channel. 214 If the output data does not fit into the provided buffer, an AACENC_ERROR will be returned by aacEncEncode(). 215 \dontinclude main.cpp 216 \skipline inputBuffer 217 \until outputBuffer 218 All input and output buffer must be clustered in input and output buffer arrays. 219 \skipline inBuffer 220 \until outBufferElSize 221 Allocate buffer descriptors 222 \skipline AACENC_BufDesc 223 \skipline AACENC_BufDesc 224 Initialize input buffer descriptor 225 \skipline inBufDesc 226 \until bufElSizes 227 Initialize output buffer descriptor 228 \skipline outBufDesc 229 \until bufElSizes 230 231 \subsection argLists Provide Input/Output Argument Lists 232 The input and output arguments of an aacEncEncode() call are described in argument structures. 233 \dontinclude main.cpp 234 \skipline AACENC_InArgs 235 \skipline AACENC_OutArgs 236 237 \section feedInBuf Feed Input Buffer 238 The input buffer should be handled as a modulo buffer. New audio data in the form of pulse-code- 239 modulated samples (PCM) must be read from external and be fed to the input buffer depending on its 240 fill level. The required sample bitrate (represented by the data type INT_PCM which is 16, 24 or 32 241 bits wide) is fixed and depends on library configuration (usually 16 bit). 242 243 \dontinclude main.cpp 244 \skipline WAV_InputRead 245 \until ; 246 After the encoder's internal buffer is fed with incoming audio samples, and aacEncEncode() 247 processed the new input data, update/move remaining samples in input buffer, simulating a modulo buffer: 248 \skipline outargs.numInSamples>0 249 \until } 250 251 \section writeOutData Output Bitstream Data 252 If any AAC bitstream data is available, write it to output file or device. This can be done once the 253 following condition is true: 254 \dontinclude main.cpp 255 \skip Valid bitstream available 256 \skipline outargs 257 258 \skipline outBytes>0 259 260 If you use file I/O then for example call mpegFileWrite_Write() from the library libMpegFileWrite 261 262 \dontinclude main.cpp 263 \skipline mpegFileWrite_Write 264 265 \section cfgMetaData Meta Data Configuration 266 267 If the present library is configured with Metadata support, it is possible to insert meta data side info into the generated 268 audio bitstream while encoding. 269 270 To work with meta data the encoder instance has to be \ref encOpen "allocated" with meta data support. The meta data mode must be be configured with 271 the ::AACENC_METADATA_MODE parameter and aacEncoder_SetParam() function. 272 \code aacEncoder_SetParam(hAacEncoder, AACENC_METADATA_MODE, 0-2); \endcode 273 274 This configuration indicates how to embed meta data into bitstrem. Either no insertion, MPEG or ETSI style. 275 The meta data itself must be specified within the meta data setup structure AACENC_MetaData. 276 277 Changing one of the AACENC_MetaData setup parameters can be achieved from outside the library within ::IN_METADATA_SETUP input 278 buffer. There is no need to supply meta data setup structure every frame. If there is no new meta setup data available, the 279 encoder uses the previous setup or the default configuration in initial state. 280 281 In general the audio compressor and limiter within the encoder library can be configured with the ::AACENC_METADATA_DRC_PROFILE parameter 282 AACENC_MetaData::drc_profile and and AACENC_MetaData::comp_profile. 283 \n 284 285 \section encReconf Encoder Reconfiguration 286 287 The encoder library allows reconfiguration of the encoder instance with new settings 288 continuously between encoding frames. Each parameter to be changed must be set with 289 a single aacEncoder_SetParam() call. The internal status of each parameter can be 290 retrieved with an aacEncoder_GetParam() call.\n 291 There is no stand-alone reconfiguration function available. When parameters were 292 modified from outside the library, an internal control mechanism triggers the necessary 293 reconfiguration process which will be applied at the beginning of the following 294 aacEncEncode() call. This state can be observed from external via the AACENC_INIT_STATUS 295 and aacEncoder_GetParam() function. The reconfiguration process can also be applied 296 immediately when all parameters of an aacEncEncode() call are NULL with a valid encoder 297 handle.\n\n 298 The internal reconfiguration process can be controlled from extern with the following access. 299 \code aacEncoder_SetParam(hAacEncoder, AACENC_CONTROL_STATE, AACENC_CTRLFLAGS); \endcode 300 301 302 \section encParams Encoder Parametrization 303 304 All parameteres listed in ::AACENC_PARAM can be modified within an encoder instance. 305 306 \subsection encMandatory Mandatory Encoder Parameters 307 The following parameters must be specified when the encoder instance is initialized. 308 \code 309 aacEncoder_SetParam(hAacEncoder, AACENC_AOT, value); 310 aacEncoder_SetParam(hAacEncoder, AACENC_BITRATE, value); 311 aacEncoder_SetParam(hAacEncoder, AACENC_SAMPLERATE, value); 312 aacEncoder_SetParam(hAacEncoder, AACENC_CHANNELMODE, value); 313 \endcode 314 Beyond that is an internal auto mode which preinitizializes the ::AACENC_BITRATE parameter 315 if the parameter was not set from extern. The bitrate depends on the number of effective 316 channels and sampling rate and is determined as follows. 317 \code 318 AAC-LC (AOT_AAC_LC): 1.5 bits per sample 319 HE-AAC (AOT_SBR): 0.625 bits per sample 320 HE-AAC v2 (AOT_PS): 0.5 bits per sample 321 \endcode 322 323 \subsection channelMode Channel Mode Configuration 324 The input audio data is described with the ::AACENC_CHANNELMODE parameter in the 325 aacEncoder_SetParam() call. It is not possible to use the encoder instance with a 'number of 326 input channels' argument. Instead, the channelMode must be set as follows. 327 \code aacEncoder_SetParam(hAacEncoder, AACENC_CHANNELMODE, value); \endcode 328 The parameter is specified in ::CHANNEL_MODE and can be mapped from the number of input channels 329 in the following way. 330 \dontinclude main.cpp 331 \skip CHANNEL_MODE chMode = MODE_INVALID; 332 \until return 333 334 \subsection encQual Audio Quality Considerations 335 The default encoder configuration is suggested to be used. Encoder tools such as TNS and PNS 336 are activated by default and are internally controlled (see \ref BEHAVIOUR_TOOLS). 337 338 There is an additional quality parameter called ::AACENC_AFTERBURNER. In the default 339 configuration this quality switch is deactivated because it would cause a workload 340 increase which might be significant. If workload is not an issue in the application 341 we recommended to activate this feature. 342 \code aacEncoder_SetParam(hAacEncoder, AACENC_AFTERBURNER, 1); \endcode 343 344 345 \section audiochCfg Audio Channel Configuration 346 The MPEG standard refers often to the so-called Channel Configuration. This Channel Configuration is used for a fixed Channel 347 Mapping. The configurations 1-7 are predefined in MPEG standard and used for implicit signalling within the encoded bitstream. 348 For user defined Configurations the Channel Configuration is set to 0 and the Channel Mapping must be explecitly described with an appropriate 349 Program Config Element. The present Encoder implementation does not allow the user to configure this Channel Configuration from 350 extern. The Encoder implementation supports fixed Channel Modes which are mapped to Channel Configuration as follow. 351 \verbatim 352 -------------------------------------------------------------------- 353 ChannelMode | ChCfg | front_El | side_El | back_El | lfe_El 354 -----------------+--------+----------+----------+----------+-------- 355 MODE_1 | 1 | SCE | | | 356 MODE_2 | 2 | CPE | | | 357 MODE_1_2 | 3 | SCE, CPE | | | 358 MODE_1_2_1 | 4 | SCE, CPE | | SCE | 359 MODE_1_2_2 | 5 | SCE, CPE | | CPE | 360 MODE_1_2_2_1 | 6 | SCE, CPE | | CPE | LFE 361 -------------------------------------------------------------------- 362 - SCE: Single Channel Element. 363 - CPE: Channel Pair. 364 - SCE: Low Frequency Element. 365 \endverbatim 366 367 Moreover, the Table describes all fixed Channel Elements for each Channel Mode which are assigned to a speaker arrangement. The 368 arrangement includes front, side, back and lfe Audio Channel Elements.\n 369 This mapping of Audio Channel Elements is defined in MPEG standard for Channel Config 1-7. The Channel assignment for MODE_1_1, 370 MODE_2_2 and MODE_2_1 is used from the ARIB standard. All other configurations are defined as suggested in MPEG.\n 371 In case of Channel Config 0 or writing matrix mixdown coefficients, the encoder enables the writing of Program Config Element 372 itself as described in \ref encPCE. The configuration used in Program Config Element refers to the denoted Table.\n 373 Beside the Channel Element assignment the Channel Modes are resposible for audio input data channel mapping. The Channel Mapping 374 of the audio data depends on the selected ::AACENC_CHANNELORDER which can be MPEG or WAV like order.\n 375 Following Table describes the complete channel mapping for both Channel Order configurations. 376 \verbatim 377 --------------------------------------------------------------------------------- 378 ChannelMode | MPEG-Channelorder | WAV-Channelorder 379 -----------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--- 380 MODE_1 | 0 | | | | | | | | 0 | | | | | | | 381 MODE_2 | 0 | 1 | | | | | | | 0 | 1 | | | | | | 382 MODE_1_2 | 0 | 1 | 2 | | | | | | 2 | 0 | 1 | | | | | 383 MODE_1_2_1 | 0 | 1 | 2 | 3 | | | | | 2 | 0 | 1 | 3 | | | | 384 MODE_1_2_2 | 0 | 1 | 2 | 3 | 4 | | | | 2 | 0 | 1 | 3 | 4 | | | 385 MODE_1_2_2_1 | 0 | 1 | 2 | 3 | 4 | 5 | | | 2 | 0 | 1 | 4 | 5 | 3 | | 386 --------------------------------------------------------------------------------- 387 \endverbatim 388 389 The denoted mapping is important for correct audio channel assignment when using MPEG or WAV ordering. The incoming audio 390 channels are distributed MPEG like starting at the front channels and ending at the back channels. The distribution is used as 391 described in Table concering Channel Config and fix channel elements. Please see the following example for clarification. 392 393 \verbatim 394 Example: MODE_1_2_2_1 - WAV-Channelorder 5.1 395 ------------------------------------------ 396 Input Channel | Coder Channel 397 --------------------+--------------------- 398 2 (front center) | 0 (SCE channel) 399 0 (left center) | 1 (1st of 1st CPE) 400 1 (right center) | 2 (2nd of 1st CPE) 401 4 (left surround) | 3 (1st of 2nd CPE) 402 5 (right surround) | 4 (2nd of 2nd CPE) 403 3 (LFE) | 5 (LFE) 404 ------------------------------------------ 405 \endverbatim 406 407 408 \section suppBitrates Supported Bitrates 409 410 The FDK AAC Encoder provides a wide range of supported bitrates. 411 The minimum and maximum allowed bitrate depends on the Audio Object Type. For AAC-LC the minimum 412 bitrate is the bitrate that is required to write the most basic and minimal valid bitstream. 413 It consists of the bitstream format header information and other static/mandatory information 414 within the AAC payload. The maximum AAC framesize allowed by the MPEG-4 standard 415 determines the maximum allowed bitrate for AAC-LC. For HE-AAC and HE-AAC v2 a library internal 416 look-up table is used. 417 418 A good working point in terms of audio quality, sampling rate and bitrate, is at 1 to 1.5 419 bits/audio sample for AAC-LC, 0.625 bits/audio sample for HE-AAC and 0.5 bits/audio sample 420 for HE-AAC v2. For example for one channel with a sampling frequency of 48 kHz, the range from 421 48 kbit/s to 72 kbit/s achieves reasonable audio quality for AAC-LC. 422 423 For HE-AAC and HE-AAC v2 the lowest possible audio input sampling frequency is 16 kHz because then the 424 AAC-LC core encoder operates in dual rate mode at its lowest possible sampling frequency, which is 8 kHz. 425 HE-AAC v2 requires stereo input audio data. 426 427 Please note that in HE-AAC or HE-AAC v2 mode the encoder supports much higher bitrates than are 428 appropriate for HE-AAC or HE-AAC v2. For example, at a bitrate of more than 64 kbit/s for a stereo 429 audio signal at 44.1 kHz it usually makes sense to use AAC-LC, which will produce better audio 430 quality at that bitrate than HE-AAC or HE-AAC v2. 431 432 \section reommendedConfig Recommended Sampling Rate and Bitrate Combinations 433 434 The following table provides an overview of recommended encoder configuration parameters 435 which we determined by virtue of numerous listening tests. 436 437 \subsection reommendedConfigLC AAC-LC, HE-AAC, HE-AACv2. 438 \verbatim 439 ----------------------------------------------------------------------------------- 440 Audio Object Type | Bit Rate Range | Supported | Preferred | No. of 441 | [bit/s] | Sampling Rates | Sampl. | Chan. 442 | | [kHz] | Rate | 443 | | | [kHz] | 444 -------------------+------------------+-----------------------+------------+------- 445 AAC LC + SBR + PS | 8000 - 11999 | 22.05, 24.00 | 24.00 | 2 446 AAC LC + SBR + PS | 12000 - 17999 | 32.00 | 32.00 | 2 447 AAC LC + SBR + PS | 18000 - 39999 | 32.00, 44.10, 48.00 | 44.10 | 2 448 AAC LC + SBR + PS | 40000 - 56000 | 32.00, 44.10, 48.00 | 48.00 | 2 449 -------------------+------------------+-----------------------+------------+------- 450 AAC LC + SBR | 8000 - 11999 | 22.05, 24.00 | 24.00 | 1 451 AAC LC + SBR | 12000 - 17999 | 32.00 | 32.00 | 1 452 AAC LC + SBR | 18000 - 39999 | 32.00, 44.10, 48.00 | 44.10 | 1 453 AAC LC + SBR | 40000 - 56000 | 32.00, 44.10, 48.00 | 48.00 | 1 454 AAC LC + SBR | 16000 - 27999 | 32.00, 44.10, 48.00 | 32.00 | 2 455 AAC LC + SBR | 28000 - 63999 | 32.00, 44.10, 48.00 | 44.10 | 2 456 AAC LC + SBR | 64000 - 128000 | 32.00, 44.10, 48.00 | 48.00 | 2 457 -------------------+------------------+-----------------------+------------+------- 458 AAC LC + SBR | 64000 - 69999 | 32.00, 44.10, 48.00 | 32.00 | 5, 5.1 459 AAC LC + SBR | 70000 - 159999 | 32.00, 44.10, 48.00 | 44.10 | 5, 5.1 460 AAC LC + SBR | 160000 - 319999 | 32.00, 44.10, 48.00 | 48.00 | 5, 5.1 461 AAC LC + SBR | 320000 - 640000 | 64.00, 88.20, 96.00 | 96.00 | 5, 5.1 462 -------------------+------------------+-----------------------+------------+------- 463 AAC LC | 8000 - 15999 | 11.025, 12.00, 16.00 | 12.00 | 1 464 AAC LC | 16000 - 23999 | 16.00 | 16.00 | 1 465 AAC LC | 24000 - 31999 | 16.00, 22.05, 24.00 | 24.00 | 1 466 AAC LC | 32000 - 55999 | 32.00 | 32.00 | 1 467 AAC LC | 56000 - 160000 | 32.00, 44.10, 48.00 | 44.10 | 1 468 AAC LC | 160001 - 288000 | 48.00 | 48.00 | 1 469 -------------------+------------------+-----------------------+------------+------- 470 AAC LC | 16000 - 23999 | 11.025, 12.00, 16.00 | 12.00 | 2 471 AAC LC | 24000 - 31999 | 16.00 | 16.00 | 2 472 AAC LC | 32000 - 39999 | 16.00, 22.05, 24.00 | 22.05 | 2 473 AAC LC | 40000 - 95999 | 32.00 | 32.00 | 2 474 AAC LC | 96000 - 111999 | 32.00, 44.10, 48.00 | 32.00 | 2 475 AAC LC | 112000 - 320001 | 32.00, 44.10, 48.00 | 44.10 | 2 476 AAC LC | 320002 - 576000 | 48.00 | 48.00 | 2 477 -------------------+------------------+-----------------------+------------+------- 478 AAC LC | 160000 - 239999 | 32.00 | 32.00 | 5, 5.1 479 AAC LC | 240000 - 279999 | 32.00, 44.10, 48.00 | 32.00 | 5, 5.1 480 AAC LC | 280000 - 800000 | 32.00, 44.10, 48.00 | 44.10 | 5, 5.1 481 ----------------------------------------------------------------------------------- 482 \endverbatim \n 483 484 \subsection reommendedConfigLD AAC-LD, AAC-ELD, AAC-ELD with SBR. 485 \verbatim 486 ----------------------------------------------------------------------------------- 487 Audio Object Type | Bit Rate Range | Supported | Preferred | No. of 488 | [bit/s] | Sampling Rates | Sampl. | Chan. 489 | | [kHz] | Rate | 490 | | | [kHz] | 491 -------------------+------------------+-----------------------+------------+------- 492 ELD + SBR | 16000 - 24999 | 32.00 - 44.10 | 32.00 | 1 493 ELD + SBR | 25000 - 31999 | 32.00 - 48.00 | 32.00 | 1 494 ELD + SBR | 32000 - 64000 | 32.00 - 48.00 | 48.00 | 1 495 -------------------+------------------+-----------------------+------------+------- 496 ELD + SBR | 32000 - 51999 | 32.00 - 48.00 | 44.10 | 2 497 ELD + SBR | 52000 - 128000 | 32.00 - 48.00 | 48.00 | 2 498 -------------------+------------------+-----------------------+------------+------- 499 ELD + SBR | 72000 - 192000 | 44.10 - 48.00 | 48.00 | 3 500 -------------------+------------------+-----------------------+------------+------- 501 ELD + SBR | 96000 - 256000 | 44.10 - 48.00 | 48.00 | 4 502 -------------------+------------------+-----------------------+------------+------- 503 ELD + SBR | 120000 - 320000 | 44.10 - 48.00 | 48.00 | 5 504 -------------------+------------------+-----------------------+------------+------- 505 LD, ELD | 16000 - 19999 | 16.00 - 24.00 | 16.00 | 1 506 LD, ELD | 20000 - 39999 | 16.00 - 32.00 | 24.00 | 1 507 LD, ELD | 40000 - 49999 | 22.05 - 32.00 | 32.00 | 1 508 LD, ELD | 50000 - 61999 | 24.00 - 44.10 | 32.00 | 1 509 LD, ELD | 62000 - 84999 | 32.00 - 48.00 | 44.10 | 1 510 LD, ELD | 85000 - 192000 | 44.10 - 48.00 | 48.00 | 1 511 -------------------+------------------+-----------------------+------------+------- 512 LD, ELD | 64000 - 75999 | 24.00 - 32.00 | 32.00 | 2 513 LD, ELD | 76000 - 97999 | 24.00 - 44.10 | 32.00 | 2 514 LD, ELD | 98000 - 135999 | 32.00 - 48.00 | 44.10 | 2 515 LD, ELD | 136000 - 384000 | 44.10 - 48.00 | 48.00 | 2 516 -------------------+------------------+-----------------------+------------+------- 517 LD, ELD | 96000 - 113999 | 24.00 - 32.00 | 32.00 | 3 518 LD, ELD | 114000 - 146999 | 24.00 - 44.10 | 32.00 | 3 519 LD, ELD | 147000 - 203999 | 32.00 - 48.00 | 44.10 | 3 520 LD, ELD | 204000 - 576000 | 44.10 - 48.00 | 48.00 | 3 521 -------------------+------------------+-----------------------+------------+------- 522 LD, ELD | 128000 - 151999 | 24.00 - 32.00 | 32.00 | 4 523 LD, ELD | 152000 - 195999 | 24.00 - 44.10 | 32.00 | 4 524 LD, ELD | 196000 - 271999 | 32.00 - 48.00 | 44.10 | 4 525 LD, ELD | 272000 - 768000 | 44.10 - 48.00 | 48.00 | 4 526 -------------------+------------------+-----------------------+------------+------- 527 LD, ELD | 160000 - 189999 | 24.00 - 32.00 | 32.00 | 5 528 LD, ELD | 190000 - 244999 | 24.00 - 44.10 | 32.00 | 5 529 LD, ELD | 245000 - 339999 | 32.00 - 48.00 | 44.10 | 5 530 LD, ELD | 340000 - 960000 | 44.10 - 48.00 | 48.00 | 5 531 ----------------------------------------------------------------------------------- 532 \endverbatim \n 533 534 \page ENCODERBEHAVIOUR Encoder Behaviour 535 536 \section BEHAVIOUR_BANDWIDTH Bandwidth 537 538 The FDK AAC encoder usually does not use the full frequency range of the input signal, but restricts the bandwidth 539 according to certain library-internal settings. They can be changed in the table "bandWidthTable" in the 540 file bandwidth.cpp (if available), or via command-line argument "-w" (see chapter \ref CommandLineUsage). 541 542 However it is not recommended to change these settings, because they are based on numerious listening 543 tests and careful tweaks to ensure the best overall encoding quality. 544 545 Theoretically a signal of for example 48 kHz can contain frequencies up to 24 kHz, but to use this full range 546 in an audio encoder usually does not make sense. Usually the encoder has a very limited amount of 547 bits to spend (typically 128 kbit/s for stereo 48 kHz content) and to allow full range bandwidth would 548 waste a lot of these bits for frequencies the human ear is hardly able to perceive anyway, if at all. Hence it 549 is wise to use the available bits for the really important frequency range and just skip the rest. 550 At lower bitrates (e. g. <= 80 kbit/s for stereo 48 kHz content) the encoder will choose an even smaller 551 bandwidth, because an encoded signal with smaller bandwidth and hence less artifacts sounds better than a signal 552 with higher bandwidth but then more coding artefacts across all frequencies. These artefacts would occur if 553 small bitrates and high bandwidths are chosen because the available bits are just not enough to encode all 554 frequencies well. 555 556 Unfortunately some people evaluate encoding quality based on possible bandwidth as well, but it is a two-sided 557 sword considering the trade-off described above. 558 559 Another aspect is workload consumption. The higher the allowed bandwidth, the more frequency lines have to be 560 processed, which in turn increases the workload. 561 562 \section FRAMESIZES_AND_BIT_RESERVOIR Frame Sizes & Bit Reservoir 563 564 For AAC there is a difference between constant bit rate and constant frame 565 length due to the so-called bit reservoir technique, which allows the encoder to use less 566 bits in an AAC frame for those audio signal sections which are easy to encode, 567 and then spend them at a later point in 568 time for more complex audio sections. The extent to which this "bit exchange" 569 is done is limited to allow for reliable and relatively low delay real time 570 streaming. 571 Over a longer period in time the bitrate will be constant in the AAC constant 572 bitrate mode, e.g. for ISDN transmission. This means that in AAC each bitstream 573 frame will in general have a different length in bytes but over time it 574 will reach the target bitrate. One could also make an MPEG compliant 575 AAC encoder which always produces constant length packages for each AAC frame, 576 but the audio quality would be considerably worse since the bit reservoir 577 technique would have to be switched off completely. A higher bit rate would have 578 to be used to get the same audio quality as with an enabled bit reservoir. 579 580 The maximum AAC frame length, regardless of the available bit reservoir, is defined 581 as 6144 bits per channel. 582 583 For mp3 by the way, the same bit reservoir technique exists, but there each bit 584 stream frame has a constant length for a given bit rate (ignoring the 585 padding byte). In mp3 there is a so-called "back pointer" which tells 586 the decoder which bits belong to the current mp3 frame - and in general some or 587 many bits have been transmitted in an earlier mp3 frame. Basically this leads to 588 the same "bit exchange between mp3 frames" as in AAC but with virtually constant 589 length frames. 590 591 This variable frame length at "constant bit rate" is not something special 592 in this Fraunhofer IIS AAC encoder. AAC has been designed in that way. 593 594 \subsection BEHAVIOUR_ESTIM_AVG_FRAMESIZES Estimating Average Frame Sizes 595 596 A HE-AAC v1 or v2 audio frame contains 2048 PCM samples per channel (there is 597 also one mode with 1920 samples per channel but this is only for special purposes 598 such as DAB+ digital radio). 599 600 The number of HE-AAC frames \f$N\_FRAMES\f$ per second at 44.1 kHz is: 601 602 \f[ 603 N\_FRAMES = 44100 / 2048 = 21.5332 604 \f] 605 606 At a bit rate of 8 kbps the average number of bits per frame \f$N\_BITS\_PER\_FRAME\f$ is: 607 608 \f[ 609 N\_BITS\_PER\_FRAME = 8000 / 21.5332 = 371.52 610 \f] 611 612 which is about 46.44 bytes per encoded frame. 613 614 At a bit rate of 32 kbps, which is quite high for single channel HE-AAC v1, it is: 615 616 \f[ 617 N\_BITS\_PER\_FRAME = 32000 / 21.5332 = 1486 618 \f] 619 620 which is about 185.76 bytes per encoded frame. 621 622 These bits/frame figures are average figures where each AAC frame generally has a different 623 size in bytes. To calculate the same for AAC-LC just use 1024 instead of 2048 PCM samples per 624 frame and channel. 625 For AAC-LD/ELD it is either 480 or 512 PCM samples per frame and channel. 626 627 628 \section BEHAVIOUR_TOOLS Encoder Tools 629 630 The AAC encoder supports TNS, PNS, MS, Intensity and activates these tools depending on the audio signal and 631 the encoder configuration (i.e. bitrate or AOT). It is not required to configure these tools manually. 632 633 PNS improves encoding quality only for certain bitrates. Therefore it makes sense to activate PNS only for 634 these bitrates and save the processing power required for PNS (about 10 % of the encoder) when using other 635 bitrates. This is done automatically inside the encoder library. PNS is disabled inside the encoder library if 636 an MPEG-2 AOT is choosen since PNS is an MPEG-4 AAC feature. 637 638 If SBR is activated, the encoder automatically deactivates PNS internally. If TNS is disabled but PNS is allowed, 639 the encoder deactivates PNS calculation internally. 640 641 642 */ 643 644 #ifndef _AAC_ENC_LIB_H_ 645 #define _AAC_ENC_LIB_H_ 646 647 #include "machine_type.h" 648 #include "FDK_audio.h" 649 650 651 /** 652 * AAC encoder error codes. 653 */ 654 typedef enum { 655 AACENC_OK = 0x0000, /*!< No error happened. All fine. */ 656 657 AACENC_INVALID_HANDLE = 0x0020, /*!< Handle passed to function call was invalid. */ 658 AACENC_MEMORY_ERROR = 0x0021, /*!< Memory allocation failed. */ 659 AACENC_UNSUPPORTED_PARAMETER = 0x0022, /*!< Parameter not available. */ 660 AACENC_INVALID_CONFIG = 0x0023, /*!< Configuration not provided. */ 661 662 AACENC_INIT_ERROR = 0x0040, /*!< General initialization error. */ 663 AACENC_INIT_AAC_ERROR = 0x0041, /*!< AAC library initialization error. */ 664 AACENC_INIT_SBR_ERROR = 0x0042, /*!< SBR library initialization error. */ 665 AACENC_INIT_TP_ERROR = 0x0043, /*!< Transport library initialization error. */ 666 AACENC_INIT_META_ERROR = 0x0044, /*!< Meta data library initialization error. */ 667 668 AACENC_ENCODE_ERROR = 0x0060, /*!< The encoding process was interrupted by an unexpected error. */ 669 670 AACENC_ENCODE_EOF = 0x0080 /*!< End of file reached. */ 671 672 } AACENC_ERROR; 673 674 675 /** 676 * AAC encoder buffer descriptors identifier. 677 * This identifier are used within buffer descriptors AACENC_BufDesc::bufferIdentifiers. 678 */ 679 typedef enum { 680 /* Input buffer identifier. */ 681 IN_AUDIO_DATA = 0, /*!< Audio input buffer, interleaved INT_PCM samples. */ 682 IN_ANCILLRY_DATA = 1, /*!< Ancillary data to be embedded into bitstream. */ 683 IN_METADATA_SETUP = 2, /*!< Setup structure for embedding meta data. */ 684 685 /* Output buffer identifier. */ 686 OUT_BITSTREAM_DATA = 3, /*!< Buffer holds bitstream output data. */ 687 OUT_AU_SIZES = 4 /*!< Buffer contains sizes of each access unit. This information 688 is necessary for superframing. */ 689 690 } AACENC_BufferIdentifier; 691 692 693 /** 694 * AAC encoder handle. 695 */ 696 typedef struct AACENCODER *HANDLE_AACENCODER; 697 698 699 /** 700 * Provides some info about the encoder configuration. 701 */ 702 typedef struct { 703 704 UINT maxOutBufBytes; /*!< Maximum number of encoder bitstream bytes within one frame. 705 Size depends on maximum number of supported channels in encoder instance. 706 For superframing (as used for example in DAB+), size has to be a multiple accordingly. */ 707 708 UINT maxAncBytes; /*!< Maximum number of ancillary data bytes which can be inserted into 709 bitstream within one frame. */ 710 711 UINT inBufFillLevel; /*!< Internal input buffer fill level in samples per channel. This parameter 712 will automatically be cleared if samplingrate or channel(Mode/Order) changes. */ 713 714 UINT inputChannels; /*!< Number of input channels expected in encoding process. */ 715 716 UINT frameLength; /*!< Amount of input audio samples consumed each frame per channel, depending 717 on audio object type configuration. */ 718 719 UINT encoderDelay; /*!< Codec delay in PCM samples/channel. Depends on framelength and AOT. Does not 720 include framing delay for filling up encoder PCM input buffer. */ 721 722 UCHAR confBuf[64]; /*!< Configuration buffer in binary format as an AudioSpecificConfig 723 or StreamMuxConfig according to the selected transport type. */ 724 725 UINT confSize; /*!< Number of valid bytes in confBuf. */ 726 727 } AACENC_InfoStruct; 728 729 730 /** 731 * Describes the input and output buffers for an aacEncEncode() call. 732 */ 733 typedef struct { 734 INT numBufs; /*!< Number of buffers. */ 735 void **bufs; /*!< Pointer to vector containing buffer addresses. */ 736 INT *bufferIdentifiers; /*!< Identifier of each buffer element. See ::AACENC_BufferIdentifier. */ 737 INT *bufSizes; /*!< Size of each buffer in 8-bit bytes. */ 738 INT *bufElSizes; /*!< Size of each buffer element in bytes. */ 739 740 } AACENC_BufDesc; 741 742 743 /** 744 * Defines the input arguments for an aacEncEncode() call. 745 */ 746 typedef struct { 747 INT numInSamples; /*!< Number of valid input audio samples (multiple of input channels). */ 748 INT numAncBytes; /*!< Number of ancillary data bytes to be encoded. */ 749 750 } AACENC_InArgs; 751 752 753 /** 754 * Defines the output arguments for an aacEncEncode() call. 755 */ 756 typedef struct { 757 INT numOutBytes; /*!< Number of valid bitstream bytes generated during aacEncEncode(). */ 758 INT numInSamples; /*!< Number of input audio samples consumed by the encoder. */ 759 INT numAncBytes; /*!< Number of ancillary data bytes consumed by the encoder. */ 760 761 } AACENC_OutArgs; 762 763 764 /** 765 * Meta Data Compression Profiles. 766 */ 767 typedef enum { 768 AACENC_METADATA_DRC_NONE = 0, /*!< None. */ 769 AACENC_METADATA_DRC_FILMSTANDARD = 1, /*!< Film standard. */ 770 AACENC_METADATA_DRC_FILMLIGHT = 2, /*!< Film light. */ 771 AACENC_METADATA_DRC_MUSICSTANDARD = 3, /*!< Music standard. */ 772 AACENC_METADATA_DRC_MUSICLIGHT = 4, /*!< Music light. */ 773 AACENC_METADATA_DRC_SPEECH = 5 /*!< Speech. */ 774 775 } AACENC_METADATA_DRC_PROFILE; 776 777 778 /** 779 * Meta Data setup structure. 780 */ 781 typedef struct { 782 783 AACENC_METADATA_DRC_PROFILE drc_profile; /*!< MPEG DRC compression profile. See ::AACENC_METADATA_DRC_PROFILE. */ 784 AACENC_METADATA_DRC_PROFILE comp_profile; /*!< ETSI heavy compression profile. See ::AACENC_METADATA_DRC_PROFILE. */ 785 786 INT drc_TargetRefLevel; /*!< Used to define expected level to: 787 Scaled with 16 bit. x*2^16. */ 788 INT comp_TargetRefLevel; /*!< Adjust limiter to avoid overload. 789 Scaled with 16 bit. x*2^16. */ 790 791 INT prog_ref_level_present; /*!< Flag, if prog_ref_level is present */ 792 INT prog_ref_level; /*!< Programme Reference Level = Dialogue Level: 793 -31.75dB .. 0 dB ; stepsize: 0.25dB 794 Scaled with 16 bit. x*2^16.*/ 795 796 UCHAR PCE_mixdown_idx_present; /*!< Flag, if dmx-idx should be written in programme config element */ 797 UCHAR ETSI_DmxLvl_present; /*!< Flag, if dmx-lvl should be written in ETSI-ancData */ 798 799 SCHAR centerMixLevel; /*!< Center downmix level (0...7, according to table) */ 800 SCHAR surroundMixLevel; /*!< Surround downmix level (0...7, according to table) */ 801 802 UCHAR dolbySurroundMode; /*!< Indication for Dolby Surround Encoding Mode. 803 - 0: Dolby Surround mode not indicated 804 - 1: 2-ch audio part is not Dolby surround encoded 805 - 2: 2-ch audio part is Dolby surround encoded */ 806 } AACENC_MetaData; 807 808 809 /** 810 * AAC encoder control flags. 811 * 812 * In interaction with the ::AACENC_CONTROL_STATE parameter it is possible to get information about the internal 813 * initialization process. It is also possible to overwrite the internal state from extern when necessary. 814 */ 815 typedef enum 816 { 817 AACENC_INIT_NONE = 0x0000, /*!< Do not trigger initialization. */ 818 AACENC_INIT_CONFIG = 0x0001, /*!< Initialize all encoder modules configuration. */ 819 AACENC_INIT_STATES = 0x0002, /*!< Reset all encoder modules history buffer. */ 820 AACENC_INIT_TRANSPORT = 0x1000, /*!< Initialize transport lib with new parameters. */ 821 AACENC_RESET_INBUFFER = 0x2000, /*!< Reset fill level of internal input buffer. */ 822 AACENC_INIT_ALL = 0xFFFF /*!< Initialize all. */ 823 } 824 AACENC_CTRLFLAGS; 825 826 827 /** 828 * \brief AAC encoder setting parameters. 829 * 830 * Use aacEncoder_SetParam() function to configure, or use aacEncoder_GetParam() function to read 831 * the internal status of the following parameters. 832 */ 833 typedef enum 834 { 835 AACENC_AOT = 0x0100, /*!< Audio object type. See ::AUDIO_OBJECT_TYPE in FDK_audio.h. 836 - 2: MPEG-4 AAC Low Complexity. 837 - 5: MPEG-4 AAC Low Complexity with Spectral Band Replication (HE-AAC). 838 - 29: MPEG-4 AAC Low Complexity with Spectral Band Replication and Parametric Stereo (HE-AAC v2). 839 This configuration can be used only with stereo input audio data. 840 - 23: MPEG-4 AAC Low-Delay. 841 - 39: MPEG-4 AAC Enhanced Low-Delay. Since there is no ::AUDIO_OBJECT_TYPE for ELD in 842 combination with SBR defined, enable SBR explicitely by ::AACENC_SBR_MODE parameter. 843 - 129: MPEG-2 AAC Low Complexity. 844 - 132: MPEG-2 AAC Low Complexity with Spectral Band Replication (HE-AAC). 845 - 156: MPEG-2 AAC Low Complexity with Spectral Band Replication and Parametric Stereo (HE-AAC v2). 846 This configuration can be used only with stereo input audio data. */ 847 848 AACENC_BITRATE = 0x0101, /*!< Total encoder bitrate. This parameter is mandatory and interacts with ::AACENC_BITRATEMODE. 849 - CBR: Bitrate in bits/second. 850 See \ref suppBitrates for details. */ 851 852 AACENC_BITRATEMODE = 0x0102, /*!< Bitrate mode. Configuration can be different kind of bitrate configurations: 853 - 0: Constant bitrate, use bitrate according to ::AACENC_BITRATE. (default) 854 Within none LD/ELD ::AUDIO_OBJECT_TYPE, the CBR mode makes use of full allowed bitreservoir. 855 In contrast, at Low-Delay ::AUDIO_OBJECT_TYPE the bitreservoir is kept very small. 856 - 8: LD/ELD full bitreservoir for packet based transmission. */ 857 858 AACENC_SAMPLERATE = 0x0103, /*!< Audio input data sampling rate. Encoder supports following sampling rates: 859 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000 */ 860 861 AACENC_SBR_MODE = 0x0104, /*!< Configure SBR independently of the chosen Audio Object Type ::AUDIO_OBJECT_TYPE:. 862 This parameter is only available for ELD. 863 - 0: Disable Spectral Band Replication. 864 - 1: Enable Spectral Band Replication. */ 865 866 AACENC_GRANULE_LENGTH = 0x0105, /*!< Core encoder (AAC) audio frame length in samples: 867 - 1024: Default configuration. 868 - 512: Default LD/ELD configuration. 869 - 480: Optional length in LD/ELD configuration. */ 870 871 AACENC_CHANNELMODE = 0x0106, /*!< Set explicit channel mode. Channel mode must match with number of input channels. 872 - 1-6: MPEG channel modes supported, see ::CHANNEL_MODE in FDK_audio.h. */ 873 874 AACENC_CHANNELORDER = 0x0107, /*!< Input audio data channel ordering scheme: 875 - 0: MPEG channel ordering (e. g. 5.1: C, L, R, SL, SR, LFE). (default) 876 - 1: WAVE file format channel ordering (e. g. 5.1: L, R, C, LFE, SL, SR). */ 877 878 AACENC_AFTERBURNER = 0x0200, /*!< This parameter controls the use of the afterburner feature. 879 The afterburner is a type of analysis by synthesis algorithm which increases the 880 audio quality but also the required processing power. It is recommended to always 881 activate this if additional memory consumption and processing power consumption 882 is not a problem. If increased MHz and memory consumption are an issue then the MHz 883 and memory cost of this optional module need to be evaluated against the improvement 884 in audio quality on a case by case basis. 885 - 0: Disable afterburner (default). 886 - 1: Enable afterburner. */ 887 888 AACENC_BANDWIDTH = 0x0203, /*!< Core encoder audio bandwidth: 889 - 0: Determine bandwidth internally (default, see chapter \ref BEHAVIOUR_BANDWIDTH). 890 - 1 to fs/2: Frequency bandwidth in Hertz. (Experts only, better do not 891 touch this value to avoid degraded audio quality) */ 892 893 AACENC_TRANSMUX = 0x0300, /*!< Transport type to be used. See ::TRANSPORT_TYPE in FDK_audio.h. Following 894 types can be configured in encoder library: 895 - 0: raw access units 896 - 1: ADIF bitstream format 897 - 2: ADTS bitstream format 898 - 6: Audio Mux Elements (LATM) with muxConfigPresent = 1 899 - 7: Audio Mux Elements (LATM) with muxConfigPresent = 0, out of band StreamMuxConfig 900 - 10: Audio Sync Stream (LOAS) */ 901 902 AACENC_HEADER_PERIOD = 0x0301, /*!< Frame count period for sending in-band configuration buffers within LATM/LOAS 903 transport layer. Additionally this parameter configures the PCE repetition period 904 in raw_data_block(). See \ref encPCE. 905 - 0xFF: auto-mode default 10 for TT_MP4_ADTS, TT_MP4_LOAS and TT_MP4_LATM_MCP1, otherwise 0. 906 - n: Frame count period. */ 907 908 AACENC_SIGNALING_MODE = 0x0302, /*!< Signaling mode of the extension AOT: 909 - 0: Implicit backward compatible signaling. (default) 910 - 1: Explicit SBR and implicit PS signaling. 911 - 2: Explicit hierarchical signaling. 912 913 The use of backward-compatible implicit signaling is recommended if the user specically 914 aims at preserving compatibility with decoders only capable of decoding AAC-LC. Otherwise 915 use non-backward-compatible explicit signaling. 916 Bitstream formats ADTS and ADIF can only do implicit signaling. */ 917 918 AACENC_TPSUBFRAMES = 0x0303, /*!< Number of sub frames in a transport frame for LOAS/LATM or ADTS (default 1). 919 - ADTS: Maximum number of sub frames restricted to 4. 920 - LOAS/LATM: Maximum number of sub frames restricted to 2.*/ 921 922 AACENC_PROTECTION = 0x0306, /*!< Configure protection in tranpsort layer: 923 - 0: No protection. (default) 924 - 1: CRC active for ADTS bitstream format. */ 925 926 AACENC_ANCILLARY_BITRATE = 0x0500, /*!< Constant ancillary data bitrate in bits/second. 927 - 0: Either no ancillary data or insert exact number of bytes, denoted via 928 input parameter, numAncBytes in AACENC_InArgs. 929 - else: Insert ancillary data with specified bitrate. */ 930 931 AACENC_METADATA_MODE = 0x0600, /*!< Configure Meta Data. See ::AACENC_MetaData for further details: 932 - 0: Do not embed any metadata. 933 - 1: Embed MPEG defined metadata only. 934 - 2: Embed all metadata. */ 935 936 AACENC_CONTROL_STATE = 0xFF00, /*!< There is an automatic process which internally reconfigures the encoder instance 937 when a configuration parameter changed or an error occured. This paramerter allows 938 overwriting or getting the control status of this process. See ::AACENC_CTRLFLAGS. */ 939 940 AACENC_NONE = 0xFFFF /*!< ------ */ 941 942 } AACENC_PARAM; 943 944 945 #ifdef __cplusplus 946 extern "C" { 947 #endif 948 949 /** 950 * \brief Open an instance of the encoder. 951 * 952 * Allocate memory for an encoder instance with a functional range denoted by the function parameters. 953 * Preinitialize encoder instance with default configuration. 954 * 955 * \param phAacEncoder A pointer to an encoder handle. Initialized on return. 956 * \param encModules Specify encoder modules to be supported in this encoder instance: 957 * - 0x0: Allocate memory for all available encoder modules. 958 * - else: Select memory allocation regarding encoder modules. Following flags are possible and can be combined. 959 * - 0x01: AAC module. 960 * - 0x02: SBR module. 961 * - 0x04: PS module. 962 * - 0x10: Metadata module. 963 * - example: (0x01|0x02|0x04|0x10) allocates all modules and is equivalent to default configuration denotet by 0x0. 964 * \param maxChannels Number of channels to be allocated. This parameter can be used in different ways: 965 * - 0: Allocate maximum number of AAC and SBR channels as supported by the library. 966 * - nChannels: Use same maximum number of channels for allocating memory in AAC and SBR module. 967 * - nChannels | (nSbrCh<<8): Number of SBR channels can be different to AAC channels to save data memory. 968 * 969 * \return 970 * - AACENC_OK, on succes. 971 * - AACENC_INVALID_HANDLE, AACENC_MEMORY_ERROR, AACENC_INVALID_CONFIG, on failure. 972 */ 973 AACENC_ERROR aacEncOpen( 974 HANDLE_AACENCODER *phAacEncoder, 975 const UINT encModules, 976 const UINT maxChannels 977 ); 978 979 980 /** 981 * \brief Close the encoder instance. 982 * 983 * Deallocate encoder instance and free whole memory. 984 * 985 * \param phAacEncoder Pointer to the encoder handle to be deallocated. 986 * 987 * \return 988 * - AACENC_OK, on success. 989 * - AACENC_INVALID_HANDLE, on failure. 990 */ 991 AACENC_ERROR aacEncClose( 992 HANDLE_AACENCODER *phAacEncoder 993 ); 994 995 996 /** 997 * \brief Encode audio data. 998 * 999 * This function is mainly for encoding audio data. In addition the function can be used for an encoder (re)configuration 1000 * process. 1001 * - PCM input data will be retrieved from external input buffer until the fill level allows encoding a single frame. 1002 * This functionality allows an external buffer with reduced size in comparison to the AAC or HE-AAC audio frame length. 1003 * - If the value of the input samples argument is zero, just internal reinitialization will be applied if it is 1004 * requested. 1005 * - At the end of a file the flushing process can be triggerd via setting the value of the input samples argument to -1. 1006 * The encoder delay lines are fully flushed when the encoder returns no valid bitstream data AACENC_OutArgs::numOutBytes. 1007 * Furthermore the end of file is signaled by the return value AACENC_ENCODE_EOF. 1008 * - If an error occured in the previous frame or any of the encoder parameters changed, an internal reinitialization 1009 * process will be applied before encoding the incoming audio samples. 1010 * - The function can also be used for an independent reconfiguration process without encoding. The first parameter has to be a 1011 * valid encoder handle and all other parameters can be set to NULL. 1012 * - If the size of the external bitbuffer in outBufDesc is not sufficient for writing the whole bitstream, an internal 1013 * error will be the return value and a reconfiguration will be triggered. 1014 * 1015 * \param hAacEncoder A valid AAC encoder handle. 1016 * \param inBufDesc Input buffer descriptor, see AACENC_BufDesc: 1017 * - At least one input buffer with audio data is expected. 1018 * - Optionally a second input buffer with ancillary data can be fed. 1019 * \param outBufDesc Output buffer descriptor, see AACENC_BufDesc: 1020 * - Provide one output buffer for the encoded bitstream. 1021 * \param inargs Input arguments, see AACENC_InArgs. 1022 * \param outargs Output arguments, AACENC_OutArgs. 1023 * 1024 * \return 1025 * - AACENC_OK, on success. 1026 * - AACENC_INVALID_HANDLE, AACENC_ENCODE_ERROR, on failure in encoding process. 1027 * - AACENC_INVALID_CONFIG, AACENC_INIT_ERROR, AACENC_INIT_AAC_ERROR, AACENC_INIT_SBR_ERROR, AACENC_INIT_TP_ERROR, 1028 * AACENC_INIT_META_ERROR, on failure in encoder initialization. 1029 * - AACENC_ENCODE_EOF, when flushing fully concluded. 1030 */ 1031 AACENC_ERROR aacEncEncode( 1032 const HANDLE_AACENCODER hAacEncoder, 1033 const AACENC_BufDesc *inBufDesc, 1034 const AACENC_BufDesc *outBufDesc, 1035 const AACENC_InArgs *inargs, 1036 AACENC_OutArgs *outargs 1037 ); 1038 1039 1040 /** 1041 * \brief Acquire info about present encoder instance. 1042 * 1043 * This function retrieves information of the encoder configuration. In addition to informative internal states, 1044 * a configuration data block of the current encoder settings will be returned. The format is either Audio Specific Config 1045 * in case of Raw Packets transport format or StreamMuxConfig in case of LOAS/LATM transport format. The configuration 1046 * data block is binary coded as specified in ISO/IEC 14496-3 (MPEG-4 audio), to be used directly for MPEG-4 File Format 1047 * or RFC3016 or RFC3640 applications. 1048 * 1049 * \param hAacEncoder A valid AAC encoder handle. 1050 * \param pInfo Pointer to AACENC_InfoStruct. Filled on return. 1051 * 1052 * \return 1053 * - AACENC_OK, on succes. 1054 * - AACENC_INIT_ERROR, on failure. 1055 */ 1056 AACENC_ERROR aacEncInfo( 1057 const HANDLE_AACENCODER hAacEncoder, 1058 AACENC_InfoStruct *pInfo 1059 ); 1060 1061 1062 /** 1063 * \brief Set one single AAC encoder parameter. 1064 * 1065 * This function allows configuration of all encoder parameters specified in ::AACENC_PARAM. Each parameter must be 1066 * set with a separate function call. An internal validation of the configuration value range will be done and an 1067 * internal reconfiguration will be signaled. The actual configuration adoption is part of the subsequent aacEncEncode() call. 1068 * 1069 * \param hAacEncoder A valid AAC encoder handle. 1070 * \param param Parameter to be set. See ::AACENC_PARAM. 1071 * \param value Parameter value. See parameter description in ::AACENC_PARAM. 1072 * 1073 * \return 1074 * - AACENC_OK, on success. 1075 * - AACENC_INVALID_HANDLE, AACENC_UNSUPPORTED_PARAMETER, AACENC_INVALID_CONFIG, on failure. 1076 */ 1077 AACENC_ERROR aacEncoder_SetParam( 1078 const HANDLE_AACENCODER hAacEncoder, 1079 const AACENC_PARAM param, 1080 const UINT value 1081 ); 1082 1083 1084 /** 1085 * \brief Get one single AAC encoder parameter. 1086 * 1087 * This function is the complement to aacEncoder_SetParam(). After encoder reinitialization with user defined settings, 1088 * the internal status can be obtained of each parameter, specified with ::AACENC_PARAM. 1089 * 1090 * \param hAacEncoder A valid AAC encoder handle. 1091 * \param param Parameter to be returned. See ::AACENC_PARAM. 1092 * 1093 * \return Internal configuration value of specifed parameter ::AACENC_PARAM. 1094 */ 1095 UINT aacEncoder_GetParam( 1096 const HANDLE_AACENCODER hAacEncoder, 1097 const AACENC_PARAM param 1098 ); 1099 1100 1101 /** 1102 * \brief Get information about encoder library build. 1103 * 1104 * Fill a given LIB_INFO structure with library version information. 1105 * 1106 * \param info Pointer to an allocated LIB_INFO struct. 1107 * 1108 * \return 1109 * - AACENC_OK, on success. 1110 * - AACENC_INVALID_HANDLE, AACENC_INIT_ERROR, on failure. 1111 */ 1112 AACENC_ERROR aacEncGetLibInfo( 1113 LIB_INFO *info 1114 ); 1115 1116 1117 #ifdef __cplusplus 1118 } 1119 #endif 1120 1121 #endif /* _AAC_ENC_LIB_H_ */ 1122