annotate aac.h @ 12483:0159a19bfff7 libavcodec

aacdec: Rework channel mapping compatibility hacks. For a PCE based configuration map the channels solely based on tags. For an indexed configuration map the channels solely based on position. This works with all known exotic samples including al17, elem_id0, bad_concat, and lfe_is_sce.
author alexc
date Fri, 10 Sep 2010 18:01:48 +0000
parents f71c3558f3f5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 /**
11644
7dd2a45249a9 Remove explicit filename from Doxygen @file commands.
diego
parents: 11401
diff changeset
24 * @file
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
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7663
diff changeset
30 #ifndef AVCODEC_AAC_H
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7663
diff changeset
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"
11370
4b3da727d832 Move FFT parts from dsputil.h to fft.h
mru
parents: 11369
diff changeset
35 #include "fft.h"
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
36 #include "mpeg4audio.h"
11401
e340262ba532 Add an HE-AAC v1 decoder.
alexc
parents: 11370
diff changeset
37 #include "sbr.h"
7499
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 #include <stdint.h>
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
40
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
41 #define MAX_CHANNELS 64
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
42 #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
43
7581
6fdffa4836a7 More OKed AAC decoder hunks
superdump
parents: 7580
diff changeset
44 #define TNS_MAX_ORDER 20
6fdffa4836a7 More OKed AAC decoder hunks
superdump
parents: 7580
diff changeset
45
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
46 enum RawDataBlockType {
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
47 TYPE_SCE,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
48 TYPE_CPE,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
49 TYPE_CCE,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
50 TYPE_LFE,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
51 TYPE_DSE,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
52 TYPE_PCE,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
53 TYPE_FIL,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
54 TYPE_END,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
55 };
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
56
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
57 enum ExtensionPayloadID {
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
58 EXT_FILL,
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
59 EXT_FILL_DATA,
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
60 EXT_DATA_ELEMENT,
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
61 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
62 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
63 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
64 };
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
65
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
66 enum WindowSequence {
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
67 ONLY_LONG_SEQUENCE,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
68 LONG_START_SEQUENCE,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
69 EIGHT_SHORT_SEQUENCE,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
70 LONG_STOP_SEQUENCE,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
71 };
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
72
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
73 enum BandType {
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
74 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
75 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
76 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
77 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
78 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
79 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
80 };
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
81
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
82 #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
83
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
84 enum ChannelPosition {
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
85 AAC_CHANNEL_FRONT = 1,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
86 AAC_CHANNEL_SIDE = 2,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
87 AAC_CHANNEL_BACK = 3,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
88 AAC_CHANNEL_LFE = 4,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
89 AAC_CHANNEL_CC = 5,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
90 };
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
91
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
92 /**
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
93 * The point during decoding at which channel coupling is applied.
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
94 */
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
95 enum CouplingPoint {
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
96 BEFORE_TNS,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
97 BETWEEN_TNS_AND_IMDCT,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
98 AFTER_IMDCT = 3,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
99 };
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
100
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
101 /**
10491
74e51b86b934 Don't lock the channel output configuration based on the first value seen for
alexc
parents: 10199
diff changeset
102 * Output configuration status
74e51b86b934 Don't lock the channel output configuration based on the first value seen for
alexc
parents: 10199
diff changeset
103 */
74e51b86b934 Don't lock the channel output configuration based on the first value seen for
alexc
parents: 10199
diff changeset
104 enum OCStatus {
74e51b86b934 Don't lock the channel output configuration based on the first value seen for
alexc
parents: 10199
diff changeset
105 OC_NONE, //< Output unconfigured
74e51b86b934 Don't lock the channel output configuration based on the first value seen for
alexc
parents: 10199
diff changeset
106 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
107 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
108 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
109 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
110 };
74e51b86b934 Don't lock the channel output configuration based on the first value seen for
alexc
parents: 10199
diff changeset
111
74e51b86b934 Don't lock the channel output configuration based on the first value seen for
alexc
parents: 10199
diff changeset
112 /**
8199
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
113 * Predictor State
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
114 */
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
115 typedef struct {
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
116 float cor0;
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
117 float cor1;
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
118 float var0;
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
119 float var1;
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
120 float r0;
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
121 float r1;
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
122 } PredictorState;
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
123
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
124 #define MAX_PREDICTORS 672
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
125
9935
d09283aeeef8 Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents: 9838
diff changeset
126 #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
127 #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
128 #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
129 #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
130 #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
131
8199
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
132 /**
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
133 * Individual Channel Stream
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
134 */
7578
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
135 typedef struct {
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
136 uint8_t max_sfb; ///< number of scalefactor bands per group
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
137 enum WindowSequence window_sequence[2];
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
138 uint8_t use_kb_window[2]; ///< If set, use Kaiser-Bessel window, otherwise use a sinus window.
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
139 int num_window_groups;
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
140 uint8_t group_len[8];
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
141 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
142 const uint8_t *swb_sizes; ///< table of scalefactor band sizes for a particular window
7578
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
143 int num_swb; ///< number of scalefactor window bands
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
144 int num_windows;
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
145 int tns_max_bands;
8199
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
146 int predictor_present;
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
147 int predictor_initialized;
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
148 int predictor_reset_group;
8a8d40fe77d9 AAC: Frequency domain prediction and hence Main profile support
superdump
parents: 8109
diff changeset
149 uint8_t prediction_used[41];
7578
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
150 } IndividualChannelStream;
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
151
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
152 /**
7609
3f6fc60f1ed3 More OKed AAC decoder code hunks
superdump
parents: 7608
diff changeset
153 * Temporal Noise Shaping
3f6fc60f1ed3 More OKed AAC decoder code hunks
superdump
parents: 7608
diff changeset
154 */
3f6fc60f1ed3 More OKed AAC decoder code hunks
superdump
parents: 7608
diff changeset
155 typedef struct {
3f6fc60f1ed3 More OKed AAC decoder code hunks
superdump
parents: 7608
diff changeset
156 int present;
3f6fc60f1ed3 More OKed AAC decoder code hunks
superdump
parents: 7608
diff changeset
157 int n_filt[8];
3f6fc60f1ed3 More OKed AAC decoder code hunks
superdump
parents: 7608
diff changeset
158 int length[8][4];
3f6fc60f1ed3 More OKed AAC decoder code hunks
superdump
parents: 7608
diff changeset
159 int direction[8][4];
3f6fc60f1ed3 More OKed AAC decoder code hunks
superdump
parents: 7608
diff changeset
160 int order[8][4];
3f6fc60f1ed3 More OKed AAC decoder code hunks
superdump
parents: 7608
diff changeset
161 float coef[8][4][TNS_MAX_ORDER];
3f6fc60f1ed3 More OKed AAC decoder code hunks
superdump
parents: 7608
diff changeset
162 } TemporalNoiseShaping;
3f6fc60f1ed3 More OKed AAC decoder code hunks
superdump
parents: 7608
diff changeset
163
3f6fc60f1ed3 More OKed AAC decoder code hunks
superdump
parents: 7608
diff changeset
164 /**
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
165 * Dynamic Range Control - decoded from the bitstream but not processed further.
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
166 */
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
167 typedef struct {
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
168 int pce_instance_tag; ///< Indicates with which program the DRC info is associated.
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
169 int dyn_rng_sgn[17]; ///< DRC sign information; 0 - positive, 1 - negative
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
170 int dyn_rng_ctl[17]; ///< DRC magnitude information
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
171 int exclude_mask[MAX_CHANNELS]; ///< Channels to be excluded from DRC processing.
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
172 int band_incr; ///< Number of DRC bands greater than 1 having DRC info.
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
173 int interpolation_scheme; ///< Indicates the interpolation scheme used in the SBR QMF domain.
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
174 int band_top[17]; ///< Indicates the top of the i-th DRC band in units of 4 spectral lines.
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
175 int prog_ref_level; /**< A reference level for the long-term program audio level for all
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
176 * channels combined.
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
177 */
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
178 } DynamicRangeControl;
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
179
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
180 typedef struct {
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
181 int num_pulse;
9935
d09283aeeef8 Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents: 9838
diff changeset
182 int start;
7580
c49ab52db74c Synchronise AAC decoder code with that from SoC
superdump
parents: 7578
diff changeset
183 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
184 int amp[4];
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
185 } Pulse;
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
186
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
187 /**
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
188 * coupling parameters
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
189 */
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
190 typedef struct {
7578
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
191 enum CouplingPoint coupling_point; ///< The point during decoding at which coupling is applied.
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
192 int num_coupled; ///< number of target elements
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
193 enum RawDataBlockType type[8]; ///< Type of channel element to be coupled - SCE or CPE.
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
194 int id_select[8]; ///< element id
8005
43fabceb40f2 Correct documentation of ch_select array.
superdump
parents: 7760
diff changeset
195 int ch_select[8]; /**< [0] shared list of gains; [1] list of gains for right channel;
43fabceb40f2 Correct documentation of ch_select array.
superdump
parents: 7760
diff changeset
196 * [2] list of gains for left channel; [3] lists of gains for both channels
7578
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
197 */
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
198 float gain[16][120];
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
199 } ChannelCoupling;
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
200
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
201 /**
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
202 * Single Channel Element - used for both SCE and LFE elements.
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
203 */
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
204 typedef struct {
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
205 IndividualChannelStream ics;
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
206 TemporalNoiseShaping tns;
9935
d09283aeeef8 Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents: 9838
diff changeset
207 Pulse pulse;
d09283aeeef8 Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents: 9838
diff changeset
208 enum BandType band_type[128]; ///< band types
7578
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
209 int band_type_run_end[120]; ///< band type run end points
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
210 float sf[120]; ///< scalefactors
9935
d09283aeeef8 Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents: 9838
diff changeset
211 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
212 uint8_t zeroes[128]; ///< band is not coded (used by encoder)
11369
98970e51365a Remove DECLARE_ALIGNED_{8,16} macros
mru
parents: 10961
diff changeset
213 DECLARE_ALIGNED(16, float, coeffs)[1024]; ///< coefficients for IMDCT
98970e51365a Remove DECLARE_ALIGNED_{8,16} macros
mru
parents: 10961
diff changeset
214 DECLARE_ALIGNED(16, float, saved)[1024]; ///< overlap
11401
e340262ba532 Add an HE-AAC v1 decoder.
alexc
parents: 11370
diff changeset
215 DECLARE_ALIGNED(16, float, ret)[2048]; ///< PCM output
8413
6f40f7d77263 AAC: Fix AAC prediction when used in conjunction with the CPE
superdump
parents: 8286
diff changeset
216 PredictorState predictor_state[MAX_PREDICTORS];
7578
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
217 } SingleChannelElement;
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
218
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
219 /**
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
220 * channel element - generic struct for SCE/CPE/CCE/LFE
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
221 */
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
222 typedef struct {
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
223 // CPE specific
9935
d09283aeeef8 Merge the AAC encoder from SoC svn. It is still considered experimental.
alexc
parents: 9838
diff changeset
224 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
225 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
226 uint8_t ms_mask[128]; ///< Set if mid/side stereo is used for each scalefactor window band
7578
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
227 // shared
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
228 SingleChannelElement ch[2];
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
229 // CCE specific
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
230 ChannelCoupling coup;
11401
e340262ba532 Add an HE-AAC v1 decoder.
alexc
parents: 11370
diff changeset
231 SpectralBandReplication sbr;
7578
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
232 } ChannelElement;
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
233
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
234 /**
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
235 * main AAC context
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
236 */
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
237 typedef struct {
11836
f71c3558f3f5 Whitespace cosmetics
alexc
parents: 11835
diff changeset
238 AVCodecContext *avctx;
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
239
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
240 MPEG4AudioConfig m4ac;
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
241
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
242 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
243 DynamicRangeControl che_drc;
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
244
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
245 /**
8730
cfb8849d0452 Doxygen defgroups throw a warning if they don't have a title as well as a name
superdump
parents: 8718
diff changeset
246 * @defgroup elements Channel element related data.
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
247 * @{
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
248 */
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
249 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
250 * 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
251 */
11836
f71c3558f3f5 Whitespace cosmetics
alexc
parents: 11835
diff changeset
252 ChannelElement *che[4][MAX_ELEM_ID];
f71c3558f3f5 Whitespace cosmetics
alexc
parents: 11835
diff changeset
253 ChannelElement *tag_che_map[4][MAX_ELEM_ID];
9149
955835e2bc99 Fix the channel allocation bug/assumption (issue 800).
alexc
parents: 8957
diff changeset
254 int tags_mapped;
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
255 /** @} */
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
256
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
257 /**
7608
850a1625bee4 More OKed AAC decoder code hunks
superdump
parents: 7581
diff changeset
258 * @defgroup temporary aligned temporary buffers (We do not want to have these on the stack.)
850a1625bee4 More OKed AAC decoder code hunks
superdump
parents: 7581
diff changeset
259 * @{
850a1625bee4 More OKed AAC decoder code hunks
superdump
parents: 7581
diff changeset
260 */
11369
98970e51365a Remove DECLARE_ALIGNED_{8,16} macros
mru
parents: 10961
diff changeset
261 DECLARE_ALIGNED(16, float, buf_mdct)[1024];
7608
850a1625bee4 More OKed AAC decoder code hunks
superdump
parents: 7581
diff changeset
262 /** @} */
850a1625bee4 More OKed AAC decoder code hunks
superdump
parents: 7581
diff changeset
263
850a1625bee4 More OKed AAC decoder code hunks
superdump
parents: 7581
diff changeset
264 /**
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
265 * @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
266 * @{
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
267 */
10199
38ab367d4231 Merge FFTContext and MDCTContext
mru
parents: 9948
diff changeset
268 FFTContext mdct;
38ab367d4231 Merge FFTContext and MDCTContext
mru
parents: 9948
diff changeset
269 FFTContext mdct_small;
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
270 DSPContext dsp;
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
271 int random_state;
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
272 /** @} */
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
273
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
274 /**
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
275 * @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
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 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
279 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
280 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
281 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
282 /** @} */
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
283
10961
34a65026fa06 Move array specifiers outside DECLARE_ALIGNED() invocations
mru
parents: 10877
diff changeset
284 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
285
10491
74e51b86b934 Don't lock the channel output configuration based on the first value seen for
alexc
parents: 10199
diff changeset
286 enum OCStatus output_configured;
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
287 } AACContext;
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
288
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7663
diff changeset
289 #endif /* AVCODEC_AAC_H */