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/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
AVFrame
frame
;
73
GetBitContext
gbc
;
74
77
int
frame_type
;
78
int
substreamid
;
79
int
frame_size
;
80
int
bit_rate
;
81
int
sample_rate
;
82
int
num_blocks
;
83
int
bitstream_mode
;
84
int
channel_mode
;
85
int
channel_layout
;
86
int
lfe_on
;
87
int
channel_map
;
88
int
center_mix_level
;
89
int
surround_mix_level
;
90
int
eac3
;
91
92
94
int
snr_offset_strategy
;
95
int
block_switch_syntax
;
96
int
dither_flag_syntax
;
97
int
bit_allocation_syntax
;
98
int
fast_gain_syntax
;
99
int
dba_syntax
;
100
int
skip_syntax
;
101
102
104
int
cpl_in_use
[
AC3_MAX_BLOCKS
];
105
int
cpl_strategy_exists
[
AC3_MAX_BLOCKS
];
106
int
channel_in_cpl
[
AC3_MAX_CHANNELS
];
107
int
phase_flags_in_use
;
108
int
phase_flags
[
AC3_MAX_CPL_BANDS
];
109
int
num_cpl_bands
;
110
uint8_t
cpl_band_sizes
[
AC3_MAX_CPL_BANDS
];
111
int
firstchincpl
;
112
int
first_cpl_coords
[
AC3_MAX_CHANNELS
];
113
int
cpl_coords
[
AC3_MAX_CHANNELS
][
AC3_MAX_CPL_BANDS
];
114
115
118
int
spx_in_use
;
119
uint8_t
channel_uses_spx
[
AC3_MAX_CHANNELS
];
120
int8_t
spx_atten_code
[
AC3_MAX_CHANNELS
];
121
int
spx_src_start_freq
;
122
int
spx_dst_end_freq
;
123
int
spx_dst_start_freq
;
124
125
int
num_spx_bands
;
126
uint8_t
spx_band_sizes
[
SPX_MAX_BANDS
];
127
uint8_t
first_spx_coords
[
AC3_MAX_CHANNELS
];
128
float
spx_noise_blend
[
AC3_MAX_CHANNELS
][
SPX_MAX_BANDS
];
129
float
spx_signal_blend
[
AC3_MAX_CHANNELS
][
SPX_MAX_BANDS
];
130
131
133
int
channel_uses_aht
[
AC3_MAX_CHANNELS
];
134
int
pre_mantissa
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
][
AC3_MAX_BLOCKS
];
135
136
138
int
fbw_channels
;
139
int
channels
;
140
int
lfe_ch
;
141
float
downmix_coeffs
[
AC3_MAX_CHANNELS
][2];
142
int
downmixed
;
143
int
output_mode
;
144
int
out_channels
;
145
146
148
float
dynamic_range
[2];
149
float
drc_scale
;
150
151
153
int
start_freq
[
AC3_MAX_CHANNELS
];
154
int
end_freq
[
AC3_MAX_CHANNELS
];
155
156
158
int
num_rematrixing_bands
;
159
int
rematrixing_flags
[4];
160
161
163
int
num_exp_groups
[
AC3_MAX_CHANNELS
];
164
int8_t
dexps
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
165
int
exp_strategy
[
AC3_MAX_BLOCKS
][
AC3_MAX_CHANNELS
];
166
167
169
AC3BitAllocParameters
bit_alloc_params
;
170
int
first_cpl_leak
;
171
int
snr_offset
[
AC3_MAX_CHANNELS
];
172
int
fast_gain
[
AC3_MAX_CHANNELS
];
173
uint8_t
bap
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
174
int16_t
psd
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
175
int16_t
band_psd
[
AC3_MAX_CHANNELS
][
AC3_CRITICAL_BANDS
];
176
int16_t
mask
[
AC3_MAX_CHANNELS
][
AC3_CRITICAL_BANDS
];
177
int
dba_mode
[
AC3_MAX_CHANNELS
];
178
int
dba_nsegs
[
AC3_MAX_CHANNELS
];
179
uint8_t
dba_offsets
[
AC3_MAX_CHANNELS
][8];
180
uint8_t
dba_lengths
[
AC3_MAX_CHANNELS
][8];
181
uint8_t
dba_values
[
AC3_MAX_CHANNELS
][8];
182
183
185
int
dither_flag
[
AC3_MAX_CHANNELS
];
186
AVLFG
dith_state
;
187
188
190
int
block_switch
[
AC3_MAX_CHANNELS
];
191
FFTContext
imdct_512
;
192
FFTContext
imdct_256
;
193
194
196
DSPContext
dsp
;
197
AVFloatDSPContext
fdsp
;
198
AC3DSPContext
ac3dsp
;
199
FmtConvertContext
fmt_conv
;
200
201
202
float
*
outptr
[
AC3_MAX_CHANNELS
];
203
float
*
xcfptr
[
AC3_MAX_CHANNELS
];
204
float
*
dlyptr
[
AC3_MAX_CHANNELS
];
205
207
DECLARE_ALIGNED
(16,
int
,
fixed_coeffs
)[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
208
DECLARE_ALIGNED
(32,
float
,
transform_coeffs
)[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
209
DECLARE_ALIGNED
(32,
float
,
delay
)[
AC3_MAX_CHANNELS
][
AC3_BLOCK_SIZE
];
210
DECLARE_ALIGNED
(32,
float
,
window
)[
AC3_BLOCK_SIZE
];
211
DECLARE_ALIGNED
(32,
float
,
tmp_output
)[
AC3_BLOCK_SIZE
];
212
DECLARE_ALIGNED
(32,
float
,
output
)[
AC3_MAX_CHANNELS
][
AC3_BLOCK_SIZE
];
213
DECLARE_ALIGNED
(32,
uint8_t
,
input_buffer
)[
AC3_FRAME_BUFFER_SIZE
+
FF_INPUT_BUFFER_PADDING_SIZE
];
214
215
}
AC3DecodeContext
;
216
221
int
ff_eac3_parse_header
(
AC3DecodeContext
*s);
222
227
void
ff_eac3_decode_transform_coeffs_aht_ch
(
AC3DecodeContext
*s,
int
ch);
228
234
void
ff_eac3_apply_spectral_extension
(
AC3DecodeContext
*s);
235
236
#endif
/* AVCODEC_AC3DEC_H */