annotate aac.h @ 7580:c49ab52db74c libavcodec

Synchronise AAC decoder code with that from SoC
author superdump
date Fri, 15 Aug 2008 00:19:14 +0000
parents a05954c505ab
children 6fdffa4836a7
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 /**
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
24 * @file aac.h
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
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
30 #ifndef FFMPEG_AAC_H
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
31 #define FFMPEG_AAC_H
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) \
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
40 INIT_VLC_STATIC(&vlc_spectral[num], 6, ff_aac_spectral_sizes[num], \
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
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
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
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
48 enum AudioObjectType {
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
49 AOT_NULL,
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
50 // Support? Name
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
51 AOT_AAC_MAIN, ///< Y Main
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
52 AOT_AAC_LC, ///< Y Low Complexity
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
53 AOT_AAC_SSR, ///< N (code in SoC repo) Scalable Sample Rate
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
54 AOT_AAC_LTP, ///< N (code in SoC repo) Long Term Prediction
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
55 AOT_SBR, ///< N (in progress) Spectral Band Replication
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
56 AOT_AAC_SCALABLE, ///< N Scalable
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
57 AOT_TWINVQ, ///< N Twin Vector Quantizer
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
58 AOT_CELP, ///< N Code Excited Linear Prediction
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
59 AOT_HVXC, ///< N Harmonic Vector eXcitation Coding
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
60 AOT_TTSI = 12, ///< N Text-To-Speech Interface
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
61 AOT_MAINSYNTH, ///< N Main Synthesis
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
62 AOT_WAVESYNTH, ///< N Wavetable Synthesis
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
63 AOT_MIDI, ///< N General MIDI
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
64 AOT_SAFX, ///< N Algorithmic Synthesis and Audio Effects
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
65 AOT_ER_AAC_LC, ///< N Error Resilient Low Complexity
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
66 AOT_ER_AAC_LTP = 19, ///< N Error Resilient Long Term Prediction
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
67 AOT_ER_AAC_SCALABLE, ///< N Error Resilient Scalable
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
68 AOT_ER_TWINVQ, ///< N Error Resilient Twin Vector Quantizer
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
69 AOT_ER_BSAC, ///< N Error Resilient Bit-Sliced Arithmetic Coding
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
70 AOT_ER_AAC_LD, ///< N Error Resilient Low Delay
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
71 AOT_ER_CELP, ///< N Error Resilient Code Excited Linear Prediction
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
72 AOT_ER_HVXC, ///< N Error Resilient Harmonic Vector eXcitation Coding
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
73 AOT_ER_HILN, ///< N Error Resilient Harmonic and Individual Lines plus Noise
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
74 AOT_ER_PARAM, ///< N Error Resilient Parametric
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
75 AOT_SSC, ///< N SinuSoidal Coding
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
76 };
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
77
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
78 enum RawDataBlockType {
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
79 TYPE_SCE,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
80 TYPE_CPE,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
81 TYPE_CCE,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
82 TYPE_LFE,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
83 TYPE_DSE,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
84 TYPE_PCE,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
85 TYPE_FIL,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
86 TYPE_END,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
87 };
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
88
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
89 enum ExtensionPayloadID {
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
90 EXT_FILL,
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
91 EXT_FILL_DATA,
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
92 EXT_DATA_ELEMENT,
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
93 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
94 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
95 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
96 };
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
97
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
98 enum WindowSequence {
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
99 ONLY_LONG_SEQUENCE,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
100 LONG_START_SEQUENCE,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
101 EIGHT_SHORT_SEQUENCE,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
102 LONG_STOP_SEQUENCE,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
103 };
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
104
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
105 enum BandType {
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
106 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
107 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
108 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
109 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
110 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
111 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
112 };
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
113
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
114 #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
115
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
116 enum ChannelPosition {
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
117 AAC_CHANNEL_FRONT = 1,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
118 AAC_CHANNEL_SIDE = 2,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
119 AAC_CHANNEL_BACK = 3,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
120 AAC_CHANNEL_LFE = 4,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
121 AAC_CHANNEL_CC = 5,
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
122 };
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
123
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
124 /**
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
125 * 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
126 */
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
127 enum CouplingPoint {
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
128 BEFORE_TNS,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
129 BETWEEN_TNS_AND_IMDCT,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
130 AFTER_IMDCT = 3,
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
131 };
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
132
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
133 /**
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
134 * Individual Channel Stream
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
135 */
7578
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
136 typedef struct {
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
137 uint8_t max_sfb; ///< number of scalefactor bands per group
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
138 enum WindowSequence window_sequence[2];
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
139 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
140 int num_window_groups;
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
141 uint8_t group_len[8];
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
142 const uint16_t *swb_offset; ///< table of offsets to the lowest spectral coefficient of a scalefactor band, sfb, for a particular window
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;
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
146 } IndividualChannelStream;
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
147
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
148 /**
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
149 * 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
150 */
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
151 typedef struct {
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
152 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
153 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
154 int dyn_rng_ctl[17]; ///< DRC magnitude information
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
155 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
156 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
157 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
158 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
159 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
160 * channels combined.
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
161 */
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
162 } DynamicRangeControl;
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
163
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
164 typedef struct {
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
165 int num_pulse;
7580
c49ab52db74c Synchronise AAC decoder code with that from SoC
superdump
parents: 7578
diff changeset
166 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
167 int amp[4];
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
168 } Pulse;
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
169
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
170 /**
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
171 * coupling parameters
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
172 */
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
173 typedef struct {
7578
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
174 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
175 int num_coupled; ///< number of target elements
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
176 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
177 int id_select[8]; ///< element id
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
178 int ch_select[8]; /**< [0] shared list of gains; [1] list of gains for left channel;
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
179 * [2] list of gains for right channel; [3] lists of gains for both channels
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
180 */
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
181 float gain[16][120];
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
182 } ChannelCoupling;
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
183
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
184 /**
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
185 * Single Channel Element - used for both SCE and LFE elements.
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
186 */
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
187 typedef struct {
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
188 IndividualChannelStream ics;
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
189 TemporalNoiseShaping tns;
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
190 enum BandType band_type[120]; ///< band types
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
191 int band_type_run_end[120]; ///< band type run end points
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
192 float sf[120]; ///< scalefactors
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
193 DECLARE_ALIGNED_16(float, coeffs[1024]); ///< coefficients for IMDCT
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
194 DECLARE_ALIGNED_16(float, saved[1024]); ///< overlap
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
195 DECLARE_ALIGNED_16(float, ret[1024]); ///< PCM output
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
196 } SingleChannelElement;
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 /**
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
199 * channel element - generic struct for SCE/CPE/CCE/LFE
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 typedef struct {
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
202 // CPE specific
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
203 uint8_t ms_mask[120]; ///< Set if mid/side stereo is used for each scalefactor window band
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
204 // shared
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
205 SingleChannelElement ch[2];
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
206 // CCE specific
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
207 ChannelCoupling coup;
a05954c505ab More OKed sections of AAC decoder code
superdump
parents: 7539
diff changeset
208 } ChannelElement;
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
209
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
210 /**
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
211 * main AAC context
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
212 */
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
213 typedef struct {
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
214 AVCodecContext * avccontext;
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
215
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
216 MPEG4AudioConfig m4ac;
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
217
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
218 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
219 DynamicRangeControl che_drc;
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
220
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
221 /**
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
222 * @defgroup elements
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
223 * @{
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
224 */
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
225 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
226 * 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
227 */
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
228 ChannelElement * che[4][MAX_ELEM_ID];
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
229 /** @} */
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
230
7499
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
231 /**
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
232 * @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
233 * @{
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 MDCTContext mdct;
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
236 MDCTContext mdct_small;
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
237 DSPContext dsp;
7539
4fca7939ad48 More OKed hunks of the AAC decoder from SoC
superdump
parents: 7523
diff changeset
238 int random_state;
7499
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
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
241 /**
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
242 * @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
243 * @{
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
244 */
7523
a3f7ffdb676d Sync already committed code with that in SoC and commit more OKed hunks of code
superdump
parents: 7499
diff changeset
245 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
246 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
247 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
248 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
249 /** @} */
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
250
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
251 } AACContext;
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
252
3eec98e5ab8f AAC definitions and structures that have been OKed from the SoC AAC decoder
superdump
parents:
diff changeset
253 #endif /* FFMPEG_AAC_H */