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
36DECLARE_ALIGNED(16, float,  ff_aac_kbd_long_1024)[1024];
37DECLARE_ALIGNED(16, float,  ff_aac_kbd_short_128)[128];
38
39const uint8_t ff_aac_num_swb_1024[] = {
40    41, 41, 47, 49, 49, 51, 47, 47, 43, 43, 43, 40, 40
41};
42
43const uint8_t ff_aac_num_swb_128[] = {
44    12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15
45};
46
47const uint8_t ff_aac_pred_sfb_max[] = {
48    33, 33, 38, 40, 40, 40, 41, 41, 37, 37, 37, 34, 34
49};
50
51const 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
70const 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
81static 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
95static 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
104static 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
118static 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
127static 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
141static 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
150static 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
164static 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
173static 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
187static 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
196static 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
210static 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
219static 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
230static 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
237static 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
248static 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
255static 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
280static 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
294static 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
319static 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
333static 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
373static 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
395const uint16_t * const ff_aac_spectral_codes[11] = {
396    codes1,  codes2,  codes3, codes4, codes5, codes6, codes7, codes8,
397    codes9, codes10, codes11,
398};
399
400const uint8_t * const ff_aac_spectral_bits[11] = {
401    bits1,  bits2,  bits3, bits4, bits5, bits6, bits7, bits8,
402    bits9, bits10, bits11,
403};
404
405const 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 */
413static 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
497static 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
581static 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
625static 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
660static 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
748static 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
896const 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
903static 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 */
912static 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
924static 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 */
935static 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 */
953static 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 */
970static 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
999static 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 */
1015static 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
1052const 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
1061const 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
1085static 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
1094static const uint16_t swb_offset_128_96[] = {
1095    0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 92, 128
1096};
1097
1098static 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
1107static 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
1117static 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
1122static 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
1132static 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
1141static 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
1146static 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
1155static 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
1160static 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
1169static 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
1174const 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
1182const 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 */
1200const uint8_t ff_tns_max_bands_1024[] = {
1201    31, 31, 34, 40, 42, 51, 46, 46, 42, 42, 42, 39, 39
1202};
1203
1204const uint8_t ff_tns_max_bands_128[] = {
1205    9, 9, 10, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14
1206};
1207// @}
1208