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
{
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
float
mul_bias
;
199
202
DECLARE_ALIGNED
(16,
int
,
fixed_coeffs
)[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
203
DECLARE_ALIGNED
(32,
float
, transform_coeffs)[
AC3_MAX_CHANNELS
][
AC3_MAX_COEFS
];
204
DECLARE_ALIGNED
(32,
float
, delay)[
AC3_MAX_CHANNELS
][
AC3_BLOCK_SIZE
];
205
DECLARE_ALIGNED
(32,
float
, window)[
AC3_BLOCK_SIZE
];
206
DECLARE_ALIGNED
(32,
float
, tmp_output)[
AC3_BLOCK_SIZE
];
207
DECLARE_ALIGNED
(32,
float
, output)[
AC3_MAX_CHANNELS
][
AC3_BLOCK_SIZE
];
208
DECLARE_ALIGNED
(32, uint8_t, input_buffer)[
AC3_FRAME_BUFFER_SIZE
+
FF_INPUT_BUFFER_PADDING_SIZE
];
209
}
AC3DecodeContext
;
211
216
int
ff_eac3_parse_header
(
AC3DecodeContext
*s);
217
222
void
ff_eac3_decode_transform_coeffs_aht_ch
(
AC3DecodeContext
*s,
int
ch);
223
224
void
ff_ac3_downmix_c
(
float
(*
samples
)[256],
float
(*matrix)[2],
225
int
out_ch,
int
in_ch,
int
len
);
226
232
void
ff_eac3_apply_spectral_extension
(
AC3DecodeContext
*s);
233
234
#endif
/* AVCODEC_AC3DEC_H */