FFmpeg
Macros | Functions | Variables
aacenc.c File Reference
#include <float.h>
#include "libavutil/libm.h"
#include "libavutil/thread.h"
#include "libavutil/float_dsp.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "put_bits.h"
#include "internal.h"
#include "mpeg4audio.h"
#include "kbdwin.h"
#include "sinewin.h"
#include "profiles.h"
#include "aac.h"
#include "aactab.h"
#include "aacenc.h"
#include "aacenctab.h"
#include "aacenc_utils.h"
#include "psymodel.h"

Go to the source code of this file.

Macros

#define WINDOW_FUNC(type)
 
#define AACENC_FLAGS   AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
 

Functions

static void put_pce (PutBitContext *pb, AVCodecContext *avctx)
 
static int put_audio_specific_config (AVCodecContext *avctx)
 Make AAC audio config object. More...
 
void ff_quantize_band_cost_cache_init (struct AACEncContext *s)
 
 WINDOW_FUNC (only_long)
 
 WINDOW_FUNC (long_start)
 
 WINDOW_FUNC (long_stop)
 
 WINDOW_FUNC (eight_short)
 
static void apply_window_and_mdct (AACEncContext *s, SingleChannelElement *sce, float *audio)
 
static void put_ics_info (AACEncContext *s, IndividualChannelStream *info)
 Encode ics_info element. More...
 
static void encode_ms_info (PutBitContext *pb, ChannelElement *cpe)
 Encode MS data. More...
 
static void adjust_frame_information (ChannelElement *cpe, int chans)
 Produce integer coefficients from scalefactors provided by the model. More...
 
static void apply_intensity_stereo (ChannelElement *cpe)
 
static void apply_mid_side_stereo (ChannelElement *cpe)
 
static void encode_band_info (AACEncContext *s, SingleChannelElement *sce)
 Encode scalefactor band coding type. More...
 
static void encode_scale_factors (AVCodecContext *avctx, AACEncContext *s, SingleChannelElement *sce)
 Encode scalefactors. More...
 
static void encode_pulses (AACEncContext *s, Pulse *pulse)
 Encode pulse data. More...
 
static void encode_spectral_coeffs (AACEncContext *s, SingleChannelElement *sce)
 Encode spectral coefficients processed by psychoacoustic model. More...
 
static void avoid_clipping (AACEncContext *s, SingleChannelElement *sce)
 Downscale spectral coefficients for near-clipping windows to avoid artifacts. More...
 
static int encode_individual_channel (AVCodecContext *avctx, AACEncContext *s, SingleChannelElement *sce, int common_window)
 Encode one channel of audio data. More...
 
static void put_bitstream_info (AACEncContext *s, const char *name)
 Write some auxiliary information about the created AAC file. More...
 
static void copy_input_samples (AACEncContext *s, const AVFrame *frame)
 
static int aac_encode_frame (AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
 
static av_cold int aac_encode_end (AVCodecContext *avctx)
 
static av_cold int dsp_init (AVCodecContext *avctx, AACEncContext *s)
 
static av_cold int alloc_buffers (AVCodecContext *avctx, AACEncContext *s)
 
static av_cold void aac_encode_init_tables (void)
 
static av_cold int aac_encode_init (AVCodecContext *avctx)
 

Variables

static AVOnce aac_table_init = AV_ONCE_INIT
 
static void(*const apply_window [4])(AVFloatDSPContext *fdsp, SingleChannelElement *sce, const float *audio)
 
static const AVOption aacenc_options []
 
static const AVClass aacenc_class
 
static const AVCodecDefault aac_encode_defaults []
 
AVCodec ff_aac_encoder
 

Detailed Description

AAC encoder

Definition in file aacenc.c.

Macro Definition Documentation

◆ WINDOW_FUNC

#define WINDOW_FUNC (   type)
Value:
static void apply_ ##type ##_window(AVFloatDSPContext *fdsp, \
const float *audio)

Definition at line 137 of file aacenc.c.

◆ AACENC_FLAGS

Definition at line 1123 of file aacenc.c.

Function Documentation

◆ put_pce()

static void put_pce ( PutBitContext pb,
AVCodecContext avctx 
)
static

Definition at line 55 of file aacenc.c.

Referenced by put_audio_specific_config().

◆ put_audio_specific_config()

