Nothing Special   »   [go: up one dir, main page]

Aac Encoder

Download as pdf or txt
Download as pdf or txt
You are on page 1of 47

Advanced Audio Coding Encoder

Library

MPEG-2 and MPEG-4 AAC Low-Complexity,


MPEG-4 High-Efficiency AAC v2
MPEG-4 Enhanced Low Delay AAC v2
encoder

Fraunhofer Institut fuer Integrierte Schaltungen IIS,


Fraunhofer Institute for Integrated Circuits IIS
http://www.iis.fraunhofer.de/amm

Disclaimer
Information in this document is subject to change without notice. Companies, names, and data used in examples
herein are fictitious unless otherwise noted. Product and corporate names may be trademarks or registered trademarks
of other companies. They are used for explanation only, with no intent to infringe. All rights reserved. No part
of this publication may be reproduced or utilized in any form or by any means, electronic or mechanical, including
photocopying and microfilm, without permission in writing from the publisher.

Revision 3.4.19 , December 15, 2015


Contents

1 Introduction 1
1.1 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Encoder Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 Library Usage 3
2.1 API Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2 Calling Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.3 Encoder Instance Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.4 Input/Output Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4.1 Provide Buffer Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4.2 Provide Input/Output Argument Lists . . . . . . . . . . . . . . . . . . . . . . . . 5
2.5 Feed Input Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.6 Output Bitstream Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.7 Meta Data Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.8 Encoder Reconfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.9 Encoder Parametrization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.9.1 Mandatory Encoder Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.9.2 Channel Mode Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.9.3 Audio Quality Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.9.4 ELD Auto Configuration Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.10 Audio Channel Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.11 Supported Bitrates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.12 Recommended Sampling Rate and Bitrate Combinations . . . . . . . . . . . . . . . . . . 10
2.12.1 AAC-LC, HE-AAC, HE-AACv2 in Dualrate SBR mode. . . . . . . . . . . . . . . 10
2.12.2 AAC-LD, AAC-ELD, AAC-ELD with SBR in Dualrate SBR mode. . . . . . . . . 11
2.12.3 AAC-ELD with SBR in Downsampled SBR mode. . . . . . . . . . . . . . . . . . 11

3 Encoder Behaviour 13
3.1 Bandwidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2 Frame Sizes & Bit Reservoir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2.1 Estimating Average Frame Sizes . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3 Encoder Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4 Class Index 17
4.1 Class List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

5 File Index 19
5.1 File List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

6 Class Documentation 21
6.1 AACENC_BufDesc Struct Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.1.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.1.2 Member Data Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
ii CONTENTS

6.1.2.1 bufElSizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.1.2.2 bufferIdentifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.1.2.3 bufs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.1.2.4 bufSizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.1.2.5 numBufs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.2 AACENC_InArgs Struct Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.2.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.2.2 Member Data Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.2.2.1 numAncBytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.2.2.2 numInSamples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.3 AACENC_InfoStruct Struct Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.3.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3.2 Member Data Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3.2.1 confBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3.2.2 confSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3.2.3 encoderDelay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3.2.4 frameLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3.2.5 inBufFillLevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3.2.6 inputChannels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3.2.7 maxAncBytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.3.2.8 maxOutBufBytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.4 AACENC_MetaData Struct Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.4.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.4.2 Member Data Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.4.2.1 centerMixLevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.4.2.2 comp_profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.4.2.3 comp_TargetRefLevel . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.4.2.4 dolbySurroundMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.4.2.5 drc_profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.4.2.6 drc_TargetRefLevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.4.2.7 ETSI_DmxLvl_present . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.4.2.8 PCE_mixdown_idx_present . . . . . . . . . . . . . . . . . . . . . . . . 25
6.4.2.9 prog_ref_level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.4.2.10 prog_ref_level_present . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.4.2.11 surroundMixLevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.5 AACENC_OutArgs Struct Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
6.5.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.5.2 Member Data Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.5.2.1 numAncBytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.5.2.2 numInSamples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.5.2.3 numOutBytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

7 File Documentation 27
7.1 aacenc_lib.h File Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
7.1.1 Detailed Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
7.1.2 Typedef Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.1.2.1 HANDLE_AACENCODER . . . . . . . . . . . . . . . . . . . . . . . 30
7.1.3 Enumeration Type Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.1.3.1 AACENC_BufferIdentifier . . . . . . . . . . . . . . . . . . . . . . . . 30
7.1.3.2 AACENC_CTRLFLAGS . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.1.3.3 AACENC_ERROR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
7.1.3.4 AACENC_METADATA_DRC_PROFILE . . . . . . . . . . . . . . . . 31
7.1.3.5 AACENC_PARAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
7.1.4 Function Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
CONTENTS iii

7.1.4.1 aacEncClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7.1.4.2 aacEncEncode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7.1.4.3 aacEncGetLibInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
7.1.4.4 aacEncInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
7.1.4.5 aacEncoder_GetParam . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
7.1.4.6 aacEncoder_SetParam . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
7.1.4.7 aacEncOpen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Chapter 1

Introduction

1.1 Scope
This document describes the high-level interface and usage of the ISO/MPEG-2/4 AAC Encoder library
developed by the Fraunhofer Institute for Integrated Circuits (IIS).
The library implements encoding on the basis of the MPEG-2 and MPEG-4 AAC Low-Complexity stan-
dard, and depending on the library’s configuration, MPEG-4 High-Efficiency AAC v2 and/or AAC-ELD
standard.
All references to SBR (Spectral Band Replication) are only applicable to HE-AAC or AAC-ELD versions
of the library. All references to PS (Parametric Stereo) are only applicable to HE-AAC v2 versions of the
library.

1.2 Encoder Basics


This document can only give a rough overview about the ISO/MPEG-2 and ISO/MPEG-4 AAC audio
coding standard. To understand all the terms in this document, you are encouraged to read the following
documents.

• ISO/IEC 13818-7 (MPEG-2 AAC), which defines the syntax of MPEG-2 AAC audio bitstreams.

• ISO/IEC 14496-3 (MPEG-4 AAC, subparts 1 and 4), which defines the syntax of MPEG-4 AAC
audio bitstreams.
• Lutzky, Schuller, Gayer, Krämer, Wabnik, "A guideline to audio codec delay", 116th AES Conven-
tion, May 8, 2004

MPEG Advanced Audio Coding is based on a time-to-frequency mapping of the signal. The signal is
partitioned into overlapping portions and transformed into frequency domain. The spectral components are
then quantized and coded.
An MPEG-2 or MPEG-4 AAC audio bitstream is composed of frames. Contrary to MPEG-1/2 Layer-3
(mp3), the length of individual frames is not restricted to a fixed number of bytes, but can take on any
length between 1 and 768 bytes.
2 Introduction
Chapter 2

Library Usage

2.1 API Files


All API header files are located in the folder /include of the release package. All header files are provided
for usage in C/C++ programs. The AAC encoder library API functions are located at aacenc_lib.h.
In binary releases the encoder core resides in statically linkable libraries called for example libAACenc.-
a/libFDK.a (LINUX) or FDK_fastaaclib.lib (MS Visual C++) for the plain AAC-LC core encoder and
libSBRenc.a (LINUX) or FDK_sbrEncLib.lib (MS Visual C++) for the SBR (Spectral Band Replication)
and PS (Parametric Stereo) modules.

2.2 Calling Sequence


For encoding of ISO/MPEG-2/4 AAC bitstreams the following sequence is mandatory. Input read and
output write functions as well as the corresponding open and close functions are left out, since they may
be implemented differently according to the user’s specific requirements. The example implementation in
main.cpp uses file-based input/output.

1. Call aacEncOpen() to allocate encoder instance with required configuration.

2. Call aacEncoder_SetParam() for each parameter to be set. AOT, samplingrate, channelMode, bitrate
and transport type are mandatory.

ErrorStatus = aacEncoder_SetParam(hAacEncoder, parameter,


value);

3. Call aacEncEncode() with NULL parameters to initialize encoder instance with present parameter
set.

4. Call aacEncInfo() to retrieve a configuration data block to be transmitted out of band. This is required
when using RFC3640 or RFC3016 like transport.
4 Library Usage

5. Encode input audio data in loop.

Feed input buffer with new audio data and provide input/output arguments to aacEncEncode().

Write output data to file or audio device.

6. Call aacEncClose() and destroy encoder instance.

2.3 Encoder Instance Allocation


The assignment of the aacEncOpen() function is very flexible and can be used in the following way.

• If the amount of memory consumption is not an issue, the encoder instance can be allocated for the
maximum number of possible audio channels (for example 6 or 8) with the full functional range
supported by the library. This is the default open procedure for the AAC encoder if memory con-
sumption does not need to be minimized.

aacEncOpen(&hAacEncoder,0,0)

• If the required MPEG-4 AOTs do not call for the full functional range of the library, encoder modules
can be allocated selectively.

------------------------------------------------------
AAC | SBR | PS | MD | FLAGS | value
-----+-----+-----+----+-----------------------+-------
X | - | - | - | (0x01) | 0x01
X | X | - | - | (0x01|0x02) | 0x03
X | X | X | - | (0x01|0x02|0x04) | 0x07
X | - | - | X | (0x01 |0x10) | 0x11
X | X | - | X | (0x01|0x02 |0x10) | 0x13
X | X | X | X | (0x01|0x02|0x04|0x10) | 0x17
------------------------------------------------------
- AAC: Allocate AAC Core Encoder module.
- SBR: Allocate Spectral Band Replication module.
- PS: Allocate Parametric Stereo module.
- MD: Allocate Meta Data module within AAC encoder.

aacEncOpen(&hAacEncoder,value,0)

• Specifying the maximum number of channels to be supported in the encoder instance can be done as
follows.

– For example allocate an encoder instance which supports 2 channels for all supported AOTs.
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.
aacEncOpen(&hAacEncoder,0,2)
2.4 Input/Output Arguments 5

