annotate ac3dec.h @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 7dd2a45249a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
25 *
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
26 * Summary of MDCT Coefficient Grouping:
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
27 * The individual MDCT coefficient indices are often referred to in the
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
28 * (E-)AC-3 specification as frequency bins. These bins are grouped together
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
29 * into subbands of 12 coefficients each. The subbands are grouped together
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
30 * into bands as defined in the bitstream by the band structures, which
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
31 * determine the number of bands and the size of each band. The full spectrum
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
32 * of 256 frequency bins is divided into 1 DC bin + 21 subbands = 253 bins.
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
33 * This system of grouping coefficients is used for channel bandwidth, stereo
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
34 * rematrixing, channel coupling, enhanced coupling, and spectral extension.
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
35 *
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
36 * +-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-+
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
37 * |1| |12| | [12|12|12|12] | | | | | | | | | | | | |3|
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
38 * +-+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-+
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
39 * ~~~ ~~~~ ~~~~~~~~~~~~~ ~~~
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
40 * | | | |
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
41 * | | | 3 unused frequency bins--+
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
42 * | | |
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
43 * | | +--1 band containing 4 subbands
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
44 * | |
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
45 * | +--1 subband of 12 frequency bins
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
46 * |
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
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
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7716
diff changeset
50 #ifndef AVCODEC_AC3DEC_H
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7716
diff changeset
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
69d5f318275f use LFG instead of Mersenne Twister for AC-3 PRNG
jbr
parents: 7564
diff changeset
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
0dce4fe6e6f3 Rename bitstream.h to get_bits.h.
stefano
parents: 8957
diff changeset
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
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents: 11369
diff changeset
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
54d22db12c03 use macro constants for array sizes in decode context
jbr
parents: 7022
diff changeset
66 #define AC3_MAX_COEFS 256
54d22db12c03 use macro constants for array sizes in decode context
jbr
parents: 7022
diff changeset
67 #define AC3_BLOCK_SIZE 256
7026
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7025
diff changeset
68 #define MAX_BLOCKS 6
11559
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
69 #define SPX_MAX_BANDS 17
7023
54d22db12c03 use macro constants for array sizes in decode context
jbr
parents: 7022
diff changeset
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
4bd2ccb0619e store cpl_in_use for all blocks in decode context
jbr
parents: 7025
diff changeset
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
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
116 ///@defgroup spx spectral extension
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
117 ///@{
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
118 int spx_in_use; ///< spectral extension in use (spxinu)
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
119 uint8_t channel_uses_spx[AC3_MAX_CHANNELS]; ///< channel uses spectral extension (chinspx)
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
120 int8_t spx_atten_code[AC3_MAX_CHANNELS]; ///< spx attenuation code (spxattencod)
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
121 int spx_src_start_freq; ///< spx start frequency bin
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
122 int spx_dst_end_freq; ///< spx end frequency bin
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
123 int spx_dst_start_freq; ///< spx starting frequency bin for copying (copystartmant)
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
124 ///< the copy region ends at the start of the spx region.
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
125 int num_spx_bands; ///< number of spx bands (nspxbnds)
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
126 uint8_t spx_band_sizes[SPX_MAX_BANDS]; ///< number of bins in each spx band
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
127 uint8_t first_spx_coords[AC3_MAX_CHANNELS]; ///< first spx coordinates states (firstspxcos)
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
128 float spx_noise_blend[AC3_MAX_CHANNELS][SPX_MAX_BANDS]; ///< spx noise blending factor (nblendfact)
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
129 float spx_signal_blend[AC3_MAX_CHANNELS][SPX_MAX_BANDS];///< spx signal blending factor (sblendfact)
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
130 ///@}
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
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
3cb3c85c8474 cosmetics: vertical alignment
jbr
parents: 7465
diff changeset
133 int channel_uses_aht[AC3_MAX_CHANNELS]; ///< channel AHT in use (chahtinu)
7465
b679a09420c8 use MAX_BLOCKS for array size instead of 6
jbr
parents: 7464
diff changeset
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
b4753ad6e34d cosmetics: vertical align
jbr
parents: 7021
diff changeset
138 int fbw_channels; ///< number of full-bandwidth channels
b4753ad6e34d cosmetics: vertical align
jbr
parents: 7021
diff changeset
139 int channels; ///< number of total channels
b4753ad6e34d cosmetics: vertical align
jbr
parents: 7021
diff changeset
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
b4753ad6e34d cosmetics: vertical align
jbr
parents: 7021
diff changeset
143 int output_mode; ///< output channel configuration
b4753ad6e34d cosmetics: vertical align
jbr
parents: 7021
diff changeset
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
54d22db12c03 use macro constants for array sizes in decode context
jbr
parents: 7022
diff changeset
163 int8_t dexps[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///< decoded exponents
7027
1edec36c02c5 store exp_strategy for all blocks in decode context
jbr
parents: 7026
diff changeset
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
7781b4d9cca2 cosmetics: vertical align
jbr
parents: 7023
diff changeset
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
54d22db12c03 use macro constants for array sizes in decode context
jbr
parents: 7022
diff changeset
172 uint8_t bap[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///< bit allocation pointers
54d22db12c03 use macro constants for array sizes in decode context
jbr
parents: 7022
diff changeset
173 int16_t psd[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///< scaled exponents
7024
7781b4d9cca2 cosmetics: vertical align
jbr
parents: 7023
diff changeset
174 int16_t band_psd[AC3_MAX_CHANNELS][50]; ///< interpolated exponents
7781b4d9cca2 cosmetics: vertical align
jbr
parents: 7023
diff changeset
175 int16_t mask[AC3_MAX_CHANNELS][50]; ///< masking curve values
7781b4d9cca2 cosmetics: vertical align
jbr
parents: 7023
diff changeset
176 int dba_mode[AC3_MAX_CHANNELS]; ///< delta bit allocation mode
7781b4d9cca2 cosmetics: vertical align
jbr
parents: 7023
diff changeset
177 int dba_nsegs[AC3_MAX_CHANNELS]; ///< number of delta segments
7781b4d9cca2 cosmetics: vertical align
jbr
parents: 7023
diff changeset
178 uint8_t dba_offsets[AC3_MAX_CHANNELS][8]; ///< delta segment offsets
7781b4d9cca2 cosmetics: vertical align
jbr
parents: 7023
diff changeset
179 uint8_t dba_lengths[AC3_MAX_CHANNELS][8]; ///< delta segment lengths
7781b4d9cca2 cosmetics: vertical align
jbr
parents: 7023
diff changeset
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
69d5f318275f use LFG instead of Mersenne Twister for AC-3 PRNG
jbr
parents: 7564
diff changeset
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
38ab367d4231 Merge FFTContext and MDCTContext
mru
parents: 10027
diff changeset
190 FFTContext imdct_512; ///< for 512 sample IMDCT
38ab367d4231 Merge FFTContext and MDCTContext
mru
parents: 10027
diff changeset
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
b4753ad6e34d cosmetics: vertical align
jbr
parents: 7021
diff changeset
195 DSPContext dsp; ///< for optimization
b4753ad6e34d cosmetics: vertical align
jbr
parents: 7021
diff changeset
196 float add_bias; ///< offset for float_to_int16 conversion
b4753ad6e34d cosmetics: vertical align
jbr
parents: 7021
diff changeset
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
98970e51365a Remove DECLARE_ALIGNED_{8,16} macros
mru
parents: 10961
diff changeset
201 DECLARE_ALIGNED(16, int, fixed_coeffs)[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///> fixed-point transform coefficients
98970e51365a Remove DECLARE_ALIGNED_{8,16} macros
mru
parents: 10961
diff changeset
202 DECLARE_ALIGNED(16, float, transform_coeffs)[AC3_MAX_CHANNELS][AC3_MAX_COEFS]; ///< transform coefficients
98970e51365a Remove DECLARE_ALIGNED_{8,16} macros
mru
parents: 10961
diff changeset
203 DECLARE_ALIGNED(16, float, delay)[AC3_MAX_CHANNELS][AC3_BLOCK_SIZE]; ///< delay - added to the next block
98970e51365a Remove DECLARE_ALIGNED_{8,16} macros
mru
parents: 10961
diff changeset
204 DECLARE_ALIGNED(16, float, window)[AC3_BLOCK_SIZE]; ///< window coefficients
98970e51365a Remove DECLARE_ALIGNED_{8,16} macros
mru
parents: 10961
diff changeset
205 DECLARE_ALIGNED(16, float, tmp_output)[AC3_BLOCK_SIZE]; ///< temporary storage for output before windowing
98970e51365a Remove DECLARE_ALIGNED_{8,16} macros
mru
parents: 10961
diff changeset
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
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
225 /**
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
226 * Apply spectral extension to each channel by copying lower frequency
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
227 * coefficients to higher frequency bins and applying side information to
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
228 * approximate the original high frequency signal.
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
229 */
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
230 void ff_eac3_apply_spectral_extension(AC3DecodeContext *s);
444f4b594fdb Add spectral extension to the E-AC-3 decoder.
cehoyos
parents: 11375
diff changeset
231
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7716
diff changeset
232 #endif /* AVCODEC_AC3DEC_H */