c11c63326e3dc5c045d5ced8c8d016d7169972be
[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 FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 /**
24  * @file aactab.c
25  * AAC data
26  * @author Oded Shimon  ( ods15 ods15 dyndns org )
27  * @author Maxim Gavrilov ( maxim.gavrilov gmail com )
28  */
29
30 #include "aac.h"
31
32 #include <stdint.h>
33
34 const uint32_t ff_aac_scalefactor_code[121] = {
35     0x3ffe8, 0x3ffe6, 0x3ffe7, 0x3ffe5, 0x7fff5, 0x7fff1, 0x7ffed, 0x7fff6,
36     0x7ffee, 0x7ffef, 0x7fff0, 0x7fffc, 0x7fffd, 0x7ffff, 0x7fffe, 0x7fff7,
37     0x7fff8, 0x7fffb, 0x7fff9, 0x3ffe4, 0x7fffa, 0x3ffe3, 0x1ffef, 0x1fff0,
38     0x0fff5, 0x1ffee, 0x0fff2, 0x0fff3, 0x0fff4, 0x0fff1, 0x07ff6, 0x07ff7,
39     0x03ff9, 0x03ff5, 0x03ff7, 0x03ff3, 0x03ff6, 0x03ff2, 0x01ff7, 0x01ff5,
40     0x00ff9, 0x00ff7, 0x00ff6, 0x007f9, 0x00ff4, 0x007f8, 0x003f9, 0x003f7,
41     0x003f5, 0x001f8, 0x001f7, 0x000fa, 0x000f8, 0x000f6, 0x00079, 0x0003a,
42     0x00038, 0x0001a, 0x0000b, 0x00004, 0x00000, 0x0000a, 0x0000c, 0x0001b,
43     0x00039, 0x0003b, 0x00078, 0x0007a, 0x000f7, 0x000f9, 0x001f6, 0x001f9,
44     0x003f4, 0x003f6, 0x003f8, 0x007f5, 0x007f4, 0x007f6, 0x007f7, 0x00ff5,
45     0x00ff8, 0x01ff4, 0x01ff6, 0x01ff8, 0x03ff8, 0x03ff4, 0x0fff0, 0x07ff4,
46     0x0fff6, 0x07ff5, 0x3ffe2, 0x7ffd9, 0x7ffda, 0x7ffdb, 0x7ffdc, 0x7ffdd,
47     0x7ffde, 0x7ffd8, 0x7ffd2, 0x7ffd3, 0x7ffd4, 0x7ffd5, 0x7ffd6, 0x7fff2,
48     0x7ffdf, 0x7ffe7, 0x7ffe8, 0x7ffe9, 0x7ffea, 0x7ffeb, 0x7ffe6, 0x7ffe0,
49     0x7ffe1, 0x7ffe2, 0x7ffe3, 0x7ffe4, 0x7ffe5, 0x7ffd7, 0x7ffec, 0x7fff4,
50     0x7fff3,
51 };
52
53 const uint8_t ff_aac_scalefactor_bits[121] = {
54     18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
55     19, 19, 19, 18, 19, 18, 17, 17, 16, 17, 16, 16, 16, 16, 15, 15,
56     14, 14, 14, 14, 14, 14, 13, 13, 12, 12, 12, 11, 12, 11, 10, 10,
57     10,  9,  9,  8,  8,  8,  7,  6,  6,  5,  4,  3,  1,  4,  4,  5,
58      6,  6,  7,  7,  8,  8,  9,  9, 10, 10, 10, 11, 11, 11, 11, 12,
59     12, 13, 13, 13, 14, 14, 16, 15, 16, 15, 18, 19, 19, 19, 19, 19,
60     19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
61     19, 19, 19, 19, 19, 19, 19, 19, 19,
62 };
63
64 static const uint16_t codes1[81] = {
65     0x7f8, 0x1f1, 0x7fd, 0x3f5, 0x068, 0x3f0, 0x7f7, 0x1ec,
66     0x7f5, 0x3f1, 0x072, 0x3f4, 0x074, 0x011, 0x076, 0x1eb,
67     0x06c, 0x3f6, 0x7fc, 0x1e1, 0x7f1, 0x1f0, 0x061, 0x1f6,
68     0x7f2, 0x1ea, 0x7fb, 0x1f2, 0x069, 0x1ed, 0x077, 0x017,
69     0x06f, 0x1e6, 0x064, 0x1e5, 0x067, 0x015, 0x062, 0x012,
70     0x000, 0x014, 0x065, 0x016, 0x06d, 0x1e9, 0x063, 0x1e4,
71     0x06b, 0x013, 0x071, 0x1e3, 0x070, 0x1f3, 0x7fe, 0x1e7,
72     0x7f3, 0x1ef, 0x060, 0x1ee, 0x7f0, 0x1e2, 0x7fa, 0x3f3,
73     0x06a, 0x1e8, 0x075, 0x010, 0x073, 0x1f4, 0x06e, 0x3f7,
74     0x7f6, 0x1e0, 0x7f9, 0x3f2, 0x066, 0x1f5, 0x7ff, 0x1f7,
75     0x7f4,
76 };
77
78 static const uint8_t bits1[81] = {
79     11,  9, 11, 10,  7, 10, 11,  9, 11, 10,  7, 10,  7,  5,  7,  9,
80      7, 10, 11,  9, 11,  9,  7,  9, 11,  9, 11,  9,  7,  9,  7,  5,
81      7,  9,  7,  9,  7,  5,  7,  5,  1,  5,  7,  5,  7,  9,  7,  9,
82      7,  5,  7,  9,  7,  9, 11,  9, 11,  9,  7,  9, 11,  9, 11, 10,
83      7,  9,  7,  5,  7,  9,  7, 10, 11,  9, 11, 10,  7,  9, 11,  9,
84     11,
85 };
86
87 static const uint16_t codes2[81] = {
88     0x1f3, 0x06f, 0x1fd, 0x0eb, 0x023, 0x0ea, 0x1f7, 0x0e8,
89     0x1fa, 0x0f2, 0x02d, 0x070, 0x020, 0x006, 0x02b, 0x06e,
90     0x028, 0x0e9, 0x1f9, 0x066, 0x0f8, 0x0e7, 0x01b, 0x0f1,
91     0x1f4, 0x06b, 0x1f5, 0x0ec, 0x02a, 0x06c, 0x02c, 0x00a,
92     0x027, 0x067, 0x01a, 0x0f5, 0x024, 0x008, 0x01f, 0x009,
93     0x000, 0x007, 0x01d, 0x00b, 0x030, 0x0ef, 0x01c, 0x064,
94     0x01e, 0x00c, 0x029, 0x0f3, 0x02f, 0x0f0, 0x1fc, 0x071,
95     0x1f2, 0x0f4, 0x021, 0x0e6, 0x0f7, 0x068, 0x1f8, 0x0ee,
96     0x022, 0x065, 0x031, 0x002, 0x026, 0x0ed, 0x025, 0x06a,
97     0x1fb, 0x072, 0x1fe, 0x069, 0x02e, 0x0f6, 0x1ff, 0x06d,
98     0x1f6,
99 };
100
101 static const uint8_t bits2[81] = {
102     9, 7, 9, 8, 6, 8, 9, 8, 9, 8, 6, 7, 6, 5, 6, 7,
103     6, 8, 9, 7, 8, 8, 6, 8, 9, 7, 9, 8, 6, 7, 6, 5,
104     6, 7, 6, 8, 6, 5, 6, 5, 3, 5, 6, 5, 6, 8, 6, 7,
105     6, 5, 6, 8, 6, 8, 9, 7, 9, 8, 6, 8, 8, 7, 9, 8,
106     6, 7, 6, 4, 6, 8, 6, 7, 9, 7, 9, 7, 6, 8, 9, 7,
107     9,
108 };
109
110 static const uint16_t codes3[81] = {
111     0x0000, 0x0009, 0x00ef, 0x000b, 0x0019, 0x00f0, 0x01eb, 0x01e6,
112     0x03f2, 0x000a, 0x0035, 0x01ef, 0x0034, 0x0037, 0x01e9, 0x01ed,
113     0x01e7, 0x03f3, 0x01ee, 0x03ed, 0x1ffa, 0x01ec, 0x01f2, 0x07f9,
114     0x07f8, 0x03f8, 0x0ff8, 0x0008, 0x0038, 0x03f6, 0x0036, 0x0075,
115     0x03f1, 0x03eb, 0x03ec, 0x0ff4, 0x0018, 0x0076, 0x07f4, 0x0039,
116     0x0074, 0x03ef, 0x01f3, 0x01f4, 0x07f6, 0x01e8, 0x03ea, 0x1ffc,
117     0x00f2, 0x01f1, 0x0ffb, 0x03f5, 0x07f3, 0x0ffc, 0x00ee, 0x03f7,
118     0x7ffe, 0x01f0, 0x07f5, 0x7ffd, 0x1ffb, 0x3ffa, 0xffff, 0x00f1,
119     0x03f0, 0x3ffc, 0x01ea, 0x03ee, 0x3ffb, 0x0ff6, 0x0ffa, 0x7ffc,
120     0x07f2, 0x0ff5, 0xfffe, 0x03f4, 0x07f7, 0x7ffb, 0x0ff7, 0x0ff9,
121     0x7ffa,
122 };
123
124 static const uint8_t bits3[81] = {
125      1,  4,  8,  4,  5,  8,  9,  9, 10,  4,  6,  9,  6,  6,  9,  9,
126      9, 10,  9, 10, 13,  9,  9, 11, 11, 10, 12,  4,  6, 10,  6,  7,
127     10, 10, 10, 12,  5,  7, 11,  6,  7, 10,  9,  9, 11,  9, 10, 13,
128      8,  9, 12, 10, 11, 12,  8, 10, 15,  9, 11, 15, 13, 14, 16,  8,
129     10, 14,  9, 10, 14, 12, 12, 15, 11, 12, 16, 10, 11, 15, 12, 12,
130     15,
131 };
132
133 static const uint16_t codes4[81] = {
134     0x007, 0x016, 0x0f6, 0x018, 0x008, 0x0ef, 0x1ef, 0x0f3,
135     0x7f8, 0x019, 0x017, 0x0ed, 0x015, 0x001, 0x0e2, 0x0f0,
136     0x070, 0x3f0, 0x1ee, 0x0f1, 0x7fa, 0x0ee, 0x0e4, 0x3f2,
137     0x7f6, 0x3ef, 0x7fd, 0x005, 0x014, 0x0f2, 0x009, 0x004,
138     0x0e5, 0x0f4, 0x0e8, 0x3f4, 0x006, 0x002, 0x0e7, 0x003,
139     0x000, 0x06b, 0x0e3, 0x069, 0x1f3, 0x0eb, 0x0e6, 0x3f6,
140     0x06e, 0x06a, 0x1f4, 0x3ec, 0x1f0, 0x3f9, 0x0f5, 0x0ec,
141     0x7fb, 0x0ea, 0x06f, 0x3f7, 0x7f9, 0x3f3, 0xfff, 0x0e9,
142     0x06d, 0x3f8, 0x06c, 0x068, 0x1f5, 0x3ee, 0x1f2, 0x7f4,
143     0x7f7, 0x3f1, 0xffe, 0x3ed, 0x1f1, 0x7f5, 0x7fe, 0x3f5,
144     0x7fc,
145 };
146
147 static const uint8_t bits4[81] = {
148      4,  5,  8,  5,  4,  8,  9,  8, 11,  5,  5,  8,  5,  4,  8,  8,
149      7, 10,  9,  8, 11,  8,  8, 10, 11, 10, 11,  4,  5,  8,  4,  4,
150      8,  8,  8, 10,  4,  4,  8,  4,  4,  7,  8,  7,  9,  8,  8, 10,
151      7,  7,  9, 10,  9, 10,  8,  8, 11,  8,  7, 10, 11, 10, 12,  8,
152      7, 10,  7,  7,  9, 10,  9, 11, 11, 10, 12, 10,  9, 11, 11, 10,
153     11,
154 };
155
156 static const uint16_t codes5[81] = {
157     0x1fff, 0x0ff7, 0x07f4, 0x07e8, 0x03f1, 0x07ee, 0x07f9, 0x0ff8,
158     0x1ffd, 0x0ffd, 0x07f1, 0x03e8, 0x01e8, 0x00f0, 0x01ec, 0x03ee,
159     0x07f2, 0x0ffa, 0x0ff4, 0x03ef, 0x01f2, 0x00e8, 0x0070, 0x00ec,
160     0x01f0, 0x03ea, 0x07f3, 0x07eb, 0x01eb, 0x00ea, 0x001a, 0x0008,
161     0x0019, 0x00ee, 0x01ef, 0x07ed, 0x03f0, 0x00f2, 0x0073, 0x000b,
162     0x0000, 0x000a, 0x0071, 0x00f3, 0x07e9, 0x07ef, 0x01ee, 0x00ef,
163     0x0018, 0x0009, 0x001b, 0x00eb, 0x01e9, 0x07ec, 0x07f6, 0x03eb,
164     0x01f3, 0x00ed, 0x0072, 0x00e9, 0x01f1, 0x03ed, 0x07f7, 0x0ff6,
165     0x07f0, 0x03e9, 0x01ed, 0x00f1, 0x01ea, 0x03ec, 0x07f8, 0x0ff9,
166     0x1ffc, 0x0ffc, 0x0ff5, 0x07ea, 0x03f3, 0x03f2, 0x07f5, 0x0ffb,
167     0x1ffe,
168 };
169
170 static const uint8_t bits5[81] = {
171     13, 12, 11, 11, 10, 11, 11, 12, 13, 12, 11, 10,  9,  8,  9, 10,
172     11, 12, 12, 10,  9,  8,  7,  8,  9, 10, 11, 11,  9,  8,  5,  4,
173      5,  8,  9, 11, 10,  8,  7,  4,  1,  4,  7,  8, 11, 11,  9,  8,
174      5,  4,  5,  8,  9, 11, 11, 10,  9,  8,  7,  8,  9, 10, 11, 12,
175     11, 10,  9,  8,  9, 10, 11, 12, 13, 12, 12, 11, 10, 10, 11, 12,
176     13,
177 };
178
179 static const uint16_t codes6[81] = {
180     0x7fe, 0x3fd, 0x1f1, 0x1eb, 0x1f4, 0x1ea, 0x1f0, 0x3fc,
181     0x7fd, 0x3f6, 0x1e5, 0x0ea, 0x06c, 0x071, 0x068, 0x0f0,
182     0x1e6, 0x3f7, 0x1f3, 0x0ef, 0x032, 0x027, 0x028, 0x026,
183     0x031, 0x0eb, 0x1f7, 0x1e8, 0x06f, 0x02e, 0x008, 0x004,
184     0x006, 0x029, 0x06b, 0x1ee, 0x1ef, 0x072, 0x02d, 0x002,
185     0x000, 0x003, 0x02f, 0x073, 0x1fa, 0x1e7, 0x06e, 0x02b,
186     0x007, 0x001, 0x005, 0x02c, 0x06d, 0x1ec, 0x1f9, 0x0ee,
187     0x030, 0x024, 0x02a, 0x025, 0x033, 0x0ec, 0x1f2, 0x3f8,
188     0x1e4, 0x0ed, 0x06a, 0x070, 0x069, 0x074, 0x0f1, 0x3fa,
189     0x7ff, 0x3f9, 0x1f6, 0x1ed, 0x1f8, 0x1e9, 0x1f5, 0x3fb,
190     0x7fc,
191 };
192
193 static const uint8_t bits6[81] = {
194     11, 10,  9,  9,  9,  9,  9, 10, 11, 10,  9,  8,  7,  7,  7,  8,
195      9, 10,  9,  8,  6,  6,  6,  6,  6,  8,  9,  9,  7,  6,  4,  4,
196      4,  6,  7,  9,  9,  7,  6,  4,  4,  4,  6,  7,  9,  9,  7,  6,
197      4,  4,  4,  6,  7,  9,  9,  8,  6,  6,  6,  6,  6,  8,  9, 10,
198      9,  8,  7,  7,  7,  7,  8, 10, 11, 10,  9,  9,  9,  9,  9, 10,
199     11,
200 };
201
202 static const uint16_t codes7[64] = {
203     0x000, 0x005, 0x037, 0x074, 0x0f2, 0x1eb, 0x3ed, 0x7f7,
204     0x004, 0x00c, 0x035, 0x071, 0x0ec, 0x0ee, 0x1ee, 0x1f5,
205     0x036, 0x034, 0x072, 0x0ea, 0x0f1, 0x1e9, 0x1f3, 0x3f5,
206     0x073, 0x070, 0x0eb, 0x0f0, 0x1f1, 0x1f0, 0x3ec, 0x3fa,
207     0x0f3, 0x0ed, 0x1e8, 0x1ef, 0x3ef, 0x3f1, 0x3f9, 0x7fb,
208     0x1ed, 0x0ef, 0x1ea, 0x1f2, 0x3f3, 0x3f8, 0x7f9, 0x7fc,
209     0x3ee, 0x1ec, 0x1f4, 0x3f4, 0x3f7, 0x7f8, 0xffd, 0xffe,
210     0x7f6, 0x3f0, 0x3f2, 0x3f6, 0x7fa, 0x7fd, 0xffc, 0xfff,
211 };
212
213 static const uint8_t bits7[64] = {
214      1,  3,  6,  7,  8,  9, 10, 11,  3,  4,  6,  7,  8,  8,  9,  9,
215      6,  6,  7,  8,  8,  9,  9, 10,  7,  7,  8,  8,  9,  9, 10, 10,
216      8,  8,  9,  9, 10, 10, 10, 11,  9,  8,  9,  9, 10, 10, 11, 11,
217     10,  9,  9, 10, 10, 11, 12, 12, 11, 10, 10, 10, 11, 11, 12, 12,
218 };
219
220 static const uint16_t codes8[64] = {
221     0x00e, 0x005, 0x010, 0x030, 0x06f, 0x0f1, 0x1fa, 0x3fe,
222     0x003, 0x000, 0x004, 0x012, 0x02c, 0x06a, 0x075, 0x0f8,
223     0x00f, 0x002, 0x006, 0x014, 0x02e, 0x069, 0x072, 0x0f5,
224     0x02f, 0x011, 0x013, 0x02a, 0x032, 0x06c, 0x0ec, 0x0fa,
225     0x071, 0x02b, 0x02d, 0x031, 0x06d, 0x070, 0x0f2, 0x1f9,
226     0x0ef, 0x068, 0x033, 0x06b, 0x06e, 0x0ee, 0x0f9, 0x3fc,
227     0x1f8, 0x074, 0x073, 0x0ed, 0x0f0, 0x0f6, 0x1f6, 0x1fd,
228     0x3fd, 0x0f3, 0x0f4, 0x0f7, 0x1f7, 0x1fb, 0x1fc, 0x3ff,
229 };
230
231 static const uint8_t bits8[64] = {
232      5,  4,  5,  6,  7,  8,  9, 10,  4,  3,  4,  5,  6,  7,  7,  8,
233      5,  4,  4,  5,  6,  7,  7,  8,  6,  5,  5,  6,  6,  7,  8,  8,
234      7,  6,  6,  6,  7,  7,  8,  9,  8,  7,  6,  7,  7,  8,  8, 10,
235      9,  7,  7,  8,  8,  8,  9,  9, 10,  8,  8,  8,  9,  9,  9, 10,
236 };
237
238 static const uint16_t codes9[169] = {
239     0x0000, 0x0005, 0x0037, 0x00e7, 0x01de, 0x03ce, 0x03d9, 0x07c8,
240     0x07cd, 0x0fc8, 0x0fdd, 0x1fe4, 0x1fec, 0x0004, 0x000c, 0x0035,
241     0x0072, 0x00ea, 0x00ed, 0x01e2, 0x03d1, 0x03d3, 0x03e0, 0x07d8,
242     0x0fcf, 0x0fd5, 0x0036, 0x0034, 0x0071, 0x00e8, 0x00ec, 0x01e1,
243     0x03cf, 0x03dd, 0x03db, 0x07d0, 0x0fc7, 0x0fd4, 0x0fe4, 0x00e6,
244     0x0070, 0x00e9, 0x01dd, 0x01e3, 0x03d2, 0x03dc, 0x07cc, 0x07ca,
245     0x07de, 0x0fd8, 0x0fea, 0x1fdb, 0x01df, 0x00eb, 0x01dc, 0x01e6,
246     0x03d5, 0x03de, 0x07cb, 0x07dd, 0x07dc, 0x0fcd, 0x0fe2, 0x0fe7,
247     0x1fe1, 0x03d0, 0x01e0, 0x01e4, 0x03d6, 0x07c5, 0x07d1, 0x07db,
248     0x0fd2, 0x07e0, 0x0fd9, 0x0feb, 0x1fe3, 0x1fe9, 0x07c4, 0x01e5,
249     0x03d7, 0x07c6, 0x07cf, 0x07da, 0x0fcb, 0x0fda, 0x0fe3, 0x0fe9,
250     0x1fe6, 0x1ff3, 0x1ff7, 0x07d3, 0x03d8, 0x03e1, 0x07d4, 0x07d9,
251     0x0fd3, 0x0fde, 0x1fdd, 0x1fd9, 0x1fe2, 0x1fea, 0x1ff1, 0x1ff6,
252     0x07d2, 0x03d4, 0x03da, 0x07c7, 0x07d7, 0x07e2, 0x0fce, 0x0fdb,
253     0x1fd8, 0x1fee, 0x3ff0, 0x1ff4, 0x3ff2, 0x07e1, 0x03df, 0x07c9,
254     0x07d6, 0x0fca, 0x0fd0, 0x0fe5, 0x0fe6, 0x1feb, 0x1fef, 0x3ff3,
255     0x3ff4, 0x3ff5, 0x0fe0, 0x07ce, 0x07d5, 0x0fc6, 0x0fd1, 0x0fe1,
256     0x1fe0, 0x1fe8, 0x1ff0, 0x3ff1, 0x3ff8, 0x3ff6, 0x7ffc, 0x0fe8,
257     0x07df, 0x0fc9, 0x0fd7, 0x0fdc, 0x1fdc, 0x1fdf, 0x1fed, 0x1ff5,
258     0x3ff9, 0x3ffb, 0x7ffd, 0x7ffe, 0x1fe7, 0x0fcc, 0x0fd6, 0x0fdf,
259     0x1fde, 0x1fda, 0x1fe5, 0x1ff2, 0x3ffa, 0x3ff7, 0x3ffc, 0x3ffd,
260     0x7fff,
261 };
262
263 static const uint8_t bits9[169] = {
264      1,  3,  6,  8,  9, 10, 10, 11, 11, 12, 12, 13, 13,  3,  4,  6,
265      7,  8,  8,  9, 10, 10, 10, 11, 12, 12,  6,  6,  7,  8,  8,  9,
266     10, 10, 10, 11, 12, 12, 12,  8,  7,  8,  9,  9, 10, 10, 11, 11,
267     11, 12, 12, 13,  9,  8,  9,  9, 10, 10, 11, 11, 11, 12, 12, 12,
268     13, 10,  9,  9, 10, 11, 11, 11, 12, 11, 12, 12, 13, 13, 11,  9,
269     10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 11, 10, 10, 11, 11,
270     12, 12, 13, 13, 13, 13, 13, 13, 11, 10, 10, 11, 11, 11, 12, 12,
271     13, 13, 14, 13, 14, 11, 10, 11, 11, 12, 12, 12, 12, 13, 13, 14,
272     14, 14, 12, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 12,
273     11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 15, 15, 13, 12, 12, 12,
274     13, 13, 13, 13, 14, 14, 14, 14, 15,
275 };
276
277 static const uint16_t codes10[169] = {
278     0x022, 0x008, 0x01d, 0x026, 0x05f, 0x0d3, 0x1cf, 0x3d0,
279     0x3d7, 0x3ed, 0x7f0, 0x7f6, 0xffd, 0x007, 0x000, 0x001,
280     0x009, 0x020, 0x054, 0x060, 0x0d5, 0x0dc, 0x1d4, 0x3cd,
281     0x3de, 0x7e7, 0x01c, 0x002, 0x006, 0x00c, 0x01e, 0x028,
282     0x05b, 0x0cd, 0x0d9, 0x1ce, 0x1dc, 0x3d9, 0x3f1, 0x025,
283     0x00b, 0x00a, 0x00d, 0x024, 0x057, 0x061, 0x0cc, 0x0dd,
284     0x1cc, 0x1de, 0x3d3, 0x3e7, 0x05d, 0x021, 0x01f, 0x023,
285     0x027, 0x059, 0x064, 0x0d8, 0x0df, 0x1d2, 0x1e2, 0x3dd,
286     0x3ee, 0x0d1, 0x055, 0x029, 0x056, 0x058, 0x062, 0x0ce,
287     0x0e0, 0x0e2, 0x1da, 0x3d4, 0x3e3, 0x7eb, 0x1c9, 0x05e,
288     0x05a, 0x05c, 0x063, 0x0ca, 0x0da, 0x1c7, 0x1ca, 0x1e0,
289     0x3db, 0x3e8, 0x7ec, 0x1e3, 0x0d2, 0x0cb, 0x0d0, 0x0d7,
290     0x0db, 0x1c6, 0x1d5, 0x1d8, 0x3ca, 0x3da, 0x7ea, 0x7f1,
291     0x1e1, 0x0d4, 0x0cf, 0x0d6, 0x0de, 0x0e1, 0x1d0, 0x1d6,
292     0x3d1, 0x3d5, 0x3f2, 0x7ee, 0x7fb, 0x3e9, 0x1cd, 0x1c8,
293     0x1cb, 0x1d1, 0x1d7, 0x1df, 0x3cf, 0x3e0, 0x3ef, 0x7e6,
294     0x7f8, 0xffa, 0x3eb, 0x1dd, 0x1d3, 0x1d9, 0x1db, 0x3d2,
295     0x3cc, 0x3dc, 0x3ea, 0x7ed, 0x7f3, 0x7f9, 0xff9, 0x7f2,
296     0x3ce, 0x1e4, 0x3cb, 0x3d8, 0x3d6, 0x3e2, 0x3e5, 0x7e8,
297     0x7f4, 0x7f5, 0x7f7, 0xffb, 0x7fa, 0x3ec, 0x3df, 0x3e1,
298     0x3e4, 0x3e6, 0x3f0, 0x7e9, 0x7ef, 0xff8, 0xffe, 0xffc,
299     0xfff,
300 };
301
302 static const uint8_t bits10[169] = {
303      6,  5,  6,  6,  7,  8,  9, 10, 10, 10, 11, 11, 12,  5,  4,  4,
304      5,  6,  7,  7,  8,  8,  9, 10, 10, 11,  6,  4,  5,  5,  6,  6,
305      7,  8,  8,  9,  9, 10, 10,  6,  5,  5,  5,  6,  7,  7,  8,  8,
306      9,  9, 10, 10,  7,  6,  6,  6,  6,  7,  7,  8,  8,  9,  9, 10,
307     10,  8,  7,  6,  7,  7,  7,  8,  8,  8,  9, 10, 10, 11,  9,  7,
308      7,  7,  7,  8,  8,  9,  9,  9, 10, 10, 11,  9,  8,  8,  8,  8,
309      8,  9,  9,  9, 10, 10, 11, 11,  9,  8,  8,  8,  8,  8,  9,  9,
310     10, 10, 10, 11, 11, 10,  9,  9,  9,  9,  9,  9, 10, 10, 10, 11,
311     11, 12, 10,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11, 12, 11,
312     10,  9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 11, 10, 10, 10,
313     10, 10, 10, 11, 11, 12, 12, 12, 12,
314 };
315
316 static const uint16_t codes11[289] = {
317     0x000, 0x006, 0x019, 0x03d, 0x09c, 0x0c6, 0x1a7, 0x390,
318     0x3c2, 0x3df, 0x7e6, 0x7f3, 0xffb, 0x7ec, 0xffa, 0xffe,
319     0x38e, 0x005, 0x001, 0x008, 0x014, 0x037, 0x042, 0x092,
320     0x0af, 0x191, 0x1a5, 0x1b5, 0x39e, 0x3c0, 0x3a2, 0x3cd,
321     0x7d6, 0x0ae, 0x017, 0x007, 0x009, 0x018, 0x039, 0x040,
322     0x08e, 0x0a3, 0x0b8, 0x199, 0x1ac, 0x1c1, 0x3b1, 0x396,
323     0x3be, 0x3ca, 0x09d, 0x03c, 0x015, 0x016, 0x01a, 0x03b,
324     0x044, 0x091, 0x0a5, 0x0be, 0x196, 0x1ae, 0x1b9, 0x3a1,
325     0x391, 0x3a5, 0x3d5, 0x094, 0x09a, 0x036, 0x038, 0x03a,
326     0x041, 0x08c, 0x09b, 0x0b0, 0x0c3, 0x19e, 0x1ab, 0x1bc,
327     0x39f, 0x38f, 0x3a9, 0x3cf, 0x093, 0x0bf, 0x03e, 0x03f,
328     0x043, 0x045, 0x09e, 0x0a7, 0x0b9, 0x194, 0x1a2, 0x1ba,
329     0x1c3, 0x3a6, 0x3a7, 0x3bb, 0x3d4, 0x09f, 0x1a0, 0x08f,
330     0x08d, 0x090, 0x098, 0x0a6, 0x0b6, 0x0c4, 0x19f, 0x1af,
331     0x1bf, 0x399, 0x3bf, 0x3b4, 0x3c9, 0x3e7, 0x0a8, 0x1b6,
332     0x0ab, 0x0a4, 0x0aa, 0x0b2, 0x0c2, 0x0c5, 0x198, 0x1a4,
333     0x1b8, 0x38c, 0x3a4, 0x3c4, 0x3c6, 0x3dd, 0x3e8, 0x0ad,
334     0x3af, 0x192, 0x0bd, 0x0bc, 0x18e, 0x197, 0x19a, 0x1a3,
335     0x1b1, 0x38d, 0x398, 0x3b7, 0x3d3, 0x3d1, 0x3db, 0x7dd,
336     0x0b4, 0x3de, 0x1a9, 0x19b, 0x19c, 0x1a1, 0x1aa, 0x1ad,
337     0x1b3, 0x38b, 0x3b2, 0x3b8, 0x3ce, 0x3e1, 0x3e0, 0x7d2,
338     0x7e5, 0x0b7, 0x7e3, 0x1bb, 0x1a8, 0x1a6, 0x1b0, 0x1b2,
339     0x1b7, 0x39b, 0x39a, 0x3ba, 0x3b5, 0x3d6, 0x7d7, 0x3e4,
340     0x7d8, 0x7ea, 0x0ba, 0x7e8, 0x3a0, 0x1bd, 0x1b4, 0x38a,
341     0x1c4, 0x392, 0x3aa, 0x3b0, 0x3bc, 0x3d7, 0x7d4, 0x7dc,
342     0x7db, 0x7d5, 0x7f0, 0x0c1, 0x7fb, 0x3c8, 0x3a3, 0x395,
343     0x39d, 0x3ac, 0x3ae, 0x3c5, 0x3d8, 0x3e2, 0x3e6, 0x7e4,
344     0x7e7, 0x7e0, 0x7e9, 0x7f7, 0x190, 0x7f2, 0x393, 0x1be,
345     0x1c0, 0x394, 0x397, 0x3ad, 0x3c3, 0x3c1, 0x3d2, 0x7da,
346     0x7d9, 0x7df, 0x7eb, 0x7f4, 0x7fa, 0x195, 0x7f8, 0x3bd,
347     0x39c, 0x3ab, 0x3a8, 0x3b3, 0x3b9, 0x3d0, 0x3e3, 0x3e5,
348     0x7e2, 0x7de, 0x7ed, 0x7f1, 0x7f9, 0x7fc, 0x193, 0xffd,
349     0x3dc, 0x3b6, 0x3c7, 0x3cc, 0x3cb, 0x3d9, 0x3da, 0x7d3,
350     0x7e1, 0x7ee, 0x7ef, 0x7f5, 0x7f6, 0xffc, 0xfff, 0x19d,
351     0x1c2, 0x0b5, 0x0a1, 0x096, 0x097, 0x095, 0x099, 0x0a0,
352     0x0a2, 0x0ac, 0x0a9, 0x0b1, 0x0b3, 0x0bb, 0x0c0, 0x18f,
353     0x004,
354 };
355
356 static const uint8_t bits11[289] = {
357      4,  5,  6,  7,  8,  8,  9, 10, 10, 10, 11, 11, 12, 11, 12, 12,
358     10,  5,  4,  5,  6,  7,  7,  8,  8,  9,  9,  9, 10, 10, 10, 10,
359     11,  8,  6,  5,  5,  6,  7,  7,  8,  8,  8,  9,  9,  9, 10, 10,
360     10, 10,  8,  7,  6,  6,  6,  7,  7,  8,  8,  8,  9,  9,  9, 10,
361     10, 10, 10,  8,  8,  7,  7,  7,  7,  8,  8,  8,  8,  9,  9,  9,
362     10, 10, 10, 10,  8,  8,  7,  7,  7,  7,  8,  8,  8,  9,  9,  9,
363      9, 10, 10, 10, 10,  8,  9,  8,  8,  8,  8,  8,  8,  8,  9,  9,
364      9, 10, 10, 10, 10, 10,  8,  9,  8,  8,  8,  8,  8,  8,  9,  9,
365      9, 10, 10, 10, 10, 10, 10,  8, 10,  9,  8,  8,  9,  9,  9,  9,
366      9, 10, 10, 10, 10, 10, 10, 11,  8, 10,  9,  9,  9,  9,  9,  9,
367      9, 10, 10, 10, 10, 10, 10, 11, 11,  8, 11,  9,  9,  9,  9,  9,
368      9, 10, 10, 10, 10, 10, 11, 10, 11, 11,  8, 11, 10,  9,  9, 10,
369      9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,  8, 11, 10, 10, 10,
370     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,  9, 11, 10,  9,
371      9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,  9, 11, 10,
372     10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,  9, 12,
373     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12,  9,
374      9,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  9,
375      5,
376 };
377
378 const uint16_t *ff_aac_spectral_codes[11] = {
379     codes1,  codes2,  codes3, codes4, codes5, codes6, codes7, codes8,
380     codes9, codes10, codes11,
381 };
382
383 const uint8_t *ff_aac_spectral_bits[11] = {
384     bits1,  bits2,  bits3, bits4, bits5, bits6, bits7, bits8,
385     bits9, bits10, bits11,
386 };
387
388 const uint16_t ff_aac_spectral_sizes[11] = {
389     81, 81, 81, 81, 81, 81, 64, 64, 169, 169, 289,
390 };
391
392 static const int8_t codebook_vector0[324] = {
393  -1, -1, -1, -1, -1, -1, -1,  0, -1, -1, -1,  1, -1, -1,  0, -1,
394  -1, -1,  0,  0, -1, -1,  0,  1, -1, -1,  1, -1, -1, -1,  1,  0,
395  -1, -1,  1,  1, -1,  0, -1, -1, -1,  0, -1,  0, -1,  0, -1,  1,
396  -1,  0,  0, -1, -1,  0,  0,  0, -1,  0,  0,  1, -1,  0,  1, -1,
397  -1,  0,  1,  0, -1,  0,  1,  1, -1,  1, -1, -1, -1,  1, -1,  0,
398  -1,  1, -1,  1, -1,  1,  0, -1, -1,  1,  0,  0, -1,  1,  0,  1,
399  -1,  1,  1, -1, -1,  1,  1,  0, -1,  1,  1,  1,  0, -1, -1, -1,
400   0, -1, -1,  0,  0, -1, -1,  1,  0, -1,  0, -1,  0, -1,  0,  0,
401   0, -1,  0,  1,  0, -1,  1, -1,  0, -1,  1,  0,  0, -1,  1,  1,
402   0,  0, -1, -1,  0,  0, -1,  0,  0,  0, -1,  1,  0,  0,  0, -1,
403   0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  1, -1,  0,  0,  1,  0,
404   0,  0,  1,  1,  0,  1, -1, -1,  0,  1, -1,  0,  0,  1, -1,  1,
405   0,  1,  0, -1,  0,  1,  0,  0,  0,  1,  0,  1,  0,  1,  1, -1,
406   0,  1,  1,  0,  0,  1,  1,  1,  1, -1, -1, -1,  1, -1, -1,  0,
407   1, -1, -1,  1,  1, -1,  0, -1,  1, -1,  0,  0,  1, -1,  0,  1,
408   1, -1,  1, -1,  1, -1,  1,  0,  1, -1,  1,  1,  1,  0, -1, -1,
409   1,  0, -1,  0,  1,  0, -1,  1,  1,  0,  0, -1,  1,  0,  0,  0,
410   1,  0,  0,  1,  1,  0,  1, -1,  1,  0,  1,  0,  1,  0,  1,  1,
411   1,  1, -1, -1,  1,  1, -1,  0,  1,  1, -1,  1,  1,  1,  0, -1,
412   1,  1,  0,  0,  1,  1,  0,  1,  1,  1,  1, -1,  1,  1,  1,  0,
413   1,  1,  1,  1,
414 };
415
416 static const int8_t codebook_vector2[324] = {
417   0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  2,  0,  0,  1,  0,
418   0,  0,  1,  1,  0,  0,  1,  2,  0,  0,  2,  0,  0,  0,  2,  1,
419   0,  0,  2,  2,  0,  1,  0,  0,  0,  1,  0,  1,  0,  1,  0,  2,
420   0,  1,  1,  0,  0,  1,  1,  1,  0,  1,  1,  2,  0,  1,  2,  0,
421   0,  1,  2,  1,  0,  1,  2,  2,  0,  2,  0,  0,  0,  2,  0,  1,
422   0,  2,  0,  2,  0,  2,  1,  0,  0,  2,  1,  1,  0,  2,  1,  2,
423   0,  2,  2,  0,  0,  2,  2,  1,  0,  2,  2,  2,  1,  0,  0,  0,
424   1,  0,  0,  1,  1,  0,  0,  2,  1,  0,  1,  0,  1,  0,  1,  1,
425   1,  0,  1,  2,  1,  0,  2,  0,  1,  0,  2,  1,  1,  0,  2,  2,
426   1,  1,  0,  0,  1,  1,  0,  1,  1,  1,  0,  2,  1,  1,  1,  0,
427   1,  1,  1,  1,  1,  1,  1,  2,  1,  1,  2,  0,  1,  1,  2,  1,
428   1,  1,  2,  2,  1,  2,  0,  0,  1,  2,  0,  1,  1,  2,  0,  2,
429   1,  2,  1,  0,  1,  2,  1,  1,  1,  2,  1,  2,  1,  2,  2,  0,
430   1,  2,  2,  1,  1,  2,  2,  2,  2,  0,  0,  0,  2,  0,  0,  1,
431   2,  0,  0,  2,  2,  0,  1,  0,  2,  0,  1,  1,  2,  0,  1,  2,
432   2,  0,  2,  0,  2,  0,  2,  1,  2,  0,  2,  2,  2,  1,  0,  0,
433   2,  1,  0,  1,  2,  1,  0,  2,  2,  1,  1,  0,  2,  1,  1,  1,
434   2,  1,  1,  2,  2,  1,  2,  0,  2,  1,  2,  1,  2,  1,  2,  2,
435   2,  2,  0,  0,  2,  2,  0,  1,  2,  2,  0,  2,  2,  2,  1,  0,
436   2,  2,  1,  1,  2,  2,  1,  2,  2,  2,  2,  0,  2,  2,  2,  1,
437   2,  2,  2,  2,
438 };
439
440 static const int8_t codebook_vector4[162] = {
441  -4, -4, -4, -3, -4, -2, -4, -1, -4,  0, -4,  1, -4,  2, -4,  3,
442  -4,  4, -3, -4, -3, -3, -3, -2, -3, -1, -3,  0, -3,  1, -3,  2,
443  -3,  3, -3,  4, -2, -4, -2, -3, -2, -2, -2, -1, -2,  0, -2,  1,
444  -2,  2, -2,  3, -2,  4, -1, -4, -1, -3, -1, -2, -1, -1, -1,  0,
445  -1,  1, -1,  2, -1,  3, -1,  4,  0, -4,  0, -3,  0, -2,  0, -1,
446   0,  0,  0,  1,  0,  2,  0,  3,  0,  4,  1, -4,  1, -3,  1, -2,
447   1, -1,  1,  0,  1,  1,  1,  2,  1,  3,  1,  4,  2, -4,  2, -3,
448   2, -2,  2, -1,  2,  0,  2,  1,  2,  2,  2,  3,  2,  4,  3, -4,
449   3, -3,  3, -2,  3, -1,  3,  0,  3,  1,  3,  2,  3,  3,  3,  4,
450   4, -4,  4, -3,  4, -2,  4, -1,  4,  0,  4,  1,  4,  2,  4,  3,
451   4,  4,
452 };
453
454 static const int8_t codebook_vector6[128] = {
455   0,  0,  0,  1,  0,  2,  0,  3,  0,  4,  0,  5,  0,  6,  0,  7,
456   1,  0,  1,  1,  1,  2,  1,  3,  1,  4,  1,  5,  1,  6,  1,  7,
457   2,  0,  2,  1,  2,  2,  2,  3,  2,  4,  2,  5,  2,  6,  2,  7,
458   3,  0,  3,  1,  3,  2,  3,  3,  3,  4,  3,  5,  3,  6,  3,  7,
459   4,  0,  4,  1,  4,  2,  4,  3,  4,  4,  4,  5,  4,  6,  4,  7,
460   5,  0,  5,  1,  5,  2,  5,  3,  5,  4,  5,  5,  5,  6,  5,  7,
461   6,  0,  6,  1,  6,  2,  6,  3,  6,  4,  6,  5,  6,  6,  6,  7,
462   7,  0,  7,  1,  7,  2,  7,  3,  7,  4,  7,  5,  7,  6,  7,  7,
463 };
464
465 static const int8_t codebook_vector8[338] = {
466   0,  0,  0,  1,  0,  2,  0,  3,  0,  4,  0,  5,  0,  6,  0,  7,
467   0,  8,  0,  9,  0, 10,  0, 11,  0, 12,  1,  0,  1,  1,  1,  2,
468   1,  3,  1,  4,  1,  5,  1,  6,  1,  7,  1,  8,  1,  9,  1, 10,
469   1, 11,  1, 12,  2,  0,  2,  1,  2,  2,  2,  3,  2,  4,  2,  5,
470   2,  6,  2,  7,  2,  8,  2,  9,  2, 10,  2, 11,  2, 12,  3,  0,
471   3,  1,  3,  2,  3,  3,  3,  4,  3,  5,  3,  6,  3,  7,  3,  8,
472   3,  9,  3, 10,  3, 11,  3, 12,  4,  0,  4,  1,  4,  2,  4,  3,
473   4,  4,  4,  5,  4,  6,  4,  7,  4,  8,  4,  9,  4, 10,  4, 11,
474   4, 12,  5,  0,  5,  1,  5,  2,  5,  3,  5,  4,  5,  5,  5,  6,
475   5,  7,  5,  8,  5,  9,  5, 10,  5, 11,  5, 12,  6,  0,  6,  1,
476   6,  2,  6,  3,  6,  4,  6,  5,  6,  6,  6,  7,  6,  8,  6,  9,
477   6, 10,  6, 11,  6, 12,  7,  0,  7,  1,  7,  2,  7,  3,  7,  4,
478   7,  5,  7,  6,  7,  7,  7,  8,  7,  9,  7, 10,  7, 11,  7, 12,
479   8,  0,  8,  1,  8,  2,  8,  3,  8,  4,  8,  5,  8,  6,  8,  7,
480   8,  8,  8,  9,  8, 10,  8, 11,  8, 12,  9,  0,  9,  1,  9,  2,
481   9,  3,  9,  4,  9,  5,  9,  6,  9,  7,  9,  8,  9,  9,  9, 10,
482   9, 11,  9, 12, 10,  0, 10,  1, 10,  2, 10,  3, 10,  4, 10,  5,
483  10,  6, 10,  7, 10,  8, 10,  9, 10, 10, 10, 11, 10, 12, 11,  0,
484  11,  1, 11,  2, 11,  3, 11,  4, 11,  5, 11,  6, 11,  7, 11,  8,
485  11,  9, 11, 10, 11, 11, 11, 12, 12,  0, 12,  1, 12,  2, 12,  3,
486  12,  4, 12,  5, 12,  6, 12,  7, 12,  8, 12,  9, 12, 10, 12, 11,
487  12, 12,
488 };
489
490 static const int8_t codebook_vector10[578] = {
491   0,  0,  0,  1,  0,  2,  0,  3,  0,  4,  0,  5,  0,  6,  0,  7,
492   0,  8,  0,  9,  0, 10,  0, 11,  0, 12,  0, 13,  0, 14,  0, 15,
493   0, 16,  1,  0,  1,  1,  1,  2,  1,  3,  1,  4,  1,  5,  1,  6,
494   1,  7,  1,  8,  1,  9,  1, 10,  1, 11,  1, 12,  1, 13,  1, 14,
495   1, 15,  1, 16,  2,  0,  2,  1,  2,  2,  2,  3,  2,  4,  2,  5,
496   2,  6,  2,  7,  2,  8,  2,  9,  2, 10,  2, 11,  2, 12,  2, 13,
497   2, 14,  2, 15,  2, 16,  3,  0,  3,  1,  3,  2,  3,  3,  3,  4,
498   3,  5,  3,  6,  3,  7,  3,  8,  3,  9,  3, 10,  3, 11,  3, 12,
499   3, 13,  3, 14,  3, 15,  3, 16,  4,  0,  4,  1,  4,  2,  4,  3,
500   4,  4,  4,  5,  4,  6,  4,  7,  4,  8,  4,  9,  4, 10,  4, 11,
501   4, 12,  4, 13,  4, 14,  4, 15,  4, 16,  5,  0,  5,  1,  5,  2,
502   5,  3,  5,  4,  5,  5,  5,  6,  5,  7,  5,  8,  5,  9,  5, 10,
503   5, 11,  5, 12,  5, 13,  5, 14,  5, 15,  5, 16,  6,  0,  6,  1,
504   6,  2,  6,  3,  6,  4,  6,  5,  6,  6,  6,  7,  6,  8,  6,  9,
505   6, 10,  6, 11,  6, 12,  6, 13,  6, 14,  6, 15,  6, 16,  7,  0,
506   7,  1,  7,  2,  7,  3,  7,  4,  7,  5,  7,  6,  7,  7,  7,  8,
507   7,  9,  7, 10,  7, 11,  7, 12,  7, 13,  7, 14,  7, 15,  7, 16,
508   8,  0,  8,  1,  8,  2,  8,  3,  8,  4,  8,  5,  8,  6,  8,  7,
509   8,  8,  8,  9,  8, 10,  8, 11,  8, 12,  8, 13,  8, 14,  8, 15,
510   8, 16,  9,  0,  9,  1,  9,  2,  9,  3,  9,  4,  9,  5,  9,  6,
511   9,  7,  9,  8,  9,  9,  9, 10,  9, 11,  9, 12,  9, 13,  9, 14,
512   9, 15,  9, 16, 10,  0, 10,  1, 10,  2, 10,  3, 10,  4, 10,  5,
513  10,  6, 10,  7, 10,  8, 10,  9, 10, 10, 10, 11, 10, 12, 10, 13,
514  10, 14, 10, 15, 10, 16, 11,  0, 11,  1, 11,  2, 11,  3, 11,  4,
515  11,  5, 11,  6, 11,  7, 11,  8, 11,  9, 11, 10, 11, 11, 11, 12,
516  11, 13, 11, 14, 11, 15, 11, 16, 12,  0, 12,  1, 12,  2, 12,  3,
517  12,  4, 12,  5, 12,  6, 12,  7, 12,  8, 12,  9, 12, 10, 12, 11,
518  12, 12, 12, 13, 12, 14, 12, 15, 12, 16, 13,  0, 13,  1, 13,  2,
519  13,  3, 13,  4, 13,  5, 13,  6, 13,  7, 13,  8, 13,  9, 13, 10,
520  13, 11, 13, 12, 13, 13, 13, 14, 13, 15, 13, 16, 14,  0, 14,  1,
521  14,  2, 14,  3, 14,  4, 14,  5, 14,  6, 14,  7, 14,  8, 14,  9,
522  14, 10, 14, 11, 14, 12, 14, 13, 14, 14, 14, 15, 14, 16, 15,  0,
523  15,  1, 15,  2, 15,  3, 15,  4, 15,  5, 15,  6, 15,  7, 15,  8,
524  15,  9, 15, 10, 15, 11, 15, 12, 15, 13, 15, 14, 15, 15, 15, 16,
525  16,  0, 16,  1, 16,  2, 16,  3, 16,  4, 16,  5, 16,  6, 16,  7,
526  16,  8, 16,  9, 16, 10, 16, 11, 16, 12, 16, 13, 16, 14, 16, 15,
527  16, 16,
528 };
529
530 const int8_t *ff_aac_codebook_vectors[] = {
531     codebook_vector0, codebook_vector0, codebook_vector2,
532     codebook_vector2, codebook_vector4, codebook_vector4,
533     codebook_vector6, codebook_vector6, codebook_vector8,
534     codebook_vector8, codebook_vector10,
535 };
536
537 #ifdef CONFIG_HARDCODED_TABLES
538
539 const float ff_aac_ivquant_tab[IVQUANT_SIZE] = {
540     -4085.3368071, -4074.6805676, -4064.0312908, -4053.3889857,
541     -4042.7536614, -4032.1253271, -4021.5039921, -4010.8896656,
542     -4000.2823568, -3989.6820750, -3979.0888296, -3968.5026299,
543     -3957.9234854, -3947.3514054, -3936.7863993, -3926.2284768,
544     -3915.6776473, -3905.1339203, -3894.5973054, -3884.0678123,
545     -3873.5454506, -3863.0302299, -3852.5221601, -3842.0212507,
546     -3831.5275117, -3821.0409528, -3810.5615838, -3800.0894147,
547     -3789.6244554, -3779.1667157, -3768.7162058, -3758.2729355,
548     -3747.8369150, -3737.4081544, -3726.9866637, -3716.5724532,
549     -3706.1655329, -3695.7659132, -3685.3736044, -3674.9886166,
550     -3664.6109603, -3654.2406458, -3643.8776835, -3633.5220839,
551     -3623.1738574, -3612.8330147, -3602.4995662, -3592.1735225,
552     -3581.8548943, -3571.5436923, -3561.2399271, -3550.9436095,
553     -3540.6547503, -3530.3733604, -3520.0994506, -3509.8330317,
554     -3499.5741148, -3489.3227109, -3479.0788309, -3468.8424860,
555     -3458.6136872, -3448.3924458, -3438.1787728, -3427.9726795,
556     -3417.7741773, -3407.5832773, -3397.3999911, -3387.2243299,
557     -3377.0563052, -3366.8959286, -3356.7432115, -3346.5981655,
558     -3336.4608022, -3326.3311334, -3316.2091706, -3306.0949257,
559     -3295.9884105, -3285.8896367, -3275.7986164, -3265.7153613,
560     -3255.6398836, -3245.5721951, -3235.5123081, -3225.4602346,
561     -3215.4159867, -3205.3795768, -3195.3510169, -3185.3303196,
562     -3175.3174970, -3165.3125617, -3155.3155261, -3145.3264026,
563     -3135.3452039, -3125.3719425, -3115.4066312, -3105.4492825,
564     -3095.4999092, -3085.5585243, -3075.6251404, -3065.6997706,
565     -3055.7824278, -3045.8731250, -3035.9718753, -3026.0786917,
566     -3016.1935876, -3006.3165760, -2996.4476703, -2986.5868839,
567     -2976.7342300, -2966.8897222, -2957.0533740, -2947.2251989,
568     -2937.4052106, -2927.5934226, -2917.7898488, -2907.9945030,
569     -2898.2073989, -2888.4285505, -2878.6579717, -2868.8956767,
570     -2859.1416793, -2849.3959939, -2839.6586345, -2829.9296156,
571     -2820.2089512, -2810.4966560, -2800.7927443, -2791.0972306,
572     -2781.4101295, -2771.7314556, -2762.0612237, -2752.3994485,
573     -2742.7461448, -2733.1013276, -2723.4650117, -2713.8372123,
574     -2704.2179443, -2694.6072231, -2685.0050637, -2675.4114815,
575     -2665.8264919, -2656.2501103, -2646.6823521, -2637.1232331,
576     -2627.5727687, -2618.0309748, -2608.4978671, -2598.9734614,
577     -2589.4577738, -2579.9508201, -2570.4526166, -2560.9631792,
578     -2551.4825244, -2542.0106682, -2532.5476273, -2523.0934179,
579     -2513.6480566, -2504.2115601, -2494.7839450, -2485.3652281,
580     -2475.9554262, -2466.5545562, -2457.1626352, -2447.7796803,
581     -2438.4057086, -2429.0407373, -2419.6847838, -2410.3378655,
582     -2401.0000000, -2391.6712048, -2382.3514975, -2373.0408959,
583     -2363.7394180, -2354.4470815, -2345.1639046, -2335.8899054,
584     -2326.6251019, -2317.3695127, -2308.1231559, -2298.8860501,
585     -2289.6582139, -2280.4396659, -2271.2304249, -2262.0305097,
586     -2252.8399393, -2243.6587327, -2234.4869090, -2225.3244875,
587     -2216.1714876, -2207.0279286, -2197.8938301, -2188.7692117,
588     -2179.6540933, -2170.5484945, -2161.4524354, -2152.3659360,
589     -2143.2890165, -2134.2216972, -2125.1639983, -2116.1159404,
590     -2107.0775442, -2098.0488302, -2089.0298192, -2080.0205323,
591     -2071.0209905, -2062.0312148, -2053.0512267, -2044.0810473,
592     -2035.1206983, -2026.1702013, -2017.2295780, -2008.2988502,
593     -1999.3780400, -1990.4671694, -1981.5662607, -1972.6753362,
594     -1963.7944183, -1954.9235298, -1946.0626932, -1937.2119316,
595     -1928.3712678, -1919.5407249, -1910.7203263, -1901.9100954,
596     -1893.1100555, -1884.3202305, -1875.5406441, -1866.7713202,
597     -1858.0122829, -1849.2635565, -1840.5251653, -1831.7971337,
598     -1823.0794865, -1814.3722485, -1805.6754445, -1796.9890997,
599     -1788.3132394, -1779.6478889, -1770.9930739, -1762.3488199,
600     -1753.7151529, -1745.0920989, -1736.4796841, -1727.8779349,
601     -1719.2868777, -1710.7065393, -1702.1369465, -1693.5781262,
602     -1685.0301058, -1676.4929125, -1667.9665739, -1659.4511177,
603     -1650.9465718, -1642.4529642, -1633.9703232, -1625.4986772,
604     -1617.0380549, -1608.5884850, -1600.1499965, -1591.7226186,
605     -1583.3063807, -1574.9013124, -1566.5074433, -1558.1248036,
606     -1549.7534233, -1541.3933328, -1533.0445627, -1524.7071438,
607     -1516.3811070, -1508.0664836, -1499.7633050, -1491.4716029,
608     -1483.1914090, -1474.9227555, -1466.6656746, -1458.4201990,
609     -1450.1863613, -1441.9641946, -1433.7537320, -1425.5550071,
610     -1417.3680536, -1409.1929053, -1401.0295965, -1392.8781617,
611     -1384.7386355, -1376.6110529, -1368.4954490, -1360.3918594,
612     -1352.3003198, -1344.2208661, -1336.1535347, -1328.0983621,
613     -1320.0553851, -1312.0246407, -1304.0061665, -1296.0000000,
614     -1288.0061792, -1280.0247424, -1272.0557280, -1264.0991750,
615     -1256.1551226, -1248.2236101, -1240.3046773, -1232.3983645,
616     -1224.5047118, -1216.6237602, -1208.7555507, -1200.9001246,
617     -1193.0575238, -1185.2277903, -1177.4109665, -1169.6070953,
618     -1161.8162197, -1154.0383833, -1146.2736299, -1138.5220038,
619     -1130.7835495, -1123.0583122, -1115.3463371, -1107.6476700,
620     -1099.9623571, -1092.2904450, -1084.6319806, -1076.9870114,
621     -1069.3555851, -1061.7377500, -1054.1335548, -1046.5430486,
622     -1038.9662809, -1031.4033017, -1023.8541615, -1016.3189112,
623     -1008.7976022, -1001.2902864,  -993.7970162,  -986.3178444,
624      -978.8528243,  -971.4020099,  -963.9654554,  -956.5432158,
625      -949.1353466,  -941.7419036,  -934.3629435,  -926.9985233,
626      -919.6487005,  -912.3135336,  -904.9930812,  -897.6874027,
627      -890.3965581,  -883.1206081,  -875.8596139,  -868.6136373,
628      -861.3827409,  -854.1669878,  -846.9664418,  -839.7811675,
629      -832.6112300,  -825.4566953,  -818.3176299,  -811.1941012,
630      -804.0861773,  -796.9939269,  -789.9174197,  -782.8567260,
631      -775.8119169,  -768.7830645,  -761.7702415,  -754.7735215,
632      -747.7929790,  -740.8286894,  -733.8807287,  -726.9491743,
633      -720.0341040,  -713.1355968,  -706.2537328,  -699.3885927,
634      -692.5402584,  -685.7088129,  -678.8943400,  -672.0969248,
635      -665.3166532,  -658.5536125,  -651.8078908,  -645.0795775,
636      -638.3687633,  -631.6755398,  -625.0000000,  -618.3422381,
637      -611.7023495,  -605.0804310,  -598.4765806,  -591.8908978,
638      -585.3234834,  -578.7744395,  -572.2438698,  -565.7318795,
639      -559.2385751,  -552.7640648,  -546.3084584,  -539.8718672,
640      -533.4544042,  -527.0561843,  -520.6773237,  -514.3179408,
641      -507.9781556,  -501.6580901,  -495.3578679,  -489.0776150,
642      -482.8174592,  -476.5775303,  -470.3579603,  -464.1588834,
643      -457.9804359,  -451.8227566,  -445.6859865,  -439.5702691,
644      -433.4757504,  -427.4025787,  -421.3509053,  -415.3208841,
645      -409.3126715,  -403.3264272,  -397.3623135,  -391.4204959,
646      -385.5011431,  -379.6044268,  -373.7305221,  -367.8796078,
647      -362.0518657,  -356.2474818,  -350.4666456,  -344.7095504,
648      -338.9763937,  -333.2673772,  -327.5827066,  -321.9225924,
649      -316.2872495,  -310.6768976,  -305.0917613,  -299.5320705,
650      -293.9980602,  -288.4899710,  -283.0080491,  -277.5525469,
651      -272.1237227,  -266.7218414,  -261.3471743,  -256.0000000,
652      -250.6806041,  -245.3892798,  -240.1263282,  -234.8920585,
653      -229.6867885,  -224.5108452,  -219.3645645,  -214.2482925,
654      -209.1623853,  -204.1072101,  -199.0831450,  -194.0905802,
655      -189.1299182,  -184.2015749,  -179.3059798,  -174.4435769,
656      -169.6148258,  -164.8202021,  -160.0601987,  -155.3353268,
657      -150.6461166,  -145.9931191,  -141.3769069,  -136.7980757,
658      -132.2572463,  -127.7550655,  -123.2922085,  -118.8693810,
659      -114.4873209,  -110.1468012,  -105.8486329,  -101.5936673,
660       -97.3828002,   -93.2169752,   -89.0971879,   -85.0244912,
661       -81.0000000,   -77.0248978,   -73.1004435,   -69.2279794,
662       -65.4089405,   -61.6448653,   -57.9374077,   -54.2883523,
663       -50.6996313,   -47.1733451,   -43.7117870,   -40.3174736,
664       -36.9931811,   -33.7419917,   -30.5673509,   -27.4731418,
665       -24.4637810,   -21.5443469,   -18.7207544,   -16.0000000,
666       -13.3905183,   -10.9027236,    -8.5498797,    -6.3496042,
667        -4.3267487,    -2.5198421,    -1.0000000,     0.0000000,
668         1.0000000,     2.5198421,     4.3267487,     6.3496042,
669         8.5498797,    10.9027236,    13.3905183,    16.0000000,
670        18.7207544,    21.5443469,    24.4637810,    27.4731418,
671        30.5673509,    33.7419917,    36.9931811,    40.3174736,
672        43.7117870,    47.1733451,    50.6996313,    54.2883523,
673        57.9374077,    61.6448653,    65.4089405,    69.2279794,
674        73.1004435,    77.0248978,    81.0000000,    85.0244912,
675        89.0971879,    93.2169752,    97.3828002,   101.5936673,
676       105.8486329,   110.1468012,   114.4873209,   118.8693810,
677       123.2922085,   127.7550655,   132.2572463,   136.7980757,
678       141.3769069,   145.9931191,   150.6461166,   155.3353268,
679       160.0601987,   164.8202021,   169.6148258,   174.4435769,
680       179.3059798,   184.2015749,   189.1299182,   194.0905802,
681       199.0831450,   204.1072101,   209.1623853,   214.2482925,
682       219.3645645,   224.5108452,   229.6867885,   234.8920585,
683       240.1263282,   245.3892798,   250.6806041,   256.0000000,
684       261.3471743,   266.7218414,   272.1237227,   277.5525469,
685       283.0080491,   288.4899710,   293.9980602,   299.5320705,
686       305.0917613,   310.6768976,   316.2872495,   321.9225924,
687       327.5827066,   333.2673772,   338.9763937,   344.7095504,
688       350.4666456,   356.2474818,   362.0518657,   367.8796078,
689       373.7305221,   379.6044268,   385.5011431,   391.4204959,
690       397.3623135,   403.3264272,   409.3126715,   415.3208841,
691       421.3509053,   427.4025787,   433.4757504,   439.5702691,
692       445.6859865,   451.8227566,   457.9804359,   464.1588834,
693       470.3579603,   476.5775303,   482.8174592,   489.0776150,
694       495.3578679,   501.6580901,   507.9781556,   514.3179408,
695       520.6773237,   527.0561843,   533.4544042,   539.8718672,
696       546.3084584,   552.7640648,   559.2385751,   565.7318795,
697       572.2438698,   578.7744395,   585.3234834,   591.8908978,
698       598.4765806,   605.0804310,   611.7023495,   618.3422381,
699       625.0000000,   631.6755398,   638.3687633,   645.0795775,
700       651.8078908,   658.5536125,   665.3166532,   672.0969248,
701       678.8943400,   685.7088129,   692.5402584,   699.3885927,
702       706.2537328,   713.1355968,   720.0341040,   726.9491743,
703       733.8807287,   740.8286894,   747.7929790,   754.7735215,
704       761.7702415,   768.7830645,   775.8119169,   782.8567260,
705       789.9174197,   796.9939269,   804.0861773,   811.1941012,
706       818.3176299,   825.4566953,   832.6112300,   839.7811675,
707       846.9664418,   854.1669878,   861.3827409,   868.6136373,
708       875.8596139,   883.1206081,   890.3965581,   897.6874027,
709       904.9930812,   912.3135336,   919.6487005,   926.9985233,
710       934.3629435,   941.7419036,   949.1353466,   956.5432158,
711       963.9654554,   971.4020099,   978.8528243,   986.3178444,
712       993.7970162,  1001.2902864,  1008.7976022,  1016.3189112,
713      1023.8541615,  1031.4033017,  1038.9662809,  1046.5430486,
714      1054.1335548,  1061.7377500,  1069.3555851,  1076.9870114,
715      1084.6319806,  1092.2904450,  1099.9623571,  1107.6476700,
716      1115.3463371,  1123.0583122,  1130.7835495,  1138.5220038,
717      1146.2736299,  1154.0383833,  1161.8162197,  1169.6070953,
718      1177.4109665,  1185.2277903,  1193.0575238,  1200.9001246,
719      1208.7555507,  1216.6237602,  1224.5047118,  1232.3983645,
720      1240.3046773,  1248.2236101,  1256.1551226,  1264.0991750,
721      1272.0557280,  1280.0247424,  1288.0061792,  1296.0000000,
722      1304.0061665,  1312.0246407,  1320.0553851,  1328.0983621,
723      1336.1535347,  1344.2208661,  1352.3003198,  1360.3918594,
724      1368.4954490,  1376.6110529,  1384.7386355,  1392.8781617,
725      1401.0295965,  1409.1929053,  1417.3680536,  1425.5550071,
726      1433.7537320,  1441.9641946,  1450.1863613,  1458.4201990,
727      1466.6656746,  1474.9227555,  1483.1914090,  1491.4716029,
728      1499.7633050,  1508.0664836,  1516.3811070,  1524.7071438,
729      1533.0445627,  1541.3933328,  1549.7534233,  1558.1248036,
730      1566.5074433,  1574.9013124,  1583.3063807,  1591.7226186,
731      1600.1499965,  1608.5884850,  1617.0380549,  1625.4986772,
732      1633.9703232,  1642.4529642,  1650.9465718,  1659.4511177,
733      1667.9665739,  1676.4929125,  1685.0301058,  1693.5781262,
734      1702.1369465,  1710.7065393,  1719.2868777,  1727.8779349,
735      1736.4796841,  1745.0920989,  1753.7151529,  1762.3488199,
736      1770.9930739,  1779.6478889,  1788.3132394,  1796.9890997,
737      1805.6754445,  1814.3722485,  1823.0794865,  1831.7971337,
738      1840.5251653,  1849.2635565,  1858.0122829,  1866.7713202,
739      1875.5406441,  1884.3202305,  1893.1100555,  1901.9100954,
740      1910.7203263,  1919.5407249,  1928.3712678,  1937.2119316,
741      1946.0626932,  1954.9235298,  1963.7944183,  1972.6753362,
742      1981.5662607,  1990.4671694,  1999.3780400,  2008.2988502,
743      2017.2295780,  2026.1702013,  2035.1206983,  2044.0810473,
744      2053.0512267,  2062.0312148,  2071.0209905,  2080.0205323,
745      2089.0298192,  2098.0488302,  2107.0775442,  2116.1159404,
746      2125.1639983,  2134.2216972,  2143.2890165,  2152.3659360,
747      2161.4524354,  2170.5484945,  2179.6540933,  2188.7692117,
748      2197.8938301,  2207.0279286,  2216.1714876,  2225.3244875,
749      2234.4869090,  2243.6587327,  2252.8399393,  2262.0305097,
750      2271.2304249,  2280.4396659,  2289.6582139,  2298.8860501,
751      2308.1231559,  2317.3695127,  2326.6251019,  2335.8899054,
752      2345.1639046,  2354.4470815,  2363.7394180,  2373.0408959,
753      2382.3514975,  2391.6712048,  2401.0000000,  2410.3378655,
754      2419.6847838,  2429.0407373,  2438.4057086,  2447.7796803,
755      2457.1626352,  2466.5545562,  2475.9554262,  2485.3652281,
756      2494.7839450,  2504.2115601,  2513.6480566,  2523.0934179,
757      2532.5476273,  2542.0106682,  2551.4825244,  2560.9631792,
758      2570.4526166,  2579.9508201,  2589.4577738,  2598.9734614,
759      2608.4978671,  2618.0309748,  2627.5727687,  2637.1232331,
760      2646.6823521,  2656.2501103,  2665.8264919,  2675.4114815,
761      2685.0050637,  2694.6072231,  2704.2179443,  2713.8372123,
762      2723.4650117,  2733.1013276,  2742.7461448,  2752.3994485,
763      2762.0612237,  2771.7314556,  2781.4101295,  2791.0972306,
764      2800.7927443,  2810.4966560,  2820.2089512,  2829.9296156,
765      2839.6586345,  2849.3959939,  2859.1416793,  2868.8956767,
766      2878.6579717,  2888.4285505,  2898.2073989,  2907.9945030,
767      2917.7898488,  2927.5934226,  2937.4052106,  2947.2251989,
768      2957.0533740,  2966.8897222,  2976.7342300,  2986.5868839,
769      2996.4476703,  3006.3165760,  3016.1935876,  3026.0786917,
770      3035.9718753,  3045.8731250,  3055.7824278,  3065.6997706,
771      3075.6251404,  3085.5585243,  3095.4999092,  3105.4492825,
772      3115.4066312,  3125.3719425,  3135.3452039,  3145.3264026,
773      3155.3155261,  3165.3125617,  3175.3174970,  3185.3303196,
774      3195.3510169,  3205.3795768,  3215.4159867,  3225.4602346,
775      3235.5123081,  3245.5721951,  3255.6398836,  3265.7153613,
776      3275.7986164,  3285.8896367,  3295.9884105,  3306.0949257,
777      3316.2091706,  3326.3311334,  3336.4608022,  3346.5981655,
778      3356.7432115,  3366.8959286,  3377.0563052,  3387.2243299,
779      3397.3999911,  3407.5832773,  3417.7741773,  3427.9726795,
780      3438.1787728,  3448.3924458,  3458.6136872,  3468.8424860,
781      3479.0788309,  3489.3227109,  3499.5741148,  3509.8330317,
782      3520.0994506,  3530.3733604,  3540.6547503,  3550.9436095,
783      3561.2399271,  3571.5436923,  3581.8548943,  3592.1735225,
784      3602.4995662,  3612.8330147,  3623.1738574,  3633.5220839,
785      3643.8776835,  3654.2406458,  3664.6109603,  3674.9886166,
786      3685.3736044,  3695.7659132,  3706.1655329,  3716.5724532,
787      3726.9866637,  3737.4081544,  3747.8369150,  3758.2729355,
788      3768.7162058,  3779.1667157,  3789.6244554,  3800.0894147,
789      3810.5615838,  3821.0409528,  3831.5275117,  3842.0212507,
790      3852.5221601,  3863.0302299,  3873.5454506,  3884.0678123,
791      3894.5973054,  3905.1339203,  3915.6776473,  3926.2284768,
792      3936.7863993,  3947.3514054,  3957.9234854,  3968.5026299,
793      3979.0888296,  3989.6820750,  4000.2823568,  4010.8896656,
794      4021.5039921,  4032.1253271,  4042.7536614,  4053.3889857,
795      4064.0312908,  4074.6805676,  4085.3368071,  4096.0000000,
796 };
797
798 #endif /* CONFIG_HARDCODED_TABLES */