– Additionally the maximum number of supported channels in the SBR module can be denoted
separately.
In this example the encoder instance provides a maximum of 6 channels out of which up to 2
channels support SBR. This encoder instance can produce for example 5.1 channel AAC-LC
streams or stereo HE-AAC (v2) streams. HE-AAC 5.1 multi channel is not possible since only
2 out of 6 channels support SBR, which saves data memory.
aacEncOpen(&hAacEncoder,0,6|(2<<8))

2.4 Input/Output Arguments

2.4.1 Provide Buffer Descriptors

In the present encoder API, the input and output buffers are described with buffer descriptors. This mech-
anism allows a flexible handling 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 buffers describ-
ing superframing data in DAB+ or DRM+.
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 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. The output buffer size should be 6144 bits per channel excluding the LFE
channel. If the output data does not fit into the provided buffer, an AACENC_ERROR will be returned by
aacEncEncode().

All input and output buffer must be clustered in input and output buffer arrays.

Allocate buffer descriptors

Initialize input buffer descriptor

Initialize output buffer descriptor

2.4.2 Provide Input/Output Argument Lists

The input and output arguments of an aacEncEncode() call are described in argument structures.
6 Library Usage

2.5 Feed Input Buffer


The input buffer should be handled as a modulo buffer. New audio data in the form of pulse-code- modu-
lated samples (PCM) must be read from external and be fed to the input buffer depending on its fill level.
The required sample bitrate (represented by the data type INT_PCM which is 16, 24 or 32 bits wide) is
fixed and depends on library configuration (usually 16 bit).

After the encoder’s internal buffer is fed with incoming audio samples, and aacEncEncode() processed the
new input data, update/move remaining samples in input buffer, simulating a modulo buffer:

2.6 Output Bitstream Data


If any AAC bitstream data is available, write it to output file or device. This can be done once the following
condition is true:

If you use file I/O then for example call mpegFileWrite_Write() from the library libMpegFileWrite

2.7 Meta Data Configuration


If the present library is configured with Metadata support, it is possible to insert meta data side info into
the generated audio bitstream while encoding.
To work with meta data the encoder instance has to be allocated with meta data support. The meta data
mode must be be configured with the AACENC_METADATA_MODE parameter and aacEncoder_Set-
Param() function.

aacEncoder_SetParam(hAacEncoder, AACENC_METADATA_MODE
, 0-2);

This configuration indicates how to embed meta data into bitstrem. Either no insertion, MPEG or ETSI
style. The meta data itself must be specified within the meta data setup structure AACENC_MetaData.
Changing one of the AACENC_MetaData setup parameters can be achieved from outside the library within
IN_METADATA_SETUP input buffer. There is no need to supply meta data setup structure every frame.
If there is no new meta setup data available, the encoder uses the previous setup or the default configuration
in initial state.
In general the audio compressor and limiter within the encoder library can be configured with the AACEN-
C_METADATA_DRC_PROFILE parameter AACENC_MetaData::drc_profile and and AACENC_Meta-
Data::comp_profile.
2.8 Encoder Reconfiguration 7

2.8 Encoder Reconfiguration


The encoder library allows reconfiguration of the encoder instance with new settings continuously between
encoding frames. Each parameter to be changed must be set with a single aacEncoder_SetParam() call.
The internal status of each parameter can be retrieved with an aacEncoder_GetParam() call.
There is no stand-alone reconfiguration function available. When parameters were modified from outside
the library, an internal control mechanism triggers the necessary reconfiguration process which will be
applied at the beginning of the following aacEncEncode() call. This state can be observed from external
via the AACENC_INIT_STATUS and aacEncoder_GetParam() function. The reconfiguration process can
also be applied immediately when all parameters of an aacEncEncode() call are NULL with a valid encoder
handle.
The internal reconfiguration process can be controlled from extern with the following access.

aacEncoder_SetParam(hAacEncoder, AACENC_CONTROL_STATE
, AACENC_CTRLFLAGS);

2.9 Encoder Parametrization


All parameteres listed in AACENC_PARAM can be modified within an encoder instance.

2.9.1 Mandatory Encoder Parameters

The following parameters must be specified when the encoder instance is initialized.

aacEncoder_SetParam(hAacEncoder, AACENC_AOT, value


);
aacEncoder_SetParam(hAacEncoder, AACENC_BITRATE
, value);
aacEncoder_SetParam(hAacEncoder, AACENC_SAMPLERATE
, value);
aacEncoder_SetParam(hAacEncoder, AACENC_CHANNELMODE
, value);

Beyond that is an internal auto mode which preinitizializes the AACENC_BITRATE parameter if the
parameter was not set from extern. The bitrate depends on the number of effective channels and sampling
rate and is determined as follows.

AAC-LC (AOT_AAC_LC): 1.5 bits per sample


HE-AAC (AOT_SBR): 0.625 bits per sample (dualrate sbr)
HE-AAC (AOT_SBR): 1.125 bits per sample (downsampled sbr)
HE-AAC v2 (AOT_PS): 0.5 bits per sample

2.9.2 Channel Mode Configuration

The input audio data is described with the AACENC_CHANNELMODE parameter in the aacEncoder_-
SetParam() call. It is not possible to use the encoder instance with a ’number of input channels’ argument.
Instead, the channelMode must be set as follows.

aacEncoder_SetParam(hAacEncoder, AACENC_CHANNELMODE
, value);

The parameter is specified in ::CHANNEL_MODE and can be mapped from the number of input channels
in the following way.
8 Library Usage

2.9.3 Audio Quality Considerations

The default encoder configuration is suggested to be used. Encoder tools such as TNS and PNS are activated
by default and are internally controlled (see Encoder Tools).
There is an additional quality parameter called AACENC_AFTERBURNER. In the default configuration
this quality switch is deactivated because it would cause a workload increase which might be significant.
If workload is not an issue in the application we recommended to activate this feature.

aacEncoder_SetParam(hAacEncoder, AACENC_AFTERBURNER
, 1);

2.9.4 ELD Auto Configuration Mode

For ELD configuration a so called auto configurator is available which configures SBR and the SBR ratio
by itself. The configurator is used when the encoder parameter AACENC_SBR_MODE and AACENC_-
SBR_RATIO are not set explicitely.
Based on sampling rate and chosen bitrate per channel a reasonable SBR configuration will be used.

------------------------------------------------------------
Sampling Rate | Channel Bitrate | SBR | SBR Ratio
-----------------+-----------------+------+-----------------
]min, 16] kHz | min - 27999 | on | downsampled SBR
| 28000 - max | off | ---
-----------------+-----------------+------+-----------------
]16 - 24] kHz | min - 39999 | on | downsampled SBR
| 40000 - max | off | ---
-----------------+-----------------+------+-----------------
]24 - 32] kHz | min - 27999 | on | dualrate SBR
| 28000 - 55999 | on | downsampled SBR
| 56000 - max | off | ---
-----------------+-----------------+------+-----------------
]32 - 44.1] kHz | min - 63999 | on | dualrate SBR
| 64000 - max | off | ---
-----------------+-----------------+------+-----------------
]44.1 - 48] kHz | min - 63999 | on | dualrate SBR
| 64000 - max | off | ---
------------------------------------------------------------

2.10 Audio Channel Configuration


The MPEG standard refers often to the so-called Channel Configuration. This Channel Configuration is
used for a fixed Channel Mapping. The configurations 1-7 are predefined in MPEG standard and used
for implicit signalling within the encoded bitstream. For user defined Configurations the Channel Con-
figuration is set to 0 and the Channel Mapping must be explecitly described with an appropriate Program
Config Element. The present Encoder implementation does not allow the user to configure this Channel
Configuration from extern. The Encoder implementation supports fixed Channel Modes which are mapped
to Channel Configuration as follow.

-------------------------------------------------------------------------------
ChannelMode | ChCfg | front_El | side_El | back_El | lfe_El
-----------------------+--------+---------------+----------+----------+--------
MODE_1 | 1 | SCE | | |
MODE_2 | 2 | CPE | | |
MODE_1_2 | 3 | SCE, CPE | | |
MODE_1_2_1 | 4 | SCE, CPE | | SCE |
MODE_1_2_2 | 5 | SCE, CPE | | CPE |
MODE_1_2_2_1 | 6 | SCE, CPE | | CPE | LFE
MODE_1_2_2_2_1 | 7 | SCE, CPE, CPE | | CPE | LFE
2.11 Supported Bitrates 9

-----------------------+--------+---------------+----------+----------+--------
MODE_7_1_REAR_SURROUND | 0 | SCE, CPE | | CPE, CPE | LFE
MODE_7_1_FRONT_CENTER | 0 | SCE, CPE, CPE | | CPE | LFE
-------------------------------------------------------------------------------
- SCE: Single Channel Element.
- CPE: Channel Pair.
- SCE: Low Frequency Element.

Moreover, the Table describes all fixed Channel Elements for each Channel Mode which are assigned to a
speaker arrangement. The arrangement includes front, side, back and lfe Audio Channel Elements.
This mapping of Audio Channel Elements is defined in MPEG standard for Channel Config 1-7. The
Channel assignment for MODE_1_1, MODE_2_2 and MODE_2_1 is used from the ARIB standard. All
other configurations are defined as suggested in MPEG.
In case of Channel Config 0 or writing matrix mixdown coefficients, the encoder enables the writing of
Program Config Element itself as described in encPCE. The configuration used in Program Config Element
refers to the denoted Table.
Beside the Channel Element assignment the Channel Modes are resposible for audio input data channel
mapping. The Channel Mapping of the audio data depends on the selected AACENC_CHANNELORDER
which can be MPEG or WAV like order.
Following Table describes the complete channel mapping for both Channel Order configurations.

