aacenc.h
Go to the documentation of this file.
1 /*
2  * AAC encoder
3  * Copyright (C) 2008 Konstantin Shishkov
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #ifndef AVCODEC_AACENC_H
23 #define AVCODEC_AACENC_H
24 
25 #include "libavutil/float_dsp.h"
26 #include "avcodec.h"
27 #include "put_bits.h"
28 
29 #include "aac.h"
30 #include "audio_frame_queue.h"
31 #include "psymodel.h"
32 
33 #define AAC_CODER_NB 4
34 
35 typedef struct AACEncOptions {
37  int aac_coder;
39 
40 struct AACEncContext;
41 
42 typedef struct AACCoefficientsEncoder {
43  void (*search_for_quantizers)(AVCodecContext *avctx, struct AACEncContext *s,
44  SingleChannelElement *sce, const float lambda);
46  int win, int group_len, const float lambda);
48  int scale_idx, int cb, const float lambda);
51 
53 
54 /**
55  * AAC encoder context
56  */
57 typedef struct AACEncContext {
59  AACEncOptions options; ///< encoding options
61  FFTContext mdct1024; ///< long (1024 samples) frame transform context
62  FFTContext mdct128; ///< short (128 samples) frame transform context
64  float *planar_samples[6]; ///< saved preprocessed input
65 
66  int samplerate_index; ///< MPEG-4 samplerate index
67  int channels; ///< channel count
68  const uint8_t *chan_map; ///< channel configuration map
69 
70  ChannelElement *cpe; ///< channel elements
76  float lambda;
78  DECLARE_ALIGNED(16, int, qcoefs)[96]; ///< quantized coefficients
79  DECLARE_ALIGNED(32, float, scoefs)[1024]; ///< scaled coefficients
80 
81  struct {
82  float *samples;
83  } buffer;
85 
86 extern float ff_aac_pow34sf_tab[428];
87 
89 
90 #endif /* AVCODEC_AACENC_H */
const char * s
Definition: avisynth_c.h:668
static void encode_window_bands_info(AACEncContext *s, SingleChannelElement *sce, int win, int group_len, const float lambda)
Encode band info for single window group bands.
Definition: aaccoder.c:312
struct AACEncOptions AACEncOptions
AACCoefficientsEncoder * coder
Definition: aacenc.h:73
#define DECLARE_ALIGNED(n, t, v)
Definition: mem.h:59
About Git write you should know how to use GIT properly Luckily Git comes with excellent documentation git help man git shows you the available git< command > help man git< command > shows information about the subcommand< command > The most comprehensive manual is the website Git Reference visit they are quite exhaustive You do not need a special username or password All you need is to provide a ssh public key to the Git server admin What follows now is a basic introduction to Git and some FFmpeg specific guidelines Read it at least if you are granted commit privileges to the FFmpeg project you are expected to be familiar with these rules I if not You can get git from etc no matter how small Every one of them has been saved from looking like a fool by this many times It s very easy for stray debug output or cosmetic modifications to slip in
Definition: git-howto.txt:5
float lambda
Definition: aacenc.h:76
float ff_aac_pow34sf_tab[428]
Definition: aacenc.c:56
AACEncOptions options
encoding options
Definition: aacenc.h:59
AAC encoder context.
Definition: aacenc.h:57
uint8_t
static void search_for_ms(AACEncContext *s, ChannelElement *cpe, const float lambda)
Definition: aaccoder.c:1054
void ff_aac_coder_init_mips(AACEncContext *c)
int samplerate_index
MPEG-4 samplerate index.
Definition: aacenc.h:66
const uint8_t * chan_map
channel configuration map
Definition: aacenc.h:68
AudioFrameQueue afq
Definition: aacenc.h:77
context used by psychoacoustic model
Definition: psymodel.h:76
AVFloatDSPContext fdsp
Definition: aacenc.h:63
struct AACCoefficientsEncoder AACCoefficientsEncoder
int last_frame
Definition: aacenc.h:75
int stereo_mode
Definition: aacenc.h:36
external API header
int size
struct AACEncContext AACEncContext
AAC encoder context.
Definition: fft.h:62
static void quantize_and_encode_band(struct AACEncContext *s, PutBitContext *pb, const float *in, int size, int scale_idx, int cb, const float lambda)
Definition: aaccoder.c:266
AVClass * av_class
Definition: aacenc.h:58
int cur_channel
Definition: aacenc.h:74
int channels
channel count
Definition: aacenc.h:67
AAC definitions and structures.
FFTContext mdct128
short (128 samples) frame transform context
Definition: aacenc.h:62
PutBitContext pb
Definition: aacenc.h:60
typedef void(RENAME(mix_any_func_type))
FIXME Range Coding of cb
Definition: snow.txt:367
main external API structure.
Describe the class of an AVClass context structure.
Definition: log.h:50
FFPsyContext psy
Definition: aacenc.h:71
struct FFPsyPreprocessContext * psypp
Definition: aacenc.h:72
AACCoefficientsEncoder ff_aac_coders[]
Definition: aaccoder.c:1115
int aac_coder
Definition: aacenc.h:37
float * samples
Definition: aacenc.h:82
Single Channel Element - used for both SCE and LFE elements.
Definition: aac.h:227
static double c[64]
ChannelElement * cpe
channel elements
Definition: aacenc.h:70
the buffer and buffer reference mechanism is intended to as much as expensive copies of that data while still allowing the filters to produce correct results The data is stored in buffers represented by AVFilterBuffer structures They must not be accessed but through references stored in AVFilterBufferRef structures Several references can point to the same buffer
channel element - generic struct for SCE/CPE/CCE/LFE
Definition: aac.h:247
FFTContext mdct1024
long (1024 samples) frame transform context
Definition: aacenc.h:61
bitstream writer API