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 Libav.
6
*
7
* Libav 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
* Libav 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 Libav; 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/lfg.h
"
54
#include "
ac3.h
"
55
#include "
ac3dsp.h
"
56
#include "
get_bits.h
"
57
#include "
dsputil.h
"
58
#include "
fft.h
"
59
#include "
fmtconvert.h
"
60
61
#define AC3_OUTPUT_LFEON 8
62
63
#define SPX_MAX_BANDS 17
64
66
#define AC3_FRAME_BUFFER_SIZE 32768
67
68
typedef
struct
AC3DecodeContext
{
69
AVClass
*
class
;
70
AVCodecContext
*
avctx
;
71
AVFrame
frame
;
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
93
int
snr_offset_strategy
;
94
int
block_switch_syntax
;
95
int
dither_flag_syntax
;
96
int
bit_allocation_syntax
;
97
int
fast_gain_syntax
;
98
int
dba_syntax
;
99
int
skip_syntax
;
100
103
int
cpl_in_use
[
AC3_MAX_BLOCKS
];
104
int
cpl_strategy_exists
[
AC3_MAX_BLOCKS
];
105
int
channel_in_cpl
[
AC3_MAX_CHANNELS
];
106
int
phase_flags_in_use
;
107
int
phase_flags
[
AC3_MAX_CPL_BANDS
];
108
int
num_cpl_bands
;
109
uint8_t
cpl_band_sizes
[
AC3_MAX_CPL_BANDS
];
110
int
firstchincpl
;
111
int
first_cpl_coords
[
AC3_MAX_CHANNELS
];
112
int
cpl_coords
[
AC3_MAX_CHANNELS
][
AC3_MAX_CPL_BANDS
];
113
117
int
spx_in_use
;
118
uint8_t
channel_uses_spx
[
AC3_MAX_CHANNELS
];
119
int8_t
spx_atten_code
[
AC3_MAX_CHANNELS
];
120
int
spx_src_start_freq
;
121
int
spx_dst_end_freq
;
122
int
spx_dst_start_freq
;
123
int
num_spx_bands
;
125
uint8_t
spx_band_sizes
[
SPX_MAX_BANDS
];
126
uint8_t
first_spx_coords
[
AC3_MAX_CHANNELS
];
127
float
spx_noise_blend
[
AC3_MAX_CHANNELS
][
SPX_MAX_BANDS
];
128
float
spx_signal_blend
[
AC3_MAX_CHANNELS
][
SPX_MAX_BANDS
];
129
132
int
channel_uses_aht
[
AC3_MAX_CHANNELS
];
133
int
pre_mantissa
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
][
AC3_MAX_BLOCKS
];
134
137
int
fbw_channels
;
138
int
channels
;
139
int
lfe_ch
;
140
float
downmix_coeffs
[
AC3_MAX_CHANNELS
][2];
141
int
downmixed
;
142
int
output_mode
;
143
int
out_channels
;
144
147
float
dynamic_range
[2];
148
float
drc_scale
;
149
152
int
start_freq
[
AC3_MAX_CHANNELS
];
153
int
end_freq
[
AC3_MAX_CHANNELS
];
154
157
int
num_rematrixing_bands
;
158
int
rematrixing_flags
[4];
159
162
int
num_exp_groups
[
AC3_MAX_CHANNELS
];
163
int8_t
dexps
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
164
int
exp_strategy
[
AC3_MAX_BLOCKS
][
AC3_MAX_CHANNELS
];
165
168
AC3BitAllocParameters
bit_alloc_params
;
169
int
first_cpl_leak
;
170
int
snr_offset
[
AC3_MAX_CHANNELS
];
171
int
fast_gain
[
AC3_MAX_CHANNELS
];
172
uint8_t
bap
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
173
int16_t
psd
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
174
int16_t
band_psd
[
AC3_MAX_CHANNELS
][
AC3_CRITICAL_BANDS
];
175
int16_t
mask
[
AC3_MAX_CHANNELS
][
AC3_CRITICAL_BANDS
];
176
int
dba_mode
[
AC3_MAX_CHANNELS
];
177
int
dba_nsegs
[
AC3_MAX_CHANNELS
];
178
uint8_t
dba_offsets
[
AC3_MAX_CHANNELS
][8];
179
uint8_t
dba_lengths
[
AC3_MAX_CHANNELS
][8];
180
uint8_t
dba_values
[
AC3_MAX_CHANNELS
][8];
181
184
int
dither_flag
[
AC3_MAX_CHANNELS
];
185
AVLFG
dith_state
;
186
189
int
block_switch
[
AC3_MAX_CHANNELS
];
190
FFTContext
imdct_512
;
191
FFTContext
imdct_256
;
192
195
DSPContext
dsp
;
196
AC3DSPContext
ac3dsp
;
197
FmtConvertContext
fmt_conv
;
198
200
float
*
outptr
[
AC3_MAX_CHANNELS
];
201
float
*
xcfptr
[
AC3_MAX_CHANNELS
];
202
float
*
dlyptr
[
AC3_MAX_CHANNELS
];
203
205
DECLARE_ALIGNED
(16,
int
,
fixed_coeffs
)[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
206
DECLARE_ALIGNED
(32,
float
,
transform_coeffs
)[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
207
DECLARE_ALIGNED
(32,
float
,
delay
)[
AC3_MAX_CHANNELS
][
AC3_BLOCK_SIZE
];
208
DECLARE_ALIGNED
(32,
float
,
window
)[
AC3_BLOCK_SIZE
];
209
DECLARE_ALIGNED
(32,
float
,
tmp_output
)[
AC3_BLOCK_SIZE
];
210
DECLARE_ALIGNED
(32,
float
,
output
)[
AC3_MAX_CHANNELS
][
AC3_BLOCK_SIZE
];
211
DECLARE_ALIGNED
(32,
uint8_t
,
input_buffer
)[
AC3_FRAME_BUFFER_SIZE
+
FF_INPUT_BUFFER_PADDING_SIZE
];
212
}
AC3DecodeContext
;
214
219
int
ff_eac3_parse_header
(
AC3DecodeContext
*s);
220
225
void
ff_eac3_decode_transform_coeffs_aht_ch
(
AC3DecodeContext
*s,
int
ch);
226
232
void
ff_eac3_apply_spectral_extension
(
AC3DecodeContext
*s);
233
234
#endif
/* AVCODEC_AC3DEC_H */