---------------------------------------------------------------------------------------
ChannelMode | MPEG-Channelorder | WAV-Channelorder
-----------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
MODE_1 | 0 | | | | | | | | 0 | | | | | | |
MODE_2 | 0 | 1 | | | | | | | 0 | 1 | | | | | |
MODE_1_2 | 0 | 1 | 2 | | | | | | 2 | 0 | 1 | | | | |
MODE_1_2_1 | 0 | 1 | 2 | 3 | | | | | 2 | 0 | 1 | 3 | | | |
MODE_1_2_2 | 0 | 1 | 2 | 3 | 4 | | | | 2 | 0 | 1 | 3 | 4 | | |
MODE_1_2_2_1 | 0 | 1 | 2 | 3 | 4 | 5 | | | 2 | 0 | 1 | 4 | 5 | 3 | |
MODE_1_2_2_2_1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 6 | 7 | 0 | 1 | 4 | 5 | 3
-----------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---
MODE_7_1_REAR_SURROUND | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 0 | 1 | 6 | 7 | 4 | 5 | 3
MODE_7_1_FRONT_CENTER | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 2 | 6 | 7 | 0 | 1 | 4 | 5 | 3
---------------------------------------------------------------------------------------

The denoted mapping is important for correct audio channel assignment when using MPEG or WAV
ordering. The incoming audio channels are distributed MPEG like starting at the front channels and ending
at the back channels. The distribution is used as described in Table concering Channel Config and fix
channel elements. Please see the following example for clarification.

Example: MODE_1_2_2_1 - WAV-Channelorder 5.1


------------------------------------------
Input Channel | Coder Channel
--------------------+---------------------
2 (front center) | 0 (SCE channel)
0 (left center) | 1 (1st of 1st CPE)
1 (right center) | 2 (2nd of 1st CPE)
4 (left surround) | 3 (1st of 2nd CPE)
5 (right surround) | 4 (2nd of 2nd CPE)
3 (LFE) | 5 (LFE)
------------------------------------------

2.11 Supported Bitrates


The FDK AAC Encoder provides a wide range of supported bitrates. The minimum and maximum allowed
bitrate depends on the Audio Object Type. For AAC-LC the minimum bitrate is the bitrate that is required
10 Library Usage

to write the most basic and minimal valid bitstream. It consists of the bitstream format header information
and other static/mandatory information within the AAC payload. The maximum AAC framesize allowed
by the MPEG-4 standard determines the maximum allowed bitrate for AAC-LC. For HE-AAC and HE-A-
AC v2 a library internal look-up table is used.
A good working point in terms of audio quality, sampling rate and bitrate, is at 1 to 1.5 bits/audio sample
for AAC-LC, 0.625 bits/audio sample for dualrate HE-AAC, 1.125 bits/audio sample for downsampled H-
E-AAC and 0.5 bits/audio sample for HE-AAC v2. For example for one channel with a sampling frequency
of 48 kHz, the range from 48 kbit/s to 72 kbit/s achieves reasonable audio quality for AAC-LC.
For HE-AAC and HE-AAC v2 the lowest possible audio input sampling frequency is 16 kHz because then
the AAC-LC core encoder operates in dual rate mode at its lowest possible sampling frequency, which is 8
kHz. HE-AAC v2 requires stereo input audio data.
Please note that in HE-AAC or HE-AAC v2 mode the encoder supports much higher bitrates than are
appropriate for HE-AAC or HE-AAC v2. For example, at a bitrate of more than 64 kbit/s for a stereo audio
signal at 44.1 kHz it usually makes sense to use AAC-LC, which will produce better audio quality at that
bitrate than HE-AAC or HE-AAC v2.

2.12 Recommended Sampling Rate and Bitrate Combinations


The following table provides an overview of recommended encoder configuration parameters which we
determined by virtue of numerous listening tests.

2.12.1 AAC-LC, HE-AAC, HE-AACv2 in Dualrate SBR mode.


-----------------------------------------------------------------------------------
Audio Object Type | Bit Rate Range | Supported | Preferred | No. of
| [bit/s] | Sampling Rates | Sampl. | Chan.
| | [kHz] | Rate |
| | | [kHz] |
-------------------+------------------+-----------------------+------------+-------
AAC LC + SBR + PS | 8000 - 11999 | 22.05, 24.00 | 24.00 | 2
AAC LC + SBR + PS | 12000 - 17999 | 32.00 | 32.00 | 2
AAC LC + SBR + PS | 18000 - 39999 | 32.00, 44.10, 48.00 | 44.10 | 2
AAC LC + SBR + PS | 40000 - 56000 | 32.00, 44.10, 48.00 | 48.00 | 2
-------------------+------------------+-----------------------+------------+-------
AAC LC + SBR | 8000 - 11999 | 22.05, 24.00 | 24.00 | 1
AAC LC + SBR | 12000 - 17999 | 32.00 | 32.00 | 1
AAC LC + SBR | 18000 - 39999 | 32.00, 44.10, 48.00 | 44.10 | 1
AAC LC + SBR | 40000 - 56000 | 32.00, 44.10, 48.00 | 48.00 | 1
AAC LC + SBR | 16000 - 27999 | 32.00, 44.10, 48.00 | 32.00 | 2
AAC LC + SBR | 28000 - 63999 | 32.00, 44.10, 48.00 | 44.10 | 2
AAC LC + SBR | 64000 - 128000 | 32.00, 44.10, 48.00 | 48.00 | 2
-------------------+------------------+-----------------------+------------+-------
AAC LC + SBR | 64000 - 69999 | 32.00, 44.10, 48.00 | 32.00 | 5, 5.1
AAC LC + SBR | 70000 - 159999 | 32.00, 44.10, 48.00 | 44.10 | 5, 5.1
AAC LC + SBR | 160000 - 245999 | 32.00, 44.10, 48.00 | 48.00 | 5
AAC LC + SBR | 160000 - 265999 | 32.00, 44.10, 48.00 | 48.00 | 5.1
-------------------+------------------+-----------------------+------------+-------
AAC LC | 8000 - 15999 | 11.025, 12.00, 16.00 | 12.00 | 1
AAC LC | 16000 - 23999 | 16.00 | 16.00 | 1
AAC LC | 24000 - 31999 | 16.00, 22.05, 24.00 | 24.00 | 1
AAC LC | 32000 - 55999 | 32.00 | 32.00 | 1
AAC LC | 56000 - 160000 | 32.00, 44.10, 48.00 | 44.10 | 1
AAC LC | 160001 - 288000 | 48.00 | 48.00 | 1
-------------------+------------------+-----------------------+------------+-------
AAC LC | 16000 - 23999 | 11.025, 12.00, 16.00 | 12.00 | 2
AAC LC | 24000 - 31999 | 16.00 | 16.00 | 2
AAC LC | 32000 - 39999 | 16.00, 22.05, 24.00 | 22.05 | 2
2.12 Recommended Sampling Rate and Bitrate Combinations 11

AAC LC | 40000 - 95999 | 32.00 | 32.00 | 2


AAC LC | 96000 - 111999 | 32.00, 44.10, 48.00 | 32.00 | 2
AAC LC | 112000 - 320001 | 32.00, 44.10, 48.00 | 44.10 | 2
AAC LC | 320002 - 576000 | 48.00 | 48.00 | 2
-------------------+------------------+-----------------------+------------+-------
AAC LC | 160000 - 239999 | 32.00 | 32.00 | 5, 5.1
AAC LC | 240000 - 279999 | 32.00, 44.10, 48.00 | 32.00 | 5, 5.1
AAC LC | 280000 - 800000 | 32.00, 44.10, 48.00 | 44.10 | 5, 5.1
-----------------------------------------------------------------------------------

2.12.2 AAC-LD, AAC-ELD, AAC-ELD with SBR in Dualrate SBR mode.


-----------------------------------------------------------------------------------
Audio Object Type | Bit Rate Range | Supported | Preferred | No. of
| [bit/s] | Sampling Rates | Sampl. | Chan.
| | [kHz] | Rate |
| | | [kHz] |
-------------------+------------------+-----------------------+------------+-------
ELD + SBR | 18000 - 24999 | 32.00 - 44.10 | 32.00 | 1
ELD + SBR | 25000 - 31999 | 32.00 - 48.00 | 32.00 | 1
ELD + SBR | 32000 - 64000 | 32.00 - 48.00 | 48.00 | 1
-------------------+------------------+-----------------------+------------+-------
ELD + SBR | 32000 - 51999 | 32.00 - 48.00 | 44.10 | 2
ELD + SBR | 52000 - 128000 | 32.00 - 48.00 | 48.00 | 2
-------------------+------------------+-----------------------+------------+-------
ELD + SBR | 72000 - 160000 | 44.10 - 48.00 | 48.00 | 3
-------------------+------------------+-----------------------+------------+-------
ELD + SBR | 96000 - 212000 | 44.10 - 48.00 | 48.00 | 4
-------------------+------------------+-----------------------+------------+-------
ELD + SBR | 120000 - 246000 | 44.10 - 48.00 | 48.00 | 5
-------------------+------------------+-----------------------+------------+-------
ELD + SBR | 120000 - 266000 | 44.10 - 48.00 | 48.00 | 5.1
-------------------+------------------+-----------------------+------------+-------
LD, ELD | 16000 - 19999 | 16.00 - 24.00 | 16.00 | 1
LD, ELD | 20000 - 39999 | 16.00 - 32.00 | 24.00 | 1
LD, ELD | 40000 - 49999 | 22.05 - 32.00 | 32.00 | 1
LD, ELD | 50000 - 61999 | 24.00 - 44.10 | 32.00 | 1
LD, ELD | 62000 - 84999 | 32.00 - 48.00 | 44.10 | 1
LD, ELD | 85000 - 192000 | 44.10 - 48.00 | 48.00 | 1
-------------------+------------------+-----------------------+------------+-------
LD, ELD | 64000 - 75999 | 24.00 - 32.00 | 32.00 | 2
LD, ELD | 76000 - 97999 | 24.00 - 44.10 | 32.00 | 2
LD, ELD | 98000 - 135999 | 32.00 - 48.00 | 44.10 | 2
LD, ELD | 136000 - 384000 | 44.10 - 48.00 | 48.00 | 2
-------------------+------------------+-----------------------+------------+-------
LD, ELD | 96000 - 113999 | 24.00 - 32.00 | 32.00 | 3
LD, ELD | 114000 - 146999 | 24.00 - 44.10 | 32.00 | 3
LD, ELD | 147000 - 203999 | 32.00 - 48.00 | 44.10 | 3
LD, ELD | 204000 - 576000 | 44.10 - 48.00 | 48.00 | 3
-------------------+------------------+-----------------------+------------+-------
LD, ELD | 128000 - 151999 | 24.00 - 32.00 | 32.00 | 4
LD, ELD | 152000 - 195999 | 24.00 - 44.10 | 32.00 | 4
LD, ELD | 196000 - 271999 | 32.00 - 48.00 | 44.10 | 4
LD, ELD | 272000 - 768000 | 44.10 - 48.00 | 48.00 | 4
-------------------+------------------+-----------------------+------------+-------
LD, ELD | 160000 - 189999 | 24.00 - 32.00 | 32.00 | 5
LD, ELD | 190000 - 244999 | 24.00 - 44.10 | 32.00 | 5
LD, ELD | 245000 - 339999 | 32.00 - 48.00 | 44.10 | 5
LD, ELD | 340000 - 960000 | 44.10 - 48.00 | 48.00 | 5
-----------------------------------------------------------------------------------

