Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * Common code and tables of the AAC fixed- and floating-point decoders | ||
3 | * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org ) | ||
4 | * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com ) | ||
5 | * | ||
6 | * This file is part of FFmpeg. | ||
7 | * | ||
8 | * FFmpeg is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU Lesser General Public | ||
10 | * License as published by the Free Software Foundation; either | ||
11 | * version 2.1 of the License, or (at your option) any later version. | ||
12 | * | ||
13 | * FFmpeg is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * Lesser General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU Lesser General Public | ||
19 | * License along with FFmpeg; if not, write to the Free Software | ||
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
21 | */ | ||
22 | |||
23 | /** | ||
24 | * @file | ||
25 | * Common code and tables of the AAC fixed- and floating-point decoders | ||
26 | */ | ||
27 | |||
28 | #include "aacdec_tab.h" | ||
29 | |||
30 | #include "libavcodec/aac.h" | ||
31 | #include "libavcodec/aacps.h" | ||
32 | #include "libavcodec/aactab.h" | ||
33 | #include "libavcodec/vlc.h" | ||
34 | |||
35 | #include "libavutil/attributes.h" | ||
36 | #include "libavutil/thread.h" | ||
37 | |||
38 | const int8_t ff_tags_per_config[16] = { 0, 1, 1, 2, 3, 3, 4, 5, 0, 0, 0, 5, 5, 16, 5, 0 }; | ||
39 | |||
40 | const uint8_t ff_aac_channel_layout_map[16][16][3] = { | ||
41 | { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, }, | ||
42 | { { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, }, | ||
43 | { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, }, | ||
44 | { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_SCE, 1, AAC_CHANNEL_BACK }, }, | ||
45 | { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, }, | ||
46 | { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, }, | ||
47 | { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_FRONT }, { TYPE_CPE, 2, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, }, | ||
48 | { { 0, } }, | ||
49 | { { 0, } }, | ||
50 | { { 0, } }, | ||
51 | { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, { TYPE_SCE, 1, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, }, | ||
52 | { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, { TYPE_CPE, 2, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, }, | ||
53 | { | ||
54 | { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, // SCE1 = FC, | ||
55 | { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, // CPE1 = FLc and FRc, | ||
56 | { TYPE_CPE, 1, AAC_CHANNEL_FRONT }, // CPE2 = FL and FR, | ||
57 | { TYPE_CPE, 2, AAC_CHANNEL_BACK }, // CPE3 = SiL and SiR, | ||
58 | { TYPE_CPE, 3, AAC_CHANNEL_BACK }, // CPE4 = BL and BR, | ||
59 | { TYPE_SCE, 1, AAC_CHANNEL_BACK }, // SCE2 = BC, | ||
60 | { TYPE_LFE, 0, AAC_CHANNEL_LFE }, // LFE1 = LFE1, | ||
61 | { TYPE_LFE, 1, AAC_CHANNEL_LFE }, // LFE2 = LFE2, | ||
62 | { TYPE_SCE, 2, AAC_CHANNEL_FRONT }, // SCE3 = TpFC, | ||
63 | { TYPE_CPE, 4, AAC_CHANNEL_FRONT }, // CPE5 = TpFL and TpFR, | ||
64 | { TYPE_CPE, 5, AAC_CHANNEL_SIDE }, // CPE6 = TpSiL and TpSiR, | ||
65 | { TYPE_SCE, 3, AAC_CHANNEL_SIDE }, // SCE4 = TpC, | ||
66 | { TYPE_CPE, 6, AAC_CHANNEL_BACK }, // CPE7 = TpBL and TpBR, | ||
67 | { TYPE_SCE, 4, AAC_CHANNEL_BACK }, // SCE5 = TpBC, | ||
68 | { TYPE_SCE, 5, AAC_CHANNEL_FRONT }, // SCE6 = BtFC, | ||
69 | { TYPE_CPE, 7, AAC_CHANNEL_FRONT }, // CPE8 = BtFL and BtFR | ||
70 | }, | ||
71 | { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, { TYPE_CPE, 2, AAC_CHANNEL_FRONT }, }, | ||
72 | { { 0, } }, | ||
73 | }; | ||
74 | |||
75 | const int16_t ff_aac_channel_map[3][4][6] = { | ||
76 | { | ||
77 | { AV_CHAN_FRONT_CENTER, AV_CHAN_FRONT_LEFT_OF_CENTER, AV_CHAN_FRONT_RIGHT_OF_CENTER, AV_CHAN_FRONT_LEFT, AV_CHAN_FRONT_RIGHT, AV_CHAN_NONE }, | ||
78 | { AV_CHAN_UNUSED, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE }, | ||
79 | { AV_CHAN_UNUSED, AV_CHAN_SIDE_LEFT, AV_CHAN_SIDE_RIGHT, AV_CHAN_BACK_LEFT, AV_CHAN_BACK_RIGHT, AV_CHAN_BACK_CENTER }, | ||
80 | { AV_CHAN_LOW_FREQUENCY, AV_CHAN_LOW_FREQUENCY_2, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE }, | ||
81 | }, | ||
82 | { | ||
83 | { AV_CHAN_TOP_FRONT_CENTER, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_TOP_FRONT_LEFT, AV_CHAN_TOP_FRONT_RIGHT, AV_CHAN_NONE }, | ||
84 | { AV_CHAN_UNUSED, AV_CHAN_TOP_SIDE_LEFT, AV_CHAN_TOP_SIDE_RIGHT, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_TOP_CENTER}, | ||
85 | { AV_CHAN_UNUSED, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_TOP_BACK_LEFT, AV_CHAN_TOP_BACK_RIGHT, AV_CHAN_TOP_BACK_CENTER}, | ||
86 | { AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE}, | ||
87 | }, | ||
88 | { | ||
89 | { AV_CHAN_BOTTOM_FRONT_CENTER, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_BOTTOM_FRONT_LEFT, AV_CHAN_BOTTOM_FRONT_RIGHT, AV_CHAN_NONE }, | ||
90 | { AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE }, | ||
91 | { AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE }, | ||
92 | { AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE }, | ||
93 | }, | ||
94 | }; | ||
95 | |||
96 | const AVChannelLayout ff_aac_ch_layout[] = { | ||
97 | AV_CHANNEL_LAYOUT_MONO, | ||
98 | AV_CHANNEL_LAYOUT_STEREO, | ||
99 | AV_CHANNEL_LAYOUT_SURROUND, | ||
100 | AV_CHANNEL_LAYOUT_4POINT0, | ||
101 | AV_CHANNEL_LAYOUT_5POINT0_BACK, | ||
102 | AV_CHANNEL_LAYOUT_5POINT1_BACK, | ||
103 | AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK, | ||
104 | AV_CHANNEL_LAYOUT_6POINT1_BACK, | ||
105 | AV_CHANNEL_LAYOUT_7POINT1, | ||
106 | AV_CHANNEL_LAYOUT_22POINT2, | ||
107 | AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK, | ||
108 | { 0 }, | ||
109 | }; | ||
110 | |||
111 | VLCElem ff_vlc_scalefactors[352]; | ||
112 | const VLCElem *ff_vlc_spectral[11]; | ||
113 | |||
114 | /// Huffman tables for SBR | ||
115 | |||
116 | static const uint8_t sbr_huffman_tab[][2] = { | ||
117 | /* t_huffman_env_1_5dB - 121 entries */ | ||
118 | { 60, 2 }, { 59, 2 }, { 61, 3 }, { 58, 3 }, { 62, 4 }, | ||
119 | { 57, 4 }, { 63, 5 }, { 56, 5 }, { 64, 6 }, { 55, 6 }, | ||
120 | { 65, 7 }, { 54, 7 }, { 66, 8 }, { 53, 8 }, { 67, 9 }, | ||
121 | { 52, 9 }, { 51, 10 }, { 68, 10 }, { 50, 11 }, { 69, 12 }, | ||
122 | { 49, 12 }, { 70, 13 }, { 48, 13 }, { 47, 13 }, { 71, 14 }, | ||
123 | { 46, 14 }, { 72, 14 }, { 45, 14 }, { 44, 15 }, { 73, 15 }, | ||
124 | { 41, 16 }, { 42, 16 }, { 43, 16 }, { 74, 16 }, { 36, 16 }, | ||
125 | { 40, 16 }, { 76, 16 }, { 34, 17 }, { 39, 17 }, { 75, 17 }, | ||
126 | { 37, 17 }, { 35, 18 }, { 38, 18 }, { 0, 18 }, { 1, 18 }, | ||
127 | { 2, 18 }, { 3, 18 }, { 4, 18 }, { 5, 18 }, { 6, 19 }, | ||
128 | { 7, 19 }, { 8, 19 }, { 9, 19 }, { 10, 19 }, { 11, 19 }, | ||
129 | { 12, 19 }, { 13, 19 }, { 14, 19 }, { 15, 19 }, { 16, 19 }, | ||
130 | { 17, 19 }, { 18, 19 }, { 19, 19 }, { 20, 19 }, { 21, 19 }, | ||
131 | { 22, 19 }, { 23, 19 }, { 24, 19 }, { 25, 19 }, { 26, 19 }, | ||
132 | { 27, 19 }, { 28, 19 }, { 29, 19 }, { 30, 19 }, { 31, 19 }, | ||
133 | { 32, 19 }, { 33, 19 }, { 77, 19 }, { 78, 19 }, { 79, 19 }, | ||
134 | { 80, 19 }, { 81, 19 }, { 82, 19 }, { 83, 19 }, { 84, 19 }, | ||
135 | { 85, 19 }, { 86, 19 }, { 87, 19 }, { 88, 19 }, { 89, 19 }, | ||
136 | { 90, 19 }, { 91, 19 }, { 92, 19 }, { 93, 19 }, { 94, 19 }, | ||
137 | { 95, 19 }, { 96, 19 }, { 97, 19 }, { 98, 19 }, { 99, 19 }, | ||
138 | { 100, 19 }, { 101, 19 }, { 102, 19 }, { 103, 19 }, { 104, 19 }, | ||
139 | { 105, 19 }, { 106, 19 }, { 107, 19 }, { 108, 19 }, { 109, 19 }, | ||
140 | { 110, 19 }, { 111, 19 }, { 112, 19 }, { 113, 19 }, { 114, 19 }, | ||
141 | { 115, 19 }, { 116, 19 }, { 117, 19 }, { 118, 19 }, { 119, 19 }, | ||
142 | { 120, 19 }, | ||
143 | /* f_huffman_env_1_5dB - 121 entries */ | ||
144 | { 60, 2 }, { 59, 2 }, { 61, 3 }, { 58, 3 }, { 57, 4 }, | ||
145 | { 62, 4 }, { 56, 5 }, { 63, 5 }, { 55, 6 }, { 64, 6 }, | ||
146 | { 54, 7 }, { 65, 8 }, { 53, 8 }, { 66, 8 }, { 52, 9 }, | ||
147 | { 67, 9 }, { 51, 9 }, { 68, 10 }, { 50, 10 }, { 69, 11 }, | ||
148 | { 49, 11 }, { 70, 11 }, { 71, 11 }, { 48, 12 }, { 72, 12 }, | ||
149 | { 47, 12 }, { 73, 12 }, { 74, 13 }, { 46, 13 }, { 45, 13 }, | ||
150 | { 75, 13 }, { 76, 14 }, { 77, 14 }, { 44, 14 }, { 43, 15 }, | ||
151 | { 42, 15 }, { 41, 16 }, { 78, 16 }, { 79, 16 }, { 40, 16 }, | ||
152 | { 39, 16 }, { 80, 17 }, { 81, 17 }, { 36, 17 }, { 37, 17 }, | ||
153 | { 38, 17 }, { 34, 17 }, { 32, 18 }, { 82, 18 }, { 83, 18 }, | ||
154 | { 85, 18 }, { 19, 18 }, { 35, 18 }, { 86, 18 }, { 87, 18 }, | ||
155 | { 30, 18 }, { 33, 18 }, { 84, 18 }, { 88, 18 }, { 104, 18 }, | ||
156 | { 9, 19 }, { 14, 19 }, { 16, 19 }, { 17, 19 }, { 23, 19 }, | ||
157 | { 27, 19 }, { 29, 19 }, { 31, 19 }, { 90, 19 }, { 97, 19 }, | ||
158 | { 102, 19 }, { 107, 19 }, { 108, 19 }, { 0, 19 }, { 1, 19 }, | ||
159 | { 2, 20 }, { 3, 20 }, { 4, 20 }, { 5, 20 }, { 6, 20 }, | ||
160 | { 7, 20 }, { 8, 20 }, { 10, 20 }, { 11, 20 }, { 12, 20 }, | ||
161 | { 13, 20 }, { 15, 20 }, { 18, 20 }, { 20, 20 }, { 21, 20 }, | ||
162 | { 22, 20 }, { 24, 20 }, { 25, 20 }, { 26, 20 }, { 28, 20 }, | ||
163 | { 89, 20 }, { 91, 20 }, { 92, 20 }, { 93, 20 }, { 94, 20 }, | ||
164 | { 95, 20 }, { 96, 20 }, { 98, 20 }, { 99, 20 }, { 100, 20 }, | ||
165 | { 101, 20 }, { 103, 20 }, { 105, 20 }, { 106, 20 }, { 109, 20 }, | ||
166 | { 110, 20 }, { 111, 20 }, { 112, 20 }, { 113, 20 }, { 114, 20 }, | ||
167 | { 115, 20 }, { 116, 20 }, { 117, 20 }, { 118, 20 }, { 119, 20 }, | ||
168 | { 120, 20 }, | ||
169 | /* t_huffman_env_bal_1_5dB - 49 entries */ | ||
170 | { 24, 1 }, { 25, 2 }, { 23, 3 }, { 26, 4 }, { 22, 5 }, | ||
171 | { 27, 6 }, { 21, 7 }, { 28, 8 }, { 20, 9 }, { 19, 11 }, | ||
172 | { 29, 11 }, { 18, 12 }, { 30, 12 }, { 31, 15 }, { 17, 16 }, | ||
173 | { 32, 16 }, { 0, 16 }, { 1, 16 }, { 2, 16 }, { 3, 16 }, | ||
174 | { 4, 16 }, { 5, 16 }, { 6, 16 }, { 7, 16 }, { 8, 16 }, | ||
175 | { 9, 16 }, { 10, 16 }, { 11, 16 }, { 12, 16 }, { 13, 16 }, | ||
176 | { 14, 16 }, { 15, 16 }, { 16, 16 }, { 33, 16 }, { 34, 16 }, | ||
177 | { 35, 16 }, { 36, 16 }, { 37, 16 }, { 38, 16 }, { 39, 17 }, | ||
178 | { 40, 17 }, { 41, 17 }, { 42, 17 }, { 43, 17 }, { 44, 17 }, | ||
179 | { 45, 17 }, { 46, 17 }, { 47, 17 }, { 48, 17 }, | ||
180 | /* f_huffman_env_bal_1_5dB - 49 entries */ | ||
181 | { 24, 1 }, { 23, 2 }, { 25, 3 }, { 22, 4 }, { 26, 5 }, | ||
182 | { 27, 6 }, { 21, 7 }, { 20, 8 }, { 28, 9 }, { 19, 11 }, | ||
183 | { 29, 11 }, { 18, 11 }, { 30, 12 }, { 17, 14 }, { 31, 15 }, | ||
184 | { 32, 16 }, { 15, 16 }, { 16, 17 }, { 0, 18 }, { 1, 18 }, | ||
185 | { 2, 18 }, { 3, 18 }, { 4, 18 }, { 5, 18 }, { 6, 18 }, | ||
186 | { 7, 18 }, { 8, 18 }, { 9, 18 }, { 10, 18 }, { 11, 18 }, | ||
187 | { 12, 18 }, { 13, 18 }, { 14, 18 }, { 33, 18 }, { 34, 18 }, | ||
188 | { 35, 18 }, { 36, 18 }, { 37, 18 }, { 38, 18 }, { 39, 18 }, | ||
189 | { 40, 18 }, { 41, 18 }, { 42, 18 }, { 43, 18 }, { 44, 18 }, | ||
190 | { 45, 18 }, { 46, 18 }, { 47, 19 }, { 48, 19 }, | ||
191 | /* t_huffman_env_3_0dB - 63 entries */ | ||
192 | { 31, 1 }, { 30, 2 }, { 32, 3 }, { 29, 4 }, { 33, 5 }, | ||
193 | { 28, 6 }, { 34, 7 }, { 27, 8 }, { 35, 9 }, { 26, 11 }, | ||
194 | { 36, 11 }, { 25, 12 }, { 24, 13 }, { 37, 13 }, { 23, 14 }, | ||
195 | { 38, 14 }, { 22, 14 }, { 21, 14 }, { 39, 14 }, { 40, 15 }, | ||
196 | { 41, 16 }, { 18, 16 }, { 20, 16 }, { 19, 16 }, { 17, 17 }, | ||
197 | { 42, 17 }, { 43, 18 }, { 0, 18 }, { 1, 18 }, { 2, 19 }, | ||
198 | { 3, 19 }, { 4, 19 }, { 5, 19 }, { 6, 19 }, { 7, 19 }, | ||
199 | { 8, 19 }, { 9, 19 }, { 10, 19 }, { 11, 19 }, { 12, 19 }, | ||
200 | { 13, 19 }, { 14, 19 }, { 15, 19 }, { 16, 19 }, { 44, 19 }, | ||
201 | { 45, 19 }, { 46, 19 }, { 47, 19 }, { 48, 19 }, { 49, 19 }, | ||
202 | { 50, 19 }, { 51, 19 }, { 52, 19 }, { 53, 19 }, { 54, 19 }, | ||
203 | { 55, 19 }, { 56, 19 }, { 57, 19 }, { 58, 19 }, { 59, 19 }, | ||
204 | { 60, 19 }, { 61, 19 }, { 62, 19 }, | ||
205 | /* f_huffman_env_3_0dB - 63 entries */ | ||
206 | { 31, 1 }, { 30, 2 }, { 32, 3 }, { 29, 4 }, { 33, 5 }, | ||
207 | { 28, 6 }, { 34, 8 }, { 27, 8 }, { 35, 9 }, { 26, 9 }, | ||
208 | { 36, 10 }, { 25, 10 }, { 37, 11 }, { 24, 11 }, { 38, 12 }, | ||
209 | { 23, 12 }, { 39, 13 }, { 40, 14 }, { 22, 14 }, { 21, 15 }, | ||
210 | { 41, 15 }, { 42, 15 }, { 20, 16 }, { 19, 16 }, { 43, 16 }, | ||
211 | { 44, 16 }, { 18, 17 }, { 16, 17 }, { 45, 17 }, { 46, 17 }, | ||
212 | { 17, 18 }, { 49, 18 }, { 13, 18 }, { 7, 18 }, { 12, 18 }, | ||
213 | { 47, 18 }, { 48, 18 }, { 9, 19 }, { 10, 19 }, { 15, 19 }, | ||
214 | { 51, 19 }, { 52, 19 }, { 53, 19 }, { 56, 19 }, { 8, 19 }, | ||
215 | { 11, 19 }, { 55, 19 }, { 0, 20 }, { 1, 20 }, { 2, 20 }, | ||
216 | { 3, 20 }, { 4, 20 }, { 5, 20 }, { 6, 20 }, { 14, 20 }, | ||
217 | { 50, 20 }, { 54, 20 }, { 57, 20 }, { 58, 20 }, { 59, 20 }, | ||
218 | { 60, 20 }, { 61, 20 }, { 62, 20 }, | ||
219 | /* t_huffman_env_bal_3_0dB - 25 entries */ | ||
220 | { 12, 1 }, { 13, 2 }, { 11, 3 }, { 10, 4 }, { 14, 5 }, | ||
221 | { 15, 6 }, { 9, 7 }, { 8, 8 }, { 16, 9 }, { 7, 12 }, | ||
222 | { 0, 13 }, { 1, 13 }, { 2, 13 }, { 3, 13 }, { 4, 13 }, | ||
223 | { 5, 13 }, { 6, 13 }, { 17, 13 }, { 18, 13 }, { 19, 13 }, | ||
224 | { 20, 13 }, { 21, 13 }, { 22, 13 }, { 23, 14 }, { 24, 14 }, | ||
225 | /* f_huffman_env_bal_3_0dB - 25 entries */ | ||
226 | { 12, 1 }, { 11, 2 }, { 13, 3 }, { 10, 4 }, { 14, 5 }, | ||
227 | { 15, 6 }, { 9, 7 }, { 8, 8 }, { 16, 9 }, { 7, 11 }, | ||
228 | { 17, 12 }, { 18, 13 }, { 0, 13 }, { 1, 13 }, { 2, 13 }, | ||
229 | { 3, 13 }, { 4, 13 }, { 5, 14 }, { 6, 14 }, { 19, 14 }, | ||
230 | { 20, 14 }, { 21, 14 }, { 22, 14 }, { 23, 14 }, { 24, 14 }, | ||
231 | /* t_huffman_noise_3_0dB - 63 entries */ | ||
232 | { 31, 1 }, { 32, 2 }, { 30, 3 }, { 29, 4 }, { 33, 5 }, | ||
233 | { 28, 6 }, { 34, 8 }, { 27, 8 }, { 35, 10 }, { 26, 11 }, | ||
234 | { 36, 13 }, { 42, 13 }, { 0, 13 }, { 1, 13 }, { 2, 13 }, | ||
235 | { 3, 13 }, { 4, 13 }, { 5, 13 }, { 6, 13 }, { 7, 13 }, | ||
236 | { 8, 13 }, { 9, 13 }, { 10, 13 }, { 11, 13 }, { 12, 13 }, | ||
237 | { 13, 13 }, { 14, 13 }, { 15, 13 }, { 16, 13 }, { 17, 13 }, | ||
238 | { 18, 13 }, { 19, 13 }, { 20, 13 }, { 21, 13 }, { 22, 13 }, | ||
239 | { 23, 13 }, { 24, 13 }, { 25, 13 }, { 37, 13 }, { 38, 13 }, | ||
240 | { 39, 13 }, { 40, 13 }, { 41, 13 }, { 43, 13 }, { 44, 13 }, | ||
241 | { 45, 13 }, { 46, 13 }, { 47, 13 }, { 48, 13 }, { 49, 13 }, | ||
242 | { 50, 13 }, { 51, 13 }, { 52, 13 }, { 53, 13 }, { 54, 13 }, | ||
243 | { 55, 13 }, { 56, 13 }, { 57, 13 }, { 58, 13 }, { 59, 13 }, | ||
244 | { 60, 13 }, { 61, 14 }, { 62, 14 }, | ||
245 | /* t_huffman_noise_bal_3_0dB - 25 entries */ | ||
246 | { 12, 1 }, { 11, 2 }, { 13, 3 }, { 10, 5 }, { 14, 6 }, | ||
247 | { 0, 8 }, { 1, 8 }, { 2, 8 }, { 3, 8 }, { 4, 8 }, | ||
248 | { 5, 8 }, { 6, 8 }, { 7, 8 }, { 8, 8 }, { 9, 8 }, | ||
249 | { 15, 8 }, { 16, 8 }, { 17, 8 }, { 18, 8 }, { 19, 8 }, | ||
250 | { 20, 8 }, { 21, 8 }, { 22, 8 }, { 23, 8 }, { 24, 8 }, | ||
251 | }; | ||
252 | |||
253 | static const uint8_t sbr_huffman_nb_codes[] = { | ||
254 | 121, 121, 49, 49, 63, 63, 25, 25, 63, 25 | ||
255 | }; | ||
256 | |||
257 | static const int8_t sbr_vlc_offsets[10] = { | ||
258 | -60, -60, -24, -24, -31, -31, -12, -12, -31, -12 | ||
259 | }; | ||
260 | |||
261 | const VLCElem *ff_aac_sbr_vlc[10]; | ||
262 | |||
263 | 170 | static av_cold void aacdec_common_init(void) | |
264 | { | ||
265 | static VLCElem vlc_buf[(304 + 270 + 550 + 300 + 328 + | ||
266 | 294 + 306 + 268 + 510 + 366 + 462) + | ||
267 | (1098 + 1092 + 768 + 1026 + 1058 + | ||
268 | 1052 + 544 + 544 + 592 + 512)]; | ||
269 | 170 | VLCInitState state = VLC_INIT_STATE(vlc_buf); | |
270 | 170 | const uint8_t (*tab)[2] = sbr_huffman_tab; | |
271 | |||
272 |
2/2✓ Branch 0 taken 1870 times.
✓ Branch 1 taken 170 times.
|
2040 | for (unsigned i = 0; i < 11; i++) { |
273 | #define TAB_WRAP_SIZE(name) name[i], sizeof(name[i][0]), sizeof(name[i][0]) | ||
274 | 1870 | ff_vlc_spectral[i] = | |
275 | 1870 | ff_vlc_init_tables_sparse(&state, 8, ff_aac_spectral_sizes[i], | |
276 | 1870 | TAB_WRAP_SIZE(ff_aac_spectral_bits), | |
277 | 1870 | TAB_WRAP_SIZE(ff_aac_spectral_codes), | |
278 | 1870 | TAB_WRAP_SIZE(ff_aac_codebook_vector_idx), | |
279 | 0); | ||
280 | } | ||
281 | |||
282 | 170 | VLC_INIT_STATIC_TABLE(ff_vlc_scalefactors, 7, | |
283 | FF_ARRAY_ELEMS(ff_aac_scalefactor_code), | ||
284 | ff_aac_scalefactor_bits, | ||
285 | sizeof(ff_aac_scalefactor_bits[0]), | ||
286 | sizeof(ff_aac_scalefactor_bits[0]), | ||
287 | ff_aac_scalefactor_code, | ||
288 | sizeof(ff_aac_scalefactor_code[0]), | ||
289 | sizeof(ff_aac_scalefactor_code[0]), 0); | ||
290 | |||
291 | // SBR VLC table initialization | ||
292 |
2/2✓ Branch 0 taken 1700 times.
✓ Branch 1 taken 170 times.
|
1870 | for (int i = 0; i < FF_ARRAY_ELEMS(ff_aac_sbr_vlc); i++) { |
293 | 1700 | ff_aac_sbr_vlc[i] = | |
294 | 1700 | ff_vlc_init_tables_from_lengths(&state, 9, sbr_huffman_nb_codes[i], | |
295 | 1700 | &tab[0][1], 2, | |
296 | 1700 | &tab[0][0], 2, 1, | |
297 | 1700 | sbr_vlc_offsets[i], 0); | |
298 | 1700 | tab += sbr_huffman_nb_codes[i]; | |
299 | } | ||
300 | |||
301 | 170 | ff_ps_init_common(); | |
302 | 170 | } | |
303 | |||
304 | 298 | av_cold void ff_aacdec_common_init_once(void) | |
305 | { | ||
306 | static AVOnce init_static_once = AV_ONCE_INIT; | ||
307 | 298 | ff_thread_once(&init_static_once, aacdec_common_init); | |
308 | 298 | } | |
309 |