static int put_audio_specific_config ( AVCodecContext avctx)
static

Make AAC audio config object.

See also
1.6.2.1 "Syntax - AudioSpecificConfig"

Definition at line 96 of file aacenc.c.

Referenced by aac_encode_init().

◆ ff_quantize_band_cost_cache_init()

void ff_quantize_band_cost_cache_init ( struct AACEncContext s)

Definition at line 128 of file aacenc.c.

Referenced by search_for_quantizers_fast(), and search_for_quantizers_twoloop().

◆ WINDOW_FUNC() [1/4]

WINDOW_FUNC ( only_long  )

Definition at line 142 of file aacenc.c.

◆ WINDOW_FUNC() [2/4]

WINDOW_FUNC ( long_start  )

Definition at line 152 of file aacenc.c.

◆ WINDOW_FUNC() [3/4]

WINDOW_FUNC ( long_stop  )

Definition at line 164 of file aacenc.c.

◆ WINDOW_FUNC() [4/4]

WINDOW_FUNC ( eight_short  )

Definition at line 176 of file aacenc.c.

◆ apply_window_and_mdct()

static void apply_window_and_mdct ( AACEncContext s,
SingleChannelElement sce,
float *  audio 
)
static

Definition at line 202 of file aacenc.c.

Referenced by aac_encode_frame().

◆ put_ics_info()

static void put_ics_info ( AACEncContext s,
IndividualChannelStream info 
)
static

Encode ics_info element.

See also
Table 4.6 (syntax of ics_info)

Definition at line 223 of file aacenc.c.

Referenced by aac_encode_frame(), and encode_individual_channel().

◆ encode_ms_info()

static void encode_ms_info ( PutBitContext pb,
ChannelElement cpe 
)
static

Encode MS data.

See also
4.6.8.1 "Joint Coding - M/S Stereo"

Definition at line 244 of file aacenc.c.

Referenced by aac_encode_frame().

◆ adjust_frame_information()

static void adjust_frame_information ( ChannelElement cpe,
int  chans 
)
static

Produce integer coefficients from scalefactors provided by the model.

Definition at line 258 of file aacenc.c.

Referenced by aac_encode_frame().

◆ apply_intensity_stereo()

static void apply_intensity_stereo ( ChannelElement cpe)
static

Definition at line 308 of file aacenc.c.

Referenced by aac_encode_frame().

◆ apply_mid_side_stereo()

static void apply_mid_side_stereo ( ChannelElement cpe)
static

Definition at line 337 of file aacenc.c.

Referenced by aac_encode_frame().

◆ encode_band_info()

static void encode_band_info ( AACEncContext s,
SingleChannelElement sce 
)
static

Encode scalefactor band coding type.

Definition at line 372 of file aacenc.c.

Referenced by encode_individual_channel().

◆ encode_scale_factors()

static void encode_scale_factors ( AVCodecContext avctx,
AACEncContext s,
SingleChannelElement sce 
)
static

Encode scalefactors.

Definition at line 386 of file aacenc.c.

Referenced by encode_individual_channel().

◆ encode_pulses()

static void encode_pulses ( AACEncContext s,
Pulse pulse 
)
static

Encode pulse data.

Definition at line 422 of file aacenc.c.

Referenced by encode_individual_channel().

◆ encode_spectral_coeffs()

static void encode_spectral_coeffs ( AACEncContext s,
SingleChannelElement sce 
)
static

Encode spectral coefficients processed by psychoacoustic model.

Definition at line 441 of file aacenc.c.

Referenced by encode_individual_channel().

◆ avoid_clipping()

static void avoid_clipping ( AACEncContext s,
SingleChannelElement sce 
)
static

Downscale spectral coefficients for near-clipping windows to avoid artifacts.

Definition at line 469 of file aacenc.c.

Referenced by aac_encode_frame().

◆ encode_individual_channel()

static int encode_individual_channel ( AVCodecContext avctx,
AACEncContext s,
SingleChannelElement sce,
int  common_window 
)
static

Encode one channel of audio data.

Definition at line 489 of file aacenc.c.

Referenced by aac_encode_frame().

◆ put_bitstream_info()

static void put_bitstream_info ( AACEncContext s,
const char *  name 
)
static

Write some auxiliary information about the created AAC file.

Definition at line 515 of file aacenc.c.

Referenced by aac_encode_frame().