2.12.3 AAC-ELD with SBR in Downsampled SBR mode.


-----------------------------------------------------------------------------------
12 Library Usage

Audio Object Type | Bit Rate Range | Supported | Preferred | No. of


| [bit/s] | Sampling Rates | Sampl. | Chan.
| | [kHz] | Rate |
| | | [kHz] |
-------------------+------------------+-----------------------+------------+-------
ELD + SBR | 18000 - 24999 | 16.00 - 22.05 | 22.05 | 1
(downsampled SBR) | 25000 - 35999 | 22.05 - 32.00 | 24.00 | 1
| 36000 - 64000 | 32.00 - 48.00 | 32.00 | 1
-----------------------------------------------------------------------------------
Chapter 3

Encoder Behaviour

3.1 Bandwidth
The FDK AAC encoder usually does not use the full frequency range of the input signal, but restricts the
bandwidth according to certain library-internal settings. They can be changed in the table "bandWidth-
Table" in the file bandwidth.cpp (if available).
The encoder API provides the AACENC_BANDWIDTH parameter to adjust the bandwidth explicitly.

aacEncoder_SetParam(hAacEncoder, AACENC_BANDWIDTH
, value);

However it is not recommended to change these settings, because they are based on numerious listening
tests and careful tweaks to ensure the best overall encoding quality.
Theoretically a signal of for example 48 kHz can contain frequencies up to 24 kHz, but to use this full
range in an audio encoder usually does not make sense. Usually the encoder has a very limited amount
of bits to spend (typically 128 kbit/s for stereo 48 kHz content) and to allow full range bandwidth would
waste a lot of these bits for frequencies the human ear is hardly able to perceive anyway, if at all. Hence
it is wise to use the available bits for the really important frequency range and just skip the rest. At lower
bitrates (e. g. <= 80 kbit/s for stereo 48 kHz content) the encoder will choose an even smaller bandwidth,
because an encoded signal with smaller bandwidth and hence less artifacts sounds better than a signal with
higher bandwidth but then more coding artefacts across all frequencies. These artefacts would occur if
small bitrates and high bandwidths are chosen because the available bits are just not enough to encode all
frequencies well.
Unfortunately some people evaluate encoding quality based on possible bandwidth as well, but it is a
two-sided sword considering the trade-off described above.
Another aspect is workload consumption. The higher the allowed bandwidth, the more frequency lines
have to be processed, which in turn increases the workload.

3.2 Frame Sizes & Bit Reservoir


For AAC there is a difference between constant bit rate and constant frame length due to the so-called
bit reservoir technique, which allows the encoder to use less bits in an AAC frame for those audio signal
sections which are easy to encode, and then spend them at a later point in time for more complex audio
sections. The extent to which this "bit exchange" is done is limited to allow for reliable and relatively low
14 Encoder Behaviour

delay real time streaming. Over a longer period in time the bitrate will be constant in the AAC constant
bitrate mode, e.g. for ISDN transmission. This means that in AAC each bitstream frame will in general
have a different length in bytes but over time it will reach the target bitrate. One could also make an MPEG
compliant AAC encoder which always produces constant length packages for each AAC frame, but the
audio quality would be considerably worse since the bit reservoir technique would have to be switched off
completely. A higher bit rate would have to be used to get the same audio quality as with an enabled bit
reservoir.
The maximum AAC frame length, regardless of the available bit reservoir, is defined as 6144 bits per
channel.
For mp3 by the way, the same bit reservoir technique exists, but there each bit stream frame has a constant
length for a given bit rate (ignoring the padding byte). In mp3 there is a so-called "back pointer" which
tells the decoder which bits belong to the current mp3 frame - and in general some or many bits have been
transmitted in an earlier mp3 frame. Basically this leads to the same "bit exchange between mp3 frames"
as in AAC but with virtually constant length frames.
This variable frame length at "constant bit rate" is not something special in this Fraunhofer IIS AAC
encoder. AAC has been designed in that way.

3.2.1 Estimating Average Frame Sizes

A HE-AAC v1 or v2 audio frame contains 2048 PCM samples per channel (there is also one mode with
1920 samples per channel but this is only for special purposes such as DAB+ digital radio).
The number of HE-AAC frames N _F RAM ES per second at 44.1 kHz is:

N _F RAM ES = 44100/2048 = 21.5332

At a bit rate of 8 kbps the average number of bits per frame N _BIT S_P ER_F RAM E is:

N _BIT S_P ER_F RAM E = 8000/21.5332 = 371.52

which is about 46.44 bytes per encoded frame.


At a bit rate of 32 kbps, which is quite high for single channel HE-AAC v1, it is:

N _BIT S_P ER_F RAM E = 32000/21.5332 = 1486

which is about 185.76 bytes per encoded frame.


These bits/frame figures are average figures where each AAC frame generally has a different size in bytes.
To calculate the same for AAC-LC just use 1024 instead of 2048 PCM samples per frame and channel. For
AAC-LD/ELD it is either 480 or 512 PCM samples per frame and channel.

3.3 Encoder Tools


The AAC encoder supports TNS, PNS, MS, Intensity and activates these tools depending on the audio sig-
nal and the encoder configuration (i.e. bitrate or AOT). It is not required to configure these tools manually.
PNS improves encoding quality only for certain bitrates. Therefore it makes sense to activate PNS only
for these bitrates and save the processing power required for PNS (about 10 % of the encoder) when using
3.3 Encoder Tools 15

other bitrates. This is done automatically inside the encoder library. PNS is disabled inside the encoder
library if an MPEG-2 AOT is choosen since PNS is an MPEG-4 AAC feature.
If SBR is activated, the encoder automatically deactivates PNS internally. If TNS is disabled but PNS is
allowed, the encoder deactivates PNS calculation internally.
16 Encoder Behaviour
Chapter 4

Class Index

4.1 Class List


Here are the classes, structs, unions and interfaces with brief descriptions:
AACENC_BufDesc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
AACENC_InArgs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
AACENC_InfoStruct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
AACENC_MetaData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
AACENC_OutArgs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
18 Class Index
Chapter 5

File Index

5.1 File List


Here is a list of all files with brief descriptions:
aacenc_lib.h
FDK AAC Encoder library interface header file . . . . . . . . . . . . . . . . . . . . . 27
20 File Index
Chapter 6

Class Documentation

6.1 AACENC BufDesc Struct Reference

#include <aacenc_lib.h>

Public Attributes

• INT numBufs
• void ∗∗ bufs
• INT ∗ bufferIdentifiers
• INT ∗ bufSizes
• INT ∗ bufElSizes

6.1.1 Detailed Description

Describes the input and output buffers for an aacEncEncode() call.

6.1.2 Member Data Documentation

6.1.2.1 INT∗ AACENC BufDesc::bufElSizes

Size of each buffer element in bytes.

6.1.2.2 INT∗ AACENC BufDesc::bufferIdentifiers

Identifier of each buffer element. See AACENC_BufferIdentifier.

6.1.2.3 void∗∗ AACENC BufDesc::bufs

Pointer to vector containing buffer addresses.


22 Class Documentation

6.1.2.4 INT∗ AACENC BufDesc::bufSizes

Size of each buffer in 8-bit bytes.

6.1.2.5 INT AACENC BufDesc::numBufs

Number of buffers.
The documentation for this struct was generated from the following file:

• aacenc_lib.h

6.2 AACENC InArgs Struct Reference

#include <aacenc_lib.h>

Public Attributes

• INT numInSamples
• INT numAncBytes

6.2.1 Detailed Description

Defines the input arguments for an aacEncEncode() call.

6.2.2 Member Data Documentation

6.2.2.1 INT AACENC InArgs::numAncBytes

Number of ancillary data bytes to be encoded.

6.2.2.2 INT AACENC InArgs::numInSamples

Number of valid input audio samples (multiple of input channels).


The documentation for this struct was generated from the following file:

• aacenc_lib.h

6.3 AACENC InfoStruct Struct Reference

#include <aacenc_lib.h>
6.3 AACENC_InfoStruct Struct Reference 23

Public Attributes
• UINT maxOutBufBytes
• UINT maxAncBytes
• UINT inBufFillLevel
• UINT inputChannels
• UINT frameLength
• UINT encoderDelay
• UCHAR confBuf [64]
• UINT confSize

6.3.1 Detailed Description

