Mercurial > libavcodec.hg
annotate aac.h @ 11352:6e0af2cfdcfe libavcodec
Do MC and IDCT in coding (hilbert) order
This increases the slice size to 64 pixels, due to having to decode an
entire chroma superblock row per slice.
This can be up to 6% slower depending on clip and CPU, but is necessary
for future optimizations that gain significantly more than was lost.
author | conrad |
---|---|
date | Wed, 03 Mar 2010 23:27:40 +0000 |
parents | 34a65026fa06 |
children | 98970e51365a |
rev | line source |
---|---|
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
1 /* |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
2 * AAC definitions and structures |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
3 * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org ) |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
4 * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com ) |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
5 * |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
6 * This file is part of FFmpeg. |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
7 * |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
8 * FFmpeg is free software; you can redistribute it and/or |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
9 * modify it under the terms of the GNU Lesser General Public |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
10 * License as published by the Free Software Foundation; either |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
11 * version 2.1 of the License, or (at your option) any later version. |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
12 * |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
13 * FFmpeg is distributed in the hope that it will be useful, |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
16 * Lesser General Public License for more details. |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
17 * |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
18 * You should have received a copy of the GNU Lesser General Public |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
19 * License along with FFmpeg; if not, write to the Free Software |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
21 */ |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
22 |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
23 /** |
8718
e9d9d946f213
Use full internal pathname in doxygen @file directives.
diego
parents:
8413
diff
changeset
|
24 * @file libavcodec/aac.h |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
25 * AAC definitions and structures |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
26 * @author Oded Shimon ( ods15 ods15 dyndns org ) |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
27 * @author Maxim Gavrilov ( maxim.gavrilov gmail com ) |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
28 */ |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
29 |
7760 | 30 #ifndef AVCODEC_AAC_H |
31 #define AVCODEC_AAC_H | |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
32 |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
33 #include "avcodec.h" |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
34 #include "dsputil.h" |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
35 #include "mpeg4audio.h" |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
36 |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
37 #include <stdint.h> |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
38 |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
39 #define AAC_INIT_VLC_STATIC(num, size) \ |
10877 | 40 INIT_VLC_STATIC(&vlc_spectral[num], 8, ff_aac_spectral_sizes[num], \ |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
41 ff_aac_spectral_bits[num], sizeof( ff_aac_spectral_bits[num][0]), sizeof( ff_aac_spectral_bits[num][0]), \ |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
42 ff_aac_spectral_codes[num], sizeof(ff_aac_spectral_codes[num][0]), sizeof(ff_aac_spectral_codes[num][0]), \ |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
43 size); |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
44 |
7523
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
45 #define MAX_CHANNELS 64 |
7539 | 46 #define MAX_ELEM_ID 16 |
7523
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
47 |
7581 | 48 #define TNS_MAX_ORDER 20 |
49 | |
7539 | 50 enum RawDataBlockType { |
51 TYPE_SCE, | |
52 TYPE_CPE, | |
53 TYPE_CCE, | |
54 TYPE_LFE, | |
55 TYPE_DSE, | |
56 TYPE_PCE, | |
57 TYPE_FIL, | |
58 TYPE_END, | |
59 }; | |
60 | |
7523
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
61 enum ExtensionPayloadID { |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
62 EXT_FILL, |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
63 EXT_FILL_DATA, |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
64 EXT_DATA_ELEMENT, |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
65 EXT_DYNAMIC_RANGE = 0xb, |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
66 EXT_SBR_DATA = 0xd, |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
67 EXT_SBR_DATA_CRC = 0xe, |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
68 }; |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
69 |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
70 enum WindowSequence { |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
71 ONLY_LONG_SEQUENCE, |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
72 LONG_START_SEQUENCE, |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
73 EIGHT_SHORT_SEQUENCE, |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
74 LONG_STOP_SEQUENCE, |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
75 }; |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
76 |
7523
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
77 enum BandType { |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
78 ZERO_BT = 0, ///< Scalefactors and spectral data are all zero. |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
79 FIRST_PAIR_BT = 5, ///< This and later band types encode two values (rather than four) with one code word. |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
80 ESC_BT = 11, ///< Spectral data are coded with an escape sequence. |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
81 NOISE_BT = 13, ///< Spectral data are scaled white noise not coded in the bitstream. |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
82 INTENSITY_BT2 = 14, ///< Scalefactor data are intensity stereo positions. |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
83 INTENSITY_BT = 15, ///< Scalefactor data are intensity stereo positions. |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
84 }; |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
85 |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
86 #define IS_CODEBOOK_UNSIGNED(x) ((x - 1) & 10) |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
87 |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
88 enum ChannelPosition { |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
89 AAC_CHANNEL_FRONT = 1, |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
90 AAC_CHANNEL_SIDE = 2, |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
91 AAC_CHANNEL_BACK = 3, |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
92 AAC_CHANNEL_LFE = 4, |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
93 AAC_CHANNEL_CC = 5, |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
94 }; |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
95 |
7539 | 96 /** |
97 * The point during decoding at which channel coupling is applied. | |
98 */ | |
99 enum CouplingPoint { | |
100 BEFORE_TNS, | |
101 BETWEEN_TNS_AND_IMDCT, | |
102 AFTER_IMDCT = 3, | |
103 }; | |
104 | |
105 /** | |
10491
74e51b86b934
Don't lock the channel output configuration based on the first value seen for
alexc
parents:
10199
diff
changeset
|
106 * Output configuration status |
74e51b86b934
Don't lock the channel output configuration based on the first value seen for
alexc
parents:
10199
diff
changeset
|
107 */ |
74e51b86b934
Don't lock the channel output configuration based on the first value seen for
alexc
parents:
10199
diff
changeset
|
108 enum OCStatus { |
74e51b86b934
Don't lock the channel output configuration based on the first value seen for
alexc
parents:
10199
diff
changeset
|
109 OC_NONE, //< Output unconfigured |
74e51b86b934
Don't lock the channel output configuration based on the first value seen for
alexc
parents:
10199
diff
changeset
|
110 OC_TRIAL_PCE, //< Output configuration under trial specified by an inband PCE |
74e51b86b934
Don't lock the channel output configuration based on the first value seen for
alexc
parents:
10199
diff
changeset
|
111 OC_TRIAL_FRAME, //< Output configuration under trial specified by a frame header |
10622
2474aceea736
AAC: Add a global header but output not locked output configuration status.
alexc
parents:
10491
diff
changeset
|
112 OC_GLOBAL_HDR, //< Output configuration set in a global header but not yet locked |
10491
74e51b86b934
Don't lock the channel output configuration based on the first value seen for
alexc
parents:
10199
diff
changeset
|
113 OC_LOCKED, //< Output configuration locked in place |
74e51b86b934
Don't lock the channel output configuration based on the first value seen for
alexc
parents:
10199
diff
changeset
|
114 }; |
74e51b86b934
Don't lock the channel output configuration based on the first value seen for
alexc
parents:
10199
diff
changeset
|
115 |
74e51b86b934
Don't lock the channel output configuration based on the first value seen for
alexc
parents:
10199
diff
changeset
|
116 /** |
8199
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
117 * Predictor State |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
118 */ |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
119 typedef struct { |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
120 float cor0; |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
121 float cor1; |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
122 float var0; |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
123 float var1; |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
124 float r0; |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
125 float r1; |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
126 } PredictorState; |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
127 |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
128 #define MAX_PREDICTORS 672 |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
129 |
9935
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
130 #define SCALE_DIV_512 36 ///< scalefactor difference that corresponds to scale difference in 512 times |
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
131 #define SCALE_ONE_POS 140 ///< scalefactor index that corresponds to scale=1.0 |
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
132 #define SCALE_MAX_POS 255 ///< scalefactor index maximum value |
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
133 #define SCALE_MAX_DIFF 60 ///< maximum scalefactor difference allowed by standard |
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
134 #define SCALE_DIFF_ZERO 60 ///< codebook index corresponding to zero scalefactor indices difference |
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
135 |
8199
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
136 /** |
7539 | 137 * Individual Channel Stream |
138 */ | |
7578 | 139 typedef struct { |
140 uint8_t max_sfb; ///< number of scalefactor bands per group | |
141 enum WindowSequence window_sequence[2]; | |
142 uint8_t use_kb_window[2]; ///< If set, use Kaiser-Bessel window, otherwise use a sinus window. | |
143 int num_window_groups; | |
144 uint8_t group_len[8]; | |
145 const uint16_t *swb_offset; ///< table of offsets to the lowest spectral coefficient of a scalefactor band, sfb, for a particular window | |
9935
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
146 const uint8_t *swb_sizes; ///< table of scalefactor band sizes for a particular window |
7578 | 147 int num_swb; ///< number of scalefactor window bands |
148 int num_windows; | |
149 int tns_max_bands; | |
8199
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
150 int predictor_present; |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
151 int predictor_initialized; |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
152 int predictor_reset_group; |
8a8d40fe77d9
AAC: Frequency domain prediction and hence Main profile support
superdump
parents:
8109
diff
changeset
|
153 uint8_t prediction_used[41]; |
7578 | 154 } IndividualChannelStream; |
7539 | 155 |
156 /** | |
7609 | 157 * Temporal Noise Shaping |
158 */ | |
159 typedef struct { | |
160 int present; | |
161 int n_filt[8]; | |
162 int length[8][4]; | |
163 int direction[8][4]; | |
164 int order[8][4]; | |
165 float coef[8][4][TNS_MAX_ORDER]; | |
166 } TemporalNoiseShaping; | |
167 | |
168 /** | |
7539 | 169 * Dynamic Range Control - decoded from the bitstream but not processed further. |
170 */ | |
171 typedef struct { | |
172 int pce_instance_tag; ///< Indicates with which program the DRC info is associated. | |
173 int dyn_rng_sgn[17]; ///< DRC sign information; 0 - positive, 1 - negative | |
174 int dyn_rng_ctl[17]; ///< DRC magnitude information | |
175 int exclude_mask[MAX_CHANNELS]; ///< Channels to be excluded from DRC processing. | |
176 int band_incr; ///< Number of DRC bands greater than 1 having DRC info. | |
177 int interpolation_scheme; ///< Indicates the interpolation scheme used in the SBR QMF domain. | |
178 int band_top[17]; ///< Indicates the top of the i-th DRC band in units of 4 spectral lines. | |
179 int prog_ref_level; /**< A reference level for the long-term program audio level for all | |
180 * channels combined. | |
181 */ | |
182 } DynamicRangeControl; | |
183 | |
7523
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
184 typedef struct { |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
185 int num_pulse; |
9935
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
186 int start; |
7580 | 187 int pos[4]; |
7523
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
188 int amp[4]; |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
189 } Pulse; |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
190 |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
191 /** |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
192 * coupling parameters |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
193 */ |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
194 typedef struct { |
7578 | 195 enum CouplingPoint coupling_point; ///< The point during decoding at which coupling is applied. |
196 int num_coupled; ///< number of target elements | |
197 enum RawDataBlockType type[8]; ///< Type of channel element to be coupled - SCE or CPE. | |
198 int id_select[8]; ///< element id | |
8005 | 199 int ch_select[8]; /**< [0] shared list of gains; [1] list of gains for right channel; |
200 * [2] list of gains for left channel; [3] lists of gains for both channels | |
7578 | 201 */ |
202 float gain[16][120]; | |
203 } ChannelCoupling; | |
204 | |
205 /** | |
206 * Single Channel Element - used for both SCE and LFE elements. | |
207 */ | |
208 typedef struct { | |
209 IndividualChannelStream ics; | |
210 TemporalNoiseShaping tns; | |
9935
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
211 Pulse pulse; |
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
212 enum BandType band_type[128]; ///< band types |
7578 | 213 int band_type_run_end[120]; ///< band type run end points |
214 float sf[120]; ///< scalefactors | |
9935
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
215 int sf_idx[128]; ///< scalefactor indices (used by encoder) |
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
216 uint8_t zeroes[128]; ///< band is not coded (used by encoder) |
10961
34a65026fa06
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
10877
diff
changeset
|
217 DECLARE_ALIGNED_16(float, coeffs)[1024]; ///< coefficients for IMDCT |
34a65026fa06
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
10877
diff
changeset
|
218 DECLARE_ALIGNED_16(float, saved)[1024]; ///< overlap |
34a65026fa06
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
10877
diff
changeset
|
219 DECLARE_ALIGNED_16(float, ret)[1024]; ///< PCM output |
8413
6f40f7d77263
AAC: Fix AAC prediction when used in conjunction with the CPE
superdump
parents:
8286
diff
changeset
|
220 PredictorState predictor_state[MAX_PREDICTORS]; |
7578 | 221 } SingleChannelElement; |
222 | |
223 /** | |
224 * channel element - generic struct for SCE/CPE/CCE/LFE | |
225 */ | |
226 typedef struct { | |
227 // CPE specific | |
9935
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
228 int common_window; ///< Set if channels share a common 'IndividualChannelStream' in bitstream. |
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
229 int ms_mode; ///< Signals mid/side stereo flags coding mode (used by encoder) |
d09283aeeef8
Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents:
9838
diff
changeset
|
230 uint8_t ms_mask[128]; ///< Set if mid/side stereo is used for each scalefactor window band |
7578 | 231 // shared |
232 SingleChannelElement ch[2]; | |
233 // CCE specific | |
234 ChannelCoupling coup; | |
235 } ChannelElement; | |
7523
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
236 |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
237 /** |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
238 * main AAC context |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
239 */ |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
240 typedef struct { |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
241 AVCodecContext * avccontext; |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
242 |
7523
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
243 MPEG4AudioConfig m4ac; |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
244 |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
245 int is_saved; ///< Set if elements have stored overlap from previous frame. |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
246 DynamicRangeControl che_drc; |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
247 |
7539 | 248 /** |
8730
cfb8849d0452
Doxygen defgroups throw a warning if they don't have a title as well as a name
superdump
parents:
8718
diff
changeset
|
249 * @defgroup elements Channel element related data. |
7539 | 250 * @{ |
251 */ | |
7523
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
252 enum ChannelPosition che_pos[4][MAX_ELEM_ID]; /**< channel element channel mapping with the |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
253 * first index as the first 4 raw data block types |
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
254 */ |
7539 | 255 ChannelElement * che[4][MAX_ELEM_ID]; |
9149
955835e2bc99
Fix the channel allocation bug/assumption (issue 800).
alexc
parents:
8957
diff
changeset
|
256 ChannelElement * tag_che_map[4][MAX_ELEM_ID]; |
955835e2bc99
Fix the channel allocation bug/assumption (issue 800).
alexc
parents:
8957
diff
changeset
|
257 int tags_mapped; |
7539 | 258 /** @} */ |
7523
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
259 |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
260 /** |
7608 | 261 * @defgroup temporary aligned temporary buffers (We do not want to have these on the stack.) |
262 * @{ | |
263 */ | |
10961
34a65026fa06
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
10877
diff
changeset
|
264 DECLARE_ALIGNED_16(float, buf_mdct)[1024]; |
7608 | 265 /** @} */ |
266 | |
267 /** | |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
268 * @defgroup tables Computed / set up during initialization. |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
269 * @{ |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
270 */ |
10199 | 271 FFTContext mdct; |
272 FFTContext mdct_small; | |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
273 DSPContext dsp; |
7539 | 274 int random_state; |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
275 /** @} */ |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
276 |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
277 /** |
7523
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
278 * @defgroup output Members used for output interleaving. |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
279 * @{ |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
280 */ |
7523
a3f7ffdb676d
Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents:
7499
diff
changeset
|
281 float *output_data[MAX_CHANNELS]; ///< Points to each element's 'ret' buffer (PCM output). |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
282 float add_bias; ///< offset for dsp.float_to_int16 |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
283 float sf_scale; ///< Pre-scale for correct IMDCT and dsp.float_to_int16. |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
284 int sf_offset; ///< offset into pow2sf_tab as appropriate for dsp.float_to_int16 |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
285 /** @} */ |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
286 |
10961
34a65026fa06
Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents:
10877
diff
changeset
|
287 DECLARE_ALIGNED(16, float, temp)[128]; |
9948
98fd723f72e7
Ignore subsequent channel configurations after the first in an AAC file. The
alexc
parents:
9935
diff
changeset
|
288 |
10491
74e51b86b934
Don't lock the channel output configuration based on the first value seen for
alexc
parents:
10199
diff
changeset
|
289 enum OCStatus output_configured; |
7499
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
290 } AACContext; |
3eec98e5ab8f
AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff
changeset
|
291 |
7760 | 292 #endif /* AVCODEC_AAC_H */ |