◆ copy_input_samples()

static void copy_input_samples ( AACEncContext s,
const AVFrame frame 
)
static

Definition at line 536 of file aacenc.c.

Referenced by aac_encode_frame().

◆ aac_encode_frame()

static int aac_encode_frame ( AVCodecContext avctx,
AVPacket avpkt,
const AVFrame frame,
int got_packet_ptr 
)
static

Definition at line 558 of file aacenc.c.

◆ aac_encode_end()

static av_cold int aac_encode_end ( AVCodecContext avctx)
static

Definition at line 901 of file aacenc.c.

Referenced by aac_encode_init().

◆ dsp_init()

static av_cold int dsp_init ( AVCodecContext avctx,
AACEncContext s 
)
static

Definition at line 920 of file aacenc.c.

Referenced by aac_encode_init().

◆ alloc_buffers()

static av_cold int alloc_buffers ( AVCodecContext avctx,
AACEncContext s 
)
static

Definition at line 942 of file aacenc.c.

Referenced by aac_encode_init().

◆ aac_encode_init_tables()

static av_cold void aac_encode_init_tables ( void  )
static

Definition at line 956 of file aacenc.c.

Referenced by aac_encode_init().

◆ aac_encode_init()

static av_cold int aac_encode_init ( AVCodecContext avctx)
static

Definition at line 961 of file aacenc.c.

Variable Documentation

◆ aac_table_init

AVOnce aac_table_init = AV_ONCE_INIT
static

Definition at line 53 of file aacenc.c.

Referenced by aac_encode_init().

◆ apply_window

void(*const apply_window[4])(AVFloatDSPContext *fdsp, SingleChannelElement *sce, const float *audio)
static
Initial value:
= {
[ONLY_LONG_SEQUENCE] = apply_only_long_window,
[LONG_START_SEQUENCE] = apply_long_start_window,
[EIGHT_SHORT_SEQUENCE] = apply_eight_short_window,
[LONG_STOP_SEQUENCE] = apply_long_stop_window
}

Definition at line 193 of file aacenc.c.

Referenced by aac_encode_frame(), apply_window_and_mdct(), and ff_mpa_synth_filter_TMPL().

◆ aacenc_options

const AVOption aacenc_options[]
static
Initial value:
= {
{"aac_coder", "Coding algorithm", 0x42, AV_OPT_TYPE_INT, {.i64 = AAC_CODER_FAST}, 0, AAC_CODER_NB-1, AACENC_FLAGS, "coder"},
{"anmr", "ANMR method", 0, AV_OPT_TYPE_CONST, {.i64 = AAC_CODER_ANMR}, INT_MIN, INT_MAX, AACENC_FLAGS, "coder"},
{"twoloop", "Two loop searching method", 0, AV_OPT_TYPE_CONST, {.i64 = AAC_CODER_TWOLOOP}, INT_MIN, INT_MAX, AACENC_FLAGS, "coder"},
{"fast", "Default fast search", 0, AV_OPT_TYPE_CONST, {.i64 = AAC_CODER_FAST}, INT_MIN, INT_MAX, AACENC_FLAGS, "coder"},
{"aac_ms", "Force M/S stereo coding", 0x42, AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, AACENC_FLAGS},
{"aac_is", "Intensity stereo coding", 0x42, AV_OPT_TYPE_BOOL, {.i64 = 1}, -1, 1, AACENC_FLAGS},
{"aac_pns", "Perceptual noise substitution", 0x42, AV_OPT_TYPE_BOOL, {.i64 = 1}, -1, 1, AACENC_FLAGS},
{"aac_tns", "Temporal noise shaping", 0x42, AV_OPT_TYPE_BOOL, {.i64 = 1}, -1, 1, AACENC_FLAGS},
{"aac_ltp", "Long term prediction", 0x42, AV_OPT_TYPE_BOOL, {.i64 = 0}, -1, 1, AACENC_FLAGS},
{"aac_pred", "AAC-Main prediction", 0x42, AV_OPT_TYPE_BOOL, {.i64 = 0}, -1, 1, AACENC_FLAGS},
{"aac_pce", "Forces the use of PCEs", 0x42, AV_OPT_TYPE_BOOL, {.i64 = 0}, -1, 1, AACENC_FLAGS},
{NULL}
}

Definition at line 1124 of file aacenc.c.