Provides some info about the encoder configuration.

6.3.2 Member Data Documentation

6.3.2.1 UCHAR AACENC InfoStruct::confBuf[64]

Configuration buffer in binary format as an AudioSpecificConfig or StreamMuxConfig according to the


selected transport type.

6.3.2.2 UINT AACENC InfoStruct::confSize

Number of valid bytes in confBuf.

6.3.2.3 UINT AACENC InfoStruct::encoderDelay

Codec delay in PCM samples/channel. Depends on framelength and AOT. Does not include framing delay
for filling up encoder PCM input buffer.

6.3.2.4 UINT AACENC InfoStruct::frameLength

Amount of input audio samples consumed each frame per channel, depending on audio object type config-
uration.

6.3.2.5 UINT AACENC InfoStruct::inBufFillLevel

Internal input buffer fill level in samples per channel. This parameter will automatically be cleared if
samplingrate or channel(Mode/Order) changes.

6.3.2.6 UINT AACENC InfoStruct::inputChannels

Number of input channels expected in encoding process.

6.3.2.7 UINT AACENC InfoStruct::maxAncBytes

Maximum number of ancillary data bytes which can be inserted into bitstream within one frame.
24 Class Documentation

6.3.2.8 UINT AACENC InfoStruct::maxOutBufBytes

Maximum number of encoder bitstream bytes within one frame. Size depends on maximum number of
supported channels in encoder instance. For superframing (as used for example in DAB+), size has to be a
multiple accordingly.
The documentation for this struct was generated from the following file:

• aacenc_lib.h

6.4 AACENC MetaData Struct Reference


#include <aacenc_lib.h>

Public Attributes

• AACENC_METADATA_DRC_PROFILE drc_profile
• AACENC_METADATA_DRC_PROFILE comp_profile
• INT drc_TargetRefLevel
• INT comp_TargetRefLevel
• INT prog_ref_level_present
• INT prog_ref_level
• UCHAR PCE_mixdown_idx_present
• UCHAR ETSI_DmxLvl_present
• SCHAR centerMixLevel
• SCHAR surroundMixLevel
• UCHAR dolbySurroundMode

6.4.1 Detailed Description

Meta Data setup structure.

6.4.2 Member Data Documentation

6.4.2.1 SCHAR AACENC MetaData::centerMixLevel

Center downmix level (0...7, according to table)

6.4.2.2 AACENC_METADATA_DRC_PROFILE AACENC MetaData::comp profile

ETSI heavy compression profile. See AACENC_METADATA_DRC_PROFILE.

6.4.2.3 INT AACENC MetaData::comp TargetRefLevel

Adjust limiter to avoid overload. Scaled with 16 bit. x∗2∧ 16.


6.5 AACENC_OutArgs Struct Reference 25

6.4.2.4 UCHAR AACENC MetaData::dolbySurroundMode

Indication for Dolby Surround Encoding Mode.

• 0: Dolby Surround mode not indicated

• 1: 2-ch audio part is not Dolby surround encoded

• 2: 2-ch audio part is Dolby surround encoded

6.4.2.5 AACENC_METADATA_DRC_PROFILE AACENC MetaData::drc profile

MPEG DRC compression profile. See AACENC_METADATA_DRC_PROFILE.

6.4.2.6 INT AACENC MetaData::drc TargetRefLevel

Used to define expected level to: Scaled with 16 bit. x∗2∧ 16.

6.4.2.7 UCHAR AACENC MetaData::ETSI DmxLvl present

Flag, if dmx-lvl should be written in ETSI-ancData

6.4.2.8 UCHAR AACENC MetaData::PCE mixdown idx present

Flag, if dmx-idx should be written in programme config element

6.4.2.9 INT AACENC MetaData::prog ref level

Programme Reference Level = Dialogue Level: -31.75dB .. 0 dB ; stepsize: 0.25dB Scaled with 16 bit.
x∗2∧ 16.

6.4.2.10 INT AACENC MetaData::prog ref level present

Flag, if prog_ref_level is present

6.4.2.11 SCHAR AACENC MetaData::surroundMixLevel

Surround downmix level (0...7, according to table)


The documentation for this struct was generated from the following file:

• aacenc_lib.h

6.5 AACENC OutArgs Struct Reference


#include <aacenc_lib.h>
26 Class Documentation

Public Attributes
• INT numOutBytes
• INT numInSamples
• INT numAncBytes

6.5.1 Detailed Description

Defines the output arguments for an aacEncEncode() call.

6.5.2 Member Data Documentation

6.5.2.1 INT AACENC OutArgs::numAncBytes

Number of ancillary data bytes consumed by the encoder.

6.5.2.2 INT AACENC OutArgs::numInSamples

Number of input audio samples consumed by the encoder.

6.5.2.3 INT AACENC OutArgs::numOutBytes

Number of valid bitstream bytes generated during aacEncEncode().


The documentation for this struct was generated from the following file:

• aacenc_lib.h
Chapter 7

File Documentation

7.1 aacenc lib.h File Reference


FDK AAC Encoder library interface header file.
#include "machine_type.h"
#include "FDK_audio.h"
Include dependency graph for aacenc_lib.h:

aacenc_lib.h

machine_type.h FDK_audio.h

Classes

• struct AACENC_InfoStruct
• struct AACENC_BufDesc
• struct AACENC_InArgs
• struct AACENC_OutArgs
• struct AACENC_MetaData

Typedefs

• typedef struct AACENCODER ∗ HANDLE_AACENCODER


28 File Documentation

Enumerations

• enum AACENC_ERROR {
AACENC_OK = 0x0000,
AACENC_INVALID_HANDLE = 0x0020,
AACENC_MEMORY_ERROR = 0x0021,
AACENC_UNSUPPORTED_PARAMETER = 0x0022,
AACENC_INVALID_CONFIG = 0x0023,
AACENC_INIT_ERROR = 0x0040,
AACENC_INIT_AAC_ERROR = 0x0041,
AACENC_INIT_SBR_ERROR = 0x0042,
AACENC_INIT_TP_ERROR = 0x0043,
AACENC_INIT_META_ERROR = 0x0044,
AACENC_ENCODE_ERROR = 0x0060,
AACENC_ENCODE_EOF = 0x0080 }

• enum AACENC_BufferIdentifier {
IN_AUDIO_DATA = 0,
IN_ANCILLRY_DATA = 1,
IN_METADATA_SETUP = 2,
OUT_BITSTREAM_DATA = 3,
OUT_AU_SIZES = 4 }

• enum AACENC_METADATA_DRC_PROFILE {
AACENC_METADATA_DRC_NONE = 0,
AACENC_METADATA_DRC_FILMSTANDARD = 1,
AACENC_METADATA_DRC_FILMLIGHT = 2,
AACENC_METADATA_DRC_MUSICSTANDARD = 3,
AACENC_METADATA_DRC_MUSICLIGHT = 4,
AACENC_METADATA_DRC_SPEECH = 5 }

• enum AACENC_CTRLFLAGS {
AACENC_INIT_NONE = 0x0000,
AACENC_INIT_CONFIG = 0x0001,
AACENC_INIT_STATES = 0x0002,
AACENC_INIT_TRANSPORT = 0x1000,
AACENC_RESET_INBUFFER = 0x2000,
AACENC_INIT_ALL = 0xFFFF }

• enum AACENC_PARAM {
7.1 aacenc_lib.h File Reference 29

AACENC_AOT = 0x0100,
AACENC_BITRATE = 0x0101,
AACENC_BITRATEMODE = 0x0102,
AACENC_SAMPLERATE = 0x0103,
AACENC_SBR_MODE = 0x0104,
AACENC_GRANULE_LENGTH = 0x0105,
AACENC_CHANNELMODE = 0x0106,
AACENC_CHANNELORDER = 0x0107,
AACENC_SBR_RATIO = 0x0108,
AACENC_AFTERBURNER = 0x0200,
AACENC_BANDWIDTH = 0x0203,
AACENC_PEAK_BITRATE = 0x0207,
AACENC_TRANSMUX = 0x0300,
AACENC_HEADER_PERIOD = 0x0301,
AACENC_SIGNALING_MODE = 0x0302,
AACENC_TPSUBFRAMES = 0x0303,
AACENC_AUDIOMUXVER = 0x0304,
AACENC_PROTECTION = 0x0306,
AACENC_ANCILLARY_BITRATE = 0x0500,
AACENC_METADATA_MODE = 0x0600,
AACENC_CONTROL_STATE = 0xFF00,
AACENC_NONE = 0xFFFF }
AAC encoder setting parameters.

Functions
• AACENC_ERROR aacEncOpen (HANDLE_AACENCODER ∗phAacEncoder, const UINT enc-
Modules, const UINT maxChannels)
Open an instance of the encoder.
• AACENC_ERROR aacEncClose (HANDLE_AACENCODER ∗phAacEncoder)
Close the encoder instance.
• AACENC_ERROR aacEncEncode (const HANDLE_AACENCODER hAacEncoder, const AACE-
NC_BufDesc ∗inBufDesc, const AACENC_BufDesc ∗outBufDesc, const AACENC_InArgs ∗inargs,
AACENC_OutArgs ∗outargs)
Encode audio data.
• AACENC_ERROR aacEncInfo (const HANDLE_AACENCODER hAacEncoder, AACENC_Info-
Struct ∗pInfo)
Acquire info about present encoder instance.
• AACENC_ERROR aacEncoder_SetParam (const HANDLE_AACENCODER hAacEncoder, const
AACENC_PARAM param, const UINT value)
Set one single AAC encoder parameter.
• UINT aacEncoder_GetParam (const HANDLE_AACENCODER hAacEncoder, const AACENC_-
PARAM param)
Get one single AAC encoder parameter.
• AACENC_ERROR aacEncGetLibInfo (LIB_INFO ∗info)
Get information about encoder library build.

7.1.1 Detailed Description

