Libav
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
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_id
;
83
int
bitstream_mode
;
84
int
channel_mode
;
85
int
lfe_on
;
86
int
channel_map
;
87
int
preferred_downmix
;
88
int
center_mix_level
;
89
int
center_mix_level_ltrt
;
90
int
surround_mix_level
;
91
int
surround_mix_level_ltrt
;
92
int
lfe_mix_level_exists
;
93
int
lfe_mix_level
;
94
int
eac3
;
95
int
dolby_surround_mode
;
96
int
dolby_surround_ex_mode
;
97
int
dolby_headphone_mode
;
98
99
101
int
snr_offset_strategy
;
102
int
block_switch_syntax
;
103
int
dither_flag_syntax
;
104
int
bit_allocation_syntax
;
105
int
fast_gain_syntax
;
106
int
dba_syntax
;
107
int
skip_syntax
;
108
109
111
int
cpl_in_use
[
AC3_MAX_BLOCKS
];
112
int
cpl_strategy_exists
[
AC3_MAX_BLOCKS
];
113
int
channel_in_cpl
[
AC3_MAX_CHANNELS
];
114
int
phase_flags_in_use
;
115
int
phase_flags
[
AC3_MAX_CPL_BANDS
];
116
int
num_cpl_bands
;
117
uint8_t
cpl_band_sizes
[
AC3_MAX_CPL_BANDS
];
118
int
firstchincpl
;
119
int
first_cpl_coords
[
AC3_MAX_CHANNELS
];
120
int
cpl_coords
[
AC3_MAX_CHANNELS
][
AC3_MAX_CPL_BANDS
];
121
122
125
int
spx_in_use
;
126
uint8_t
channel_uses_spx
[
AC3_MAX_CHANNELS
];
127
int8_t
spx_atten_code
[
AC3_MAX_CHANNELS
];
128
int
spx_src_start_freq
;
129
int
spx_dst_end_freq
;
130
int
spx_dst_start_freq
;
131
132
int
num_spx_bands
;
133
uint8_t
spx_band_sizes
[
SPX_MAX_BANDS
];
134
uint8_t
first_spx_coords
[
AC3_MAX_CHANNELS
];
135
float
spx_noise_blend
[
AC3_MAX_CHANNELS
][
SPX_MAX_BANDS
];
136
float
spx_signal_blend
[
AC3_MAX_CHANNELS
][
SPX_MAX_BANDS
];
137
138
140
int
channel_uses_aht
[
AC3_MAX_CHANNELS
];
141
int
pre_mantissa
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
][
AC3_MAX_BLOCKS
];
142
143
145
int
fbw_channels
;
146
int
channels
;
147
int
lfe_ch
;
148
float
downmix_coeffs
[
AC3_MAX_CHANNELS
][2];
149
int
downmixed
;
150
int
output_mode
;
151
int
out_channels
;
152
153
155
float
dynamic_range
[2];
156
float
drc_scale
;
157
158
160
int
start_freq
[
AC3_MAX_CHANNELS
];
161
int
end_freq
[
AC3_MAX_CHANNELS
];
162
163
165
int
num_rematrixing_bands
;
166
int
rematrixing_flags
[4];
167
168
170
int
num_exp_groups
[
AC3_MAX_CHANNELS
];
171
int8_t
dexps
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
172
int
exp_strategy
[
AC3_MAX_BLOCKS
][
AC3_MAX_CHANNELS
];
173
174
176
AC3BitAllocParameters
bit_alloc_params
;
177
int
first_cpl_leak
;
178
int
snr_offset
[
AC3_MAX_CHANNELS
];
179
int
fast_gain
[
AC3_MAX_CHANNELS
];
180
uint8_t
bap
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
181
int16_t
psd
[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
182
int16_t
band_psd
[
AC3_MAX_CHANNELS
][
AC3_CRITICAL_BANDS
];
183
int16_t
mask
[
AC3_MAX_CHANNELS
][
AC3_CRITICAL_BANDS
];
184
int
dba_mode
[
AC3_MAX_CHANNELS
];
185
int
dba_nsegs
[
AC3_MAX_CHANNELS
];
186
uint8_t
dba_offsets
[
AC3_MAX_CHANNELS
][8];
187
uint8_t
dba_lengths
[
AC3_MAX_CHANNELS
][8];
188
uint8_t
dba_values
[
AC3_MAX_CHANNELS
][8];
189
190
192
int
dither_flag
[
AC3_MAX_CHANNELS
];
193
AVLFG
dith_state
;
194
195
197
int
block_switch
[
AC3_MAX_CHANNELS
];
198
FFTContext
imdct_512
;
199
FFTContext
imdct_256
;
200
201
203
DSPContext
dsp
;
204
AVFloatDSPContext
fdsp
;
205
AC3DSPContext
ac3dsp
;
206
FmtConvertContext
fmt_conv
;
207
208
209
float
*
outptr
[
AC3_MAX_CHANNELS
];
210
float
*
xcfptr
[
AC3_MAX_CHANNELS
];
211
float
*
dlyptr
[
AC3_MAX_CHANNELS
];
212
214
DECLARE_ALIGNED
(16,
int32_t
,
fixed_coeffs
)[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
215
DECLARE_ALIGNED
(32,
float
,
transform_coeffs
)[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
216
DECLARE_ALIGNED
(32,
float
,
delay
)[
AC3_MAX_CHANNELS
][
AC3_BLOCK_SIZE
];
217
DECLARE_ALIGNED
(32,
float
,
window
)[
AC3_BLOCK_SIZE
];
218
DECLARE_ALIGNED
(32,
float
,
tmp_output
)[
AC3_BLOCK_SIZE
];
219
DECLARE_ALIGNED
(32,
float
,
output
)[
AC3_MAX_CHANNELS
][
AC3_BLOCK_SIZE
];
220
DECLARE_ALIGNED
(32,
uint8_t
,
input_buffer
)[
AC3_FRAME_BUFFER_SIZE
+
FF_INPUT_BUFFER_PADDING_SIZE
];
221
222
}
AC3DecodeContext
;
223
228
int
ff_eac3_parse_header
(
AC3DecodeContext
*s);
229
234
void
ff_eac3_decode_transform_coeffs_aht_ch
(
AC3DecodeContext
*s,
int
ch);
235
241
void
ff_eac3_apply_spectral_extension
(
AC3DecodeContext
*s);
242
243
#endif
/* AVCODEC_AC3DEC_H */
Generated on Thu Sep 30 2021 23:03:08 for Libav by
1.8.1.2