Mercurial > libavcodec.hg
annotate ac3dec.h @ 12391:4be72e19ab0e libavcodec
imc: fix undefined float to int conversion
Conversion of an out of range float to int is undefined. Clipping to
the final range first avoids such problems. This fixes decoding on
MIPS, which handles these conversions differently from many other CPUs.
author | mru |
---|---|
date | Thu, 19 Aug 2010 16:51:26 +0000 |
parents | 7dd2a45249a9 |
children |
rev | line source |
---|---|
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
1 /* |
7470
1a93d3bbe3ee
cosmetics: make all references to AC-3 capitalized and hyphenated
jbr
parents:
7466
diff
changeset
|
2 * Common code between the AC-3 and E-AC-3 decoders |
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
3 * Copyright (c) 2007 Bartlomiej Wolowiec <bartek.wolowiec@gmail.com> |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
4 * |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
5 * This file is part of FFmpeg. |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
6 * |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Lesser General Public |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
9 * License as published by the Free Software Foundation; either |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
11 * |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
15 * Lesser General Public License for more details. |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
16 * |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Lesser General Public |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
20 */ |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
21 |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
22 /** |
11644
7dd2a45249a9
Remove explicit filename from Doxygen @file commands.
diego
parents:
11559
diff
changeset
|
23 * @file |
7470
1a93d3bbe3ee
cosmetics: make all references to AC-3 capitalized and hyphenated
jbr
parents:
7466
diff
changeset
|
24 * Common code between the AC-3 and E-AC-3 decoders. |
11559 | 25 * |
26 * Summary of MDCT Coefficient Grouping: | |
27 * The individual MDCT coefficient indices are often referred to in the | |
28 * (E-)AC-3 specification as frequency bins. These bins are grouped together | |
29 * into subbands of 12 coefficients each. The subbands are grouped together | |
30 * into bands as defined in the bitstream by the band structures, which | |
31 * determine the number of bands and the size of each band. The full spectrum | |
32 * of 256 frequency bins is divided into 1 DC bin + 21 subbands = 253 bins. | |
33 * This system of grouping coefficients is used for channel bandwidth, stereo | |
34 * rematrixing, channel coupling, enhanced coupling, and spectral extension. | |
35 * | |
36 * +-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-+ | |
37 * |1| |12| | [12|12|12|12] | | | | | | | | | | | | |3| | |
38 * +-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-+ | |
39 * ~~~ ~~~~ ~~~~~~~~~~~~~ ~~~ | |
40 * | | | | | |
41 * | | | 3 unused frequency bins--+ | |
42 * | | | | |
43 * | | +--1 band containing 4 subbands | |
44 * | | | |
45 * | +--1 subband of 12 frequency bins | |
46 * | | |
47 * +--DC frequency bin | |
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
48 */ |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
49 |
7760 | 50 #ifndef AVCODEC_AC3DEC_H |
51 #define AVCODEC_AC3DEC_H | |
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
52 |
7601 | 53 #include "libavutil/lfg.h" |
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
54 #include "ac3.h" |
9428 | 55 #include "get_bits.h" |
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
56 #include "dsputil.h" |
11370 | 57 #include "fft.h" |
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
58 |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
59 /* override ac3.h to include coupling channel */ |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
60 #undef AC3_MAX_CHANNELS |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
61 #define AC3_MAX_CHANNELS 7 |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
62 #define CPL_CH 0 |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
63 |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
64 #define AC3_OUTPUT_LFEON 8 |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
65 |
7023 | 66 #define AC3_MAX_COEFS 256 |
67 #define AC3_BLOCK_SIZE 256 | |
7026 | 68 #define MAX_BLOCKS 6 |
11559 | 69 #define SPX_MAX_BANDS 17 |
7023 | 70 |
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
71 typedef struct { |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
72 AVCodecContext *avctx; ///< parent context |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
73 GetBitContext gbc; ///< bitstream reader |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
74 uint8_t *input_buffer; ///< temp buffer to prevent overread |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
75 |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
76 ///@defgroup bsi bit stream information |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
77 ///@{ |
7025
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
78 int frame_type; ///< frame type (strmtyp) |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
79 int substreamid; ///< substream identification |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
80 int frame_size; ///< current frame size, in bytes |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
81 int bit_rate; ///< stream bit rate, in bits-per-second |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
82 int sample_rate; ///< sample frequency, in Hz |
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
83 int num_blocks; ///< number of audio blocks |
7025
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
84 int channel_mode; ///< channel mode (acmod) |
9512
ba5d9a97ab2f
Add channel layout support to the AC-3 decoder and AC-3 parser.
jbr
parents:
9428
diff
changeset
|
85 int channel_layout; ///< channel layout |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
86 int lfe_on; ///< lfe channel in use |
7031
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
87 int channel_map; ///< custom channel map |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
88 int center_mix_level; ///< Center mix level index |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
89 int surround_mix_level; ///< Surround mix level index |
7031
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
90 int eac3; ///< indicates if current frame is E-AC-3 |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
91 ///@} |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
92 |
7031
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
93 ///@defgroup audfrm frame syntax parameters |
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
94 int snr_offset_strategy; ///< SNR offset strategy (snroffststr) |
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
95 int block_switch_syntax; ///< block switch syntax enabled (blkswe) |
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
96 int dither_flag_syntax; ///< dither flag syntax enabled (dithflage) |
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
97 int bit_allocation_syntax; ///< bit allocation model syntax enabled (bamode) |
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
98 int fast_gain_syntax; ///< fast gain codes enabled (frmfgaincode) |
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
99 int dba_syntax; ///< delta bit allocation syntax enabled (dbaflde) |
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
100 int skip_syntax; ///< skip field syntax enabled (skipflde) |
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
101 ///@} |
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
102 |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
103 ///@defgroup cpl standard coupling |
7026 | 104 int cpl_in_use[MAX_BLOCKS]; ///< coupling in use (cplinu) |
7031
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
105 int cpl_strategy_exists[MAX_BLOCKS]; ///< coupling strategy exists (cplstre) |
7025
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
106 int channel_in_cpl[AC3_MAX_CHANNELS]; ///< channel in coupling (chincpl) |
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
107 int phase_flags_in_use; ///< phase flags in use (phsflginu) |
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
108 int phase_flags[18]; ///< phase flags (phsflg) |
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
109 int num_cpl_bands; ///< number of coupling bands (ncplbnd) |
10021
f6c433eacc5a
Use coupling band sizes instead of coupling band structure when
jbr
parents:
9838
diff
changeset
|
110 uint8_t cpl_band_sizes[18]; ///< number of coeffs in each coupling band |
7031
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
111 int firstchincpl; ///< first channel in coupling |
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
112 int first_cpl_coords[AC3_MAX_CHANNELS]; ///< first coupling coordinates states (firstcplcos) |
7025
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
113 int cpl_coords[AC3_MAX_CHANNELS][18]; ///< coupling coordinates (cplco) |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
114 ///@} |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
115 |
11559 | 116 ///@defgroup spx spectral extension |
117 ///@{ | |
118 int spx_in_use; ///< spectral extension in use (spxinu) | |
119 uint8_t channel_uses_spx[AC3_MAX_CHANNELS]; ///< channel uses spectral extension (chinspx) | |
120 int8_t spx_atten_code[AC3_MAX_CHANNELS]; ///< spx attenuation code (spxattencod) | |
121 int spx_src_start_freq; ///< spx start frequency bin | |
122 int spx_dst_end_freq; ///< spx end frequency bin | |
123 int spx_dst_start_freq; ///< spx starting frequency bin for copying (copystartmant) | |
124 ///< the copy region ends at the start of the spx region. | |
125 int num_spx_bands; ///< number of spx bands (nspxbnds) | |
126 uint8_t spx_band_sizes[SPX_MAX_BANDS]; ///< number of bins in each spx band | |
127 uint8_t first_spx_coords[AC3_MAX_CHANNELS]; ///< first spx coordinates states (firstspxcos) | |
128 float spx_noise_blend[AC3_MAX_CHANNELS][SPX_MAX_BANDS]; ///< spx noise blending factor (nblendfact) | |
129 float spx_signal_blend[AC3_MAX_CHANNELS][SPX_MAX_BANDS];///< spx signal blending factor (sblendfact) | |
130 ///@} | |
131 | |
7031
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
132 ///@defgroup aht adaptive hybrid transform |
7466 | 133 int channel_uses_aht[AC3_MAX_CHANNELS]; ///< channel AHT in use (chahtinu) |
7465 | 134 int pre_mantissa[AC3_MAX_CHANNELS][AC3_MAX_COEFS][MAX_BLOCKS]; ///< pre-IDCT mantissas |
7031
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
135 ///@} |
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
136 |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
137 ///@defgroup channel channel |
7022 | 138 int fbw_channels; ///< number of full-bandwidth channels |
139 int channels; ///< number of total channels | |
140 int lfe_ch; ///< index of LFE channel | |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
141 float downmix_coeffs[AC3_MAX_CHANNELS][2]; ///< stereo downmix coefficients |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
142 int downmixed; ///< indicates if coeffs are currently downmixed |
7022 | 143 int output_mode; ///< output channel configuration |
144 int out_channels; ///< number of output channels | |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
145 ///@} |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
146 |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
147 ///@defgroup dynrng dynamic range |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
148 float dynamic_range[2]; ///< dynamic range |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
149 ///@} |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
150 |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
151 ///@defgroup bandwidth bandwidth |
7025
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
152 int start_freq[AC3_MAX_CHANNELS]; ///< start frequency bin (strtmant) |
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
153 int end_freq[AC3_MAX_CHANNELS]; ///< end frequency bin (endmant) |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
154 ///@} |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
155 |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
156 ///@defgroup rematrixing rematrixing |
7025
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
157 int num_rematrixing_bands; ///< number of rematrixing bands (nrematbnd) |
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
158 int rematrixing_flags[4]; ///< rematrixing flags (rematflg) |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
159 ///@} |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
160 |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
161 ///@defgroup exponents exponents |
7025
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
162 int num_exp_groups[AC3_MAX_CHANNELS]; ///< Number of exponent groups (nexpgrp) |
7023 | 163 int8_t dexps[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///< decoded exponents |
7027 | 164 int exp_strategy[MAX_BLOCKS][AC3_MAX_CHANNELS]; ///< exponent strategies (expstr) |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
165 ///@} |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
166 |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
167 ///@defgroup bitalloc bit allocation |
7024 | 168 AC3BitAllocParameters bit_alloc_params; ///< bit allocation parameters |
7031
4b9d8cd9a1f0
add fields needed for E-AC-3 decoding to decode context
jbr
parents:
7027
diff
changeset
|
169 int first_cpl_leak; ///< first coupling leak state (firstcplleak) |
7025
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
170 int snr_offset[AC3_MAX_CHANNELS]; ///< signal-to-noise ratio offsets (snroffst) |
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
171 int fast_gain[AC3_MAX_CHANNELS]; ///< fast gain values/SMR's (fgain) |
7023 | 172 uint8_t bap[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///< bit allocation pointers |
173 int16_t psd[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///< scaled exponents | |
7024 | 174 int16_t band_psd[AC3_MAX_CHANNELS][50]; ///< interpolated exponents |
175 int16_t mask[AC3_MAX_CHANNELS][50]; ///< masking curve values | |
176 int dba_mode[AC3_MAX_CHANNELS]; ///< delta bit allocation mode | |
177 int dba_nsegs[AC3_MAX_CHANNELS]; ///< number of delta segments | |
178 uint8_t dba_offsets[AC3_MAX_CHANNELS][8]; ///< delta segment offsets | |
179 uint8_t dba_lengths[AC3_MAX_CHANNELS][8]; ///< delta segment lengths | |
180 uint8_t dba_values[AC3_MAX_CHANNELS][8]; ///< delta values for each segment | |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
181 ///@} |
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
182 |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
183 ///@defgroup dithering zero-mantissa dithering |
7025
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
184 int dither_flag[AC3_MAX_CHANNELS]; ///< dither flags (dithflg) |
7601 | 185 AVLFG dith_state; ///< for dither generation |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
186 ///@} |
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
187 |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
188 ///@defgroup imdct IMDCT |
7025
acf98a472f74
cosmetics: add and align references to spec variable names
jbr
parents:
7024
diff
changeset
|
189 int block_switch[AC3_MAX_CHANNELS]; ///< block switch flags (blksw) |
10199 | 190 FFTContext imdct_512; ///< for 512 sample IMDCT |
191 FFTContext imdct_256; ///< for 256 sample IMDCT | |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
192 ///@} |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
193 |
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
194 ///@defgroup opt optimization |
7022 | 195 DSPContext dsp; ///< for optimization |
196 float add_bias; ///< offset for float_to_int16 conversion | |
197 float mul_bias; ///< scaling for float_to_int16 conversion | |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
198 ///@} |
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
199 |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
200 ///@defgroup arrays aligned arrays |
11369 | 201 DECLARE_ALIGNED(16, int, fixed_coeffs)[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///> fixed-point transform coefficients |
202 DECLARE_ALIGNED(16, float, transform_coeffs)[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///< transform coefficients | |
203 DECLARE_ALIGNED(16, float, delay)[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE]; ///< delay - added to the next block | |
204 DECLARE_ALIGNED(16, float, window)[AC3_BLOCK_SIZE]; ///< window coefficients | |
205 DECLARE_ALIGNED(16, float, tmp_output)[AC3_BLOCK_SIZE]; ///< temporary storage for output before windowing | |
206 DECLARE_ALIGNED(16, float, output)[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE]; ///< output after imdct transform and windowing | |
7021
49afffc0dc60
cosmetics: reorder decode context fields into logical groups
jbr
parents:
7020
diff
changeset
|
207 ///@} |
7020
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
208 } AC3DecodeContext; |
40a2db8dbaa2
move the decode context and some macro constants to a new file, ac3dec.h
jbr
parents:
diff
changeset
|
209 |
7704
b928055716e5
add definitions and documentation for shared functions for E-AC-3 decoding
jbr
parents:
7703
diff
changeset
|
210 /** |
b928055716e5
add definitions and documentation for shared functions for E-AC-3 decoding
jbr
parents:
7703
diff
changeset
|
211 * Parse the E-AC-3 frame header. |
b928055716e5
add definitions and documentation for shared functions for E-AC-3 decoding
jbr
parents:
7703
diff
changeset
|
212 * This parses both the bit stream info and audio frame header. |
b928055716e5
add definitions and documentation for shared functions for E-AC-3 decoding
jbr
parents:
7703
diff
changeset
|
213 */ |
b928055716e5
add definitions and documentation for shared functions for E-AC-3 decoding
jbr
parents:
7703
diff
changeset
|
214 int ff_eac3_parse_header(AC3DecodeContext *s); |
b928055716e5
add definitions and documentation for shared functions for E-AC-3 decoding
jbr
parents:
7703
diff
changeset
|
215 |
b928055716e5
add definitions and documentation for shared functions for E-AC-3 decoding
jbr
parents:
7703
diff
changeset
|
216 /** |
b928055716e5
add definitions and documentation for shared functions for E-AC-3 decoding
jbr
parents:
7703
diff
changeset
|
217 * Decode mantissas in a single channel for the entire frame. |
b928055716e5
add definitions and documentation for shared functions for E-AC-3 decoding
jbr
parents:
7703
diff
changeset
|
218 * This is used when AHT mode is enabled. |
b928055716e5
add definitions and documentation for shared functions for E-AC-3 decoding
jbr
parents:
7703
diff
changeset
|
219 */ |
b928055716e5
add definitions and documentation for shared functions for E-AC-3 decoding
jbr
parents:
7703
diff
changeset
|
220 void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch); |
b928055716e5
add definitions and documentation for shared functions for E-AC-3 decoding
jbr
parents:
7703
diff
changeset
|
221 |
11375
84963c795459
Move some prototypes from dsputil.c to reasonable header files
mru
parents:
11370
diff
changeset
|
222 void ff_ac3_downmix_c(float (*samples)[256], float (*matrix)[2], |
84963c795459
Move some prototypes from dsputil.c to reasonable header files
mru
parents:
11370
diff
changeset
|
223 int out_ch, int in_ch, int len); |
84963c795459
Move some prototypes from dsputil.c to reasonable header files
mru
parents:
11370
diff
changeset
|
224 |
11559 | 225 /** |
226 * Apply spectral extension to each channel by copying lower frequency | |
227 * coefficients to higher frequency bins and applying side information to | |
228 * approximate the original high frequency signal. | |
229 */ | |
230 void ff_eac3_apply_spectral_extension(AC3DecodeContext *s); | |
231 | |
7760 | 232 #endif /* AVCODEC_AC3DEC_H */ |