FDK AAC Encoder library interface header file.


30 File Documentation

7.1.2 Typedef Documentation

7.1.2.1 typedef struct AACENCODER∗ HANDLE_AACENCODER

AAC encoder handle.

7.1.3 Enumeration Type Documentation

7.1.3.1 enum AACENC_BufferIdentifier

AAC encoder buffer descriptors identifier. This identifier are used within buffer descriptors AACENC_-
BufDesc::bufferIdentifiers.

Enumerator:
IN_AUDIO_DATA Audio input buffer, interleaved INT_PCM samples.
IN_ANCILLRY_DATA Ancillary data to be embedded into bitstream.
IN_METADATA_SETUP Setup structure for embedding meta data.
OUT_BITSTREAM_DATA Buffer holds bitstream output data.
OUT_AU_SIZES Buffer contains sizes of each access unit. This information is necessary for super-
framing.

7.1.3.2 enum AACENC_CTRLFLAGS

AAC encoder control flags.


In interaction with the AACENC_CONTROL_STATE parameter it is possible to get information about
the internal initialization process. It is also possible to overwrite the internal state from extern when neces-
sary.

Enumerator:
AACENC_INIT_NONE Do not trigger initialization.
AACENC_INIT_CONFIG Initialize all encoder modules configuration.
AACENC_INIT_STATES Reset all encoder modules history buffer.
AACENC_INIT_TRANSPORT Initialize transport lib with new parameters.
AACENC_RESET_INBUFFER Reset fill level of internal input buffer.
AACENC_INIT_ALL Initialize all.

7.1.3.3 enum AACENC_ERROR

AAC encoder error codes.

Enumerator:
AACENC_OK No error happened. All fine.
AACENC_INVALID_HANDLE Handle passed to function call was invalid.
AACENC_MEMORY_ERROR Memory allocation failed.
AACENC_UNSUPPORTED_PARAMETER Parameter not available.
7.1 aacenc_lib.h File Reference 31

AACENC_INVALID_CONFIG Configuration not provided.


AACENC_INIT_ERROR General initialization error.
AACENC_INIT_AAC_ERROR AAC library initialization error.
AACENC_INIT_SBR_ERROR SBR library initialization error.
AACENC_INIT_TP_ERROR Transport library initialization error.
AACENC_INIT_META_ERROR Meta data library initialization error.
AACENC_ENCODE_ERROR The encoding process was interrupted by an unexpected error.
AACENC_ENCODE_EOF End of file reached.

7.1.3.4 enum AACENC_METADATA_DRC_PROFILE

Meta Data Compression Profiles.

Enumerator:
AACENC_METADATA_DRC_NONE None.
AACENC_METADATA_DRC_FILMSTANDARD Film standard.
AACENC_METADATA_DRC_FILMLIGHT Film light.
AACENC_METADATA_DRC_MUSICSTANDARD Music standard.
AACENC_METADATA_DRC_MUSICLIGHT Music light.
AACENC_METADATA_DRC_SPEECH Speech.

7.1.3.5 enum AACENC_PARAM

AAC encoder setting parameters.


Use aacEncoder_SetParam() function to configure, or use aacEncoder_GetParam() function to read the
internal status of the following parameters.

Enumerator:
AACENC_AOT Audio object type. See ::AUDIO_OBJECT_TYPE in FDK_audio.h.
• 2: MPEG-4 AAC Low Complexity.
• 5: MPEG-4 AAC Low Complexity with Spectral Band Replication (HE-AAC).
• 29: MPEG-4 AAC Low Complexity with Spectral Band Replication and Parametric Stereo
(HE-AAC v2). This configuration can be used only with stereo input audio data.
• 23: MPEG-4 AAC Low-Delay.
• 39: MPEG-4 AAC Enhanced Low-Delay. Since there is no ::AUDIO_OBJECT_TYPE for
ELD in combination with SBR defined, enable SBR explicitely by AACENC_SBR_MODE
parameter.
AACENC_BITRATE Total encoder bitrate. This parameter is mandatory and interacts with AACE-
NC_BITRATEMODE.
• CBR: Bitrate in bits/second. See Supported Bitrates for details.
AACENC_BITRATEMODE Bitrate mode. Configuration can be different kind of bitrate configurations-
:
32 File Documentation

• 0: Constant bitrate, use bitrate according to AACENC_BITRATE. (default) Within none


LD/ELD ::AUDIO_OBJECT_TYPE, the CBR mode makes use of full allowed bitreservoir.
In contrast, at Low-Delay ::AUDIO_OBJECT_TYPE the bitreservoir is kept very small.
• 8: LD/ELD full bitreservoir for packet based transmission.
AACENC_SAMPLERATE Audio input data sampling rate. Encoder supports following sampling
rates: 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 64000, 88200, 96000
AACENC_SBR_MODE Configure SBR independently of the chosen Audio Object Type ::AUDIO-
_OBJECT_TYPE. This parameter is for ELD audio object type only.
• -1: Use ELD SBR auto configurator (default).
• 0: Disable Spectral Band Replication.
• 1: Enable Spectral Band Replication.
AACENC_GRANULE_LENGTH Core encoder (AAC) audio frame length in samples:
• 1024: Default configuration.
• 512: Default LD/ELD configuration.
• 480: Optional length in LD/ELD configuration.
AACENC_CHANNELMODE Set explicit channel mode. Channel mode must match with number
of input channels.
• 1-7 and 33,34: MPEG channel modes supported, see ::CHANNEL_MODE in FDK_audio.h.
AACENC_CHANNELORDER Input audio data channel ordering scheme:
• 0: MPEG channel ordering (e. g. 5.1: C, L, R, SL, SR, LFE). (default)
• 1: WAVE file format channel ordering (e. g. 5.1: L, R, C, LFE, SL, SR).
AACENC_SBR_RATIO Controls activation of downsampled SBR. With downsampled SBR, the de-
lay will be shorter. On the other hand, for achieving the same quality level, downsampled SBR
needs more bits than dual-rate SBR. With downsampled SBR, the AAC encoder will work at
the same sampling rate as the SBR encoder (single rate). Downsampled SBR is supported for
AAC-ELD and HE-AACv1.
• 1: Downsampled SBR (default for ELD).
• 2: Dual-rate SBR (default for HE-AAC).
AACENC_AFTERBURNER This parameter controls the use of the afterburner feature. The after-
burner is a type of analysis by synthesis algorithm which increases the audio quality but also
the required processing power. It is recommended to always activate this if additional memory
consumption and processing power consumption is not a problem. If increased MHz and mem-
ory consumption are an issue then the MHz and memory cost of this optional module need to be
evaluated against the improvement in audio quality on a case by case basis.
• 0: Disable afterburner (default).
• 1: Enable afterburner.
AACENC_BANDWIDTH Core encoder audio bandwidth:
• 0: Determine bandwidth internally (default, see chapter Bandwidth).
• 1 to fs/2: Frequency bandwidth in Hertz. (Experts only, better do not touch this value to
avoid degraded audio quality)
AACENC_PEAK_BITRATE Peak bitrate configuration parameter to adjust maximum bits per audio
frame. Bitrate is in bits/second. The peak bitrate will internally be limited to the chosen bitrate
AACENC_BITRATE as lower limit and the number_of_effective_channels∗6144 bit as upper
limit.
Setting the peak bitrate equal to AACENC_BITRATE does not necessarily mean that the audio
frames will be of constant size. Since the peak bitate is in bits/second, the frame sizes can vary
by one byte in one or the other direction over various frames. However, it is not recommended to
reduce the peak pitrate to AACENC_BITRATE - it would disable the bitreservoir, which would
affect the audio quality by a large amount.
7.1 aacenc_lib.h File Reference 33

AACENC_TRANSMUX Transport type to be used. See ::TRANSPORT_TYPE in FDK_audio.h.


Following types can be configured in encoder library:
• 0: raw access units
• 1: ADIF bitstream format
• 2: ADTS bitstream format
• 6: Audio Mux Elements (LATM) with muxConfigPresent = 1
• 7: Audio Mux Elements (LATM) with muxConfigPresent = 0, out of band StreamMux-
Config
• 10: Audio Sync Stream (LOAS)
AACENC_HEADER_PERIOD Frame count period for sending in-band configuration buffers within
LATM/LOAS transport layer. Additionally this parameter configures the PCE repetition period
in raw_data_block(). See encPCE.
• 0xFF: auto-mode default 10 for TT_MP4_ADTS, TT_MP4_LOAS and TT_MP4_LATM_-
MCP1, otherwise 0.
• n: Frame count period.
AACENC_SIGNALING_MODE Signaling mode of the extension AOT:
• 0: Implicit backward compatible signaling (default for non-MPEG-4 based AOT’s and for
the transport formats ADIF and ADTS)
– A stream that uses implicit signaling can be decoded by every AAC decoder, even AA-
C-LC-only decoders
– An AAC-LC-only decoder will only decode the low-frequency part of the stream, re-
sulting in a band-limited output
– This method works with all transport formats
– This method does not work with downsampled SBR
• 1: Explicit backward compatible signaling
– A stream that uses explicit backward compatible signaling can be decoded by every
AAC decoder, even AAC-LC-only decoders
– An AAC-LC-only decoder will only decode the low-frequency part of the stream, re-
sulting in a band-limited output
– A decoder not capable of decoding PS will only decode the AAC-LC+SBR part. If the
stream contained PS, the result will be a a decoded mono downmix
– This method does not work with ADIF or ADTS. For LOAS/LATM, it only works with
AudioMuxVersion==1
– This method does work with downsampled SBR
• 2: Explicit hierarchical signaling (default for MPEG-4 based AOT’s and for all transport
formats excluding ADIF and ADTS)
– A stream that uses explicit hierarchical signaling can be decoded only by HE-AAC
decoders
– An AAC-LC-only decoder will not decode a stream that uses explicit hierarchical sig-
naling
– A decoder not capable of decoding PS will not decode the stream at all if it contained
PS
– This method does not work with ADIF or ADTS. It works with LOAS/LATM and the
MPEG-4 File format
– This method does work with downsampled SBR
For making sure that the listener always experiences the best audio quality, explicit hierar-
chical signaling should be used. This makes sure that only a full HE-AAC-capable decoder
will decode those streams. The audio is played at full bandwidth. For best backwards com-
patibility, it is recommended to encode with implicit SBR signaling. A decoder capable of
34 File Documentation

