Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavcodec
aac.h
Go to the documentation of this file.
1
/*
2
* AAC definitions and structures
3
* Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org )
4
* Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com )
5
*
6
* This file is part of Libav.
7
*
8
* Libav is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* Libav is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with Libav; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
30
#ifndef AVCODEC_AAC_H
31
#define AVCODEC_AAC_H
32
33
#include "
avcodec.h
"
34
#include "
dsputil.h
"
35
#include "
fft.h
"
36
#include "
mpeg4audio.h
"
37
#include "
sbr.h
"
38
#include "
fmtconvert.h
"
39
40
#include <stdint.h>
41
42
#define MAX_CHANNELS 64
43
#define MAX_ELEM_ID 16
44
45
#define TNS_MAX_ORDER 20
46
#define MAX_LTP_LONG_SFB 40
47
48
enum
RawDataBlockType
{
49
TYPE_SCE
,
50
TYPE_CPE
,
51
TYPE_CCE
,
52
TYPE_LFE
,
53
TYPE_DSE
,
54
TYPE_PCE
,
55
TYPE_FIL
,
56
TYPE_END
,
57
};
58
59
enum
ExtensionPayloadID
{
60
EXT_FILL
,
61
EXT_FILL_DATA
,
62
EXT_DATA_ELEMENT
,
63
EXT_DYNAMIC_RANGE
= 0xb,
64
EXT_SBR_DATA
= 0xd,
65
EXT_SBR_DATA_CRC
= 0xe,
66
};
67
68
enum
WindowSequence
{
69
ONLY_LONG_SEQUENCE
,
70
LONG_START_SEQUENCE
,
71
EIGHT_SHORT_SEQUENCE
,
72
LONG_STOP_SEQUENCE
,
73
};
74
75
enum
BandType
{
76
ZERO_BT
= 0,
77
FIRST_PAIR_BT
= 5,
78
ESC_BT
= 11,
79
NOISE_BT
= 13,
80
INTENSITY_BT2
= 14,
81
INTENSITY_BT
= 15,
82
};
83
84
#define IS_CODEBOOK_UNSIGNED(x) ((x - 1) & 10)
85
86
enum
ChannelPosition
{
87
AAC_CHANNEL_OFF
= 0,
88
AAC_CHANNEL_FRONT
= 1,
89
AAC_CHANNEL_SIDE
= 2,
90
AAC_CHANNEL_BACK
= 3,
91
AAC_CHANNEL_LFE
= 4,
92
AAC_CHANNEL_CC
= 5,
93
};
94
98
enum
CouplingPoint
{
99
BEFORE_TNS
,
100
BETWEEN_TNS_AND_IMDCT
,
101
AFTER_IMDCT
= 3,
102
};
103
107
enum
OCStatus
{
108
OC_NONE
,
109
OC_TRIAL_PCE
,
110
OC_TRIAL_FRAME
,
111
OC_GLOBAL_HDR
,
112
OC_LOCKED
,
113
};
114
118
typedef
struct
{
119
float
cor0
;
120
float
cor1
;
121
float
var0
;
122
float
var1
;
123
float
r0
;
124
float
r1
;
125
}
PredictorState
;
126
127
#define MAX_PREDICTORS 672
128
129
#define SCALE_DIV_512 36
130
#define SCALE_ONE_POS 140
131
#define SCALE_MAX_POS 255
132
#define SCALE_MAX_DIFF 60
133
#define SCALE_DIFF_ZERO 60
134
#define POW_SF2_ZERO 200
135
136
139
typedef
struct
{
140
int8_t
present
;
141
int16_t
lag
;
142
float
coef
;
143
int8_t used[
MAX_LTP_LONG_SFB
];
144
}
LongTermPrediction
;
145
149
typedef
struct
{
150
uint8_t
max_sfb
;
151
enum
WindowSequence
window_sequence[2];
152
uint8_t use_kb_window[2];
153
int
num_window_groups
;
154
uint8_t group_len[8];
155
LongTermPrediction
ltp
;
156
const
uint16_t *
swb_offset
;
157
const
uint8_t *
swb_sizes
;
158
int
num_swb
;
159
int
num_windows
;
160
int
tns_max_bands
;
161
int
predictor_present
;
162
int
predictor_initialized
;
163
int
predictor_reset_group
;
164
uint8_t prediction_used[41];
165
}
IndividualChannelStream
;
166
170
typedef
struct
{
171
int
present
;
172
int
n_filt[8];
173
int
length[8][4];
174
int
direction[8][4];
175
int
order[8][4];
176
float
coef[8][4][
TNS_MAX_ORDER
];
177
}
TemporalNoiseShaping
;
178
182
typedef
struct
{
183
int
pce_instance_tag
;
184
int
dyn_rng_sgn[17];
185
int
dyn_rng_ctl[17];
186
int
exclude_mask[
MAX_CHANNELS
];
187
int
band_incr
;
188
int
interpolation_scheme
;
189
int
band_top[17];
190
int
prog_ref_level;
193
}
DynamicRangeControl
;
194
195
typedef
struct
{
196
int
num_pulse
;
197
int
start
;
198
int
pos[4];
199
int
amp[4];
200
}
Pulse
;
201
205
typedef
struct
{
206
enum
CouplingPoint
coupling_point
;
207
int
num_coupled
;
208
enum
RawDataBlockType
type[8];
209
int
id_select[8];
210
int
ch_select[8];
213
float
gain[16][120];
214
}
ChannelCoupling
;
215
219
typedef
struct
{
220
IndividualChannelStream
ics
;
221
TemporalNoiseShaping
tns
;
222
Pulse
pulse
;
223
enum
BandType
band_type[128];
224
int
band_type_run_end[120];
225
float
sf[120];
226
int
sf_idx[128];
227
uint8_t zeroes[128];
228
DECLARE_ALIGNED
(32,
float
,
coeffs
)[1024];
229
DECLARE_ALIGNED
(32,
float
, saved)[1024];
230
DECLARE_ALIGNED
(32,
float
, ret)[2048];
231
DECLARE_ALIGNED
(16,
float
, ltp_state)[3072];
232
PredictorState
predictor_state[
MAX_PREDICTORS
];
233
}
SingleChannelElement
;
234
238
typedef
struct
{
239
// CPE specific
240
int
common_window
;
241
int
ms_mode
;
242
uint8_t ms_mask[128];
243
// shared
244
SingleChannelElement
ch[2];
245
// CCE specific
246
ChannelCoupling
coup
;
247
SpectralBandReplication
sbr
;
248
}
ChannelElement
;
249
253
typedef
struct
{
254
AVCodecContext
*
avctx
;
255
AVFrame
frame
;
256
257
MPEG4AudioConfig
m4ac
;
258
259
int
is_saved
;
260
DynamicRangeControl
che_drc
;
261
266
enum
ChannelPosition
che_pos[4][
MAX_ELEM_ID
];
269
ChannelElement
*che[4][
MAX_ELEM_ID
];
270
ChannelElement
*tag_che_map[4][
MAX_ELEM_ID
];
271
int
tags_mapped
;
279
DECLARE_ALIGNED
(32,
float
, buf_mdct)[1024];
286
FFTContext
mdct
;
287
FFTContext
mdct_small
;
288
FFTContext
mdct_ltp
;
289
DSPContext
dsp
;
290
FmtConvertContext
fmt_conv
;
291
int
random_state
;
298
float
*
output_data
[
MAX_CHANNELS
];
299
301
DECLARE_ALIGNED
(32,
float
, temp)[128];
302
303
enum
OCStatus
output_configured
;
304
}
AACContext
;
305
306
#endif
/* AVCODEC_AAC_H */