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;
73 
76  int frame_type;
78  int frame_size;
79  int bit_rate;
81  int num_blocks;
85  int lfe_on;
89  int eac3;
90 
91 
98  int dba_syntax;
100 
101 
103  int cpl_in_use[AC3_MAX_BLOCKS];
104  int cpl_strategy_exists[AC3_MAX_BLOCKS];
105  int channel_in_cpl[AC3_MAX_CHANNELS];
107  int phase_flags[AC3_MAX_CPL_BANDS];
109  uint8_t cpl_band_sizes[AC3_MAX_CPL_BANDS];
111  int first_cpl_coords[AC3_MAX_CHANNELS];
113 
114 
118  uint8_t channel_uses_spx[AC3_MAX_CHANNELS];
119  int8_t spx_atten_code[AC3_MAX_CHANNELS];
122  int spx_dst_start_freq;
123 
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 
130 
132  int channel_uses_aht[AC3_MAX_CHANNELS];
134 
135 
138  int channels;
139  int lfe_ch;
140  float downmix_coeffs[AC3_MAX_CHANNELS][2];
141  int downmixed;
144 
145 
147  float dynamic_range[2];
148  float drc_scale;
149 
150 
152  int start_freq[AC3_MAX_CHANNELS];
153  int end_freq[AC3_MAX_CHANNELS];
154 
155 
158  int rematrixing_flags[4];
159 
160 
162  int num_exp_groups[AC3_MAX_CHANNELS];
164  int exp_strategy[AC3_MAX_BLOCKS][AC3_MAX_CHANNELS];
165 
166 
170  int snr_offset[AC3_MAX_CHANNELS];
171  int fast_gain[AC3_MAX_CHANNELS];
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 
182 
184  int dither_flag[AC3_MAX_CHANNELS];
186 
187 
189  int block_switch[AC3_MAX_CHANNELS];
192 
193 
198  float mul_bias;
199 
200 
203  DECLARE_ALIGNED(32, float, transform_coeffs)[AC3_MAX_CHANNELS][AC3_MAX_COEFS];
205  DECLARE_ALIGNED(32, float, window)[AC3_BLOCK_SIZE];
206  DECLARE_ALIGNED(32, float, tmp_output)[AC3_BLOCK_SIZE];
209 
211 
217 
223 
224 void ff_ac3_downmix_c(float (*samples)[256], float (*matrix)[2],
225  int out_ch, int in_ch, int len);
226 
233 
234 #endif /* AVCODEC_AC3DEC_H */