AAC-LC only will then only decode the AAC part, which means the decoded audio will
sound band-limited.
For MPEG-2 transport types (ADTS,ADIF), only implicit signaling is possible.
For LOAS and LATM, explicit backwards compatible signaling only works together with
AudioMuxVersion==1. The reason is that, for explicit backwards compatible signaling, ad-
ditional information will be appended to the ASC. A decoder that is only capable of decod-
ing AAC-LC will skip this part. Nevertheless, for jumping to the end of the ASC, it needs
to know the ASC length. Transmitting the length of the ASC is a feature of AudioMux-
Version==1, it is not possible to transmit the length of the ASC with AudioMuxVersion==0,
therefore an AAC-LC-only decoder will not be able to parse a LOAS/LATM stream that
was being encoded with AudioMuxVersion==0.
For downsampled SBR, explicit signaling is mandatory. The reason for this is that the ex-
tension sampling frequency (which is in case of SBR the sampling frequqncy of the SBR
part) can only be signaled in explicit mode.
For AAC-ELD, the SBR information is transmitted in the ELDSpecific Config, which is part
of the AudioSpecificConfig. Therefore, the settings here will have no effect on AAC-ELD.
AACENC_TPSUBFRAMES Number of sub frames in a transport frame for LOAS/LATM or ADTS
(default 1).
• ADTS: Maximum number of sub frames restricted to 4.
• LOAS/LATM: Maximum number of sub frames restricted to 2.
AACENC_AUDIOMUXVER AudioMuxVersion to be used for LATM. (AudioMuxVersionA, cur-
rently not implemented):
• 0: Default, no transmission of tara Buffer fullness, no ASC length and including actual latm
Buffer fullnes.
• 1: Transmission of tara Buffer fullness, ASC length and actual latm Buffer fullness.
• 2: Transmission of tara Buffer fullness, ASC length and maximum level of latm Buffer
fullness.
AACENC_PROTECTION Configure protection in tranpsort layer:
• 0: No protection. (default)
• 1: CRC active for ADTS bitstream format.
AACENC_ANCILLARY_BITRATE Constant ancillary data bitrate in bits/second.
• 0: Either no ancillary data or insert exact number of bytes, denoted via input parameter,
numAncBytes in AACENC_InArgs.
• else: Insert ancillary data with specified bitrate.
AACENC_METADATA_MODE Configure Meta Data. See AACENC_MetaData for further details-
:
• 0: Do not embed any metadata.
• 1: Embed MPEG defined metadata only.
• 2: Embed all metadata.
AACENC_CONTROL_STATE There is an automatic process which internally reconfigures the en-
coder instance when a configuration parameter changed or an error occured. This paramerter
allows overwriting or getting the control status of this process. See AACENC_CTRLFLAGS.
AACENC_NONE

7.1.4 Function Documentation


7.1 aacenc_lib.h File Reference 35

7.1.4.1 AACENC_ERROR aacEncClose ( HANDLE_AACENCODER ∗ phAacEncoder )

Close the encoder instance.


Deallocate encoder instance and free whole memory.

Parameters
phAacEncoder Pointer to the encoder handle to be deallocated.

Returns
• AACENC_OK, on success.
• AACENC_INVALID_HANDLE, on failure.

7.1.4.2 AACENC_ERROR aacEncEncode ( const HANDLE_AACENCODER hAacEncoder,


const AACENC_BufDesc ∗ inBufDesc, const AACENC_BufDesc ∗ outBufDesc, const
AACENC_InArgs ∗ inargs, AACENC_OutArgs ∗ outargs )

Encode audio data.


This function is mainly for encoding audio data. In addition the function can be used for an encoder
(re)configuration process.

• PCM input data will be retrieved from external input buffer until the fill level allows encoding a
single frame. This functionality allows an external buffer with reduced size in comparison to the
AAC or HE-AAC audio frame length.

• If the value of the input samples argument is zero, just internal reinitialization will be applied if it is
requested.
• At the end of a file the flushing process can be triggerd via setting the value of the input samples
argument to -1. The encoder delay lines are fully flushed when the encoder returns no valid bitstream
data AACENC_OutArgs::numOutBytes. Furthermore the end of file is signaled by the return value
AACENC_ENCODE_EOF.
• If an error occured in the previous frame or any of the encoder parameters changed, an internal
reinitialization process will be applied before encoding the incoming audio samples.
• The function can also be used for an independent reconfiguration process without encoding. The first
parameter has to be a valid encoder handle and all other parameters can be set to NULL.
• If the size of the external bitbuffer in outBufDesc is not sufficient for writing the whole bitstream, an
internal error will be the return value and a reconfiguration will be triggered.

Parameters
hAacEncoder A valid AAC encoder handle.
inBufDesc Input buffer descriptor, see AACENC_BufDesc:
• At least one input buffer with audio data is expected.
• Optionally a second input buffer with ancillary data can be fed.
36 File Documentation

outBufDesc Output buffer descriptor, see AACENC_BufDesc:


• Provide one output buffer for the encoded bitstream.

inargs Input arguments, see AACENC_InArgs.


outargs Output arguments, AACENC_OutArgs.

Returns
• AACENC_OK, on success.
• AACENC_INVALID_HANDLE, AACENC_ENCODE_ERROR, on failure in encoding pro-
cess.
• AACENC_INVALID_CONFIG, AACENC_INIT_ERROR, AACENC_INIT_AAC_ERROR, A-
ACENC_INIT_SBR_ERROR, AACENC_INIT_TP_ERROR, AACENC_INIT_META_ERRO-
R, on failure in encoder initialization.
• AACENC_ENCODE_EOF, when flushing fully concluded.

7.1.4.3 AACENC_ERROR aacEncGetLibInfo ( LIB INFO ∗ info )

Get information about encoder library build.


Fill a given LIB_INFO structure with library version information.

Parameters
info Pointer to an allocated LIB_INFO struct.

Returns
• AACENC_OK, on success.
• AACENC_INVALID_HANDLE, AACENC_INIT_ERROR, on failure.

7.1.4.4 AACENC_ERROR aacEncInfo ( const HANDLE_AACENCODER hAacEncoder,


AACENC_InfoStruct ∗ pInfo )

Acquire info about present encoder instance.


This function retrieves information of the encoder configuration. In addition to informative internal states,
a configuration data block of the current encoder settings will be returned. The format is either Audio
Specific Config in case of Raw Packets transport format or StreamMuxConfig in case of LOAS/LATM
transport format. The configuration data block is binary coded as specified in ISO/IEC 14496-3 (MPEG-4
audio), to be used directly for MPEG-4 File Format or RFC3016 or RFC3640 applications.

Parameters
hAacEncoder A valid AAC encoder handle.
pInfo Pointer to AACENC_InfoStruct. Filled on return.
7.1 aacenc_lib.h File Reference 37

Returns
• AACENC_OK, on succes.
• AACENC_INIT_ERROR, on failure.

7.1.4.5 UINT aacEncoder GetParam ( const HANDLE_AACENCODER hAacEncoder, const


AACENC_PARAM param )

Get one single AAC encoder parameter.


This function is the complement to aacEncoder_SetParam(). After encoder reinitialization with user de-
fined settings, the internal status can be obtained of each parameter, specified with AACENC_PARAM.

Parameters
hAacEncoder A valid AAC encoder handle.
param Parameter to be returned. See AACENC_PARAM.

Returns
Internal configuration value of specifed parameter AACENC_PARAM.

7.1.4.6 AACENC_ERROR aacEncoder SetParam ( const HANDLE_AACENCODER hAacEncoder,


const AACENC_PARAM param, const UINT value )

Set one single AAC encoder parameter.


This function allows configuration of all encoder parameters specified in AACENC_PARAM. Each pa-
rameter must be set with a separate function call. An internal validation of the configuration value range
will be done and an internal reconfiguration will be signaled. The actual configuration adoption is part of
the subsequent aacEncEncode() call.

Parameters
hAacEncoder A valid AAC encoder handle.
param Parameter to be set. See AACENC_PARAM.
value Parameter value. See parameter description in AACENC_PARAM.

Returns
• AACENC_OK, on success.
• AACENC_INVALID_HANDLE, AACENC_UNSUPPORTED_PARAMETER, AACENC_IN-
VALID_CONFIG, on failure.

7.1.4.7 AACENC_ERROR aacEncOpen ( HANDLE_AACENCODER ∗ phAacEncoder, const UINT


encModules, const UINT maxChannels )

Open an instance of the encoder.


Allocate memory for an encoder instance with a functional range denoted by the function parameters.
Preinitialize encoder instance with default configuration.
38 File Documentation

Parameters
phAacEncoder A pointer to an encoder handle. Initialized on return.
encModules Specify encoder modules to be supported in this encoder instance:
• 0x0: Allocate memory for all available encoder modules.
• else: Select memory allocation regarding encoder modules. Following flags are
possible and can be combined.
– 0x01: AAC module.
– 0x02: SBR module.
– 0x04: PS module.
– 0x10: Metadata module.
– example: (0x01|0x02|0x04|0x10) allocates all modules and is equivalent to
default configuration denotet by 0x0.

maxChannels Number of channels to be allocated. This parameter can be used in different ways:
• 0: Allocate maximum number of AAC and SBR channels as supported by the
library.
• nChannels: Use same maximum number of channels for allocating memory in
AAC and SBR module.
• nChannels | (nSbrCh<<8): Number of SBR channels can be different to AAC
channels to save data memory.

