svq1: replace struct svq1_frame_size with an array.
[ffmpeg.git] / libavcodec / aactab.c
1 /*
2  * AAC data
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 Libav.
7  *
8  * Libav 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  * Libav 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 Libav; 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  * AAC data
26  * @author Oded Shimon  ( ods15 ods15 dyndns org )
27  * @author Maxim Gavrilov ( maxim.gavrilov gmail com )
28  */
29
30 #include "libavutil/mem.h"
31 #include "aac.h"
32 #include "aac_tablegen.h"
33
34 #include <stdint.h>
35
36 DECLARE_ALIGNED(32, float,  ff_aac_kbd_long_1024)[1024];
37 DECLARE_ALIGNED(32, float,  ff_aac_kbd_short_128)[128];
38
39 const uint8_t ff_aac_num_swb_1024[] = {
40     41, 41, 47, 49, 49, 51, 47, 47, 43, 43, 43, 40, 40
41 };
42
43 const uint8_t ff_aac_num_swb_128[] = {
44     12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15
45 };
46
47 const uint8_t ff_aac_pred_sfb_max[] = {
48     33, 33, 38, 40, 40, 40, 41, 41, 37, 37, 37, 34, 34
49 };
50
51 const uint32_t ff_aac_scalefactor_code[121] = {
52     0x3ffe8, 0x3ffe6, 0x3ffe7, 0x3ffe5, 0x7fff5, 0x7fff1, 0x7ffed, 0x7fff6,
53     0x7ffee, 0x7ffef, 0x7fff0, 0x7fffc, 0x7fffd, 0x7ffff, 0x7fffe, 0x7fff7,
54     0x7fff8, 0x7fffb, 0x7fff9, 0x3ffe4, 0x7fffa, 0x3ffe3, 0x1ffef, 0x1fff0,
55     0x0fff5, 0x1ffee, 0x0fff2, 0x0fff3, 0x0fff4, 0x0fff1, 0x07ff6, 0x07ff7,
56     0x03ff9, 0x03ff5, 0x03ff7, 0x03ff3, 0x03ff6, 0x03ff2, 0x01ff7, 0x01ff5,
57     0x00ff9, 0x00ff7, 0x00ff6, 0x007f9, 0x00ff4, 0x007f8, 0x003f9, 0x003f7,
58     0x003f5, 0x001f8, 0x001f7, 0x000fa, 0x000f8, 0x000f6, 0x00079, 0x0003a,
59     0x00038, 0x0001a, 0x0000b, 0x00004, 0x00000, 0x0000a, 0x0000c, 0x0001b,
60     0x00039, 0x0003b, 0x00078, 0x0007a, 0x000f7, 0x000f9, 0x001f6, 0x001f9,
61     0x003f4, 0x003f6, 0x003f8, 0x007f5, 0x007f4, 0x007f6, 0x007f7, 0x00ff5,
62     0x00ff8, 0x01ff4, 0x01ff6, 0x01ff8, 0x03ff8, 0x03ff4, 0x0fff0, 0x07ff4,
63     0x0fff6, 0x07ff5, 0x3ffe2, 0x7ffd9, 0x7ffda, 0x7ffdb, 0x7ffdc, 0x7ffdd,
64     0x7ffde, 0x7ffd8, 0x7ffd2, 0x7ffd3, 0x7ffd4, 0x7ffd5, 0x7ffd6, 0x7fff2,
65     0x7ffdf, 0x7ffe7, 0x7ffe8, 0x7ffe9, 0x7ffea, 0x7ffeb, 0x7ffe6, 0x7ffe0,
66     0x7ffe1, 0x7ffe2, 0x7ffe3, 0x7ffe4, 0x7ffe5, 0x7ffd7, 0x7ffec, 0x7fff4,
67     0x7fff3,
68 };
69
70 const uint8_t ff_aac_scalefactor_bits[121] = {
71     18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
72     19, 19, 19, 18, 19, 18, 17, 17, 16, 17, 16, 16, 16, 16, 15, 15,
73     14, 14, 14, 14, 14, 14, 13, 13, 12, 12, 12, 11, 12, 11, 10, 10,
74     10,  9,  9,  8,  8,  8,  7,  6,  6,  5,  4,  3,  1,  4,  4,  5,
75      6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 10, 11, 11, 11, 11, 12,
76     12, 13, 13, 13, 14, 14, 16, 15, 16, 15, 18, 19, 19, 19, 19, 19,
77     19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
78     19, 19, 19, 19, 19, 19, 19, 19, 19,
79 };
80
81 static const uint16_t codes1[81] = {
82     0x7f8, 0x1f1, 0x7fd, 0x3f5, 0x068, 0x3f0, 0x7f7, 0x1ec,
83     0x7f5, 0x3f1, 0x072, 0x3f4, 0x074, 0x011, 0x076, 0x1eb,
84     0x06c, 0x3f6, 0x7fc, 0x1e1, 0x7f1, 0x1f0, 0x061, 0x1f6,
85     0x7f2, 0x1ea, 0x7fb, 0x1f2, 0x069, 0x1ed, 0x077, 0x017,
86     0x06f, 0x1e6, 0x064, 0x1e5, 0x067, 0x015, 0x062, 0x012,
87     0x000, 0x014, 0x065, 0x016, 0x06d, 0x1e9, 0x063, 0x1e4,
88     0x06b, 0x013, 0x071, 0x1e3, 0x070, 0x1f3, 0x7fe, 0x1e7,
89     0x7f3, 0x1ef, 0x060, 0x1ee, 0x7f0, 0x1e2, 0x7fa, 0x3f3,
90     0x06a, 0x1e8, 0x075, 0x010, 0x073, 0x1f4, 0x06e, 0x3f7,
91     0x7f6, 0x1e0, 0x7f9, 0x3f2, 0x066, 0x1f5, 0x7ff, 0x1f7,
92     0x7f4,
93 };
94
95 static const uint8_t bits1[81] = {
96     11,  9, 11, 10,  7, 10, 11,  9, 11, 10,  7, 10,  7,  5,  7,  9,
97      7, 10, 11,  9, 11,  9,  7,  9, 11,  9, 11,  9,  7,  9,  7,  5,
98      7,  9,  7,  9,  7,  5,  7,  5,  1,  5,  7,  5,  7,  9,  7,  9,
99      7,  5,  7,  9,  7,  9, 11,  9, 11,  9,  7,  9, 11,  9, 11, 10,
100      7,  9,  7,  5,  7,  9,  7, 10, 11,  9, 11, 10,  7,  9, 11,  9,
101     11,
102 };
103
104 static const uint16_t codes2[81] = {
105     0x1f3, 0x06f, 0x1fd, 0x0eb, 0x023, 0x0ea, 0x1f7, 0x0e8,
106     0x1fa, 0x0f2, 0x02d, 0x070, 0x020, 0x006, 0x02b, 0x06e,
107     0x028, 0x0e9, 0x1f9, 0x066, 0x0f8, 0x0e7, 0x01b, 0x0f1,
108     0x1f4, 0x06b, 0x1f5, 0x0ec, 0x02a, 0x06c, 0x02c, 0x00a,
109     0x027, 0x067, 0x01a, 0x0f5, 0x024, 0x008, 0x01f, 0x009,
110     0x000, 0x007, 0x01d, 0x00b, 0x030, 0x0ef, 0x01c, 0x064,
111     0x01e, 0x00c, 0x029, 0x0f3, 0x02f, 0x0f0, 0x1fc, 0x071,
112     0x1f2, 0x0f4, 0x021, 0x0e6, 0x0f7, 0x068, 0x1f8, 0x0ee,
113     0x022, 0x065, 0x031, 0x002, 0x026, 0x0ed, 0x025, 0x06a,
114     0x1fb, 0x072, 0x1fe, 0x069, 0x02e, 0x0f6, 0x1ff, 0x06d,
115     0x1f6,
116 };
117
118 static const uint8_t bits2[81] = {
119     9, 7, 9, 8, 6, 8, 9, 8, 9, 8, 6, 7, 6, 5, 6, 7,
120     6, 8, 9, 7, 8, 8, 6, 8, 9, 7, 9, 8, 6, 7, 6, 5,
121     6, 7, 6, 8, 6, 5, 6, 5, 3, 5, 6, 5, 6, 8, 6, 7,
122     6, 5, 6, 8, 6, 8, 9, 7, 9, 8, 6, 8, 8, 7, 9, 8,
123     6, 7, 6, 4, 6, 8, 6, 7, 9, 7, 9, 7, 6, 8, 9, 7,
124     9,
125 };
126
127 static const uint16_t codes3[81] = {
128     0x0000, 0x0009, 0x00ef, 0x000b, 0x0019, 0x00f0, 0x01eb, 0x01e6,
129     0x03f2, 0x000a, 0x0035, 0x01ef, 0x0034, 0x0037, 0x01e9, 0x01ed,
130     0x01e7, 0x03f3, 0x01ee, 0x03ed, 0x1ffa, 0x01ec, 0x01f2, 0x07f9,
131     0x07f8, 0x03f8, 0x0ff8, 0x0008, 0x0038, 0x03f6, 0x0036, 0x0075,
132     0x03f1, 0x03eb, 0x03ec, 0x0ff4, 0x0018, 0x0076, 0x07f4, 0x0039,
133     0x0074, 0x03ef, 0x01f3, 0x01f4, 0x07f6, 0x01e8, 0x03ea, 0x1ffc,
134     0x00f2, 0x01f1, 0x0ffb, 0x03f5, 0x07f3, 0x0ffc, 0x00ee, 0x03f7,
135     0x7ffe, 0x01f0, 0x07f5, 0x7ffd, 0x1ffb, 0x3ffa, 0xffff, 0x00f1,
136     0x03f0, 0x3ffc, 0x01ea, 0x03ee, 0x3ffb, 0x0ff6, 0x0ffa, 0x7ffc,
137     0x07f2, 0x0ff5, 0xfffe, 0x03f4, 0x07f7, 0x7ffb, 0x0ff7, 0x0ff9,
138     0x7ffa,
139 };
140
141 static const uint8_t bits3[81] = {
142      1,  4,  8,  4,  5,  8,  9,  9, 10,  4,  6,  9,  6,  6,  9,  9,
143      9, 10,  9, 10, 13,  9,  9, 11, 11, 10, 12,  4,  6, 10,  6,  7,
144     10, 10, 10, 12,  5,  7, 11,  6,  7, 10,  9,  9, 11,  9, 10, 13,
145      8,  9, 12, 10, 11, 12,  8, 10, 15,  9, 11, 15, 13, 14, 16,  8,
146     10, 14,  9, 10, 14, 12, 12, 15, 11, 12, 16, 10, 11, 15, 12, 12,
147     15,
148 };
149
150 static const uint16_t codes4[81] = {
151     0x007, 0x016, 0x0f6, 0x018, 0x008, 0x0ef, 0x1ef, 0x0f3,
152     0x7f8, 0x019, 0x017, 0x0ed, 0x015, 0x001, 0x0e2, 0x0f0,
153     0x070, 0x3f0, 0x1ee, 0x0f1, 0x7fa, 0x0ee, 0x0e4, 0x3f2,
154     0x7f6, 0x3ef, 0x7fd, 0x005, 0x014, 0x0f2, 0x009, 0x004,
155     0x0e5, 0x0f4, 0x0e8, 0x3f4, 0x006, 0x002, 0x0e7, 0x003,
156     0x000, 0x06b, 0x0e3, 0x069, 0x1f3, 0x0eb, 0x0e6, 0x3f6,
157     0x06e, 0x06a, 0x1f4, 0x3ec, 0x1f0, 0x3f9, 0x0f5, 0x0ec,
158     0x7fb, 0x0ea, 0x06f, 0x3f7, 0x7f9, 0x3f3, 0xfff, 0x0e9,
159     0x06d, 0x3f8, 0x06c, 0x068, 0x1f5, 0x3ee, 0x1f2, 0x7f4,
160     0x7f7, 0x3f1, 0xffe, 0x3ed, 0x1f1, 0x7f5, 0x7fe, 0x3f5,
161     0x7fc,
162 };
163
164 static const uint8_t bits4[81] = {
165      4,  5,  8,  5,  4,  8,  9,  8, 11,  5,  5,  8,  5,  4,  8,  8,
166      7, 10,  9,  8, 11,  8,  8, 10, 11, 10, 11,  4,  5,  8,  4,  4,
167      8,  8,  8, 10,  4,  4,  8,  4,  4,  7,  8,  7,  9,  8,  8, 10,
168      7,  7,  9, 10,  9, 10,  8,  8, 11,  8,  7, 10, 11, 10, 12,  8,
169      7, 10,  7,  7,  9, 10,  9, 11, 11, 10, 12, 10,  9, 11, 11, 10,
170     11,
171 };
172
173 static const uint16_t codes5[81] = {
174     0x1fff, 0x0ff7, 0x07f4, 0x07e8, 0x03f1, 0x07ee, 0x07f9, 0x0ff8,
175     0x1ffd, 0x0ffd, 0x07f1, 0x03e8, 0x01e8, 0x00f0, 0x01ec, 0x03ee,
176     0x07f2, 0x0ffa, 0x0ff4, 0x03ef, 0x01f2, 0x00e8, 0x0070, 0x00ec,
177     0x01f0, 0x03ea, 0x07f3, 0x07eb, 0x01eb, 0x00ea, 0x001a, 0x0008,
178     0x0019, 0x00ee, 0x01ef, 0x07ed, 0x03f0, 0x00f2, 0x0073, 0x000b,
179     0x0000, 0x000a, 0x0071, 0x00f3, 0x07e9, 0x07ef, 0x01ee, 0x00ef,
180     0x0018, 0x0009, 0x001b, 0x00eb, 0x01e9, 0x07ec, 0x07f6, 0x03eb,
181     0x01f3, 0x00ed, 0x0072, 0x00e9, 0x01f1, 0x03ed, 0x07f7, 0x0ff6,
182     0x07f0, 0x03e9, 0x01ed, 0x00f1, 0x01ea, 0x03ec, 0x07f8, 0x0ff9,
183     0x1ffc, 0x0ffc, 0x0ff5, 0x07ea, 0x03f3, 0x03f2, 0x07f5, 0x0ffb,
184     0x1ffe,
185 };
186
187 static const uint8_t bits5[81] = {
188     13, 12, 11, 11, 10, 11, 11, 12, 13, 12, 11, 10,  9,  8,  9, 10,
189     11, 12, 12, 10,  9,  8,  7,  8,  9, 10, 11, 11,  9,  8,  5,  4,
190      5,  8,  9, 11, 10,  8,  7,  4,  1,  4,  7,  8, 11, 11,  9,  8,
191      5,  4,  5,  8,  9, 11, 11, 10,  9,  8,  7,  8,  9, 10, 11, 12,
192     11, 10,  9,  8,  9, 10, 11, 12, 13, 12, 12, 11, 10, 10, 11, 12,
193     13,
194 };
195
196 static const uint16_t codes6[81] = {
197     0x7fe, 0x3fd, 0x1f1, 0x1eb, 0x1f4, 0x1ea, 0x1f0, 0x3fc,
198     0x7fd, 0x3f6, 0x1e5, 0x0ea, 0x06c, 0x071, 0x068, 0x0f0,
199     0x1e6, 0x3f7, 0x1f3, 0x0ef, 0x032, 0x027, 0x028, 0x026,
200     0x031, 0x0eb, 0x1f7, 0x1e8, 0x06f, 0x02e, 0x008, 0x004,
201     0x006, 0x029, 0x06b, 0x1ee, 0x1ef, 0x072, 0x02d, 0x002,
202     0x000, 0x003, 0x02f, 0x073, 0x1fa, 0x1e7, 0x06e, 0x02b,
203     0x007, 0x001, 0x005, 0x02c, 0x06d, 0x1ec, 0x1f9, 0x0ee,
204     0x030, 0x024, 0x02a, 0x025, 0x033, 0x0ec, 0x1f2, 0x3f8,
205     0x1e4, 0x0ed, 0x06a, 0x070, 0x069, 0x074, 0x0f1, 0x3fa,
206     0x7ff, 0x3f9, 0x1f6, 0x1ed, 0x1f8, 0x1e9, 0x1f5, 0x3fb,
207     0x7fc,
208 };
209
210 static const uint8_t bits6[81] = {
211     11, 10,  9,  9,  9,  9,  9, 10, 11, 10,  9,  8,  7,  7,  7,  8,
212      9, 10,  9,  8,  6,  6,  6,  6,  6,  8,  9,  9,  7,  6,  4,  4,
213      4,  6,  7,  9,  9,  7,  6,  4,  4,  4,  6,  7,  9,  9,  7,  6,
214      4,  4,  4,  6,  7,  9,  9,  8,  6,  6,  6,  6,  6,  8,  9, 10,
215      9,  8,  7,  7,  7,  7,  8, 10, 11, 10,  9,  9,  9,  9,  9, 10,
216     11,
217 };
218
219 static const uint16_t codes7[64] = {
220     0x000, 0x005, 0x037, 0x074, 0x0f2, 0x1eb, 0x3ed, 0x7f7,
221     0x004, 0x00c, 0x035, 0x071, 0x0ec, 0x0ee, 0x1ee, 0x1f5,
222     0x036, 0x034, 0x072, 0x0ea, 0x0f1, 0x1e9, 0x1f3, 0x3f5,
223     0x073, 0x070, 0x0eb, 0x0f0, 0x1f1, 0x1f0, 0x3ec, 0x3fa,
224     0x0f3, 0x0ed, 0x1e8, 0x1ef, 0x3ef, 0x3f1, 0x3f9, 0x7fb,
225     0x1ed, 0x0ef, 0x1ea, 0x1f2, 0x3f3, 0x3f8, 0x7f9, 0x7fc,
226     0x3ee, 0x1ec, 0x1f4, 0x3f4, 0x3f7, 0x7f8, 0xffd, 0xffe,
227     0x7f6, 0x3f0, 0x3f2, 0x3f6, 0x7fa, 0x7fd, 0xffc, 0xfff,
228 };
229
230 static const uint8_t bits7[64] = {
231      1,  3,  6,  7,  8,  9, 10, 11,  3,  4,  6,  7,  8,  8,  9,  9,
232      6,  6,  7,  8,  8,  9,  9, 10,  7,  7,  8,  8,  9,  9, 10, 10,
233      8,  8,  9,  9, 10, 10, 10, 11,  9,  8,  9,  9, 10, 10, 11, 11,
234     10,  9,  9, 10, 10, 11, 12, 12, 11, 10, 10, 10, 11, 11, 12, 12,
235 };
236
237 static const uint16_t codes8[64] = {
238     0x00e, 0x005, 0x010, 0x030, 0x06f, 0x0f1, 0x1fa, 0x3fe,
239     0x003, 0x000, 0x004, 0x012, 0x02c, 0x06a, 0x075, 0x0f8,
240     0x00f, 0x002, 0x006, 0x014, 0x02e, 0x069, 0x072, 0x0f5,
241     0x02f, 0x011, 0x013, 0x02a, 0x032, 0x06c, 0x0ec, 0x0fa,
242     0x071, 0x02b, 0x02d, 0x031, 0x06d, 0x070, 0x0f2, 0x1f9,
243     0x0ef, 0x068, 0x033, 0x06b, 0x06e, 0x0ee, 0x0f9, 0x3fc,
244     0x1f8, 0x074, 0x073, 0x0ed, 0x0f0, 0x0f6, 0x1f6, 0x1fd,
245     0x3fd, 0x0f3, 0x0f4, 0x0f7, 0x1f7, 0x1fb, 0x1fc, 0x3ff,
246 };
247
248 static const uint8_t bits8[64] = {
249      5,  4,  5,  6,  7,  8,  9, 10,  4,  3,  4,  5,  6,  7,  7,  8,
250      5,  4,  4,  5,  6,  7,  7,  8,  6,  5,  5,  6,  6,  7,  8,  8,
251      7,  6,  6,  6,  7,  7,  8,  9,  8,  7,  6,  7,  7,  8,  8, 10,
252      9,  7,  7,  8,  8,  8,  9,  9, 10,  8,  8,  8,  9,  9,  9, 10,
253 };
254
255 static const uint16_t codes9[169] = {
256     0x0000, 0x0005, 0x0037, 0x00e7, 0x01de, 0x03ce, 0x03d9, 0x07c8,
257     0x07cd, 0x0fc8, 0x0fdd, 0x1fe4, 0x1fec, 0x0004, 0x000c, 0x0035,
258     0x0072, 0x00ea, 0x00ed, 0x01e2, 0x03d1, 0x03d3, 0x03e0, 0x07d8,
259     0x0fcf, 0x0fd5, 0x0036, 0x0034, 0x0071, 0x00e8, 0x00ec, 0x01e1,
260     0x03cf, 0x03dd, 0x03db, 0x07d0, 0x0fc7, 0x0fd4, 0x0fe4, 0x00e6,
261     0x0070, 0x00e9, 0x01dd, 0x01e3, 0x03d2, 0x03dc, 0x07cc, 0x07ca,
262     0x07de, 0x0fd8, 0x0fea, 0x1fdb, 0x01df, 0x00eb, 0x01dc, 0x01e6,
263     0x03d5, 0x03de, 0x07cb, 0x07dd, 0x07dc, 0x0fcd, 0x0fe2, 0x0fe7,
264     0x1fe1, 0x03d0, 0x01e0, 0x01e4, 0x03d6, 0x07c5, 0x07d1, 0x07db,
265     0x0fd2, 0x07e0, 0x0fd9, 0x0feb, 0x1fe3, 0x1fe9, 0x07c4, 0x01e5,
266     0x03d7, 0x07c6, 0x07cf, 0x07da, 0x0fcb, 0x0fda, 0x0fe3, 0x0fe9,
267     0x1fe6, 0x1ff3, 0x1ff7, 0x07d3, 0x03d8, 0x03e1, 0x07d4, 0x07d9,
268     0x0fd3, 0x0fde, 0x1fdd, 0x1fd9, 0x1fe2, 0x1fea, 0x1ff1, 0x1ff6,
269     0x07d2, 0x03d4, 0x03da, 0x07c7, 0x07d7, 0x07e2, 0x0fce, 0x0fdb,
270     0x1fd8, 0x1fee, 0x3ff0, 0x1ff4, 0x3ff2, 0x07e1, 0x03df, 0x07c9,
271     0x07d6, 0x0fca, 0x0fd0, 0x0fe5, 0x0fe6, 0x1feb, 0x1fef, 0x3ff3,
272     0x3ff4, 0x3ff5, 0x0fe0, 0x07ce, 0x07d5, 0x0fc6, 0x0fd1, 0x0fe1,
273     0x1fe0, 0x1fe8, 0x1ff0, 0x3ff1, 0x3ff8, 0x3ff6, 0x7ffc, 0x0fe8,
274     0x07df, 0x0fc9, 0x0fd7, 0x0fdc, 0x1fdc, 0x1fdf, 0x1fed, 0x1ff5,
275     0x3ff9, 0x3ffb, 0x7ffd, 0x7ffe, 0x1fe7, 0x0fcc, 0x0fd6, 0x0fdf,
276     0x1fde, 0x1fda, 0x1fe5, 0x1ff2, 0x3ffa, 0x3ff7, 0x3ffc, 0x3ffd,
277     0x7fff,
278 };
279
280 static const uint8_t bits9[169] = {
281      1,  3,  6,  8,  9, 10, 10, 11, 11, 12, 12, 13, 13,  3,  4,  6,
282      7,  8,  8,  9, 10, 10, 10, 11, 12, 12,  6,  6,  7,  8,  8,  9,
283     10, 10, 10, 11, 12, 12, 12,  8,  7,  8,  9,  9, 10, 10, 11, 11,
284     11, 12, 12, 13,  9,  8,  9,  9, 10, 10, 11, 11, 11, 12, 12, 12,
285     13, 10,  9,  9, 10, 11, 11, 11, 12, 11, 12, 12, 13, 13, 11,  9,
286     10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 11, 10, 10, 11, 11,
287     12, 12, 13, 13, 13, 13, 13, 13, 11, 10, 10, 11, 11, 11, 12, 12,
288     13, 13, 14, 13, 14, 11, 10, 11, 11, 12, 12, 12, 12, 13, 13, 14,
289     14, 14, 12, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 12,
290     11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 15, 15, 13, 12, 12, 12,
291     13, 13, 13, 13, 14, 14, 14, 14, 15,
292 };
293
294 static const uint16_t codes10[169] = {
295     0x022, 0x008, 0x01d, 0x026, 0x05f, 0x0d3, 0x1cf, 0x3d0,
296     0x3d7, 0x3ed, 0x7f0, 0x7f6, 0xffd, 0x007, 0x000, 0x001,
297     0x009, 0x020, 0x054, 0x060, 0x0d5, 0x0dc, 0x1d4, 0x3cd,
298     0x3de, 0x7e7, 0x01c, 0x002, 0x006, 0x00c, 0x01e, 0x028,
299     0x05b, 0x0cd, 0x0d9, 0x1ce, 0x1dc, 0x3d9, 0x3f1, 0x025,
300     0x00b, 0x00a, 0x00d, 0x024, 0x057, 0x061, 0x0cc, 0x0dd,
301     0x1cc, 0x1de, 0x3d3, 0x3e7, 0x05d, 0x021, 0x01f, 0x023,
302     0x027, 0x059, 0x064, 0x0d8, 0x0df, 0x1d2, 0x1e2, 0x3dd,
303     0x3ee, 0x0d1, 0x055, 0x029, 0x056, 0x058, 0x062, 0x0ce,
304     0x0e0, 0x0e2, 0x1da, 0x3d4, 0x3e3, 0x7eb, 0x1c9, 0x05e,
305     0x05a, 0x05c, 0x063, 0x0ca, 0x0da, 0x1c7, 0x1ca, 0x1e0,
306     0x3db, 0x3e8, 0x7ec, 0x1e3, 0x0d2, 0x0cb, 0x0d0, 0x0d7,
307     0x0db, 0x1c6, 0x1d5, 0x1d8, 0x3ca, 0x3da, 0x7ea, 0x7f1,
308     0x1e1, 0x0d4, 0x0cf, 0x0d6, 0x0de, 0x0e1, 0x1d0, 0x1d6,
309     0x3d1, 0x3d5, 0x3f2, 0x7ee, 0x7fb, 0x3e9, 0x1cd, 0x1c8,
310     0x1cb, 0x1d1, 0x1d7, 0x1df, 0x3cf, 0x3e0, 0x3ef, 0x7e6,
311     0x7f8, 0xffa, 0x3eb, 0x1dd, 0x1d3, 0x1d9, 0x1db, 0x3d2,
312     0x3cc, 0x3dc, 0x3ea, 0x7ed, 0x7f3, 0x7f9, 0xff9, 0x7f2,
313     0x3ce, 0x1e4, 0x3cb, 0x3d8, 0x3d6, 0x3e2, 0x3e5, 0x7e8,
314     0x7f4, 0x7f5, 0x7f7, 0xffb, 0x7fa, 0x3ec, 0x3df, 0x3e1,
315     0x3e4, 0x3e6, 0x3f0, 0x7e9, 0x7ef, 0xff8, 0xffe, 0xffc,
316     0xfff,
317 };
318
319 static const uint8_t bits10[169] = {
320      6,  5,  6,  6,  7,  8,  9, 10, 10, 10, 11, 11, 12,  5,  4,  4,
321      5,  6,  7,  7,  8,  8,  9, 10, 10, 11,  6,  4,  5,  5,  6,  6,
322      7,  8,  8,  9,  9, 10, 10,  6,  5,  5,  5,  6,  7,  7,  8,  8,
323      9,  9, 10, 10,  7,  6,  6,  6,  6,  7,  7,  8,  8,  9,  9, 10,
324     10,  8,  7,  6,  7,  7,  7,  8,  8,  8,  9, 10, 10, 11,  9,  7,
325      7,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11,  9,  8,  8,  8,  8,
326      8,  9,  9,  9, 10, 10, 11, 11,  9,  8,  8,  8,  8,  8,  9,  9,
327     10, 10, 10, 11, 11, 10,  9,  9,  9,  9,  9,  9, 10, 10, 10, 11,
328     11, 12, 10,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11, 12, 11,
329     10,  9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 11, 10, 10, 10,
330     10, 10, 10, 11, 11, 12, 12, 12, 12,
331 };
332
333 static const uint16_t codes11[289] = {
334     0x000, 0x006, 0x019, 0x03d, 0x09c, 0x0c6, 0x1a7, 0x390,
335     0x3c2, 0x3df, 0x7e6, 0x7f3, 0xffb, 0x7ec, 0xffa, 0xffe,
336     0x38e, 0x005, 0x001, 0x008, 0x014, 0x037, 0x042, 0x092,
337     0x0af, 0x191, 0x1a5, 0x1b5, 0x39e, 0x3c0, 0x3a2, 0x3cd,
338     0x7d6, 0x0ae, 0x017, 0x007, 0x009, 0x018, 0x039, 0x040,
339     0x08e, 0x0a3, 0x0b8, 0x199, 0x1ac, 0x1c1, 0x3b1, 0x396,
340     0x3be, 0x3ca, 0x09d, 0x03c, 0x015, 0x016, 0x01a, 0x03b,
341     0x044, 0x091, 0x0a5, 0x0be, 0x196, 0x1ae, 0x1b9, 0x3a1,
342     0x391, 0x3a5, 0x3d5, 0x094, 0x09a, 0x036, 0x038, 0x03a,
343     0x041, 0x08c, 0x09b, 0x0b0, 0x0c3, 0x19e, 0x1ab, 0x1bc,
344     0x39f, 0x38f, 0x3a9, 0x3cf, 0x093, 0x0bf, 0x03e, 0x03f,
345     0x043, 0x045, 0x09e, 0x0a7, 0x0b9, 0x194, 0x1a2, 0x1ba,
346     0x1c3, 0x3a6, 0x3a7, 0x3bb, 0x3d4, 0x09f, 0x1a0, 0x08f,
347     0x08d, 0x090, 0x098, 0x0a6, 0x0b6, 0x0c4, 0x19f, 0x1af,
348     0x1bf, 0x399, 0x3bf, 0x3b4, 0x3c9, 0x3e7, 0x0a8, 0x1b6,
349     0x0ab, 0x0a4, 0x0aa, 0x0b2, 0x0c2, 0x0c5, 0x198, 0x1a4,
350     0x1b8, 0x38c, 0x3a4, 0x3c4, 0x3c6, 0x3dd, 0x3e8, 0x0ad,
351     0x3af, 0x192, 0x0bd, 0x0bc, 0x18e, 0x197, 0x19a, 0x1a3,
352     0x1b1, 0x38d, 0x398, 0x3b7, 0x3d3, 0x3d1, 0x3db, 0x7dd,
353     0x0b4, 0x3de, 0x1a9, 0x19b, 0x19c, 0x1a1, 0x1aa, 0x1ad,
354     0x1b3, 0x38b, 0x3b2, 0x3b8, 0x3ce, 0x3e1, 0x3e0, 0x7d2,
355     0x7e5, 0x0b7, 0x7e3, 0x1bb, 0x1a8, 0x1a6, 0x1b0, 0x1b2,
356     0x1b7, 0x39b, 0x39a, 0x3ba, 0x3b5, 0x3d6, 0x7d7, 0x3e4,
357     0x7d8, 0x7ea, 0x0ba, 0x7e8, 0x3a0, 0x1bd, 0x1b4, 0x38a,
358     0x1c4, 0x392, 0x3aa, 0x3b0, 0x3bc, 0x3d7, 0x7d4, 0x7dc,
359     0x7db, 0x7d5, 0x7f0, 0x0c1, 0x7fb, 0x3c8, 0x3a3, 0x395,
360     0x39d, 0x3ac, 0x3ae, 0x3c5, 0x3d8, 0x3e2, 0x3e6, 0x7e4,
361     0x7e7, 0x7e0, 0x7e9, 0x7f7, 0x190, 0x7f2, 0x393, 0x1be,
362     0x1c0, 0x394, 0x397, 0x3ad, 0x3c3, 0x3c1, 0x3d2, 0x7da,
363     0x7d9, 0x7df, 0x7eb, 0x7f4, 0x7fa, 0x195, 0x7f8, 0x3bd,
364     0x39c, 0x3ab, 0x3a8, 0x3b3, 0x3b9, 0x3d0, 0x3e3, 0x3e5,
365     0x7e2, 0x7de, 0x7ed, 0x7f1, 0x7f9, 0x7fc, 0x193, 0xffd,
366     0x3dc, 0x3b6, 0x3c7, 0x3cc, 0x3cb, 0x3d9, 0x3da, 0x7d3,
367     0x7e1, 0x7ee, 0x7ef, 0x7f5, 0x7f6, 0xffc, 0xfff, 0x19d,
368     0x1c2, 0x0b5, 0x0a1, 0x096, 0x097, 0x095, 0x099, 0x0a0,
369     0x0a2, 0x0ac, 0x0a9, 0x0b1, 0x0b3, 0x0bb, 0x0c0, 0x18f,
370     0x004,
371 };
372
373 static const uint8_t bits11[289] = {
374      4,  5,  6,  7,  8,  8,  9, 10, 10, 10, 11, 11, 12, 11, 12, 12,
375     10,  5,  4,  5,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 10, 10,
376     11,  8,  6,  5,  5,  6,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10,
377     10, 10,  8,  7,  6,  6,  6,  7,  7,  8,  8,  8,  9,  9,  9, 10,
378     10, 10, 10,  8,  8,  7,  7,  7,  7,  8,  8,  8,  8,  9,  9,  9,
379     10, 10, 10, 10,  8,  8,  7,  7,  7,  7,  8,  8,  8,  9,  9,  9,
380      9, 10, 10, 10, 10,  8,  9,  8,  8,  8,  8,  8,  8,  8,  9,  9,
381      9, 10, 10, 10, 10, 10,  8,  9,  8,  8,  8,  8,  8,  8,  9,  9,
382      9, 10, 10, 10, 10, 10, 10,  8, 10,  9,  8,  8,  9,  9,  9,  9,
383      9, 10, 10, 10, 10, 10, 10, 11,  8, 10,  9,  9,  9,  9,  9,  9,
384      9, 10, 10, 10, 10, 10, 10, 11, 11,  8, 11,  9,  9,  9,  9,  9,
385      9, 10, 10, 10, 10, 10, 11, 10, 11, 11,  8, 11, 10,  9,  9, 10,
386      9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,  8, 11, 10, 10, 10,
387     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,  9, 11, 10,  9,
388      9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,  9, 11, 10,
389     10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,  9, 12,
390     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12,  9,
391      9,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  9,
392      5,
393 };
394
395 const uint16_t * const ff_aac_spectral_codes[11] = {
396     codes1,  codes2,  codes3, codes4, codes5, codes6, codes7, codes8,
397     codes9, codes10, codes11,
398 };
399
400 const uint8_t * const ff_aac_spectral_bits[11] = {
401     bits1,  bits2,  bits3, bits4, bits5, bits6, bits7, bits8,
402     bits9, bits10, bits11,
403 };
404
405 const uint16_t ff_aac_spectral_sizes[11] = {
406     81, 81, 81, 81, 81, 81, 64, 64, 169, 169, 289,
407 };
408
409 /* NOTE:
410  * 64.0f is a special value indicating the existence of an escape code in the
411  * bitstream.
412  */
413 static const DECLARE_ALIGNED(16, float, codebook_vector0)[324] = {
414  -1.0000000, -1.0000000, -1.0000000, -1.0000000,
415  -1.0000000, -1.0000000, -1.0000000,  0.0000000,
416  -1.0000000, -1.0000000, -1.0000000,  1.0000000,
417  -1.0000000, -1.0000000,  0.0000000, -1.0000000,
418  -1.0000000, -1.0000000,  0.0000000,  0.0000000,
419  -1.0000000, -1.0000000,  0.0000000,  1.0000000,
420  -1.0000000, -1.0000000,  1.0000000, -1.0000000,
421  -1.0000000, -1.0000000,  1.0000000,  0.0000000,
422  -1.0000000, -1.0000000,  1.0000000,  1.0000000,
423  -1.0000000,  0.0000000, -1.0000000, -1.0000000,
424  -1.0000000,  0.0000000, -1.0000000,  0.0000000,
425  -1.0000000,  0.0000000, -1.0000000,  1.0000000,
426  -1.0000000,  0.0000000,  0.0000000, -1.0000000,
427  -1.0000000,  0.0000000,  0.0000000,  0.0000000,
428  -1.0000000,  0.0000000,  0.0000000,  1.0000000,
429  -1.0000000,  0.0000000,  1.0000000, -1.0000000,
430  -1.0000000,  0.0000000,  1.0000000,  0.0000000,
431  -1.0000000,  0.0000000,  1.0000000,  1.0000000,
432  -1.0000000,  1.0000000, -1.0000000, -1.0000000,
433  -1.0000000,  1.0000000, -1.0000000,  0.0000000,
434  -1.0000000,  1.0000000, -1.0000000,  1.0000000,
435  -1.0000000,  1.0000000,  0.0000000, -1.0000000,
436  -1.0000000,  1.0000000,  0.0000000,  0.0000000,
437  -1.0000000,  1.0000000,  0.0000000,  1.0000000,
438  -1.0000000,  1.0000000,  1.0000000, -1.0000000,
439  -1.0000000,  1.0000000,  1.0000000,  0.0000000,
440  -1.0000000,  1.0000000,  1.0000000,  1.0000000,
441   0.0000000, -1.0000000, -1.0000000, -1.0000000,
442   0.0000000, -1.0000000, -1.0000000,  0.0000000,
443   0.0000000, -1.0000000, -1.0000000,  1.0000000,
444   0.0000000, -1.0000000,  0.0000000, -1.0000000,
445   0.0000000, -1.0000000,  0.0000000,  0.0000000,
446   0.0000000, -1.0000000,  0.0000000,  1.0000000,
447   0.0000000, -1.0000000,  1.0000000, -1.0000000,
448   0.0000000, -1.0000000,  1.0000000,  0.0000000,
449   0.0000000, -1.0000000,  1.0000000,  1.0000000,
450   0.0000000,  0.0000000, -1.0000000, -1.0000000,
451   0.0000000,  0.0000000, -1.0000000,  0.0000000,
452   0.0000000,  0.0000000, -1.0000000,  1.0000000,
453   0.0000000,  0.0000000,  0.0000000, -1.0000000,
454   0.0000000,  0.0000000,  0.0000000,  0.0000000,
455   0.0000000,  0.0000000,  0.0000000,  1.0000000,
456   0.0000000,  0.0000000,  1.0000000, -1.0000000,
457   0.0000000,  0.0000000,  1.0000000,  0.0000000,
458   0.0000000,  0.0000000,  1.0000000,  1.0000000,
459   0.0000000,  1.0000000, -1.0000000, -1.0000000,
460   0.0000000,  1.0000000, -1.0000000,  0.0000000,
461   0.0000000,  1.0000000, -1.0000000,  1.0000000,
462   0.0000000,  1.0000000,  0.0000000, -1.0000000,
463   0.0000000,  1.0000000,  0.0000000,  0.0000000,
464   0.0000000,  1.0000000,  0.0000000,  1.0000000,
465   0.0000000,  1.0000000,  1.0000000, -1.0000000,
466   0.0000000,  1.0000000,  1.0000000,  0.0000000,
467   0.0000000,  1.0000000,  1.0000000,  1.0000000,
468   1.0000000, -1.0000000, -1.0000000, -1.0000000,
469   1.0000000, -1.0000000, -1.0000000,  0.0000000,
470   1.0000000, -1.0000000, -1.0000000,  1.0000000,
471   1.0000000, -1.0000000,  0.0000000, -1.0000000,
472   1.0000000, -1.0000000,  0.0000000,  0.0000000,
473   1.0000000, -1.0000000,  0.0000000,  1.0000000,
474   1.0000000, -1.0000000,  1.0000000, -1.0000000,
475   1.0000000, -1.0000000,  1.0000000,  0.0000000,
476   1.0000000, -1.0000000,  1.0000000,  1.0000000,
477   1.0000000,  0.0000000, -1.0000000, -1.0000000,
478   1.0000000,  0.0000000, -1.0000000,  0.0000000,
479   1.0000000,  0.0000000, -1.0000000,  1.0000000,
480   1.0000000,  0.0000000,  0.0000000, -1.0000000,
481   1.0000000,  0.0000000,  0.0000000,  0.0000000,
482   1.0000000,  0.0000000,  0.0000000,  1.0000000,
483   1.0000000,  0.0000000,  1.0000000, -1.0000000,
484   1.0000000,  0.0000000,  1.0000000,  0.0000000,
485   1.0000000,  0.0000000,  1.0000000,  1.0000000,
486   1.0000000,  1.0000000, -1.0000000, -1.0000000,
487   1.0000000,  1.0000000, -1.0000000,  0.0000000,
488   1.0000000,  1.0000000, -1.0000000,  1.0000000,
489   1.0000000,  1.0000000,  0.0000000, -1.0000000,
490   1.0000000,  1.0000000,  0.0000000,  0.0000000,
491   1.0000000,  1.0000000,  0.0000000,  1.0000000,
492   1.0000000,  1.0000000,  1.0000000, -1.0000000,
493   1.0000000,  1.0000000,  1.0000000,  0.0000000,
494   1.0000000,  1.0000000,  1.0000000,  1.0000000,
495 };
496
497 static const DECLARE_ALIGNED(16, float, codebook_vector2)[324] = {
498   0.0000000,  0.0000000,  0.0000000,  0.0000000,
499   0.0000000,  0.0000000,  0.0000000,  1.0000000,
500   0.0000000,  0.0000000,  0.0000000,  2.5198421,
501   0.0000000,  0.0000000,  1.0000000,  0.0000000,
502   0.0000000,  0.0000000,  1.0000000,  1.0000000,
503   0.0000000,  0.0000000,  1.0000000,  2.5198421,
504   0.0000000,  0.0000000,  2.5198421,  0.0000000,
505   0.0000000,  0.0000000,  2.5198421,  1.0000000,
506   0.0000000,  0.0000000,  2.5198421,  2.5198421,
507   0.0000000,  1.0000000,  0.0000000,  0.0000000,
508   0.0000000,  1.0000000,  0.0000000,  1.0000000,
509   0.0000000,  1.0000000,  0.0000000,  2.5198421,
510   0.0000000,  1.0000000,  1.0000000,  0.0000000,
511   0.0000000,  1.0000000,  1.0000000,  1.0000000,
512   0.0000000,  1.0000000,  1.0000000,  2.5198421,
513   0.0000000,  1.0000000,  2.5198421,  0.0000000,
514   0.0000000,  1.0000000,  2.5198421,  1.0000000,
515   0.0000000,  1.0000000,  2.5198421,  2.5198421,
516   0.0000000,  2.5198421,  0.0000000,  0.0000000,
517   0.0000000,  2.5198421,  0.0000000,  1.0000000,
518   0.0000000,  2.5198421,  0.0000000,  2.5198421,
519   0.0000000,  2.5198421,  1.0000000,  0.0000000,
520   0.0000000,  2.5198421,  1.0000000,  1.0000000,
521   0.0000000,  2.5198421,  1.0000000,  2.5198421,
522   0.0000000,  2.5198421,  2.5198421,  0.0000000,
523   0.0000000,  2.5198421,  2.5198421,  1.0000000,
524   0.0000000,  2.5198421,  2.5198421,  2.5198421,
525   1.0000000,  0.0000000,  0.0000000,  0.0000000,
526   1.0000000,  0.0000000,  0.0000000,  1.0000000,
527   1.0000000,  0.0000000,  0.0000000,  2.5198421,
528   1.0000000,  0.0000000,  1.0000000,  0.0000000,
529   1.0000000,  0.0000000,  1.0000000,  1.0000000,
530   1.0000000,  0.0000000,  1.0000000,  2.5198421,
531   1.0000000,  0.0000000,  2.5198421,  0.0000000,
532   1.0000000,  0.0000000,  2.5198421,  1.0000000,
533   1.0000000,  0.0000000,  2.5198421,  2.5198421,
534   1.0000000,  1.0000000,  0.0000000,  0.0000000,
535   1.0000000,  1.0000000,  0.0000000,  1.0000000,
536   1.0000000,  1.0000000,  0.0000000,  2.5198421,
537   1.0000000,  1.0000000,  1.0000000,  0.0000000,
538   1.0000000,  1.0000000,  1.0000000,  1.0000000,
539   1.0000000,  1.0000000,  1.0000000,  2.5198421,
540   1.0000000,  1.0000000,  2.5198421,  0.0000000,
541   1.0000000,  1.0000000,  2.5198421,  1.0000000,
542   1.0000000,  1.0000000,  2.5198421,  2.5198421,
543   1.0000000,  2.5198421,  0.0000000,  0.0000000,
544   1.0000000,  2.5198421,  0.0000000,  1.0000000,
545   1.0000000,  2.5198421,  0.0000000,  2.5198421,
546   1.0000000,  2.5198421,  1.0000000,  0.0000000,
547   1.0000000,  2.5198421,  1.0000000,  1.0000000,
548   1.0000000,  2.5198421,  1.0000000,  2.5198421,
549   1.0000000,  2.5198421,  2.5198421,  0.0000000,
550   1.0000000,  2.5198421,  2.5198421,  1.0000000,
551   1.0000000,  2.5198421,  2.5198421,  2.5198421,
552   2.5198421,  0.0000000,  0.0000000,  0.0000000,
553   2.5198421,  0.0000000,  0.0000000,  1.0000000,
554   2.5198421,  0.0000000,  0.0000000,  2.5198421,
555   2.5198421,  0.0000000,  1.0000000,  0.0000000,
556   2.5198421,  0.0000000,  1.0000000,  1.0000000,
557   2.5198421,  0.0000000,  1.0000000,  2.5198421,
558   2.5198421,  0.0000000,  2.5198421,  0.0000000,
559   2.5198421,  0.0000000,  2.5198421,  1.0000000,
560   2.5198421,  0.0000000,  2.5198421,  2.5198421,
561   2.5198421,  1.0000000,  0.0000000,  0.0000000,
562   2.5198421,  1.0000000,  0.0000000,  1.0000000,
563   2.5198421,  1.0000000,  0.0000000,  2.5198421,
564   2.5198421,  1.0000000,  1.0000000,  0.0000000,
565   2.5198421,  1.0000000,  1.0000000,  1.0000000,
566   2.5198421,  1.0000000,  1.0000000,  2.5198421,
567   2.5198421,  1.0000000,  2.5198421,  0.0000000,
568   2.5198421,  1.0000000,  2.5198421,  1.0000000,
569   2.5198421,  1.0000000,  2.5198421,  2.5198421,
570   2.5198421,  2.5198421,  0.0000000,  0.0000000,
571   2.5198421,  2.5198421,  0.0000000,  1.0000000,
572   2.5198421,  2.5198421,  0.0000000,  2.5198421,
573   2.5198421,  2.5198421,  1.0000000,  0.0000000,
574   2.5198421,  2.5198421,  1.0000000,  1.0000000,
575   2.5198421,  2.5198421,  1.0000000,  2.5198421,
576   2.5198421,  2.5198421,  2.5198421,  0.0000000,
577   2.5198421,  2.5198421,  2.5198421,  1.0000000,
578   2.5198421,  2.5198421,  2.5198421,  2.5198421,
579 };
580
581 static const DECLARE_ALIGNED(16, float, codebook_vector4)[162] = {
582  -6.3496042, -6.3496042, -6.3496042, -4.3267487,
583  -6.3496042, -2.5198421, -6.3496042, -1.0000000,
584  -6.3496042,  0.0000000, -6.3496042,  1.0000000,
585  -6.3496042,  2.5198421, -6.3496042,  4.3267487,
586  -6.3496042,  6.3496042, -4.3267487, -6.3496042,
587  -4.3267487, -4.3267487, -4.3267487, -2.5198421,
588  -4.3267487, -1.0000000, -4.3267487,  0.0000000,
589  -4.3267487,  1.0000000, -4.3267487,  2.5198421,
590  -4.3267487,  4.3267487, -4.3267487,  6.3496042,
591  -2.5198421, -6.3496042, -2.5198421, -4.3267487,
592  -2.5198421, -2.5198421, -2.5198421, -1.0000000,
593  -2.5198421,  0.0000000, -2.5198421,  1.0000000,
594  -2.5198421,  2.5198421, -2.5198421,  4.3267487,
595  -2.5198421,  6.3496042, -1.0000000, -6.3496042,
596  -1.0000000, -4.3267487, -1.0000000, -2.5198421,
597  -1.0000000, -1.0000000, -1.0000000,  0.0000000,
598  -1.0000000,  1.0000000, -1.0000000,  2.5198421,
599  -1.0000000,  4.3267487, -1.0000000,  6.3496042,
600   0.0000000, -6.3496042,  0.0000000, -4.3267487,
601   0.0000000, -2.5198421,  0.0000000, -1.0000000,
602   0.0000000,  0.0000000,  0.0000000,  1.0000000,
603   0.0000000,  2.5198421,  0.0000000,  4.3267487,
604   0.0000000,  6.3496042,  1.0000000, -6.3496042,
605   1.0000000, -4.3267487,  1.0000000, -2.5198421,
606   1.0000000, -1.0000000,  1.0000000,  0.0000000,
607   1.0000000,  1.0000000,  1.0000000,  2.5198421,
608   1.0000000,  4.3267487,  1.0000000,  6.3496042,
609   2.5198421, -6.3496042,  2.5198421, -4.3267487,
610   2.5198421, -2.5198421,  2.5198421, -1.0000000,
611   2.5198421,  0.0000000,  2.5198421,  1.0000000,
612   2.5198421,  2.5198421,  2.5198421,  4.3267487,
613   2.5198421,  6.3496042,  4.3267487, -6.3496042,
614   4.3267487, -4.3267487,  4.3267487, -2.5198421,
615   4.3267487, -1.0000000,  4.3267487,  0.0000000,
616   4.3267487,  1.0000000,  4.3267487,  2.5198421,
617   4.3267487,  4.3267487,  4.3267487,  6.3496042,
618   6.3496042, -6.3496042,  6.3496042, -4.3267487,
619   6.3496042, -2.5198421,  6.3496042, -1.0000000,
620   6.3496042,  0.0000000,  6.3496042,  1.0000000,
621   6.3496042,  2.5198421,  6.3496042,  4.3267487,
622   6.3496042,  6.3496042,
623 };
624
625 static const DECLARE_ALIGNED(16, float, codebook_vector6)[128] = {
626   0.0000000,  0.0000000,  0.0000000,  1.0000000,
627   0.0000000,  2.5198421,  0.0000000,  4.3267487,
628   0.0000000,  6.3496042,  0.0000000,  8.5498797,
629   0.0000000, 10.9027236,  0.0000000, 13.3905183,
630   1.0000000,  0.0000000,  1.0000000,  1.0000000,
631   1.0000000,  2.5198421,  1.0000000,  4.3267487,
632   1.0000000,  6.3496042,  1.0000000,  8.5498797,
633   1.0000000, 10.9027236,  1.0000000, 13.3905183,
634   2.5198421,  0.0000000,  2.5198421,  1.0000000,
635   2.5198421,  2.5198421,  2.5198421,  4.3267487,
636   2.5198421,  6.3496042,  2.5198421,  8.5498797,
637   2.5198421, 10.9027236,  2.5198421, 13.3905183,
638   4.3267487,  0.0000000,  4.3267487,  1.0000000,
639   4.3267487,  2.5198421,  4.3267487,  4.3267487,
640   4.3267487,  6.3496042,  4.3267487,  8.5498797,
641   4.3267487, 10.9027236,  4.3267487, 13.3905183,
642   6.3496042,  0.0000000,  6.3496042,  1.0000000,
643   6.3496042,  2.5198421,  6.3496042,  4.3267487,
644   6.3496042,  6.3496042,  6.3496042,  8.5498797,
645   6.3496042, 10.9027236,  6.3496042, 13.3905183,
646   8.5498797,  0.0000000,  8.5498797,  1.0000000,
647   8.5498797,  2.5198421,  8.5498797,  4.3267487,
648   8.5498797,  6.3496042,  8.5498797,  8.5498797,
649   8.5498797, 10.9027236,  8.5498797, 13.3905183,
650  10.9027236,  0.0000000, 10.9027236,  1.0000000,
651  10.9027236,  2.5198421, 10.9027236,  4.3267487,
652  10.9027236,  6.3496042, 10.9027236,  8.5498797,
653  10.9027236, 10.9027236, 10.9027236, 13.3905183,
654  13.3905183,  0.0000000, 13.3905183,  1.0000000,
655  13.3905183,  2.5198421, 13.3905183,  4.3267487,
656  13.3905183,  6.3496042, 13.3905183,  8.5498797,
657  13.3905183, 10.9027236, 13.3905183, 13.3905183,
658 };
659
660 static const DECLARE_ALIGNED(16, float, codebook_vector8)[338] = {
661   0.0000000,  0.0000000,  0.0000000,  1.0000000,
662   0.0000000,  2.5198421,  0.0000000,  4.3267487,
663   0.0000000,  6.3496042,  0.0000000,  8.5498797,
664   0.0000000, 10.9027236,  0.0000000, 13.3905183,
665   0.0000000, 16.0000000,  0.0000000, 18.7207544,
666   0.0000000, 21.5443469,  0.0000000, 24.4637810,
667   0.0000000, 27.4731418,  1.0000000,  0.0000000,
668   1.0000000,  1.0000000,  1.0000000,  2.5198421,
669   1.0000000,  4.3267487,  1.0000000,  6.3496042,
670   1.0000000,  8.5498797,  1.0000000, 10.9027236,
671   1.0000000, 13.3905183,  1.0000000, 16.0000000,
672   1.0000000, 18.7207544,  1.0000000, 21.5443469,
673   1.0000000, 24.4637810,  1.0000000, 27.4731418,
674   2.5198421,  0.0000000,  2.5198421,  1.0000000,
675   2.5198421,  2.5198421,  2.5198421,  4.3267487,
676   2.5198421,  6.3496042,  2.5198421,  8.5498797,
677   2.5198421, 10.9027236,  2.5198421, 13.3905183,
678   2.5198421, 16.0000000,  2.5198421, 18.7207544,
679   2.5198421, 21.5443469,  2.5198421, 24.4637810,
680   2.5198421, 27.4731418,  4.3267487,  0.0000000,
681   4.3267487,  1.0000000,  4.3267487,  2.5198421,
682   4.3267487,  4.3267487,  4.3267487,  6.3496042,
683   4.3267487,  8.5498797,  4.3267487, 10.9027236,
684   4.3267487, 13.3905183,  4.3267487, 16.0000000,
685   4.3267487, 18.7207544,  4.3267487, 21.5443469,
686   4.3267487, 24.4637810,  4.3267487, 27.4731418,
687   6.3496042,  0.0000000,  6.3496042,  1.0000000,
688   6.3496042,  2.5198421,  6.3496042,  4.3267487,
689   6.3496042,  6.3496042,  6.3496042,  8.5498797,
690   6.3496042, 10.9027236,  6.3496042, 13.3905183,
691   6.3496042, 16.0000000,  6.3496042, 18.7207544,
692   6.3496042, 21.5443469,  6.3496042, 24.4637810,
693   6.3496042, 27.4731418,  8.5498797,  0.0000000,
694   8.5498797,  1.0000000,  8.5498797,  2.5198421,
695   8.5498797,  4.3267487,  8.5498797,  6.3496042,
696   8.5498797,  8.5498797,  8.5498797, 10.9027236,
697   8.5498797, 13.3905183,  8.5498797, 16.0000000,
698   8.5498797, 18.7207544,  8.5498797, 21.5443469,
699   8.5498797, 24.4637810,  8.5498797, 27.4731418,
700  10.9027236,  0.0000000, 10.9027236,  1.0000000,
701  10.9027236,  2.5198421, 10.9027236,  4.3267487,
702  10.9027236,  6.3496042, 10.9027236,  8.5498797,
703  10.9027236, 10.9027236, 10.9027236, 13.3905183,
704  10.9027236, 16.0000000, 10.9027236, 18.7207544,
705  10.9027236, 21.5443469, 10.9027236, 24.4637810,
706  10.9027236, 27.4731418, 13.3905183,  0.0000000,
707  13.3905183,  1.0000000, 13.3905183,  2.5198421,
708  13.3905183,  4.3267487, 13.3905183,  6.3496042,
709  13.3905183,  8.5498797, 13.3905183, 10.9027236,
710  13.3905183, 13.3905183, 13.3905183, 16.0000000,
711  13.3905183, 18.7207544, 13.3905183, 21.5443469,
712  13.3905183, 24.4637810, 13.3905183, 27.4731418,
713  16.0000000,  0.0000000, 16.0000000,  1.0000000,
714  16.0000000,  2.5198421, 16.0000000,  4.3267487,
715  16.0000000,  6.3496042, 16.0000000,  8.5498797,
716  16.0000000, 10.9027236, 16.0000000, 13.3905183,
717  16.0000000, 16.0000000, 16.0000000, 18.7207544,
718  16.0000000, 21.5443469, 16.0000000, 24.4637810,
719  16.0000000, 27.4731418, 18.7207544,  0.0000000,
720  18.7207544,  1.0000000, 18.7207544,  2.5198421,
721  18.7207544,  4.3267487, 18.7207544,  6.3496042,
722  18.7207544,  8.5498797, 18.7207544, 10.9027236,
723  18.7207544, 13.3905183, 18.7207544, 16.0000000,
724  18.7207544, 18.7207544, 18.7207544, 21.5443469,
725  18.7207544, 24.4637810, 18.7207544, 27.4731418,
726  21.5443469,  0.0000000, 21.5443469,  1.0000000,
727  21.5443469,  2.5198421, 21.5443469,  4.3267487,
728  21.5443469,  6.3496042, 21.5443469,  8.5498797,
729  21.5443469, 10.9027236, 21.5443469, 13.3905183,
730  21.5443469, 16.0000000, 21.5443469, 18.7207544,
731  21.5443469, 21.5443469, 21.5443469, 24.4637810,
732  21.5443469, 27.4731418, 24.4637810,  0.0000000,
733  24.4637810,  1.0000000, 24.4637810,  2.5198421,
734  24.4637810,  4.3267487, 24.4637810,  6.3496042,
735  24.4637810,  8.5498797, 24.4637810, 10.9027236,
736  24.4637810, 13.3905183, 24.4637810, 16.0000000,
737  24.4637810, 18.7207544, 24.4637810, 21.5443469,
738  24.4637810, 24.4637810, 24.4637810, 27.4731418,
739  27.4731418,  0.0000000, 27.4731418,  1.0000000,
740  27.4731418,  2.5198421, 27.4731418,  4.3267487,
741  27.4731418,  6.3496042, 27.4731418,  8.5498797,
742  27.4731418, 10.9027236, 27.4731418, 13.3905183,
743  27.4731418, 16.0000000, 27.4731418, 18.7207544,
744  27.4731418, 21.5443469, 27.4731418, 24.4637810,
745  27.4731418, 27.4731418,
746 };
747
748 static const DECLARE_ALIGNED(16, float, codebook_vector10)[578] = {
749   0.0000000,  0.0000000,  0.0000000,  1.0000000,
750   0.0000000,  2.5198421,  0.0000000,  4.3267487,
751   0.0000000,  6.3496042,  0.0000000,  8.5498797,
752   0.0000000, 10.9027236,  0.0000000, 13.3905183,
753   0.0000000, 16.0000000,  0.0000000, 18.7207544,
754   0.0000000, 21.5443469,  0.0000000, 24.4637810,
755   0.0000000, 27.4731418,  0.0000000, 30.5673509,
756   0.0000000, 33.7419917,  0.0000000, 36.9931811,
757   0.0000000,      64.0f,  1.0000000,  0.0000000,
758   1.0000000,  1.0000000,  1.0000000,  2.5198421,
759   1.0000000,  4.3267487,  1.0000000,  6.3496042,
760   1.0000000,  8.5498797,  1.0000000, 10.9027236,
761   1.0000000, 13.3905183,  1.0000000, 16.0000000,
762   1.0000000, 18.7207544,  1.0000000, 21.5443469,
763   1.0000000, 24.4637810,  1.0000000, 27.4731418,
764   1.0000000, 30.5673509,  1.0000000, 33.7419917,
765   1.0000000, 36.9931811,  1.0000000,      64.0f,
766   2.5198421,  0.0000000,  2.5198421,  1.0000000,
767   2.5198421,  2.5198421,  2.5198421,  4.3267487,
768   2.5198421,  6.3496042,  2.5198421,  8.5498797,
769   2.5198421, 10.9027236,  2.5198421, 13.3905183,
770   2.5198421, 16.0000000,  2.5198421, 18.7207544,
771   2.5198421, 21.5443469,  2.5198421, 24.4637810,
772   2.5198421, 27.4731418,  2.5198421, 30.5673509,
773   2.5198421, 33.7419917,  2.5198421, 36.9931811,
774   2.5198421,      64.0f,  4.3267487,  0.0000000,
775   4.3267487,  1.0000000,  4.3267487,  2.5198421,
776   4.3267487,  4.3267487,  4.3267487,  6.3496042,
777   4.3267487,  8.5498797,  4.3267487, 10.9027236,
778   4.3267487, 13.3905183,  4.3267487, 16.0000000,
779   4.3267487, 18.7207544,  4.3267487, 21.5443469,
780   4.3267487, 24.4637810,  4.3267487, 27.4731418,
781   4.3267487, 30.5673509,  4.3267487, 33.7419917,
782   4.3267487, 36.9931811,  4.3267487,      64.0f,
783   6.3496042,  0.0000000,  6.3496042,  1.0000000,
784   6.3496042,  2.5198421,  6.3496042,  4.3267487,
785   6.3496042,  6.3496042,  6.3496042,  8.5498797,
786   6.3496042, 10.9027236,  6.3496042, 13.3905183,
787   6.3496042, 16.0000000,  6.3496042, 18.7207544,
788   6.3496042, 21.5443469,  6.3496042, 24.4637810,
789   6.3496042, 27.4731418,  6.3496042, 30.5673509,
790   6.3496042, 33.7419917,  6.3496042, 36.9931811,
791   6.3496042,      64.0f,  8.5498797,  0.0000000,
792   8.5498797,  1.0000000,  8.5498797,  2.5198421,
793   8.5498797,  4.3267487,  8.5498797,  6.3496042,
794   8.5498797,  8.5498797,  8.5498797, 10.9027236,
795   8.5498797, 13.3905183,  8.5498797, 16.0000000,
796   8.5498797, 18.7207544,  8.5498797, 21.5443469,
797   8.5498797, 24.4637810,  8.5498797, 27.4731418,
798   8.5498797, 30.5673509,  8.5498797, 33.7419917,
799   8.5498797, 36.9931811,  8.5498797,      64.0f,
800  10.9027236,  0.0000000, 10.9027236,  1.0000000,
801  10.9027236,  2.5198421, 10.9027236,  4.3267487,
802  10.9027236,  6.3496042, 10.9027236,  8.5498797,
803  10.9027236, 10.9027236, 10.9027236, 13.3905183,
804  10.9027236, 16.0000000, 10.9027236, 18.7207544,
805  10.9027236, 21.5443469, 10.9027236, 24.4637810,
806  10.9027236, 27.4731418, 10.9027236, 30.5673509,
807  10.9027236, 33.7419917, 10.9027236, 36.9931811,
808  10.9027236,      64.0f, 13.3905183,  0.0000000,
809  13.3905183,  1.0000000, 13.3905183,  2.5198421,
810  13.3905183,  4.3267487, 13.3905183,  6.3496042,
811  13.3905183,  8.5498797, 13.3905183, 10.9027236,
812  13.3905183, 13.3905183, 13.3905183, 16.0000000,
813  13.3905183, 18.7207544, 13.3905183, 21.5443469,
814  13.3905183, 24.4637810, 13.3905183, 27.4731418,
815  13.3905183, 30.5673509, 13.3905183, 33.7419917,
816  13.3905183, 36.9931811, 13.3905183,      64.0f,
817  16.0000000,  0.0000000, 16.0000000,  1.0000000,
818  16.0000000,  2.5198421, 16.0000000,  4.3267487,
819  16.0000000,  6.3496042, 16.0000000,  8.5498797,
820  16.0000000, 10.9027236, 16.0000000, 13.3905183,
821  16.0000000, 16.0000000, 16.0000000, 18.7207544,
822  16.0000000, 21.5443469, 16.0000000, 24.4637810,
823  16.0000000, 27.4731418, 16.0000000, 30.5673509,
824  16.0000000, 33.7419917, 16.0000000, 36.9931811,
825  16.0000000,      64.0f, 18.7207544,  0.0000000,
826  18.7207544,  1.0000000, 18.7207544,  2.5198421,
827  18.7207544,  4.3267487, 18.7207544,  6.3496042,
828  18.7207544,  8.5498797, 18.7207544, 10.9027236,
829  18.7207544, 13.3905183, 18.7207544, 16.0000000,
830  18.7207544, 18.7207544, 18.7207544, 21.5443469,
831  18.7207544, 24.4637810, 18.7207544, 27.4731418,
832  18.7207544, 30.5673509, 18.7207544, 33.7419917,
833  18.7207544, 36.9931811, 18.7207544,      64.0f,
834  21.5443469,  0.0000000, 21.5443469,  1.0000000,
835  21.5443469,  2.5198421, 21.5443469,  4.3267487,
836  21.5443469,  6.3496042, 21.5443469,  8.5498797,
837  21.5443469, 10.9027236, 21.5443469, 13.3905183,
838  21.5443469, 16.0000000, 21.5443469, 18.7207544,
839  21.5443469, 21.5443469, 21.5443469, 24.4637810,
840  21.5443469, 27.4731418, 21.5443469, 30.5673509,
841  21.5443469, 33.7419917, 21.5443469, 36.9931811,
842  21.5443469,      64.0f, 24.4637810,  0.0000000,
843  24.4637810,  1.0000000, 24.4637810,  2.5198421,
844  24.4637810,  4.3267487, 24.4637810,  6.3496042,
845  24.4637810,  8.5498797, 24.4637810, 10.9027236,
846  24.4637810, 13.3905183, 24.4637810, 16.0000000,
847  24.4637810, 18.7207544, 24.4637810, 21.5443469,
848  24.4637810, 24.4637810, 24.4637810, 27.4731418,
849  24.4637810, 30.5673509, 24.4637810, 33.7419917,
850  24.4637810, 36.9931811, 24.4637810,      64.0f,
851  27.4731418,  0.0000000, 27.4731418,  1.0000000,
852  27.4731418,  2.5198421, 27.4731418,  4.3267487,
853  27.4731418,  6.3496042, 27.4731418,  8.5498797,
854  27.4731418, 10.9027236, 27.4731418, 13.3905183,
855  27.4731418, 16.0000000, 27.4731418, 18.7207544,
856  27.4731418, 21.5443469, 27.4731418, 24.4637810,
857  27.4731418, 27.4731418, 27.4731418, 30.5673509,
858  27.4731418, 33.7419917, 27.4731418, 36.9931811,
859  27.4731418,      64.0f, 30.5673509,  0.0000000,
860  30.5673509,  1.0000000, 30.5673509,  2.5198421,
861  30.5673509,  4.3267487, 30.5673509,  6.3496042,
862  30.5673509,  8.5498797, 30.5673509, 10.9027236,
863  30.5673509, 13.3905183, 30.5673509, 16.0000000,
864  30.5673509, 18.7207544, 30.5673509, 21.5443469,
865  30.5673509, 24.4637810, 30.5673509, 27.4731418,
866  30.5673509, 30.5673509, 30.5673509, 33.7419917,
867  30.5673509, 36.9931811, 30.5673509,      64.0f,
868  33.7419917,  0.0000000, 33.7419917,  1.0000000,
869  33.7419917,  2.5198421, 33.7419917,  4.3267487,
870  33.7419917,  6.3496042, 33.7419917,  8.5498797,
871  33.7419917, 10.9027236, 33.7419917, 13.3905183,
872  33.7419917, 16.0000000, 33.7419917, 18.7207544,
873  33.7419917, 21.5443469, 33.7419917, 24.4637810,
874  33.7419917, 27.4731418, 33.7419917, 30.5673509,
875  33.7419917, 33.7419917, 33.7419917, 36.9931811,
876  33.7419917,      64.0f, 36.9931811,  0.0000000,
877  36.9931811,  1.0000000, 36.9931811,  2.5198421,
878  36.9931811,  4.3267487, 36.9931811,  6.3496042,
879  36.9931811,  8.5498797, 36.9931811, 10.9027236,
880  36.9931811, 13.3905183, 36.9931811, 16.0000000,
881  36.9931811, 18.7207544, 36.9931811, 21.5443469,
882  36.9931811, 24.4637810, 36.9931811, 27.4731418,
883  36.9931811, 30.5673509, 36.9931811, 33.7419917,
884  36.9931811, 36.9931811, 36.9931811,      64.0f,
885       64.0f,  0.0000000,      64.0f,  1.0000000,
886       64.0f,  2.5198421,      64.0f,  4.3267487,
887       64.0f,  6.3496042,      64.0f,  8.5498797,
888       64.0f, 10.9027236,      64.0f, 13.3905183,
889       64.0f, 16.0000000,      64.0f, 18.7207544,
890       64.0f, 21.5443469,      64.0f, 24.4637810,
891       64.0f, 27.4731418,      64.0f, 30.5673509,
892       64.0f, 33.7419917,      64.0f, 36.9931811,
893       64.0f,      64.0f,
894 };
895
896 const float * const ff_aac_codebook_vectors[] = {
897     codebook_vector0, codebook_vector0, codebook_vector2,
898     codebook_vector2, codebook_vector4, codebook_vector4,
899     codebook_vector6, codebook_vector6, codebook_vector8,
900     codebook_vector8, codebook_vector10,
901 };
902
903 static const float codebook_vector0_vals[] = {
904    -1.0000000,  0.0000000,  1.0000000
905 };
906
907 /*
908  * bits  0:1, 2:3, 4:5, 6:7  index into _vals array
909  *       8:11                number of non-zero values
910  *      12:15                bit mask of non-zero values
911  */
912 static const uint16_t codebook_vector02_idx[] = {
913     0x0000, 0x8140, 0x8180, 0x4110, 0xc250, 0xc290, 0x4120, 0xc260, 0xc2a0,
914     0x2104, 0xa244, 0xa284, 0x6214, 0xe354, 0xe394, 0x6224, 0xe364, 0xe3a4,
915     0x2108, 0xa248, 0xa288, 0x6218, 0xe358, 0xe398, 0x6228, 0xe368, 0xe3a8,
916     0x1101, 0x9241, 0x9281, 0x5211, 0xd351, 0xd391, 0x5221, 0xd361, 0xd3a1,
917     0x3205, 0xb345, 0xb385, 0x7315, 0xf455, 0xf495, 0x7325, 0xf465, 0xf4a5,
918     0x3209, 0xb349, 0xb389, 0x7319, 0xf459, 0xf499, 0x7329, 0xf469, 0xf4a9,
919     0x1102, 0x9242, 0x9282, 0x5212, 0xd352, 0xd392, 0x5222, 0xd362, 0xd3a2,
920     0x3206, 0xb346, 0xb386, 0x7316, 0xf456, 0xf496, 0x7326, 0xf466, 0xf4a6,
921     0x320a, 0xb34a, 0xb38a, 0x731a, 0xf45a, 0xf49a, 0x732a, 0xf46a, 0xf4aa,
922 };
923
924 static const float codebook_vector4_vals[] = {
925    -6.3496042, -4.3267487,
926    -2.5198421, -1.0000000,
927     0.0000000,  1.0000000,
928     2.5198421,  4.3267487,
929     6.3496042,
930 };
931
932 /*
933  * bits  0:3, 4:7  index into _vals array
934  */
935 static const uint16_t codebook_vector4_idx[] = {
936     0x0000, 0x0010, 0x0020, 0x0030, 0x0040, 0x0050, 0x0060, 0x0070, 0x0080,
937     0x0001, 0x0011, 0x0021, 0x0031, 0x0041, 0x0051, 0x0061, 0x0071, 0x0081,
938     0x0002, 0x0012, 0x0022, 0x0032, 0x0042, 0x0052, 0x0062, 0x0072, 0x0082,
939     0x0003, 0x0013, 0x0023, 0x0033, 0x0043, 0x0053, 0x0063, 0x0073, 0x0083,
940     0x0004, 0x0014, 0x0024, 0x0034, 0x0044, 0x0054, 0x0064, 0x0074, 0x0084,
941     0x0005, 0x0015, 0x0025, 0x0035, 0x0045, 0x0055, 0x0065, 0x0075, 0x0085,
942     0x0006, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0076, 0x0086,
943     0x0007, 0x0017, 0x0027, 0x0037, 0x0047, 0x0057, 0x0067, 0x0077, 0x0087,
944     0x0008, 0x0018, 0x0028, 0x0038, 0x0048, 0x0058, 0x0068, 0x0078, 0x0088,
945 };
946
947 /*
948  * bits  0:3, 4:7  index into _vals array
949  *       8:11      number of non-zero values
950  *      12:15      1: only second value non-zero
951  *                 0: other cases
952  */
953 static const uint16_t codebook_vector6_idx[] = {
954     0x0000, 0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0160, 0x0170,
955     0x1101, 0x0211, 0x0221, 0x0231, 0x0241, 0x0251, 0x0261, 0x0271,
956     0x1102, 0x0212, 0x0222, 0x0232, 0x0242, 0x0252, 0x0262, 0x0272,
957     0x1103, 0x0213, 0x0223, 0x0233, 0x0243, 0x0253, 0x0263, 0x0273,
958     0x1104, 0x0214, 0x0224, 0x0234, 0x0244, 0x0254, 0x0264, 0x0274,
959     0x1105, 0x0215, 0x0225, 0x0235, 0x0245, 0x0255, 0x0265, 0x0275,
960     0x1106, 0x0216, 0x0226, 0x0236, 0x0246, 0x0256, 0x0266, 0x0276,
961     0x1107, 0x0217, 0x0227, 0x0237, 0x0247, 0x0257, 0x0267, 0x0277,
962 };
963
964 /*
965  * bits  0:3, 4:7  index into _vals array
966  *       8:11      number of non-zero values
967  *      12:15      1: only second value non-zero
968  *                 0: other cases
969  */
970 static const uint16_t codebook_vector8_idx[] = {
971   0x0000, 0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0160,
972   0x0170, 0x0180, 0x0190, 0x01a0, 0x01b0, 0x01c0,
973   0x1101, 0x0211, 0x0221, 0x0231, 0x0241, 0x0251, 0x0261,
974   0x0271, 0x0281, 0x0291, 0x02a1, 0x02b1, 0x02c1,
975   0x1102, 0x0212, 0x0222, 0x0232, 0x0242, 0x0252, 0x0262,
976   0x0272, 0x0282, 0x0292, 0x02a2, 0x02b2, 0x02c2,
977   0x1103, 0x0213, 0x0223, 0x0233, 0x0243, 0x0253, 0x0263,
978   0x0273, 0x0283, 0x0293, 0x02a3, 0x02b3, 0x02c3,
979   0x1104, 0x0214, 0x0224, 0x0234, 0x0244, 0x0254, 0x0264,
980   0x0274, 0x0284, 0x0294, 0x02a4, 0x02b4, 0x02c4,
981   0x1105, 0x0215, 0x0225, 0x0235, 0x0245, 0x0255, 0x0265,
982   0x0275, 0x0285, 0x0295, 0x02a5, 0x02b5, 0x02c5,
983   0x1106, 0x0216, 0x0226, 0x0236, 0x0246, 0x0256, 0x0266,
984   0x0276, 0x0286, 0x0296, 0x02a6, 0x02b6, 0x02c6,
985   0x1107, 0x0217, 0x0227, 0x0237, 0x0247, 0x0257, 0x0267,
986   0x0277, 0x0287, 0x0297, 0x02a7, 0x02b7, 0x02c7,
987   0x1108, 0x0218, 0x0228, 0x0238, 0x0248, 0x0258, 0x0268,
988   0x0278, 0x0288, 0x0298, 0x02a8, 0x02b8, 0x02c8,
989   0x1109, 0x0219, 0x0229, 0x0239, 0x0249, 0x0259, 0x0269,
990   0x0279, 0x0289, 0x0299, 0x02a9, 0x02b9, 0x02c9,
991   0x110a, 0x021a, 0x022a, 0x023a, 0x024a, 0x025a, 0x026a,
992   0x027a, 0x028a, 0x029a, 0x02aa, 0x02ba, 0x02ca,
993   0x110b, 0x021b, 0x022b, 0x023b, 0x024b, 0x025b, 0x026b,
994   0x027b, 0x028b, 0x029b, 0x02ab, 0x02bb, 0x02cb,
995   0x110c, 0x021c, 0x022c, 0x023c, 0x024c, 0x025c, 0x026c,
996   0x027c, 0x028c, 0x029c, 0x02ac, 0x02bc, 0x02cc,
997 };
998
999 static const float codebook_vector10_vals[] = {
1000      0.0000000,  1.0000000,
1001      2.5198421,  4.3267487,
1002      6.3496042,  8.5498797,
1003     10.9027236, 13.3905183,
1004     16.0000000, 18.7207544,
1005     21.5443469, 24.4637810,
1006     27.4731418, 30.5673509,
1007     33.7419917, 36.9931811,
1008 };
1009
1010 /*
1011  * bits  0:3, 4:7  index into _vals array
1012  *       8:9       bit mask of escape-coded entries
1013  *      12:15      number of non-zero values
1014  */
1015 static const uint16_t codebook_vector10_idx[] = {
1016     0x0000, 0x1010, 0x1020, 0x1030, 0x1040, 0x1050, 0x1060, 0x1070,
1017     0x1080, 0x1090, 0x10a0, 0x10b0, 0x10c0, 0x10d0, 0x10e0, 0x10f0, 0x1200,
1018     0x1001, 0x2011, 0x2021, 0x2031, 0x2041, 0x2051, 0x2061, 0x2071,
1019     0x2081, 0x2091, 0x20a1, 0x20b1, 0x20c1, 0x20d1, 0x20e1, 0x20f1, 0x2201,
1020     0x1002, 0x2012, 0x2022, 0x2032, 0x2042, 0x2052, 0x2062, 0x2072,
1021     0x2082, 0x2092, 0x20a2, 0x20b2, 0x20c2, 0x20d2, 0x20e2, 0x20f2, 0x2202,
1022     0x1003, 0x2013, 0x2023, 0x2033, 0x2043, 0x2053, 0x2063, 0x2073,
1023     0x2083, 0x2093, 0x20a3, 0x20b3, 0x20c3, 0x20d3, 0x20e3, 0x20f3, 0x2203,
1024     0x1004, 0x2014, 0x2024, 0x2034, 0x2044, 0x2054, 0x2064, 0x2074,
1025     0x2084, 0x2094, 0x20a4, 0x20b4, 0x20c4, 0x20d4, 0x20e4, 0x20f4, 0x2204,
1026     0x1005, 0x2015, 0x2025, 0x2035, 0x2045, 0x2055, 0x2065, 0x2075,
1027     0x2085, 0x2095, 0x20a5, 0x20b5, 0x20c5, 0x20d5, 0x20e5, 0x20f5, 0x2205,
1028     0x1006, 0x2016, 0x2026, 0x2036, 0x2046, 0x2056, 0x2066, 0x2076,
1029     0x2086, 0x2096, 0x20a6, 0x20b6, 0x20c6, 0x20d6, 0x20e6, 0x20f6, 0x2206,
1030     0x1007, 0x2017, 0x2027, 0x2037, 0x2047, 0x2057, 0x2067, 0x2077,
1031     0x2087, 0x2097, 0x20a7, 0x20b7, 0x20c7, 0x20d7, 0x20e7, 0x20f7, 0x2207,
1032     0x1008, 0x2018, 0x2028, 0x2038, 0x2048, 0x2058, 0x2068, 0x2078,
1033     0x2088, 0x2098, 0x20a8, 0x20b8, 0x20c8, 0x20d8, 0x20e8, 0x20f8, 0x2208,
1034     0x1009, 0x2019, 0x2029, 0x2039, 0x2049, 0x2059, 0x2069, 0x2079,
1035     0x2089, 0x2099, 0x20a9, 0x20b9, 0x20c9, 0x20d9, 0x20e9, 0x20f9, 0x2209,
1036     0x100a, 0x201a, 0x202a, 0x203a, 0x204a, 0x205a, 0x206a, 0x207a,
1037     0x208a, 0x209a, 0x20aa, 0x20ba, 0x20ca, 0x20da, 0x20ea, 0x20fa, 0x220a,
1038     0x100b, 0x201b, 0x202b, 0x203b, 0x204b, 0x205b, 0x206b, 0x207b,
1039     0x208b, 0x209b, 0x20ab, 0x20bb, 0x20cb, 0x20db, 0x20eb, 0x20fb, 0x220b,
1040     0x100c, 0x201c, 0x202c, 0x203c, 0x204c, 0x205c, 0x206c, 0x207c,
1041     0x208c, 0x209c, 0x20ac, 0x20bc, 0x20cc, 0x20dc, 0x20ec, 0x20fc, 0x220c,
1042     0x100d, 0x201d, 0x202d, 0x203d, 0x204d, 0x205d, 0x206d, 0x207d,
1043     0x208d, 0x209d, 0x20ad, 0x20bd, 0x20cd, 0x20dd, 0x20ed, 0x20fd, 0x220d,
1044     0x100e, 0x201e, 0x202e, 0x203e, 0x204e, 0x205e, 0x206e, 0x207e,
1045     0x208e, 0x209e, 0x20ae, 0x20be, 0x20ce, 0x20de, 0x20ee, 0x20fe, 0x220e,
1046     0x100f, 0x201f, 0x202f, 0x203f, 0x204f, 0x205f, 0x206f, 0x207f,
1047     0x208f, 0x209f, 0x20af, 0x20bf, 0x20cf, 0x20df, 0x20ef, 0x20ff, 0x220f,
1048     0x1100, 0x2110, 0x2120, 0x2130, 0x2140, 0x2150, 0x2160, 0x2170,
1049     0x2180, 0x2190, 0x21a0, 0x21b0, 0x21c0, 0x21d0, 0x21e0, 0x21f0, 0x2300,
1050 };
1051
1052 const float *const ff_aac_codebook_vector_vals[] = {
1053     codebook_vector0_vals,  codebook_vector0_vals,
1054     codebook_vector10_vals, codebook_vector10_vals,
1055     codebook_vector4_vals,  codebook_vector4_vals,
1056     codebook_vector10_vals, codebook_vector10_vals,
1057     codebook_vector10_vals, codebook_vector10_vals,
1058     codebook_vector10_vals,
1059 };
1060
1061 const uint16_t *const ff_aac_codebook_vector_idx[] = {
1062     codebook_vector02_idx, codebook_vector02_idx,
1063     codebook_vector02_idx, codebook_vector02_idx,
1064     codebook_vector4_idx,  codebook_vector4_idx,
1065     codebook_vector6_idx,  codebook_vector6_idx,
1066     codebook_vector8_idx,  codebook_vector8_idx,
1067     codebook_vector10_idx,
1068 };
1069
1070 /* @name swb_offsets
1071  * Sample offset into the window indicating the beginning of a scalefactor
1072  * window band
1073  *
1074  * scalefactor window band - term for scalefactor bands within a window,
1075  * given in Table 4.110 to Table 4.128.
1076  *
1077  * scalefactor band - a set of spectral coefficients which are scaled by one
1078  * scalefactor. In case of EIGHT_SHORT_SEQUENCE and grouping a scalefactor band
1079  * may contain several scalefactor window bands of corresponding frequency. For
1080  * all other window_sequences scalefactor bands and scalefactor window bands are
1081  * identical.
1082  * @{
1083  */
1084
1085 static const uint16_t swb_offset_1024_96[] = {
1086       0,   4,   8,  12,  16,  20,  24,  28,
1087      32,  36,  40,  44,  48,  52,  56,  64,
1088      72,  80,  88,  96, 108, 120, 132, 144,
1089     156, 172, 188, 212, 240, 276, 320, 384,
1090     448, 512, 576, 640, 704, 768, 832, 896,
1091     960, 1024
1092 };
1093
1094 static const uint16_t swb_offset_128_96[] = {
1095     0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128
1096 };
1097
1098 static const uint16_t swb_offset_1024_64[] = {
1099       0,   4,   8,  12,  16,  20,  24,  28,
1100      32,  36,  40,  44,  48,  52,  56,  64,
1101      72,  80,  88, 100, 112, 124, 140, 156,
1102     172, 192, 216, 240, 268, 304, 344, 384,
1103     424, 464, 504, 544, 584, 624, 664, 704,
1104     744, 784, 824, 864, 904, 944, 984, 1024
1105 };
1106
1107 static const uint16_t swb_offset_1024_48[] = {
1108       0,   4,   8,  12,  16,  20,  24,  28,
1109      32,  36,  40,  48,  56,  64,  72,  80,
1110      88,  96, 108, 120, 132, 144, 160, 176,
1111     196, 216, 240, 264, 292, 320, 352, 384,
1112     416, 448, 480, 512, 544, 576, 608, 640,
1113     672, 704, 736, 768, 800, 832, 864, 896,
1114     928, 1024
1115 };
1116
1117 static const uint16_t swb_offset_128_48[] = {
1118      0,   4,   8,  12,  16,  20,  28,  36,
1119     44,  56,  68,  80,  96, 112, 128
1120 };
1121
1122 static const uint16_t swb_offset_1024_32[] = {
1123       0,   4,   8,  12,  16,  20,  24,  28,
1124      32,  36,  40,  48,  56,  64,  72,  80,
1125      88,  96, 108, 120, 132, 144, 160, 176,
1126     196, 216, 240, 264, 292, 320, 352, 384,
1127     416, 448, 480, 512, 544, 576, 608, 640,
1128     672, 704, 736, 768, 800, 832, 864, 896,
1129     928, 960, 992, 1024
1130 };
1131
1132 static const uint16_t swb_offset_1024_24[] = {
1133       0,   4,   8,  12,  16,  20,  24,  28,
1134      32,  36,  40,  44,  52,  60,  68,  76,
1135      84,  92, 100, 108, 116, 124, 136, 148,
1136     160, 172, 188, 204, 220, 240, 260, 284,
1137     308, 336, 364, 396, 432, 468, 508, 552,
1138     600, 652, 704, 768, 832, 896, 960, 1024
1139 };
1140
1141 static const uint16_t swb_offset_128_24[] = {
1142      0,   4,   8,  12,  16,  20,  24,  28,
1143     36,  44,  52,  64,  76,  92, 108, 128
1144 };
1145
1146 static const uint16_t swb_offset_1024_16[] = {
1147       0,   8,  16,  24,  32,  40,  48,  56,
1148      64,  72,  80,  88, 100, 112, 124, 136,
1149     148, 160, 172, 184, 196, 212, 228, 244,
1150     260, 280, 300, 320, 344, 368, 396, 424,
1151     456, 492, 532, 572, 616, 664, 716, 772,
1152     832, 896, 960, 1024
1153 };
1154
1155 static const uint16_t swb_offset_128_16[] = {
1156      0,   4,   8,  12,  16,  20,  24,  28,
1157     32,  40,  48,  60,  72,  88, 108, 128
1158 };
1159
1160 static const uint16_t swb_offset_1024_8[] = {
1161       0,  12,  24,  36,  48,  60,  72,  84,
1162      96, 108, 120, 132, 144, 156, 172, 188,
1163     204, 220, 236, 252, 268, 288, 308, 328,
1164     348, 372, 396, 420, 448, 476, 508, 544,
1165     580, 620, 664, 712, 764, 820, 880, 944,
1166     1024
1167 };
1168
1169 static const uint16_t swb_offset_128_8[] = {
1170      0,   4,   8,  12,  16,  20,  24,  28,
1171     36,  44,  52,  60,  72,  88, 108, 128
1172 };
1173
1174 const uint16_t * const ff_swb_offset_1024[] = {
1175     swb_offset_1024_96, swb_offset_1024_96, swb_offset_1024_64,
1176     swb_offset_1024_48, swb_offset_1024_48, swb_offset_1024_32,
1177     swb_offset_1024_24, swb_offset_1024_24, swb_offset_1024_16,
1178     swb_offset_1024_16, swb_offset_1024_16, swb_offset_1024_8,
1179     swb_offset_1024_8
1180 };
1181
1182 const uint16_t * const ff_swb_offset_128[] = {
1183     /* The last entry on the following row is swb_offset_128_64 but is a
1184        duplicate of swb_offset_128_96. */
1185     swb_offset_128_96, swb_offset_128_96, swb_offset_128_96,
1186     swb_offset_128_48, swb_offset_128_48, swb_offset_128_48,
1187     swb_offset_128_24, swb_offset_128_24, swb_offset_128_16,
1188     swb_offset_128_16, swb_offset_128_16, swb_offset_128_8,
1189     swb_offset_128_8
1190 };
1191
1192 // @}
1193
1194 /* @name ff_tns_max_bands
1195  * The maximum number of scalefactor bands on which TNS can operate for the long
1196  * and short transforms respectively. The index to these tables is related to
1197  * the sample rate of the audio.
1198  * @{
1199  */
1200 const uint8_t ff_tns_max_bands_1024[] = {
1201     31, 31, 34, 40, 42, 51, 46, 46, 42, 42, 42, 39, 39
1202 };
1203
1204 const uint8_t ff_tns_max_bands_128[] = {
1205     9, 9, 10, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14
1206 };
1207 // @}