◆ aacenc_class

const AVClass aacenc_class
static
Initial value:
= {
.class_name = "AAC encoder",
.item_name = av_default_item_name,
.option = aacenc_options,
}

Definition at line 1140 of file aacenc.c.

◆ aac_encode_defaults

const AVCodecDefault aac_encode_defaults[]
static
Initial value:
= {
{ "b", "0" },
{ NULL }
}

Definition at line 1147 of file aacenc.c.

◆ ff_aac_encoder

AVCodec ff_aac_encoder
Initial value:
= {
.name = "aac",
.long_name = NULL_IF_CONFIG_SMALL("AAC (Advanced Audio Coding)"),
.priv_data_size = sizeof(AACEncContext),
.encode2 = aac_encode_frame,
.close = aac_encode_end,
.supported_samplerates = mpeg4audio_sample_rates,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
.priv_class = &aacenc_class,
}

Definition at line 1152 of file aacenc.c.

AV_SAMPLE_FMT_FLTP
@ AV_SAMPLE_FMT_FLTP
float, planar
Definition: samplefmt.h:69
FF_CODEC_CAP_INIT_THREADSAFE
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
Definition: internal.h:40
aacenc_class
static const AVClass aacenc_class
Definition: aacenc.c:1140
init
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
sample_fmts
static enum AVSampleFormat sample_fmts[]
Definition: adpcmenc.c:716
aac_encode_init
static av_cold int aac_encode_init(AVCodecContext *avctx)
Definition: aacenc.c:961
AAC_CODER_NB
@ AAC_CODER_NB
Definition: aacenc.h:40
AAC_CODER_FAST
@ AAC_CODER_FAST
Definition: aacenc.h:38
defaults
static const AVCodecDefault defaults[]
Definition: amfenc_h264.c:361
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
EIGHT_SHORT_SEQUENCE
@ EIGHT_SHORT_SEQUENCE
Definition: aac.h:78
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
NULL
#define NULL
Definition: coverity.c:32
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:235
AV_CODEC_ID_AAC
@ AV_CODEC_ID_AAC
Definition: codec_id.h:412
aac_encode_frame
static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
Definition: aacenc.c:558
AAC_CODER_ANMR
@ AAC_CODER_ANMR
Definition: aacenc.h:36
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:188
ONLY_LONG_SEQUENCE
@ ONLY_LONG_SEQUENCE
Definition: aac.h:76
AV_SAMPLE_FMT_NONE
@ AV_SAMPLE_FMT_NONE
Definition: samplefmt.h:59
AVFloatDSPContext
Definition: float_dsp.h:24
AAC_CODER_TWOLOOP
@ AAC_CODER_TWOLOOP
Definition: aacenc.h:37
SingleChannelElement
Single Channel Element - used for both SCE and LFE elements.
Definition: aac.h:248
aacenc_options
static const AVOption aacenc_options[]
Definition: aacenc.c:1124
LONG_STOP_SEQUENCE
@ LONG_STOP_SEQUENCE
Definition: aac.h:79
AVSampleFormat
AVSampleFormat
Audio sample formats.
Definition: samplefmt.h:58
AACENC_FLAGS
#define AACENC_FLAGS
Definition: aacenc.c:1123
LONG_START_SEQUENCE
@ LONG_START_SEQUENCE
Definition: aac.h:77
AACEncContext
AAC encoder context.
Definition: aacenc.h:376
AV_OPT_TYPE_INT
@ AV_OPT_TYPE_INT
Definition: opt.h:223
AV_CODEC_CAP_DELAY
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
Definition: codec.h:75
aac_encode_defaults
static const AVCodecDefault aac_encode_defaults[]
Definition: aacenc.c:1147
aac_encode_end
static av_cold int aac_encode_end(AVCodecContext *avctx)
Definition: aacenc.c:901
FF_AAC_PROFILE_OPTS
#define FF_AAC_PROFILE_OPTS
Definition: profiles.h:28
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:240
mpeg4audio_sample_rates
static const int mpeg4audio_sample_rates[16]
Definition: aacenctab.h:85
AV_CODEC_CAP_SMALL_LAST_FRAME
#define AV_CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size.
Definition: codec.h:80
AV_OPT_TYPE_CONST
@ AV_OPT_TYPE_CONST
Definition: opt.h:232