FFmpeg
1.2.4
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavcodec
ac3dec.h
Go to the documentation of this file.
1
/*
2
* Common code between the AC-3 and E-AC-3 decoders
3
* Copyright (c) 2007 Bartlomiej Wolowiec <bartek.wolowiec@gmail.com>
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
50
#ifndef AVCODEC_AC3DEC_H
51
#define AVCODEC_AC3DEC_H
52
53
#include "
libavutil/float_dsp.h
"
54
#include "libavutil/lfg.h"
55
#include "
ac3.h
"
56
#include "
ac3dsp.h
"
57
#include "
get_bits.h
"
58
#include "
dsputil.h
"
59
#include "
fft.h
"
60
#include "
fmtconvert.h
"
61
62
#define AC3_OUTPUT_LFEON 8
63
64
#define SPX_MAX_BANDS 17
65
67
#define AC3_FRAME_BUFFER_SIZE 32768
68
69
typedef
struct
AC3DecodeContext
{
70
AVClass
*
class
;
71
AVCodecContext
*
avctx
;
72
GetBitContext
gbc
;
73
76
int
frame_type
;
77
int
substreamid
;
78
int
frame_size
;
79
int
bit_rate
;
80
int
sample_rate
;
81
int
num_blocks
;
82
int
bitstream_mode
;
83
int
channel_mode
;
84
int
channel_layout
;
85
int
lfe_on
;
86
int
channel_map
;
87
int
center_mix_level
;
88
int
surround_mix_level
;
89
int
eac3
;
90
91
92
int
preferred_stereo_downmix
;
93
float
ltrt_center_mix_level
;
94
float
ltrt_surround_mix_level
;
95
float
loro_center_mix_level
;
96
float
loro_surround_mix_level
;
97
99
int
snr_offset_strategy
;
100
int
block_switch_syntax
;
101
int
dither_flag_syntax
;
102
int
bit_allocation_syntax
;
103
int
fast_gain_syntax
;
104
int
dba_syntax
;
105
int
skip_syntax
;
106
107
109
int
cpl_in_use
[
AC3_MAX_BLOCKS
];
110
int
cpl_strategy_exists
[
AC3_MAX_BLOCKS
];
111
int
channel_in_cpl
[
AC3_MAX_CHANNELS
];
112
int
phase_flags_in_use
;
113
int
phase_flags
[
AC3_MAX_CPL_BANDS
];
114
int
num_cpl_bands
;
115
uint8_t
cpl_band_sizes
[
AC3_MAX_CPL_BANDS
];
116
int
firstchincpl
;
117
int
first_cpl_coords
[
AC3_MAX_CHANNELS
];
118
int
cpl_coords
[
AC3_MAX_CHANNELS
][
AC3_MAX_CPL_BANDS
];
119
120
123
int
spx_in_use
;
124
uint8_t
channel_uses_spx
[
AC3_MAX_CHANNELS
];
125
int8_t
spx_atten_code
[
AC3_MAX_CHANNELS
];
126
int
spx_src_start_freq
;
127
int
spx_dst_end_freq
;
128
int
spx_dst_start_freq
;
129
130
int
num_spx_bands
;
131
uint8_t
spx_band_sizes
[
SPX_MAX_BANDS
];
132
uint8_t
first_spx_coords
[
AC3_MAX_CHANNELS
];
133
float
spx_noise_blend
[
AC3_MAX_CHANNELS
][
SPX_MAX_BANDS
];
134
float
spx_signal_blend
[
AC3_MAX_CHANNELS
][
SPX_MAX_BANDS
];
135
136
138
int
channel_uses_aht
[
AC3_MAX_CHANNELS
];
139
int
pre_mantissa
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
][
AC3_MAX_BLOCKS
];
140
141
143
int
fbw_channels
;
144
int
channels
;
145
int
lfe_ch
;
146
float
downmix_coeffs
[
AC3_MAX_CHANNELS
][2];
147
int
downmixed
;
148
int
output_mode
;
149
int
out_channels
;
150
151
153
float
dynamic_range
[2];
154
float
drc_scale
;
155
156
158
int
start_freq
[
AC3_MAX_CHANNELS
];
159
int
end_freq
[
AC3_MAX_CHANNELS
];
160
161
163
int
num_rematrixing_bands
;
164
int
rematrixing_flags
[4];
165
166
168
int
num_exp_groups
[
AC3_MAX_CHANNELS
];
169
int8_t
dexps
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
170
int
exp_strategy
[
AC3_MAX_BLOCKS
][
AC3_MAX_CHANNELS
];
171
172
174
AC3BitAllocParameters
bit_alloc_params
;
175
int
first_cpl_leak
;
176
int
snr_offset
[
AC3_MAX_CHANNELS
];
177
int
fast_gain
[
AC3_MAX_CHANNELS
];
178
uint8_t
bap
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
179
int16_t
psd
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
180
int16_t
band_psd
[
AC3_MAX_CHANNELS
][
AC3_CRITICAL_BANDS
];
181
int16_t
mask
[
AC3_MAX_CHANNELS
][
AC3_CRITICAL_BANDS
];
182
int
dba_mode
[
AC3_MAX_CHANNELS
];
183
int
dba_nsegs
[
AC3_MAX_CHANNELS
];
184
uint8_t
dba_offsets
[
AC3_MAX_CHANNELS
][8];
185
uint8_t
dba_lengths
[
AC3_MAX_CHANNELS
][8];
186
uint8_t
dba_values
[
AC3_MAX_CHANNELS
][8];
187
188
190
int
dither_flag
[
AC3_MAX_CHANNELS
];
191
AVLFG
dith_state
;
192
193
195
int
block_switch
[
AC3_MAX_CHANNELS
];
196
FFTContext
imdct_512
;
197
FFTContext
imdct_256
;
198
199
201
DSPContext
dsp
;
202
AVFloatDSPContext
fdsp
;
203
AC3DSPContext
ac3dsp
;
204
FmtConvertContext
fmt_conv
;
205
206
207
float
*
outptr
[
AC3_MAX_CHANNELS
];
208
float
*
xcfptr
[
AC3_MAX_CHANNELS
];
209
float
*
dlyptr
[
AC3_MAX_CHANNELS
];
210
212
DECLARE_ALIGNED
(16,
int
,
fixed_coeffs
)[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
213
DECLARE_ALIGNED
(32,
float
,
transform_coeffs
)[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
214
DECLARE_ALIGNED
(32,
float
,
delay
)[
AC3_MAX_CHANNELS
][
AC3_BLOCK_SIZE
];
215
DECLARE_ALIGNED
(32,
float
,
window
)[
AC3_BLOCK_SIZE
];
216
DECLARE_ALIGNED
(32,
float
,
tmp_output
)[
AC3_BLOCK_SIZE
];
217
DECLARE_ALIGNED
(32,
float
,
output
)[
AC3_MAX_CHANNELS
][
AC3_BLOCK_SIZE
];
218
DECLARE_ALIGNED
(32,
uint8_t
,
input_buffer
)[
AC3_FRAME_BUFFER_SIZE
+
FF_INPUT_BUFFER_PADDING_SIZE
];
219
220
}
AC3DecodeContext
;
221
226
int
ff_eac3_parse_header
(
AC3DecodeContext
*s);
227
232
void
ff_eac3_decode_transform_coeffs_aht_ch
(
AC3DecodeContext
*s,
int
ch);
233
239
void
ff_eac3_apply_spectral_extension
(
AC3DecodeContext
*s);
240
241
#endif
/* AVCODEC_AC3DEC_H */
Generated on Fri Nov 29 2013 19:14:55 for FFmpeg by
1.8.1.2