Returns
• AACENC_OK, on succes.
• AACENC_INVALID_HANDLE, AACENC_MEMORY_ERROR, AACENC_INVALID_CO-
NFIG, on failure.
Index

AACENC_AFTERBURNER AACENC_INIT_TP_ERROR
aacenc_lib.h, 32 aacenc_lib.h, 31
AACENC_ANCILLARY_BITRATE AACENC_INIT_TRANSPORT
aacenc_lib.h, 34 aacenc_lib.h, 30
AACENC_AOT AACENC_INVALID_CONFIG
aacenc_lib.h, 31 aacenc_lib.h, 30
AACENC_AUDIOMUXVER AACENC_INVALID_HANDLE
aacenc_lib.h, 34 aacenc_lib.h, 30
AACENC_BANDWIDTH AACENC_MEMORY_ERROR
aacenc_lib.h, 32 aacenc_lib.h, 30
AACENC_BITRATE AACENC_METADATA_DRC_FILMLIGHT
aacenc_lib.h, 31 aacenc_lib.h, 31
AACENC_BITRATEMODE AACENC_METADATA_DRC_FILMSTANDARD
aacenc_lib.h, 31 aacenc_lib.h, 31
AACENC_CHANNELMODE AACENC_METADATA_DRC_MUSICLIGHT
aacenc_lib.h, 32 aacenc_lib.h, 31
AACENC_CHANNELORDER AACENC_METADATA_DRC_MUSICSTANDA-
aacenc_lib.h, 32 RD
AACENC_CONTROL_STATE aacenc_lib.h, 31
aacenc_lib.h, 34 AACENC_METADATA_DRC_NONE
AACENC_ENCODE_EOF aacenc_lib.h, 31
aacenc_lib.h, 31 AACENC_METADATA_DRC_SPEECH
AACENC_ENCODE_ERROR aacenc_lib.h, 31
aacenc_lib.h, 31 AACENC_METADATA_MODE
AACENC_GRANULE_LENGTH aacenc_lib.h, 34
aacenc_lib.h, 32 AACENC_NONE
AACENC_HEADER_PERIOD aacenc_lib.h, 34
aacenc_lib.h, 33 AACENC_OK
AACENC_INIT_AAC_ERROR aacenc_lib.h, 30
aacenc_lib.h, 31 AACENC_PEAK_BITRATE
AACENC_INIT_ALL aacenc_lib.h, 32
aacenc_lib.h, 30 AACENC_PROTECTION
AACENC_INIT_CONFIG aacenc_lib.h, 34
aacenc_lib.h, 30 AACENC_RESET_INBUFFER
AACENC_INIT_ERROR aacenc_lib.h, 30
aacenc_lib.h, 31 AACENC_SAMPLERATE
AACENC_INIT_META_ERROR aacenc_lib.h, 32
aacenc_lib.h, 31 AACENC_SBR_MODE
AACENC_INIT_NONE aacenc_lib.h, 32
aacenc_lib.h, 30 AACENC_SBR_RATIO
AACENC_INIT_SBR_ERROR aacenc_lib.h, 32
aacenc_lib.h, 31 AACENC_SIGNALING_MODE
AACENC_INIT_STATES aacenc_lib.h, 33
aacenc_lib.h, 30 AACENC_TPSUBFRAMES
40 INDEX

aacenc_lib.h, 34 aacenc_lib.h, 36
AACENC_TRANSMUX aacEncOpen
aacenc_lib.h, 32 aacenc_lib.h, 37
AACENC_UNSUPPORTED_PARAMETER aacEncoder_GetParam
aacenc_lib.h, 30 aacenc_lib.h, 37
AACENC_BufDesc, 21 aacEncoder_SetParam
bufElSizes, 21 aacenc_lib.h, 37
bufSizes, 21 aacenc_lib.h
bufferIdentifiers, 21 AACENC_AFTERBURNER, 32
bufs, 21 AACENC_ANCILLARY_BITRATE, 34
numBufs, 22 AACENC_AOT, 31
AACENC_BufferIdentifier AACENC_AUDIOMUXVER, 34
aacenc_lib.h, 30 AACENC_BANDWIDTH, 32
AACENC_CTRLFLAGS AACENC_BITRATE, 31
aacenc_lib.h, 30 AACENC_BITRATEMODE, 31
AACENC_ERROR AACENC_CHANNELMODE, 32
aacenc_lib.h, 30 AACENC_CHANNELORDER, 32
AACENC_InArgs, 22 AACENC_CONTROL_STATE, 34
numAncBytes, 22 AACENC_ENCODE_EOF, 31
numInSamples, 22 AACENC_ENCODE_ERROR, 31
AACENC_InfoStruct, 22 AACENC_GRANULE_LENGTH, 32
confBuf, 23 AACENC_HEADER_PERIOD, 33
confSize, 23 AACENC_INIT_AAC_ERROR, 31
encoderDelay, 23 AACENC_INIT_ALL, 30
frameLength, 23 AACENC_INIT_CONFIG, 30
inBufFillLevel, 23 AACENC_INIT_ERROR, 31
inputChannels, 23 AACENC_INIT_META_ERROR, 31
maxAncBytes, 23 AACENC_INIT_NONE, 30
maxOutBufBytes, 23 AACENC_INIT_SBR_ERROR, 31
AACENC_MetaData, 24 AACENC_INIT_STATES, 30
centerMixLevel, 24 AACENC_INIT_TP_ERROR, 31
comp_TargetRefLevel, 24 AACENC_INIT_TRANSPORT, 30
comp_profile, 24 AACENC_INVALID_CONFIG, 30
dolbySurroundMode, 24 AACENC_INVALID_HANDLE, 30
drc_TargetRefLevel, 25 AACENC_MEMORY_ERROR, 30
drc_profile, 25 AACENC_METADATA_DRC_FILMLIGHT,
ETSI_DmxLvl_present, 25 31
PCE_mixdown_idx_present, 25 AACENC_METADATA_DRC_FILMSTAND-
prog_ref_level, 25 ARD, 31
prog_ref_level_present, 25 AACENC_METADATA_DRC_MUSICLIGH-
surroundMixLevel, 25 T, 31
AACENC_OutArgs, 25 AACENC_METADATA_DRC_MUSICSTAN-
numAncBytes, 26 DARD, 31
numInSamples, 26 AACENC_METADATA_DRC_NONE, 31
numOutBytes, 26 AACENC_METADATA_DRC_SPEECH, 31
AACENC_PARAM AACENC_METADATA_MODE, 34
aacenc_lib.h, 31 AACENC_NONE, 34
aacEncClose AACENC_OK, 30
aacenc_lib.h, 34 AACENC_PEAK_BITRATE, 32
aacEncEncode AACENC_PROTECTION, 34
aacenc_lib.h, 35 AACENC_RESET_INBUFFER, 30
aacEncGetLibInfo AACENC_SAMPLERATE, 32
aacenc_lib.h, 36 AACENC_SBR_MODE, 32
aacEncInfo AACENC_SBR_RATIO, 32
INDEX 41

AACENC_SIGNALING_MODE, 33 frameLength
AACENC_TPSUBFRAMES, 34 AACENC_InfoStruct, 23
AACENC_TRANSMUX, 32
AACENC_UNSUPPORTED_PARAMETER, 30HANDLE_AACENCODER
IN_ANCILLRY_DATA, 30 aacenc_lib.h, 30
IN_AUDIO_DATA, 30
IN_METADATA_SETUP, 30 IN_ANCILLRY_DATA
OUT_AU_SIZES, 30 aacenc_lib.h, 30
OUT_BITSTREAM_DATA, 30 IN_AUDIO_DATA
aacenc_lib.h, 27 aacenc_lib.h, 30
AACENC_BufferIdentifier, 30 IN_METADATA_SETUP
AACENC_CTRLFLAGS, 30 aacenc_lib.h, 30
AACENC_ERROR, 30 inBufFillLevel
AACENC_PARAM, 31 AACENC_InfoStruct, 23
aacEncClose, 34 inputChannels
AACENC_InfoStruct, 23
aacEncEncode, 35
aacEncGetLibInfo, 36 maxAncBytes
aacEncInfo, 36 AACENC_InfoStruct, 23
aacEncOpen, 37 maxOutBufBytes
aacEncoder_GetParam, 37 AACENC_InfoStruct, 23
aacEncoder_SetParam, 37
HANDLE_AACENCODER, 30 numAncBytes
AACENC_InArgs, 22
bufElSizes AACENC_OutArgs, 26
AACENC_BufDesc, 21 numBufs
bufSizes AACENC_BufDesc, 22
AACENC_BufDesc, 21 numInSamples
bufferIdentifiers AACENC_InArgs, 22
AACENC_BufDesc, 21 AACENC_OutArgs, 26
bufs numOutBytes
AACENC_BufDesc, 21 AACENC_OutArgs, 26

centerMixLevel OUT_AU_SIZES
AACENC_MetaData, 24 aacenc_lib.h, 30
comp_TargetRefLevel OUT_BITSTREAM_DATA
AACENC_MetaData, 24 aacenc_lib.h, 30
comp_profile
AACENC_MetaData, 24 PCE_mixdown_idx_present
confBuf AACENC_MetaData, 25
AACENC_InfoStruct, 23 prog_ref_level
confSize AACENC_MetaData, 25
AACENC_InfoStruct, 23 prog_ref_level_present
AACENC_MetaData, 25
dolbySurroundMode
AACENC_MetaData, 24 surroundMixLevel
drc_TargetRefLevel AACENC_MetaData, 25
AACENC_MetaData, 25
drc_profile
AACENC_MetaData, 25

ETSI_DmxLvl_present
AACENC_MetaData, 25
encoderDelay
AACENC_InfoStruct, 23

You might also like