Imported Upstream version 5.1.2
[platform/upstream/ffmpeg.git] / libavcodec / dcahuff.c
1 /*
2  * DCA compatible decoder - huffman tables
3  * Copyright (C) 2004 Gildas Bazin
4  * Copyright (C) 2007 Konstantin Shishkov
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 #include <stddef.h>
24
25 #include "libavutil/avassert.h"
26 #include "libavutil/macros.h"
27
28 #include "dcahuff.h"
29 #include "put_bits.h"
30
31 #define TMODE_COUNT 4
32 static const uint8_t tmode_vlc_bits[TMODE_COUNT] = { 3, 3, 3, 2 };
33 static const uint16_t tmode_codes[TMODE_COUNT][4] = {
34     { 0x0000, 0x0002, 0x0006, 0x0007 },
35     { 0x0002, 0x0006, 0x0007, 0x0000 },
36     { 0x0006, 0x0007, 0x0000, 0x0002 },
37     { 0x0000, 0x0001, 0x0002, 0x0003 }
38 };
39
40 static const uint8_t tmode_bits[TMODE_COUNT][4] = {
41     { 1, 2, 3, 3 },
42     { 2, 3, 3, 1 },
43     { 3, 3, 1, 2 },
44     { 2, 2, 2, 2 }
45 };
46
47 #define BITALLOC_12_VLC_BITS 9
48 static const uint8_t bitalloc_12_vlc_bits[DCA_BITALLOC_12_COUNT] = {
49     9, 7, 7, 9, 9
50 };
51
52 static const uint16_t bitalloc_12_codes[DCA_BITALLOC_12_COUNT][12] = {
53     { 0x0000, 0x0002, 0x0006, 0x000E, 0x001E, 0x003E, 0x00FF, 0x00FE,
54       0x01FB, 0x01FA, 0x01F9, 0x01F8, },
55     { 0x0001, 0x0000, 0x0002, 0x000F, 0x000C, 0x001D, 0x0039, 0x0038,
56       0x0037, 0x0036, 0x0035, 0x0034, },
57     { 0x0000, 0x0007, 0x0005, 0x0004, 0x0002, 0x000D, 0x000C, 0x0006,
58       0x000F, 0x001D, 0x0039, 0x0038, },
59     { 0x0003, 0x0002, 0x0000, 0x0002, 0x0006, 0x000E, 0x001E, 0x003E,
60       0x007E, 0x00FE, 0x01FF, 0x01FE, },
61     { 0x0001, 0x0000, 0x0002, 0x0006, 0x000E, 0x003F, 0x003D, 0x007C,
62       0x0079, 0x0078, 0x00FB, 0x00FA, }
63 };
64
65 static const uint8_t bitalloc_12_bits[DCA_BITALLOC_12_COUNT][12] = {
66     { 1, 2, 3, 4, 5, 6, 8, 8, 9, 9,  9,  9 },
67     { 1, 2, 3, 5, 5, 6, 7, 7, 7, 7,  7,  7 },
68     { 2, 3, 3, 3, 3, 4, 4, 4, 5, 6,  7,  7 },
69     { 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10 },
70     { 1, 2, 3, 4, 5, 7, 7, 8, 8, 8,  9,  9 }
71 };
72
73 #define SCALES_COUNT    5
74 #define SCALES_VLC_BITS 9
75 static const uint16_t scales_codes[SCALES_COUNT][129] = {
76     { 0x3AB0, 0x3AB2, 0x3AB4, 0x3AB6, 0x3AB8, 0x3ABA, 0x3ABC, 0x3ABE,
77       0x3AC0, 0x3AC2, 0x3AC4, 0x3AC6, 0x3AC8, 0x3ACA, 0x3ACC, 0x3ACE,
78       0x3AD0, 0x3AD2, 0x3AD4, 0x3AD6, 0x3AD8, 0x3ADA, 0x3ADC, 0x3ADE,
79       0x3AE0, 0x3AE2, 0x3AE4, 0x3AE6, 0x3AE8, 0x3AEA, 0x3AEC, 0x3AEE,
80       0x3AF0, 0x3AF2, 0x3AF4, 0x3AF6, 0x3AF8, 0x3AFA, 0x3AFC, 0x3AFE,
81       0x0540, 0x0542, 0x0544, 0x0546, 0x0548, 0x054A, 0x054C, 0x054E,
82       0x0558, 0x055E, 0x02AD, 0x0154, 0x0754, 0x03A8, 0x0056, 0x0028,
83       0x00E8, 0x004A, 0x000B, 0x003B, 0x0013, 0x0003, 0x000F, 0x0005,
84       0x0001, 0x0006, 0x0000, 0x0008, 0x001C, 0x0004, 0x0024, 0x004B,
85       0x00E9, 0x0029, 0x0057, 0x03A9, 0x0755, 0x0155, 0x02AE, 0x055F,
86       0x0559, 0x054F, 0x054D, 0x054B, 0x0549, 0x0547, 0x0545, 0x0543,
87       0x0541, 0x3AFF, 0x3AFD, 0x3AFB, 0x3AF9, 0x3AF7, 0x3AF5, 0x3AF3,
88       0x3AF1, 0x3AEF, 0x3AED, 0x3AEB, 0x3AE9, 0x3AE7, 0x3AE5, 0x3AE3,
89       0x3AE1, 0x3ADF, 0x3ADD, 0x3ADB, 0x3AD9, 0x3AD7, 0x3AD5, 0x3AD3,
90       0x3AD1, 0x3ACF, 0x3ACD, 0x3ACB, 0x3AC9, 0x3AC7, 0x3AC5, 0x3AC3,
91       0x3AC1, 0x3ABF, 0x3ABD, 0x3ABB, 0x3AB9, 0x3AB7, 0x3AB5, 0x3AB3,
92       0x3AB1, },
93     { 0x0F60, 0x0F62, 0x0F64, 0x0F66, 0x0F68, 0x0F6A, 0x0F6C, 0x0F6E,
94       0x0F70, 0x0F72, 0x0F74, 0x0F76, 0x0F78, 0x0F7A, 0x0F7C, 0x0F7E,
95       0x0F80, 0x0F82, 0x0F84, 0x0F86, 0x0F88, 0x0F8A, 0x0F8C, 0x0F8E,
96       0x0F90, 0x0F92, 0x0F94, 0x0F96, 0x0F98, 0x0F9A, 0x0F9C, 0x0F9E,
97       0x0FA0, 0x0FA2, 0x0FA4, 0x0FA6, 0x0FA8, 0x0FAA, 0x0FAC, 0x0FAE,
98       0x0FB0, 0x0FB2, 0x0FB4, 0x0FB6, 0x0FB8, 0x0FBA, 0x0FBC, 0x0FBE,
99       0x07A0, 0x07A2, 0x03D2, 0x01EA, 0x00FC, 0x007F, 0x001C, 0x000C,
100       0x0004, 0x0034, 0x0010, 0x001B, 0x0009, 0x000B, 0x000E, 0x0001,
101       0x0003, 0x0002, 0x000F, 0x000C, 0x000A, 0x0000, 0x0011, 0x0035,
102       0x0005, 0x000D, 0x001D, 0x003C, 0x00FD, 0x01EB, 0x03D3, 0x07A3,
103       0x07A1, 0x0FBF, 0x0FBD, 0x0FBB, 0x0FB9, 0x0FB7, 0x0FB5, 0x0FB3,
104       0x0FB1, 0x0FAF, 0x0FAD, 0x0FAB, 0x0FA9, 0x0FA7, 0x0FA5, 0x0FA3,
105       0x0FA1, 0x0F9F, 0x0F9D, 0x0F9B, 0x0F99, 0x0F97, 0x0F95, 0x0F93,
106       0x0F91, 0x0F8F, 0x0F8D, 0x0F8B, 0x0F89, 0x0F87, 0x0F85, 0x0F83,
107       0x0F81, 0x0F7F, 0x0F7D, 0x0F7B, 0x0F79, 0x0F77, 0x0F75, 0x0F73,
108       0x0F71, 0x0F6F, 0x0F6D, 0x0F6B, 0x0F69, 0x0F67, 0x0F65, 0x0F63,
109       0x0F61, },
110     { 0x51D0, 0x51D2, 0x51D4, 0x51D6, 0x51D8, 0x51DA, 0x51DC, 0x51DE,
111       0x51E0, 0x51E2, 0x51E4, 0x51E6, 0x51E8, 0x51EA, 0x51EC, 0x51EE,
112       0x51F0, 0x51F2, 0x51F4, 0x51F6, 0x51F8, 0x51FA, 0x51FC, 0x51FE,
113       0x70C0, 0x70C2, 0x70C4, 0x70C6, 0x70C8, 0x70CA, 0x70CC, 0x70CE,
114       0x70EC, 0x10EA, 0x3868, 0x3877, 0x0876, 0x1C35, 0x0434, 0x0A34,
115       0x0E1B, 0x021B, 0x051B, 0x070F, 0x010F, 0x0380, 0x0080, 0x0140,
116       0x01C1, 0x0041, 0x00A1, 0x00E2, 0x0022, 0x0052, 0x0072, 0x0012,
117       0x002A, 0x003A, 0x000A, 0x0016, 0x001E, 0x0006, 0x000C, 0x0000,
118       0x0004, 0x0001, 0x000D, 0x0007, 0x001F, 0x0017, 0x000B, 0x003B,
119       0x002B, 0x0013, 0x0073, 0x0053, 0x0023, 0x00E3, 0x00A2, 0x0042,
120       0x01C2, 0x0141, 0x0081, 0x0381, 0x028C, 0x010C, 0x051C, 0x021C,
121       0x0E1C, 0x0A35, 0x0435, 0x1C3A, 0x0877, 0x0874, 0x3869, 0x10EB,
122       0x70ED, 0x70CF, 0x70CD, 0x70CB, 0x70C9, 0x70C7, 0x70C5, 0x70C3,
123       0x70C1, 0x51FF, 0x51FD, 0x51FB, 0x51F9, 0x51F7, 0x51F5, 0x51F3,
124       0x51F1, 0x51EF, 0x51ED, 0x51EB, 0x51E9, 0x51E7, 0x51E5, 0x51E3,
125       0x51E1, 0x51DF, 0x51DD, 0x51DB, 0x51D9, 0x51D7, 0x51D5, 0x51D3,
126       0x51D1, },
127     { 0x6F64, 0x6F66, 0x6F68, 0x6F6A, 0x6F6C, 0x6F6E, 0x6F70, 0x6F72,
128       0x6F74, 0x6F76, 0x6F78, 0x6F7A, 0x6F7C, 0x6F7E, 0x6F80, 0x6F82,
129       0x6F84, 0x6F86, 0x6F88, 0x6F8A, 0x6F8C, 0x6F8E, 0x6F90, 0x6F92,
130       0x6F94, 0x6F96, 0x6F98, 0x6F9A, 0x6F9C, 0x6F9E, 0x6FA0, 0x6FA2,
131       0x6FA4, 0x6FA6, 0x6FA8, 0x6FAA, 0x6FAC, 0x6FAE, 0x6FB0, 0x6FB2,
132       0x6FB4, 0x6FB6, 0x17B4, 0x37DC, 0x0BDB, 0x1BEF, 0x05EE, 0x0DF8,
133       0x02F8, 0x06FD, 0x017D, 0x037F, 0x00BF, 0x0040, 0x00C0, 0x0021,
134       0x0061, 0x0011, 0x0031, 0x0009, 0x0019, 0x0006, 0x000E, 0x0004,
135       0x0000, 0x0005, 0x000F, 0x0007, 0x001A, 0x000A, 0x0036, 0x0016,
136       0x006E, 0x002E, 0x00C1, 0x0041, 0x01BC, 0x00BC, 0x037A, 0x017A,
137       0x02F9, 0x0DF9, 0x05EF, 0x05EC, 0x1BD8, 0x37DD, 0x17B5, 0x6FB7,
138       0x6FB5, 0x6FB3, 0x6FB1, 0x6FAF, 0x6FAD, 0x6FAB, 0x6FA9, 0x6FA7,
139       0x6FA5, 0x6FA3, 0x6FA1, 0x6F9F, 0x6F9D, 0x6F9B, 0x6F99, 0x6F97,
140       0x6F95, 0x6F93, 0x6F91, 0x6F8F, 0x6F8D, 0x6F8B, 0x6F89, 0x6F87,
141       0x6F85, 0x6F83, 0x6F81, 0x6F7F, 0x6F7D, 0x6F7B, 0x6F79, 0x6F77,
142       0x6F75, 0x6F73, 0x6F71, 0x6F6F, 0x6F6D, 0x6F6B, 0x6F69, 0x6F67,
143       0x6F65, },
144     { 0xDF54, 0xDF56, 0xDFC8, 0xDFCA, 0xDFCC, 0xDFCE, 0xDFD0, 0xDFD2,
145       0xDFD4, 0xDFD6, 0xDFD8, 0xDFDA, 0xDFDC, 0xDFDE, 0xDFE0, 0xDFE2,
146       0x0FE8, 0x2FEA, 0x6FA8, 0x6FF6, 0x07F5, 0x07F7, 0x37D2, 0x37F9,
147       0x03F8, 0x0BF8, 0x0BFB, 0x1BEB, 0x01FA, 0x05FA, 0x09FA, 0x0DFA,
148       0x0DFF, 0x00FF, 0x02FF, 0x06FB, 0x007C, 0x017C, 0x027C, 0x027F,
149       0x003C, 0x00BC, 0x013C, 0x01BC, 0x001C, 0x005C, 0x009C, 0x00DC,
150       0x000C, 0x002C, 0x004C, 0x006C, 0x0004, 0x0014, 0x0024, 0x0034,
151       0x0000, 0x0008, 0x0010, 0x0018, 0x001E, 0x0002, 0x0006, 0x000A,
152       0x000E, 0x000B, 0x0007, 0x0003, 0x001F, 0x0019, 0x0011, 0x0009,
153       0x0001, 0x0035, 0x0025, 0x0015, 0x0005, 0x006D, 0x004D, 0x002D,
154       0x000D, 0x00DD, 0x009D, 0x005D, 0x001D, 0x01BD, 0x013D, 0x00BD,
155       0x003D, 0x037C, 0x027D, 0x017D, 0x007D, 0x06FC, 0x04FC, 0x02FC,
156       0x00FC, 0x0DFB, 0x09FB, 0x05FB, 0x01FB, 0x1BF8, 0x1BE8, 0x0BF9,
157       0x03F9, 0x37FA, 0x37D3, 0x17F4, 0x07F6, 0x6FF7, 0x6FA9, 0x2FEB,
158       0x0FE9, 0xDFE3, 0xDFE1, 0xDFDF, 0xDFDD, 0xDFDB, 0xDFD9, 0xDFD7,
159       0xDFD5, 0xDFD3, 0xDFD1, 0xDFCF, 0xDFCD, 0xDFCB, 0xDFC9, 0xDF57,
160       0xDF55, }
161 };
162
163 static const uint8_t scales_bits[SCALES_COUNT][129] = {
164     { 14, 14, 14, 14, 14, 14, 14, 14,
165       14, 14, 14, 14, 14, 14, 14, 14,
166       14, 14, 14, 14, 14, 14, 14, 14,
167       14, 14, 14, 14, 14, 14, 14, 14,
168       14, 14, 14, 14, 14, 14, 14, 14,
169       13, 13, 13, 13, 13, 13, 13, 13,
170       13, 13, 12, 11, 11, 10,  9,  8,
171        8,  7,  6,  6,  5,  4,  4,  3,
172        2,  3,  3,  4,  5,  5,  6,  7,
173        8,  8,  9, 10, 11, 11, 12, 13,
174       13, 13, 13, 13, 13, 13, 13, 13,
175       13, 14, 14, 14, 14, 14, 14, 14,
176       14, 14, 14, 14, 14, 14, 14, 14,
177       14, 14, 14, 14, 14, 14, 14, 14,
178       14, 14, 14, 14, 14, 14, 14, 14,
179       14, 14, 14, 14, 14, 14, 14, 14,
180       14, },
181     { 15, 15, 15, 15, 15, 15, 15, 15,
182       15, 15, 15, 15, 15, 15, 15, 15,
183       15, 15, 15, 15, 15, 15, 15, 15,
184       15, 15, 15, 15, 15, 15, 15, 15,
185       15, 15, 15, 15, 15, 15, 15, 15,
186       15, 15, 15, 15, 15, 15, 15, 15,
187       14, 14, 13, 12, 11, 10,  8,  7,
188        6,  6,  5,  5,  4,  4,  4,  3,
189        3,  3,  4,  4,  4,  4,  5,  6,
190        6,  7,  8,  9, 11, 12, 13, 14,
191       14, 15, 15, 15, 15, 15, 15, 15,
192       15, 15, 15, 15, 15, 15, 15, 15,
193       15, 15, 15, 15, 15, 15, 15, 15,
194       15, 15, 15, 15, 15, 15, 15, 15,
195       15, 15, 15, 15, 15, 15, 15, 15,
196       15, 15, 15, 15, 15, 15, 15, 15,
197       15, },
198     { 15, 15, 15, 15, 15, 15, 15, 15,
199       15, 15, 15, 15, 15, 15, 15, 15,
200       15, 15, 15, 15, 15, 15, 15, 15,
201       15, 15, 15, 15, 15, 15, 15, 15,
202       15, 14, 14, 14, 13, 13, 12, 12,
203       12, 11, 11, 11, 10, 10,  9,  9,
204        9,  8,  8,  8,  7,  7,  7,  6,
205        6,  6,  5,  5,  5,  4,  4,  3,
206        3,  3,  4,  4,  5,  5,  5,  6,
207        6,  6,  7,  7,  7,  8,  8,  8,
208        9,  9,  9, 10, 10, 10, 11, 11,
209       12, 12, 12, 13, 13, 13, 14, 14,
210       15, 15, 15, 15, 15, 15, 15, 15,
211       15, 15, 15, 15, 15, 15, 15, 15,
212       15, 15, 15, 15, 15, 15, 15, 15,
213       15, 15, 15, 15, 15, 15, 15, 15,
214       15, },
215     { 15, 15, 15, 15, 15, 15, 15, 15,
216       15, 15, 15, 15, 15, 15, 15, 15,
217       15, 15, 15, 15, 15, 15, 15, 15,
218       15, 15, 15, 15, 15, 15, 15, 15,
219       15, 15, 15, 15, 15, 15, 15, 15,
220       15, 15, 14, 14, 13, 13, 12, 12,
221       11, 11, 10, 10,  9,  8,  8,  7,
222        7,  6,  6,  5,  5,  4,  4,  3,
223        2,  3,  4,  4,  5,  5,  6,  6,
224        7,  7,  8,  8,  9,  9, 10, 10,
225       11, 12, 12, 12, 13, 14, 14, 15,
226       15, 15, 15, 15, 15, 15, 15, 15,
227       15, 15, 15, 15, 15, 15, 15, 15,
228       15, 15, 15, 15, 15, 15, 15, 15,
229       15, 15, 15, 15, 15, 15, 15, 15,
230       15, 15, 15, 15, 15, 15, 15, 15,
231       15, },
232     { 16, 16, 16, 16, 16, 16, 16, 16,
233       16, 16, 16, 16, 16, 16, 16, 16,
234       15, 15, 15, 15, 14, 14, 14, 14,
235       13, 13, 13, 13, 12, 12, 12, 12,
236       12, 11, 11, 11, 10, 10, 10, 10,
237        9,  9,  9,  9,  8,  8,  8,  8,
238        7,  7,  7,  7,  6,  6,  6,  6,
239        5,  5,  5,  5,  5,  4,  4,  4,
240        4,  4,  4,  4,  5,  5,  5,  5,
241        5,  6,  6,  6,  6,  7,  7,  7,
242        7,  8,  8,  8,  8,  9,  9,  9,
243        9, 10, 10, 10, 10, 11, 11, 11,
244       11, 12, 12, 12, 12, 13, 13, 13,
245       13, 14, 14, 14, 14, 15, 15, 15,
246       15, 16, 16, 16, 16, 16, 16, 16,
247       16, 16, 16, 16, 16, 16, 16, 16,
248       16,
249     }
250 };
251
252 static const uint16_t bitalloc_3_codes[3] = {
253     0x0003, 0x0000, 0x0002,
254 };
255
256 static const uint8_t bitalloc_3_bits[3] = {
257     2,  1,  2,
258 };
259
260 static const uint16_t bitalloc_5_codes_a[5] = {
261     0x000F, 0x0006, 0x0000, 0x0002, 0x000E,
262 };
263
264 static const uint16_t bitalloc_5_codes_b[5] = {
265     0x0007, 0x0001, 0x0002, 0x0000, 0x0006,
266 };
267
268 static const uint16_t bitalloc_5_codes_c[5] = {
269     0x0007, 0x0005, 0x0000, 0x0004, 0x0006,
270 };
271
272 static const uint8_t bitalloc_5_bits_a[5] = {
273     4,  3,  1,  2,  4,
274 };
275
276 static const uint8_t bitalloc_5_bits_b[5] = {
277     3,  2,  2,  2,  3,
278 };
279
280 static const uint8_t bitalloc_5_bits_c[5] = {
281     3,  3,  1,  3,  3,
282 };
283
284 static const uint16_t bitalloc_7_codes_a[7] = {
285     0x001E, 0x000E, 0x0005, 0x0000, 0x0006, 0x0004, 0x001F,
286 };
287
288 static const uint16_t bitalloc_7_codes_b[7] = {
289     0x0014, 0x000B, 0x0000, 0x0003, 0x0001, 0x0004, 0x0015,
290 };
291
292 static const uint16_t bitalloc_7_codes_c[7] = {
293     0x0000, 0x0002, 0x0001, 0x0003, 0x0002, 0x0003, 0x0001,
294 };
295
296 static const uint8_t bitalloc_7_bits_a[7] = {
297     5,  4,  3,  1,  3,  3,  5,
298 };
299
300 static const uint8_t bitalloc_7_bits_b[7] = {
301     5,  4,  2,  2,  2,  3,  5,
302 };
303
304 static const uint8_t bitalloc_7_bits_c[7] = {
305     4,  4,  2,  2,  2,  4,  4,
306 };
307
308 static const uint16_t bitalloc_9_codes_a[9] = {
309     0x0030, 0x0019, 0x0009, 0x0005, 0x0000, 0x0007, 0x000D, 0x0008,
310     0x0031,
311 };
312
313 static const uint16_t bitalloc_9_codes_b[9] = {
314     0x0018, 0x001A, 0x0002, 0x0007, 0x0002, 0x0000, 0x0003, 0x001B,
315     0x0019,
316 };
317
318 static const uint16_t bitalloc_9_codes_c[9] = {
319     0x001C, 0x000F, 0x0002, 0x0007, 0x0002, 0x0000, 0x0006, 0x0006,
320     0x001D,
321 };
322
323 static const uint8_t bitalloc_9_bits_a[9] = {
324     6,  5,  4,  3,  1,  3,  4,  4,  6,
325 };
326
327 static const uint8_t bitalloc_9_bits_b[9] = {
328     5,  5,  3,  3,  2,  2,  3,  5,  5,
329 };
330
331 static const uint8_t bitalloc_9_bits_c[9] = {
332     6,  5,  3,  3,  2,  2,  3,  4,  6,
333 };
334
335 static const uint16_t bitalloc_13_codes_a[13] = {
336     0x0070, 0x002E, 0x0039, 0x001D, 0x000C, 0x000F, 0x0000, 0x0004,
337     0x000D, 0x000A, 0x0016, 0x002F, 0x0071,
338 };
339
340 static const uint16_t bitalloc_13_codes_b[13] = {
341     0x0038, 0x0010, 0x001D, 0x0007, 0x000F, 0x0005, 0x0000, 0x0006,
342     0x0002, 0x0009, 0x0006, 0x0011, 0x0039,
343 };
344
345 static const uint16_t bitalloc_13_codes_c[13] = {
346     0x0004, 0x001A, 0x0003, 0x000E, 0x0000, 0x0003, 0x0005, 0x0004,
347     0x0002, 0x000F, 0x000C, 0x001B, 0x0005,
348 };
349
350 static const uint8_t bitalloc_13_bits_a[13] = {
351      7,  6,  6,  5,  4,  4,  1,  3,  4,  4,  5,  6,  7,
352 };
353
354 static const uint8_t bitalloc_13_bits_b[13] = {
355      6,  5,  5,  4,  4,  3,  2,  3,  3,  4,  4,  5,  6,
356 };
357
358 static const uint8_t bitalloc_13_bits_c[13] = {
359      5,  5,  4,  4,  3,  3,  3,  3,  3,  4,  4,  5,  5,
360 };
361
362 static const uint16_t bitalloc_17_codes_a[17] = {
363     0x0154, 0x00AB, 0x002B, 0x000B, 0x0003, 0x000A, 0x0001, 0x0006,
364     0x0001, 0x0007, 0x0004, 0x000B, 0x0000, 0x0004, 0x0014, 0x0054,
365     0x0155,
366 };
367
368 static const uint16_t bitalloc_17_codes_b[17] = {
369     0x007C, 0x003F, 0x0019, 0x000D, 0x001C, 0x0008, 0x000F, 0x0005,
370     0x0000, 0x0006, 0x0002, 0x0009, 0x001D, 0x000E, 0x001E, 0x0018,
371     0x007D,
372 };
373
374 static const uint16_t bitalloc_17_codes_c[17] = {
375     0x002C, 0x0017, 0x0005, 0x001C, 0x0003, 0x000A, 0x000F, 0x0003,
376     0x0006, 0x0004, 0x0000, 0x000B, 0x0004, 0x001D, 0x000A, 0x0004,
377     0x002D,
378 };
379
380 static const uint16_t bitalloc_17_codes_d[17] = {
381     0x0100, 0x0102, 0x0082, 0x0042, 0x0022, 0x0012, 0x000A, 0x0006,
382     0x0000, 0x0007, 0x000B, 0x0013, 0x0023, 0x0043, 0x0083, 0x0103,
383     0x0101,
384 };
385
386 static const uint16_t bitalloc_17_codes_e[17] = {
387     0x00E8, 0x00F6, 0x0075, 0x0034, 0x003B, 0x001B, 0x001F, 0x0004,
388     0x0000, 0x0005, 0x000C, 0x001C, 0x003C, 0x0035, 0x007A, 0x00F7,
389     0x00E9,
390 };
391
392 static const uint16_t bitalloc_17_codes_f[17] = {
393     0x0004, 0x0003, 0x001E, 0x0001, 0x0001, 0x000E, 0x0001, 0x0004,
394     0x0006, 0x0005, 0x0002, 0x000F, 0x0006, 0x000E, 0x001F, 0x0000,
395     0x0005,
396 };
397
398 static const uint16_t bitalloc_17_codes_g[17] = {
399     0x0060, 0x007E, 0x0031, 0x0019, 0x000D, 0x0004, 0x0000, 0x0006,
400     0x0002, 0x0007, 0x0001, 0x0005, 0x000E, 0x001E, 0x003E, 0x007F,
401     0x0061,
402 };
403
404 static const uint8_t bitalloc_17_bits_a[17] = {
405     12, 11,  9,  7,  5,  4,  3,  3,  2,  3,  3,  4,  4,  6,  8, 10,
406     12,
407 };
408
409 static const uint8_t bitalloc_17_bits_b[17] = {
410     8,  7,  6,  5,  5,  4,  4,  3,  2,  3,  3,  4,  5,  5,  6,  6,
411     8,
412 };
413
414 static const uint8_t bitalloc_17_bits_c[17] = {
415     7,  6,  5,  5,  4,  4,  4,  3,  3,  3,  3,  4,  4,  5,  5,  5,
416     7,
417 };
418
419 static const uint8_t bitalloc_17_bits_d[17] = {
420     9,  9,  8,  7,  6,  5,  4,  3,  1,  3,  4,  5,  6,  7,  8,  9,
421     9,
422 };
423
424 static const uint8_t bitalloc_17_bits_e[17] = {
425     8,  8,  7,  6,  6,  5,  5,  3,  1,  3,  4,  5,  6,  6,  7,  8,
426     8,
427 };
428
429 static const uint8_t bitalloc_17_bits_f[17] = {
430     8,  7,  6,  5,  4,  4,  3,  3,  3,  3,  3,  4,  4,  5,  6,  6,
431     8,
432 };
433
434 static const uint8_t bitalloc_17_bits_g[17] = {
435     8,  8,  7,  6,  5,  4,  3,  3,  2,  3,  3,  4,  5,  6,  7,  8,
436     8,
437 };
438
439 static const uint16_t bitalloc_25_codes_a[25] = {
440     0x2854, 0x142B, 0x050B, 0x0143, 0x00A2, 0x0052, 0x002E, 0x0015,
441     0x0004, 0x000E, 0x0000, 0x0003, 0x0006, 0x0004, 0x0001, 0x000F,
442     0x0005, 0x0016, 0x002F, 0x0053, 0x00A3, 0x00A0, 0x0284, 0x0A14,
443     0x2855,
444 };
445
446 static const uint16_t bitalloc_25_codes_b[25] = {
447     0x001C, 0x000F, 0x0005, 0x0000, 0x0030, 0x0036, 0x000E, 0x0019,
448     0x0001, 0x0008, 0x000E, 0x0001, 0x0005, 0x0002, 0x000F, 0x0009,
449     0x0006, 0x001A, 0x000F, 0x0037, 0x0031, 0x0001, 0x0006, 0x0004,
450     0x001D,
451 };
452
453 static const uint16_t bitalloc_25_codes_c[25] = {
454     0x004C, 0x0027, 0x006D, 0x0028, 0x0037, 0x000E, 0x0015, 0x0000,
455     0x0005, 0x0008, 0x000B, 0x000E, 0x0001, 0x000F, 0x000C, 0x0009,
456     0x0006, 0x0001, 0x001A, 0x000F, 0x0008, 0x0029, 0x0012, 0x006C,
457     0x004D,
458 };
459
460 static const uint16_t bitalloc_25_codes_d[25] = {
461     0x0780, 0x0782, 0x03C2, 0x01E2, 0x00FE, 0x0079, 0x003D, 0x001C,
462     0x000C, 0x0004, 0x0000, 0x0006, 0x0002, 0x0007, 0x0001, 0x0005,
463     0x000D, 0x001D, 0x003E, 0x007E, 0x00FF, 0x01E3, 0x03C3, 0x0783,
464     0x0781,
465 };
466
467 static const uint16_t bitalloc_25_codes_e[25] = {
468     0x003C, 0x0092, 0x0018, 0x001F, 0x004E, 0x000D, 0x0025, 0x0004,
469     0x0010, 0x0000, 0x000A, 0x0002, 0x0003, 0x0003, 0x000B, 0x0001,
470     0x0011, 0x0005, 0x0026, 0x000E, 0x004F, 0x0048, 0x0019, 0x0093,
471     0x003D,
472 };
473
474 static const uint16_t bitalloc_25_codes_f[25] = {
475     0x0324, 0x0193, 0x00CE, 0x0065, 0x0024, 0x000C, 0x0013, 0x0004,
476     0x0007, 0x000A, 0x000D, 0x000F, 0x0001, 0x0000, 0x000E, 0x000B,
477     0x0008, 0x0005, 0x0018, 0x000D, 0x0025, 0x0066, 0x00CF, 0x00C8,
478     0x0325,
479 };
480
481 static const uint16_t bitalloc_25_codes_g[25] = {
482     0x03A8, 0x03AE, 0x01D5, 0x0094, 0x0014, 0x004B, 0x000B, 0x003B,
483     0x0013, 0x0003, 0x000F, 0x0005, 0x0001, 0x0006, 0x0000, 0x0008,
484     0x001C, 0x0004, 0x0024, 0x0074, 0x0015, 0x0095, 0x01D6, 0x03AF,
485     0x03A9,
486 };
487
488 static const uint8_t bitalloc_25_bits_a[25] = {
489     14, 13, 11,  9,  8,  7,  6,  5,  4,  4,  3,  3,  3,  3,  3,  4,
490      4,  5,  6,  7,  8,  8, 10, 12, 14,
491 };
492
493 static const uint8_t bitalloc_25_bits_b[25] = {
494     9,  8,  7,  6,  6,  6,  5,  5,  4,  4,  4,  3,  3,  3,  4,  4,
495     4,  5,  5,  6,  6,  6,  7,  7,  9,
496 };
497
498 static const uint8_t bitalloc_25_bits_c[25] = {
499     8,  7,  7,  6,  6,  5,  5,  4,  4,  4,  4,  4,  3,  4,  4,  4,
500     4,  4,  5,  5,  5,  6,  6,  7,  8,
501 };
502
503 static const uint8_t bitalloc_25_bits_d[25] = {
504     12, 12, 11, 10,  9,  8,  7,  6,  5,  4,  3,  3,  2,  3,  3,  4,
505      5,  6,  7,  8,  9, 10, 11, 12, 12,
506 };
507
508 static const uint8_t bitalloc_25_bits_e[25] = {
509     8,  8,  7,  7,  7,  6,  6,  5,  5,  4,  4,  3,  2,  3,  4,  4,
510     5,  5,  6,  6,  7,  7,  7,  8,  8,
511 };
512
513 static const uint8_t bitalloc_25_bits_f[25] = {
514     10,  9,  8,  7,  6,  5,  5,  4,  4,  4,  4,  4,  3,  3,  4,  4,
515      4,  4,  5,  5,  6,  7,  8,  8, 10,
516 };
517
518 static const uint8_t bitalloc_25_bits_g[25] = {
519     10, 10,  9,  8,  7,  7,  6,  6,  5,  4,  4,  3,  2,  3,  3,  4,
520      5,  5,  6,  7,  7,  8,  9, 10, 10,
521 };
522
523 static const uint16_t bitalloc_33_codes_a[33] = {
524     0x1580, 0x1582, 0x0AC2, 0x0562, 0x02B2, 0x015E, 0x00AD, 0x0054,
525     0x001C, 0x003C, 0x000F, 0x001F, 0x0008, 0x000B, 0x000D, 0x0000,
526     0x0002, 0x0001, 0x000E, 0x000C, 0x0009, 0x0006, 0x0014, 0x003D,
527     0x001D, 0x0055, 0x00AE, 0x015F, 0x02B3, 0x0563, 0x0AC3, 0x1583,
528     0x1581,
529 };
530
531 static const uint16_t bitalloc_33_codes_b[33] = {
532     0x030C, 0x0187, 0x006D, 0x0028, 0x0037, 0x0066, 0x0015, 0x0031,
533     0x0000, 0x000B, 0x0012, 0x001A, 0x0001, 0x0007, 0x000A, 0x000E,
534     0x0001, 0x000F, 0x000B, 0x0008, 0x0004, 0x001B, 0x0013, 0x000C,
535     0x0001, 0x0032, 0x001A, 0x0067, 0x0060, 0x0029, 0x00C2, 0x006C,
536     0x030D,
537 };
538
539 static const uint16_t bitalloc_33_codes_c[33] = {
540     0x00CC, 0x0067, 0x0005, 0x0070, 0x0003, 0x001A, 0x0039, 0x003F,
541     0x000A, 0x0012, 0x0018, 0x001D, 0x0001, 0x0003, 0x0007, 0x000A,
542     0x000D, 0x000B, 0x0008, 0x0004, 0x0002, 0x001E, 0x0019, 0x0013,
543     0x000B, 0x0000, 0x003E, 0x001B, 0x0018, 0x0071, 0x0032, 0x0004,
544     0x00CD,
545 };
546
547 static const uint16_t bitalloc_33_codes_d[33] = {
548     0x3AF8, 0x3AFA, 0x1D7E, 0x0EBC, 0x075C, 0x03AC, 0x01D4, 0x0094,
549     0x0014, 0x004B, 0x000B, 0x003B, 0x0013, 0x0003, 0x000F, 0x0005,
550     0x0001, 0x0006, 0x0000, 0x0008, 0x001C, 0x0004, 0x0024, 0x0074,
551     0x0015, 0x0095, 0x01D5, 0x03AD, 0x075D, 0x0EBD, 0x1D7F, 0x3AFB,
552     0x3AF9,
553 };
554
555 static const uint16_t bitalloc_33_codes_e[33] = {
556     0x01C8, 0x01E6, 0x0064, 0x00E2, 0x00E5, 0x0030, 0x0033, 0x0073,
557     0x007A, 0x001A, 0x003A, 0x0002, 0x001A, 0x001F, 0x0007, 0x0001,
558     0x0002, 0x0002, 0x000C, 0x0000, 0x001B, 0x0003, 0x003B, 0x001B,
559     0x007B, 0x0078, 0x0070, 0x0031, 0x00F2, 0x00E3, 0x0065, 0x01E7,
560     0x01C9,
561 };
562
563 static const uint16_t bitalloc_33_codes_f[33] = {
564     0x0724, 0x0393, 0x01CE, 0x00E5, 0x002C, 0x0008, 0x0017, 0x003E,
565     0x0005, 0x0014, 0x001D, 0x0000, 0x0003, 0x0006, 0x0008, 0x000B,
566     0x000D, 0x000C, 0x0009, 0x0007, 0x0004, 0x0001, 0x001E, 0x0015,
567     0x000A, 0x003F, 0x0038, 0x0009, 0x002D, 0x00E6, 0x01CF, 0x01C8,
568     0x0725,
569 };
570
571 static const uint16_t bitalloc_33_codes_g[33] = {
572     0x0284, 0x0042, 0x0140, 0x0143, 0x003E, 0x00BE, 0x0011, 0x0051,
573     0x0009, 0x0029, 0x0005, 0x0015, 0x0000, 0x0008, 0x000E, 0x0002,
574     0x0006, 0x0003, 0x000F, 0x0009, 0x0001, 0x0016, 0x0006, 0x002E,
575     0x000E, 0x005E, 0x001E, 0x00BF, 0x003F, 0x0020, 0x0141, 0x0043,
576     0x0285,
577 };
578
579 static const uint8_t bitalloc_33_bits_a[33] = {
580     13, 13, 12, 11, 10,  9,  8,  7,  6,  6,  5,  5,  4,  4,  4,  3,
581      3,  3,  4,  4,  4,  4,  5,  6,  6,  7,  8,  9, 10, 11, 12, 13,
582     13,
583 };
584
585 static const uint8_t bitalloc_33_bits_b[33] = {
586     10,  9,  8,  7,  7,  7,  6,  6,  5,  5,  5,  5,  4,  4,  4,  4,
587      3,  4,  4,  4,  4,  5,  5,  5,  5,  6,  6,  7,  7,  7,  8,  8,
588     10,
589 };
590
591 static const uint8_t bitalloc_33_bits_c[33] = {
592     9,  8,  7,  7,  6,  6,  6,  6,  5,  5,  5,  5,  4,  4,  4,  4,
593     4,  4,  4,  4,  4,  5,  5,  5,  5,  5,  6,  6,  6,  7,  7,  7,
594     9,
595 };
596
597 static const uint8_t bitalloc_33_bits_d[33] = {
598     14, 14, 13, 12, 11, 10,  9,  8,  7,  7,  6,  6,  5,  4,  4,  3,
599      2,  3,  3,  4,  5,  5,  6,  7,  7,  8,  9, 10, 11, 12, 13, 14,
600     14,
601 };
602
603 static const uint8_t bitalloc_33_bits_e[33] = {
604     9,  9,  8,  8,  8,  7,  7,  7,  7,  6,  6,  5,  5,  5,  4,  3,
605     2,  3,  4,  4,  5,  5,  6,  6,  7,  7,  7,  7,  8,  8,  8,  9,
606     9,
607 };
608
609 static const uint8_t bitalloc_33_bits_f[33] = {
610     11, 10,  9,  8,  7,  6,  6,  6,  5,  5,  5,  4,  4,  4,  4,  4,
611      4,  4,  4,  4,  4,  4,  5,  5,  5,  6,  6,  6,  7,  8,  9,  9,
612     11,
613 };
614
615 static const uint8_t bitalloc_33_bits_g[33] = {
616     10,  9,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  4,  3,
617      3,  3,  4,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  8,  9,  9,
618     10,
619 };
620
621 static const uint16_t bitalloc_65_codes_a[65] = {
622     0x9E5C, 0x9E5E, 0x4F2C, 0x2794, 0x13C4, 0x1E44, 0x09E3, 0x0F23,
623     0x04F3, 0x0792, 0x027E, 0x03CE, 0x013D, 0x01E5, 0x009C, 0x00CC,
624     0x0040, 0x0058, 0x0067, 0x001E, 0x0021, 0x002D, 0x003D, 0x0007,
625     0x0011, 0x0014, 0x0017, 0x001A, 0x001C, 0x001F, 0x0001, 0x0004,
626     0x0006, 0x0005, 0x0002, 0x0000, 0x001D, 0x001B, 0x0018, 0x0015,
627     0x0012, 0x000E, 0x0006, 0x0032, 0x0026, 0x001F, 0x0078, 0x0059,
628     0x0041, 0x00CD, 0x009D, 0x01E6, 0x013E, 0x03CF, 0x027F, 0x0793,
629     0x0790, 0x04F0, 0x09E4, 0x1E45, 0x13C5, 0x2795, 0x4F2D, 0x9E5F,
630     0x9E5D,
631 };
632
633 static const uint16_t bitalloc_65_codes_b[65] = {
634     0x0A8C, 0x0547, 0x01B5, 0x0008, 0x00DB, 0x0152, 0x0005, 0x000B,
635     0x008E, 0x00AE, 0x00E4, 0x0003, 0x0037, 0x0039, 0x0055, 0x006C,
636     0x0073, 0x0003, 0x0015, 0x001D, 0x0028, 0x0030, 0x0037, 0x003E,
637     0x0006, 0x000B, 0x000F, 0x0012, 0x0016, 0x0019, 0x001D, 0x0001,
638     0x0004, 0x0002, 0x001E, 0x001A, 0x0017, 0x0013, 0x0010, 0x000C,
639     0x0007, 0x003F, 0x0038, 0x0031, 0x0029, 0x0022, 0x001A, 0x0014,
640     0x0000, 0x006D, 0x0056, 0x0046, 0x0038, 0x0004, 0x00E5, 0x00AF,
641     0x008F, 0x006C, 0x000A, 0x0153, 0x0150, 0x0009, 0x02A2, 0x01B4,
642     0x0A8D,
643 };
644
645 static const uint16_t bitalloc_65_codes_c[65] = {
646     0x045C, 0x022F, 0x03F5, 0x01BC, 0x01FB, 0x0059, 0x00D0, 0x00DF,
647     0x000A, 0x002D, 0x002F, 0x0052, 0x0069, 0x0078, 0x007F, 0x000A,
648     0x0010, 0x001C, 0x0023, 0x002A, 0x0035, 0x003A, 0x003D, 0x0000,
649     0x0003, 0x0006, 0x0009, 0x000C, 0x000F, 0x0012, 0x0016, 0x0018,
650     0x001C, 0x0019, 0x0017, 0x0013, 0x0010, 0x000D, 0x000A, 0x0007,
651     0x0004, 0x0001, 0x003E, 0x003B, 0x0036, 0x002B, 0x0028, 0x001D,
652     0x0011, 0x000B, 0x0004, 0x0079, 0x006E, 0x0053, 0x0044, 0x002E,
653     0x000B, 0x00FC, 0x00D1, 0x008A, 0x0058, 0x01BD, 0x0116, 0x03F4,
654     0x045D,
655 };
656
657 static const uint16_t bitalloc_65_codes_d[65] = {
658     0x70B0, 0x70B2, 0x70B4, 0x2852, 0x385B, 0x142E, 0x1C2E, 0x0A15,
659     0x0E14, 0x0214, 0x0704, 0x0104, 0x010B, 0x0383, 0x0083, 0x0143,
660     0x01C3, 0x0043, 0x00A2, 0x00E2, 0x0022, 0x0052, 0x0072, 0x0012,
661     0x002A, 0x003A, 0x000A, 0x0016, 0x001E, 0x0006, 0x000C, 0x0000,
662     0x0004, 0x0001, 0x000D, 0x0007, 0x001F, 0x0017, 0x000B, 0x003B,
663     0x002B, 0x0013, 0x0073, 0x0053, 0x0023, 0x00E3, 0x00A3, 0x00A0,
664     0x0040, 0x01C0, 0x0084, 0x0384, 0x0284, 0x0105, 0x0705, 0x0215,
665     0x0E15, 0x0A16, 0x1C2F, 0x142F, 0x1428, 0x2853, 0x70B5, 0x70B3,
666     0x70B1,
667 };
668
669 static const uint16_t bitalloc_65_codes_e[65] = {
670     0x032C, 0x0332, 0x0378, 0x037E, 0x008C, 0x014A, 0x0188, 0x0197,
671     0x019E, 0x01BD, 0x0044, 0x0047, 0x00AA, 0x00C5, 0x00CD, 0x00DC,
672     0x001C, 0x002C, 0x0053, 0x0063, 0x0068, 0x0008, 0x000F, 0x0017,
673     0x002B, 0x0035, 0x0005, 0x0009, 0x0016, 0x001C, 0x0006, 0x000F,
674     0x0004, 0x0000, 0x0007, 0x001D, 0x0017, 0x000A, 0x0006, 0x0036,
675     0x0030, 0x0028, 0x0010, 0x0009, 0x0069, 0x0064, 0x0054, 0x002D,
676     0x001D, 0x00DD, 0x00CE, 0x00CA, 0x00AB, 0x00A4, 0x0045, 0x01BE,
677     0x019F, 0x0198, 0x0189, 0x014B, 0x008D, 0x037F, 0x0379, 0x0333,
678     0x032D,
679 };
680
681 static const uint16_t bitalloc_65_codes_f[65] = {
682     0x0FE0, 0x0FE2, 0x0FE8, 0x0FEA, 0x0FEC, 0x0FEE, 0x0FF0, 0x0FF2,
683     0x0FF4, 0x2FF2, 0x07F2, 0x07FB, 0x03F6, 0x0BFA, 0x0BFD, 0x01FF,
684     0x05FF, 0x02FC, 0x007C, 0x017C, 0x003C, 0x00BC, 0x001C, 0x005C,
685     0x000C, 0x002C, 0x0004, 0x0014, 0x0000, 0x0008, 0x000E, 0x0002,
686     0x0006, 0x0003, 0x000F, 0x0009, 0x0001, 0x0015, 0x0005, 0x002D,
687     0x000D, 0x005D, 0x001D, 0x00BD, 0x003D, 0x017D, 0x007D, 0x02FD,
688     0x00FC, 0x05FC, 0x01FA, 0x0BFB, 0x03F7, 0x17F8, 0x07F3, 0x2FF3,
689     0x0FF5, 0x0FF3, 0x0FF1, 0x0FEF, 0x0FED, 0x0FEB, 0x0FE9, 0x0FE3,
690     0x0FE1,
691 };
692
693 static const uint16_t bitalloc_65_codes_g[65] = {
694     0x010C, 0x038A, 0x0608, 0x0786, 0x0084, 0x0087, 0x0302, 0x0305,
695     0x0040, 0x00E0, 0x00E3, 0x0183, 0x001E, 0x005E, 0x009E, 0x00DE,
696     0x00F1, 0x0011, 0x0039, 0x0061, 0x0079, 0x0009, 0x001D, 0x0031,
697     0x003D, 0x0005, 0x000F, 0x0019, 0x001F, 0x0003, 0x0006, 0x000A,
698     0x000E, 0x000B, 0x0008, 0x0004, 0x0000, 0x001A, 0x0012, 0x000A,
699     0x0002, 0x0036, 0x0026, 0x0016, 0x0006, 0x006E, 0x004E, 0x002E,
700     0x000E, 0x00DF, 0x009F, 0x005F, 0x001F, 0x01E0, 0x0180, 0x00E1,
701     0x0041, 0x03C2, 0x0303, 0x01C4, 0x0085, 0x0787, 0x0609, 0x038B,
702     0x010D,
703 };
704
705 static const uint8_t bitalloc_65_bits_a[65] = {
706     16, 16, 15, 14, 13, 13, 12, 12, 11, 11, 10, 10,  9,  9,  8,  8,
707      7,  7,  7,  6,  6,  6,  6,  5,  5,  5,  5,  5,  5,  5,  4,  4,
708      4,  4,  4,  4,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  7,  7,
709      7,  8,  8,  9,  9, 10, 10, 11, 11, 11, 12, 13, 13, 14, 15, 16,
710     16,
711 };
712
713 static const uint8_t bitalloc_65_bits_b[65] = {
714     12, 11, 10,  9,  9,  9,  8,  8,  8,  8,  8,  7,  7,  7,  7,  7,
715      7,  6,  6,  6,  6,  6,  6,  6,  5,  5,  5,  5,  5,  5,  5,  4,
716      4,  4,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  6,
717      6,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  9,  9,  9, 10, 10,
718     12,
719 };
720
721 static const uint8_t bitalloc_65_bits_c[65] = {
722     11, 10, 10,  9,  9,  8,  8,  8,  7,  7,  7,  7,  7,  7,  7,  6,
723      6,  6,  6,  6,  6,  6,  6,  5,  5,  5,  5,  5,  5,  5,  5,  5,
724      5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,
725      6,  6,  6,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  9,  9, 10,
726     11,
727 };
728
729 static const uint8_t bitalloc_65_bits_d[65] = {
730     15, 15, 15, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 10,  9,  9,
731      9,  8,  8,  8,  7,  7,  7,  6,  6,  6,  5,  5,  5,  4,  4,  3,
732      3,  3,  4,  4,  5,  5,  5,  6,  6,  6,  7,  7,  7,  8,  8,  8,
733      8,  9,  9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 15, 15,
734     15,
735 };
736
737 static const uint8_t bitalloc_65_bits_e[65] = {
738     10, 10, 10, 10,  9,  9,  9,  9,  9,  9,  8,  8,  8,  8,  8,  8,
739      7,  7,  7,  7,  7,  6,  6,  6,  6,  6,  5,  5,  5,  5,  4,  4,
740      3,  3,  4,  5,  5,  5,  5,  6,  6,  6,  6,  6,  7,  7,  7,  7,
741      7,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9, 10, 10, 10,
742     10,
743 };
744
745 static const uint8_t bitalloc_65_bits_f[65] = {
746     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 13, 13, 12, 12, 12, 11,
747     11, 10,  9,  9,  8,  8,  7,  7,  6,  6,  5,  5,  4,  4,  4,  3,
748      3,  3,  4,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9,  9, 10,
749     10, 11, 11, 12, 12, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14,
750     14,
751 };
752
753 static const uint8_t bitalloc_65_bits_g[65] = {
754     11, 11, 11, 11, 10, 10, 10, 10,  9,  9,  9,  9,  8,  8,  8,  8,
755      8,  7,  7,  7,  7,  6,  6,  6,  6,  5,  5,  5,  5,  4,  4,  4,
756      4,  4,  4,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,
757      7,  8,  8,  8,  8,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11,
758     11,
759 };
760
761 static const uint16_t bitalloc_129_codes_a[129] = {
762     0x0660, 0x0666, 0x06EC, 0x0722, 0x0760, 0x076E, 0x004C, 0x004E,
763     0x00F4, 0x010A, 0x0148, 0x0156, 0x01D4, 0x01F2, 0x0331, 0x0370,
764     0x0377, 0x0396, 0x03B1, 0x0024, 0x0064, 0x007B, 0x008A, 0x00A5,
765     0x00D4, 0x00EB, 0x00FA, 0x019A, 0x01B9, 0x01C9, 0x01D9, 0x0010,
766     0x0030, 0x0033, 0x0043, 0x0053, 0x006B, 0x007A, 0x00CA, 0x00D2,
767     0x00DE, 0x00E6, 0x00F6, 0x000E, 0x001F, 0x0023, 0x002B, 0x003B,
768     0x003F, 0x0067, 0x0070, 0x0077, 0x0005, 0x000D, 0x0012, 0x001B,
769     0x002C, 0x0035, 0x003A, 0x0004, 0x000B, 0x0017, 0x001F, 0x0009,
770     0x0008, 0x000A, 0x0000, 0x0018, 0x000C, 0x0005, 0x003C, 0x0036,
771     0x002D, 0x001C, 0x0013, 0x000E, 0x0006, 0x007A, 0x0071, 0x0068,
772     0x0064, 0x003C, 0x0034, 0x0028, 0x0020, 0x000F, 0x00F7, 0x00E7,
773     0x00DF, 0x00D3, 0x00CB, 0x007B, 0x0074, 0x0054, 0x0044, 0x003C,
774     0x0031, 0x0011, 0x01DA, 0x01CA, 0x01BA, 0x019B, 0x00FB, 0x00F8,
775     0x00D5, 0x00AA, 0x008B, 0x0084, 0x0065, 0x0025, 0x03B6, 0x0397,
776     0x0390, 0x0371, 0x0332, 0x01F3, 0x01D5, 0x0157, 0x0149, 0x010B,
777     0x00F5, 0x004F, 0x004D, 0x076F, 0x0761, 0x0723, 0x06ED, 0x0667,
778     0x0661,
779 };
780
781 static const uint16_t bitalloc_129_codes_b[129] = {
782     0x29DC, 0x14EF, 0x0455, 0x0E9C, 0x022B, 0x0489, 0x0740, 0x074F,
783     0x0172, 0x0245, 0x0247, 0x030A, 0x03A1, 0x001C, 0x008B, 0x00D6,
784     0x010C, 0x0148, 0x014F, 0x0186, 0x01D1, 0x0008, 0x000F, 0x0046,
785     0x005D, 0x0078, 0x0087, 0x0096, 0x00A5, 0x00BC, 0x00D8, 0x00DE,
786     0x00F6, 0x0005, 0x0014, 0x0024, 0x002F, 0x003A, 0x003D, 0x0049,
787     0x0050, 0x0058, 0x005F, 0x0066, 0x006D, 0x0075, 0x007C, 0x0004,
788     0x000B, 0x0013, 0x0018, 0x001B, 0x001F, 0x0022, 0x0026, 0x002A,
789     0x002D, 0x0031, 0x0034, 0x0038, 0x003B, 0x003F, 0x0003, 0x0006,
790     0x000A, 0x0007, 0x0004, 0x0000, 0x003C, 0x0039, 0x0035, 0x0032,
791     0x002E, 0x002B, 0x0027, 0x0023, 0x0020, 0x001C, 0x0019, 0x0016,
792     0x0010, 0x0005, 0x007D, 0x007A, 0x006E, 0x0067, 0x0060, 0x0059,
793     0x0051, 0x004A, 0x0042, 0x003B, 0x0034, 0x0025, 0x0015, 0x0006,
794     0x00F7, 0x00DF, 0x00D9, 0x00BD, 0x00A6, 0x0097, 0x0090, 0x0079,
795     0x006A, 0x0047, 0x0044, 0x0009, 0x01D2, 0x0187, 0x0184, 0x0149,
796     0x010D, 0x00D7, 0x00B8, 0x001D, 0x03A6, 0x030B, 0x029C, 0x0246,
797     0x0173, 0x0114, 0x0741, 0x053A, 0x0488, 0x0E9D, 0x0A76, 0x0454,
798     0x29DD,
799 };
800
801 static const uint16_t bitalloc_129_codes_c[129] = {
802     0x0E5C, 0x072F, 0x001D, 0x0724, 0x000F, 0x010D, 0x0324, 0x0393,
803     0x03E9, 0x0080, 0x0087, 0x00FA, 0x0164, 0x0193, 0x01DE, 0x01F5,
804     0x0010, 0x002A, 0x0041, 0x0064, 0x0073, 0x008E, 0x00A4, 0x00B3,
805     0x00D6, 0x00E5, 0x00F4, 0x00FB, 0x0002, 0x0009, 0x0013, 0x001E,
806     0x0026, 0x002C, 0x0033, 0x003F, 0x0041, 0x004C, 0x0053, 0x005E,
807     0x0065, 0x0070, 0x0073, 0x0078, 0x007B, 0x007E, 0x0002, 0x0005,
808     0x0007, 0x000B, 0x000D, 0x0011, 0x0014, 0x0017, 0x001A, 0x001D,
809     0x0021, 0x0024, 0x0027, 0x002A, 0x002D, 0x0030, 0x0033, 0x0036,
810     0x003A, 0x0037, 0x0034, 0x0031, 0x002E, 0x002B, 0x0028, 0x0025,
811     0x0022, 0x001E, 0x001B, 0x0018, 0x0015, 0x0012, 0x000E, 0x000C,
812     0x0008, 0x0006, 0x0003, 0x007F, 0x007C, 0x0079, 0x0076, 0x0071,
813     0x006A, 0x005F, 0x0058, 0x004D, 0x0046, 0x0040, 0x0038, 0x002D,
814     0x0027, 0x001F, 0x0014, 0x0012, 0x0003, 0x0000, 0x00F5, 0x00EE,
815     0x00D7, 0x00C8, 0x00A5, 0x008F, 0x007C, 0x0065, 0x0042, 0x002B,
816     0x0011, 0x0002, 0x01DF, 0x01C8, 0x0165, 0x00FB, 0x00E4, 0x0081,
817     0x0006, 0x03E8, 0x0325, 0x01CA, 0x010C, 0x0725, 0x0396, 0x001C,
818     0x0E5D,
819 };
820
821 static const uint16_t bitalloc_129_codes_d[129] = {
822     0xA598, 0xA59A, 0xA59C, 0xA59E, 0xC598, 0xE586, 0x3ACC, 0x52CA,
823     0x62CD, 0x0D48, 0x1D67, 0x2978, 0x3167, 0x3966, 0x06A5, 0x0EBC,
824     0x14BD, 0x1CB1, 0x0350, 0x0353, 0x075F, 0x0A5F, 0x0C5E, 0x0E5E,
825     0x01AE, 0x03AD, 0x052D, 0x062D, 0x072D, 0x00D5, 0x01D4, 0x0294,
826     0x0314, 0x0394, 0x0014, 0x0094, 0x0114, 0x0174, 0x01B4, 0x01F4,
827     0x000B, 0x004B, 0x008B, 0x00BB, 0x00DB, 0x00FB, 0x001B, 0x003B,
828     0x0053, 0x0063, 0x0073, 0x0003, 0x0013, 0x0023, 0x002F, 0x0037,
829     0x003F, 0x0007, 0x000F, 0x0015, 0x0019, 0x001D, 0x0001, 0x0005,
830     0x0009, 0x0006, 0x0002, 0x001E, 0x001A, 0x0016, 0x0010, 0x0008,
831     0x0000, 0x0038, 0x0030, 0x0028, 0x001C, 0x000C, 0x007C, 0x006C,
832     0x005C, 0x0044, 0x0024, 0x0004, 0x00E4, 0x00C4, 0x00A4, 0x0074,
833     0x0034, 0x01F5, 0x01B5, 0x0175, 0x0115, 0x0095, 0x0015, 0x0395,
834     0x0315, 0x0295, 0x01D5, 0x00D6, 0x072E, 0x062E, 0x052E, 0x03AE,
835     0x01AF, 0x0E5F, 0x0C5F, 0x0C58, 0x0A58, 0x0758, 0x0351, 0x1CB2,
836     0x18B2, 0x0EBD, 0x0EB2, 0x3967, 0x3960, 0x2979, 0x2964, 0x0D49,
837     0x72C2, 0x52CB, 0x3ACD, 0xE587, 0xC599, 0xA59F, 0xA59D, 0xA59B,
838     0xA599,
839 };
840
841 static const uint16_t bitalloc_129_codes_e[129] = {
842     0xA13C, 0xC720, 0xA13F, 0xA13E, 0xA13D, 0xE722, 0x5090, 0x6393,
843     0x7392, 0x2849, 0x31CE, 0x39CE, 0x1425, 0x18E5, 0x1CE5, 0x0844,
844     0x0A1C, 0x0C7C, 0x036C, 0x0423, 0x050F, 0x063F, 0x01B7, 0x0216,
845     0x0285, 0x031D, 0x039D, 0x0109, 0x0140, 0x0180, 0x01C8, 0x01CF,
846     0x007A, 0x008A, 0x00A2, 0x00C1, 0x00E5, 0x0014, 0x0037, 0x0043,
847     0x004E, 0x0056, 0x0061, 0x006C, 0x007C, 0x000B, 0x001C, 0x001F,
848     0x0023, 0x0025, 0x0029, 0x002C, 0x002E, 0x0032, 0x0034, 0x0037,
849     0x003A, 0x003C, 0x003F, 0x0001, 0x0003, 0x0006, 0x0008, 0x000A,
850     0x000C, 0x000B, 0x0009, 0x0007, 0x0004, 0x0002, 0x0000, 0x003D,
851     0x003B, 0x0038, 0x0035, 0x0033, 0x002F, 0x002D, 0x002A, 0x0026,
852     0x0024, 0x0020, 0x001D, 0x001A, 0x007D, 0x006D, 0x0062, 0x0057,
853     0x004F, 0x0044, 0x003C, 0x0015, 0x00E6, 0x00C6, 0x00A3, 0x008B,
854     0x007B, 0x006C, 0x01C9, 0x0181, 0x0141, 0x010A, 0x00DA, 0x031E,
855     0x0286, 0x0217, 0x0210, 0x0738, 0x0638, 0x0508, 0x036D, 0x0C7D,
856     0x0A1D, 0x0845, 0x1CE6, 0x18E6, 0x1426, 0x39CF, 0x31CF, 0x284E,
857     0x7393, 0x7390, 0x5091, 0xE723, 0xC724, 0xC725, 0xC722, 0xC723,
858     0xC721,
859 };
860
861 static const uint16_t bitalloc_129_codes_f[129] = {
862     0x762C, 0x3B17, 0x1555, 0x0608, 0x0AAB, 0x0FF2, 0x0305, 0x0307,
863     0x0763, 0x0046, 0x010C, 0x01BC, 0x02AB, 0x03B6, 0x03FD, 0x0080,
864     0x0087, 0x00DF, 0x0156, 0x01D9, 0x01F8, 0x01FF, 0x002A, 0x0041,
865     0x0061, 0x0094, 0x00D4, 0x00EA, 0x00F2, 0x00FD, 0x0009, 0x000B,
866     0x001A, 0x0026, 0x0031, 0x0040, 0x004B, 0x006B, 0x0073, 0x0077,
867     0x007A, 0x007C, 0x0000, 0x0002, 0x0006, 0x0008, 0x000B, 0x000E,
868     0x0011, 0x0014, 0x0016, 0x0019, 0x001C, 0x001E, 0x0021, 0x0023,
869     0x0026, 0x0028, 0x002B, 0x002D, 0x002F, 0x0031, 0x0033, 0x0036,
870     0x0038, 0x0037, 0x0034, 0x0032, 0x0030, 0x002E, 0x002C, 0x0029,
871     0x0027, 0x0024, 0x0022, 0x001F, 0x001D, 0x001A, 0x0017, 0x0015,
872     0x0012, 0x000F, 0x000C, 0x0009, 0x0007, 0x0003, 0x0001, 0x007D,
873     0x007B, 0x0078, 0x0074, 0x0072, 0x0054, 0x0041, 0x0036, 0x0027,
874     0x001B, 0x0014, 0x000A, 0x00FE, 0x00F3, 0x00EB, 0x00D5, 0x0095,
875     0x006E, 0x0042, 0x002B, 0x0010, 0x01F9, 0x01DA, 0x0157, 0x0154,
876     0x00C0, 0x0081, 0x0022, 0x03B7, 0x03B0, 0x01BD, 0x010D, 0x0047,
877     0x07F8, 0x0554, 0x0306, 0x0FF3, 0x0EC4, 0x0609, 0x1D8A, 0x1554,
878     0x762D,
879 };
880
881 static const uint16_t bitalloc_129_codes_g[129] = {
882     0x1E20, 0x1E5E, 0x031C, 0x051A, 0x0718, 0x0916, 0x0B14, 0x0D12,
883     0x0F11, 0x0090, 0x018F, 0x028E, 0x038D, 0x048C, 0x058B, 0x068A,
884     0x0789, 0x0049, 0x00C8, 0x0148, 0x01C7, 0x0247, 0x02C6, 0x0346,
885     0x03C5, 0x0025, 0x0065, 0x00A5, 0x00E4, 0x0124, 0x0164, 0x01A4,
886     0x01E3, 0x0013, 0x0033, 0x0053, 0x0073, 0x0093, 0x00B3, 0x00D3,
887     0x00F3, 0x000A, 0x001A, 0x002A, 0x003A, 0x004A, 0x005A, 0x006A,
888     0x007A, 0x0006, 0x000E, 0x0016, 0x001E, 0x0026, 0x002E, 0x0036,
889     0x003E, 0x0004, 0x0008, 0x000C, 0x0010, 0x0014, 0x0018, 0x001C,
890     0x0000, 0x001D, 0x0019, 0x0015, 0x0011, 0x000D, 0x0009, 0x0005,
891     0x003F, 0x0037, 0x002F, 0x0027, 0x001F, 0x0017, 0x000F, 0x0007,
892     0x007B, 0x006B, 0x005B, 0x004B, 0x003B, 0x002B, 0x001B, 0x000B,
893     0x0008, 0x00F0, 0x00D0, 0x00B0, 0x0090, 0x0070, 0x0050, 0x0030,
894     0x01E4, 0x01A5, 0x0165, 0x0125, 0x00E5, 0x00E2, 0x00A2, 0x0062,
895     0x03CA, 0x0347, 0x02C7, 0x02C4, 0x0244, 0x0149, 0x00C9, 0x00C6,
896     0x0796, 0x068B, 0x0688, 0x048D, 0x048A, 0x028F, 0x028C, 0x0091,
897     0x0F2E, 0x0D13, 0x0B15, 0x0917, 0x0719, 0x051B, 0x031D, 0x1E5F,
898     0x1E21,
899 };
900
901 static const uint8_t bitalloc_129_bits_a[129] = {
902     11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
903     10, 10, 10,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  8,
904      8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  7,  7,  7,  7,  7,
905      7,  7,  7,  7,  6,  6,  6,  6,  6,  6,  6,  5,  5,  5,  5,  4,
906      4,  4,  4,  5,  5,  5,  6,  6,  6,  6,  6,  6,  6,  7,  7,  7,
907      7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
908      8,  8,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10,
909     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,
910     11,
911 };
912
913 static const uint8_t bitalloc_129_bits_b[129] = {
914     14, 13, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 10,  9,  9,  9,
915      9,  9,  9,  9,  9,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
916      8,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  6,
917      6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  5,  5,
918      5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
919      6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,
920      8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,
921      9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12,
922     14,
923 };
924
925 static const uint8_t bitalloc_129_bits_c[129] = {
926     13, 12, 11, 11, 10, 10, 10, 10, 10,  9,  9,  9,  9,  9,  9,  9,
927      8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  7,  7,  7,  7,
928      7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  6,  6,
929      6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
930      6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
931      6,  6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,
932      7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
933      8,  8,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11,
934     13,
935 };
936
937 static const uint8_t bitalloc_129_bits_d[129] = {
938     16, 16, 16, 16, 16, 16, 15, 15, 15, 14, 14, 14, 14, 14, 13, 13,
939     13, 13, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 10, 10, 10,
940     10, 10,  9,  9,  9,  9,  9,  9,  8,  8,  8,  8,  8,  8,  7,  7,
941      7,  7,  7,  6,  6,  6,  6,  6,  6,  5,  5,  5,  5,  5,  4,  4,
942      4,  4,  4,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,  7,  7,
943      7,  7,  7,  7,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9, 10,
944     10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13,
945     13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 16, 16, 16, 16, 16,
946     16,
947 };
948
949 static const uint8_t bitalloc_129_bits_e[129] = {
950     16, 16, 16, 16, 16, 16, 15, 15, 15, 14, 14, 14, 13, 13, 13, 12,
951     12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 10,  9,  9,  9,  9,  9,
952      8,  8,  8,  8,  8,  7,  7,  7,  7,  7,  7,  7,  7,  6,  6,  6,
953      6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  5,  5,  5,  5,  5,
954      5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  6,  6,  6,
955      6,  6,  6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,
956      8,  8,  9,  9,  9,  9,  9, 10, 10, 10, 10, 11, 11, 11, 11, 12,
957     12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 16, 16,
958     16,
959 };
960
961 static const uint8_t bitalloc_129_bits_f[129] = {
962     15, 14, 13, 12, 12, 12, 11, 11, 11, 10, 10, 10, 10, 10, 10,  9,
963      9,  9,  9,  9,  9,  9,  8,  8,  8,  8,  8,  8,  8,  8,  7,  7,
964      7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  6,  6,  6,  6,  6,  6,
965      6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
966      6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,
967      6,  6,  6,  6,  6,  6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  7,
968      7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,
969      9,  9,  9, 10, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13,
970     15,
971 };
972
973 static const uint8_t bitalloc_129_bits_g[129] = {
974     13, 13, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11,
975     11, 10, 10, 10, 10, 10, 10, 10, 10,  9,  9,  9,  9,  9,  9,  9,
976      9,  8,  8,  8,  8,  8,  8,  8,  8,  7,  7,  7,  7,  7,  7,  7,
977      7,  6,  6,  6,  6,  6,  6,  6,  6,  5,  5,  5,  5,  5,  5,  5,
978      4,  5,  5,  5,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  6,  6,
979      7,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,
980      9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10,
981     11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 13,
982     13,
983 };
984
985 static const uint8_t bitalloc_sizes[DCA_CODE_BOOKS] = {
986     3, 5, 7, 9, 13, 17, 25, 33, 65, 129
987 };
988
989 static const int8_t bitalloc_offsets[DCA_CODE_BOOKS] = {
990     -1, -2, -3, -4, -6, -8, -12, -16, -32, -64
991 };
992
993 static const uint8_t bitalloc_maxbits[DCA_CODE_BOOKS][7] = {
994     { 2 },
995     { 4, 3, 3 },
996     { 5, 5, 4 },
997     { 6, 5, 6 },
998     { 7, 6, 5 },
999     { 9, 8, 7, 9, 8, 8, 8 },
1000     { 9, 9, 8, 9, 8, 9, 9 },
1001     { 9, 9, 9, 9, 9, 9, 9 },
1002     { 9, 9, 9, 9, 9, 9, 9 },
1003     { 9, 9, 9, 9, 9, 9, 9 }
1004 };
1005
1006 static const uint16_t *const bitalloc_codes[DCA_CODE_BOOKS][8] = {
1007     { bitalloc_3_codes,     NULL },
1008     { bitalloc_5_codes_a,   bitalloc_5_codes_b,   bitalloc_5_codes_c,   NULL },
1009     { bitalloc_7_codes_a,   bitalloc_7_codes_b,   bitalloc_7_codes_c,   NULL },
1010     { bitalloc_9_codes_a,   bitalloc_9_codes_b,   bitalloc_9_codes_c,   NULL },
1011     { bitalloc_13_codes_a,  bitalloc_13_codes_b,  bitalloc_13_codes_c,  NULL },
1012     { bitalloc_17_codes_a,  bitalloc_17_codes_b,  bitalloc_17_codes_c,  bitalloc_17_codes_d,
1013       bitalloc_17_codes_e,  bitalloc_17_codes_f,  bitalloc_17_codes_g,  NULL },
1014     { bitalloc_25_codes_a,  bitalloc_25_codes_b,  bitalloc_25_codes_c,  bitalloc_25_codes_d,
1015       bitalloc_25_codes_e,  bitalloc_25_codes_f,  bitalloc_25_codes_g,  NULL },
1016     { bitalloc_33_codes_a,  bitalloc_33_codes_b,  bitalloc_33_codes_c,  bitalloc_33_codes_d,
1017       bitalloc_33_codes_e,  bitalloc_33_codes_f,  bitalloc_33_codes_g,  NULL },
1018     { bitalloc_65_codes_a,  bitalloc_65_codes_b,  bitalloc_65_codes_c,  bitalloc_65_codes_d,
1019       bitalloc_65_codes_e,  bitalloc_65_codes_f,  bitalloc_65_codes_g,  NULL },
1020     { bitalloc_129_codes_a, bitalloc_129_codes_b, bitalloc_129_codes_c, bitalloc_129_codes_d,
1021       bitalloc_129_codes_e, bitalloc_129_codes_f, bitalloc_129_codes_g, NULL }
1022 };
1023
1024 static const uint8_t *const bitalloc_bits[DCA_CODE_BOOKS][8] = {
1025     { bitalloc_3_bits,     NULL },
1026     { bitalloc_5_bits_a,   bitalloc_5_bits_b,   bitalloc_5_bits_c,   NULL },
1027     { bitalloc_7_bits_a,   bitalloc_7_bits_b,   bitalloc_7_bits_c,   NULL },
1028     { bitalloc_9_bits_a,   bitalloc_9_bits_b,   bitalloc_9_bits_c,   NULL },
1029     { bitalloc_13_bits_a,  bitalloc_13_bits_b,  bitalloc_13_bits_c,  NULL },
1030     { bitalloc_17_bits_a,  bitalloc_17_bits_b,  bitalloc_17_bits_c,  bitalloc_17_bits_d,
1031       bitalloc_17_bits_e,  bitalloc_17_bits_f,  bitalloc_17_bits_g,  NULL },
1032     { bitalloc_25_bits_a,  bitalloc_25_bits_b,  bitalloc_25_bits_c,  bitalloc_25_bits_d,
1033       bitalloc_25_bits_e,  bitalloc_25_bits_f,  bitalloc_25_bits_g,  NULL },
1034     { bitalloc_33_bits_a,  bitalloc_33_bits_b,  bitalloc_33_bits_c,  bitalloc_33_bits_d,
1035       bitalloc_33_bits_e,  bitalloc_33_bits_f,  bitalloc_33_bits_g,  NULL },
1036     { bitalloc_65_bits_a,  bitalloc_65_bits_b,  bitalloc_65_bits_c,  bitalloc_65_bits_d,
1037       bitalloc_65_bits_e,  bitalloc_65_bits_f,  bitalloc_65_bits_g,  NULL },
1038     { bitalloc_129_bits_a, bitalloc_129_bits_b, bitalloc_129_bits_c, bitalloc_129_bits_d,
1039       bitalloc_129_bits_e, bitalloc_129_bits_f, bitalloc_129_bits_g, NULL }
1040 };
1041
1042 static const uint16_t tnl_grp_0_codes[37] = {
1043     0x0000, 0x0003, 0x0004, 0x0007, 0x0001, 0x0009, 0x000a, 0x000d,
1044     0x000e, 0x0006, 0x0012, 0x0005, 0x0015, 0x0016, 0x0022, 0x0025,
1045     0x0035, 0x0076, 0x0002, 0x0042, 0x00b6, 0x0036, 0x00c2, 0x0136,
1046     0x0182, 0x01c2, 0x03c2, 0x0482, 0x0682, 0x0082, 0x0882, 0x0a82,
1047     0x0282, 0x2282, 0x3282, 0x1282, 0x5282,
1048 };
1049
1050 static const uint16_t tnl_grp_1_codes[34] = {
1051     0x0001, 0x0003, 0x0006, 0x0000, 0x0002, 0x0004, 0x0005, 0x0007,
1052     0x0008, 0x000f, 0x001a, 0x001c, 0x001d, 0x000a, 0x002c, 0x002d,
1053     0x000d, 0x002a, 0x004c, 0x004d, 0x006a, 0x008c, 0x00cd, 0x00ea,
1054     0x000c, 0x010c, 0x01ea, 0x020c, 0x030c, 0x07ea, 0x0bea, 0x03ea,
1055     0x13ea, 0x33ea,
1056 };
1057
1058 static const uint16_t tnl_grp_2_codes[31] = {
1059     0x0001, 0x0003, 0x0006, 0x0007, 0x0004, 0x0008, 0x000c, 0x0010,
1060     0x0012, 0x001a, 0x0022, 0x0000, 0x000a, 0x0020, 0x0040, 0x004a,
1061     0x006a, 0x0002, 0x002a, 0x0042, 0x0082, 0x00aa, 0x00e0, 0x0060,
1062     0x00c2, 0x01c2, 0x0160, 0x0360, 0x0f60, 0x0760, 0x1760,
1063 };
1064
1065 static const uint16_t tnl_grp_3_codes[28] = {
1066     0x0001, 0x0006, 0x0008, 0x0014, 0x001c, 0x0000, 0x0002, 0x0004,
1067     0x000a, 0x000c, 0x0010, 0x0012, 0x001a, 0x0020, 0x002a, 0x002c,
1068     0x0032, 0x003a, 0x0022, 0x0030, 0x0062, 0x0064, 0x0070, 0x0024,
1069     0x00a4, 0x01a4, 0x03a4, 0x07a4,
1070 };
1071
1072 static const uint16_t tnl_grp_4_codes[23] = {
1073     0x0001, 0x0000, 0x000a, 0x0006, 0x0012, 0x001e, 0x0022, 0x002e,
1074     0x0036, 0x003e, 0x0002, 0x0016, 0x0032, 0x004e, 0x0056, 0x000e,
1075     0x0042, 0x0072, 0x00c2, 0x00f2, 0x008e, 0x018e, 0x038e,
1076 };
1077
1078 static const uint16_t tnl_scf_codes[20] = {
1079     0x0000, 0x0001, 0x0002, 0x0005, 0x0006, 0x0007, 0x000b, 0x000c,
1080     0x0013, 0x0014, 0x0003, 0x0004, 0x0023, 0x0064, 0x00a4, 0x0024,
1081     0x0124, 0x0324, 0x0724, 0x0f24,
1082 };
1083
1084 static const uint16_t damp_codes[7] = {
1085     0x0001, 0x0000, 0x0002, 0x0006, 0x000e, 0x001e, 0x003e,
1086 };
1087
1088 static const uint16_t dph_codes[9] = {
1089     0x0000, 0x0002, 0x0003, 0x0001, 0x0009, 0x000d, 0x0005, 0x0015,
1090     0x0035,
1091 };
1092
1093 static const uint16_t fst_rsd_amp_codes[24] = {
1094     0x0003, 0x0005, 0x0006, 0x0007, 0x0000, 0x0001, 0x0002, 0x0008,
1095     0x0009, 0x000a, 0x0014, 0x0004, 0x001a, 0x001c, 0x0024, 0x002c,
1096     0x003a, 0x000c, 0x003c, 0x004c, 0x00fc, 0x007c, 0x017c, 0x037c,
1097 };
1098
1099 static const uint16_t rsd_apprx_codes[6] = {
1100     0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f,
1101 };
1102
1103 static const uint16_t rsd_amp_codes[33] = {
1104     0x0001, 0x0000, 0x0002, 0x0003, 0x0004, 0x000e, 0x000f, 0x0016,
1105     0x0007, 0x0027, 0x0037, 0x0026, 0x0066, 0x0006, 0x0017, 0x0046,
1106     0x0097, 0x00d7, 0x0086, 0x00c6, 0x01c6, 0x0157, 0x0186, 0x0257,
1107     0x0357, 0x0057, 0x0786, 0x0386, 0x0b86, 0x0457, 0x0c57, 0x1457,
1108     0x1c57,
1109 };
1110
1111 static const uint16_t avg_g3_codes[18] = {
1112     0x0001, 0x0002, 0x0003, 0x0000, 0x000c, 0x0014, 0x0018, 0x0004,
1113     0x0008, 0x0028, 0x0068, 0x0024, 0x00a4, 0x00e4, 0x0164, 0x0064,
1114     0x0264, 0x0664,
1115 };
1116
1117 static const uint16_t st_grid_codes[22] = {
1118     0x0001, 0x0002, 0x0000, 0x0004, 0x0008, 0x001c, 0x004c, 0x006c,
1119     0x000c, 0x002c, 0x008c, 0x00ac, 0x012c, 0x018c, 0x01ac, 0x038c,
1120     0x03ac, 0x032c, 0x072c, 0x0f2c, 0x172c, 0x1f2c,
1121 };
1122
1123 static const uint16_t grid_2_codes[20] = {
1124     0x0000, 0x0002, 0x0003, 0x0001, 0x0005, 0x000d, 0x003d, 0x005d,
1125     0x009d, 0x011d, 0x001d, 0x061d, 0x041d, 0x0c1d, 0x0a1d, 0x121d,
1126     0x021d, 0x1a1d, 0x221d, 0x3a1d,
1127 };
1128
1129 static const uint16_t grid_3_codes[13] = {
1130     0x0001, 0x0002, 0x0000, 0x0004, 0x000c, 0x001c, 0x007c, 0x003c,
1131     0x01bc, 0x00bc, 0x06bc, 0x02bc, 0x0abc,
1132 };
1133
1134 static const uint16_t rsd_codes[9] = {
1135     0x0001, 0x0003, 0x0000, 0x0002, 0x0006, 0x0004, 0x000c, 0x001c,
1136     0x003c,
1137 };
1138
1139 static const uint8_t tnl_grp_0_bitvals[74] = {
1140      3,  5,  3,  9,  3,  4,  3,  6,  4, 10,  4, 13,  4,  7,  4, 11,
1141      4,  8,  5, 12,  5, 14,  6, 15,  6, 18,  6,  1,  6, 17,  6, 16,
1142      6, 21,  7, 20,  8, 19,  8, 22,  8, 25,  9, 26,  9, 23,  9,  3,
1143      9, 24, 10, 29, 10, 27, 11, 28, 11, 30, 12, 33, 12, 31, 12, 32,
1144     14, 34, 14, 37, 14, 36, 15, 35, 15,  0,
1145 };
1146
1147 static const uint8_t tnl_grp_1_bitvals[68] = {
1148      3,  9,  3,  6,  3,  5,  4,  4,  4,  8,  4, 10,  4,  1,  4, 11,
1149      4,  7,  4, 13,  5, 12,  5, 14,  5, 17,  6, 16,  6, 15,  6, 18,
1150      7, 20,  7, 19,  7, 21,  8, 25,  8, 23,  8, 22,  8, 24,  9, 26,
1151     10,  3, 10, 29, 10, 30, 10, 27, 10, 28, 11, 31, 12, 32, 13, 33,
1152     14, 34, 14,  0,
1153 };
1154
1155 static const uint8_t tnl_grp_2_bitvals[62] = {
1156      2,  1,  3,  6,  3,  5,  3,  7,  4,  9,  4,  8,  4,  4,  5, 10,
1157      5, 11,  5, 13,  6, 12,  7, 14,  7, 16,  7, 15,  7, 17,  7, 18,
1158      7, 19,  8, 22,  8, 20,  8, 21,  8,  3,  8, 24,  8, 25,  9, 23,
1159      9, 26,  9, 27, 10, 28, 11, 29, 12, 31, 13, 30, 13,  0,
1160 };
1161
1162 static const uint8_t tnl_grp_3_bitvals[56] = {
1163      1,  1,  3,  6,  4,  5,  5,  9,  5,  4,  6,  8,  6, 14,  6, 10,
1164      6, 21,  6, 13,  6,  7,  6,  3,  6, 16,  6,  2,  6, 18,  6, 17,
1165      6, 11,  6, 15,  7, 19,  7, 23,  7, 24,  7, 22,  7, 12,  8, 20,
1166      9, 25, 10, 26, 11, 27, 11,  0,
1167 };
1168
1169 static const uint8_t tnl_grp_4_bitvals[46] = {
1170      1,  1,  2,  2,  4,  4,  5,  5,  6,  6,  6,  8,  6,  3,  6, 19,
1171      6, 20,  6,  9,  7,  7,  7, 11,  7, 13,  7, 17,  7, 10,  8, 12,
1172      8, 15,  8, 14,  8, 21,  8, 18,  9, 16, 10, 22, 10,  0,
1173 };
1174
1175 static const uint8_t tnl_scf_bitvals[40] = {
1176      3,  3,  3,  1,  3,  2,  3,  5,  3,  4,  3,  6,  4,  8,  4,  7,
1177      5, 10,  5,  9,  6, 12,  6, 11,  6, 13,  7, 14,  8, 15,  9, 16,
1178     10, 17, 11, 18, 12, 19, 12,  0,
1179 };
1180
1181 static const uint8_t damp_bitvals[14] = {
1182      1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  6,  0,
1183 };
1184
1185 static const uint8_t dph_bitvals[18] = {
1186      2,  2,  2,  1,  2,  8,  4,  3,  4,  7,  4,  4,  5,  6,  6,  5,
1187      6,  0,
1188 };
1189
1190 static const uint8_t fst_rsd_amp_bitvals[48] = {
1191      3, 13,  3, 15,  3, 16,  3, 14,  4, 12,  4, 10,  4, 11,  4, 17,
1192      4, 18,  5, 19,  5,  9,  6,  1,  6,  7,  6,  6,  6,  8,  6,  5,
1193      6,  4,  7, 20,  7,  2,  7,  3,  8, 21,  9, 22, 10, 23, 10,  0,
1194 };
1195
1196 static const uint8_t rsd_apprx_bitvals[12] = {
1197      1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  5,  0,
1198 };
1199
1200 static const uint8_t rsd_amp_bitvals[66] = {
1201      2,  3,  3,  2,  3,  5,  3,  4,  3,  1,  4,  7,  4,  6,  5,  9,
1202      6,  8,  6, 11,  6, 10,  7, 12,  7, 13,  8, 14,  8, 18,  8, 16,
1203      8, 15,  8, 22,  9, 20,  9, 24,  9, 17, 10, 28, 10, 26, 10, 21,
1204     10, 23, 11, 30, 11, 19, 12, 25, 12, 32, 13, 36, 13, 29, 13, 34,
1205     13,  0,
1206 };
1207
1208 static const uint8_t avg_g3_bitvals[36] = {
1209      2, 15,  2, 16,  2, 17,  4, 14,  4, 18,  5, 12,  5, 13,  6, 10,
1210      6, 11,  7, 19,  7,  9,  8, 20,  8,  8,  8,  7,  9, 21, 10,  6,
1211     11, 23, 11,  0,
1212 };
1213
1214 static const uint8_t st_grid_bitvals[44] = {
1215      1,  6,  2,  1,  4,  4,  4,  8,  4,  3,  5, 10,  7, 12,  7,  5,
1216      8, 14,  9, 16,  9,  7,  9, 18, 10, 11, 10,  9, 10, 20, 10, 22,
1217     10,  2, 11, 13, 13, 17, 13, 24, 13, 15, 13,  0,
1218 };
1219
1220 static const uint8_t grid_2_bitvals[40] = {
1221      2,  3,  2,  2,  2,  1,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,
1222      8,  9,  9, 10, 11, 11, 11, 12, 12, 13, 12, 17, 13, 15, 13, 18,
1223     14, 19, 14, 16, 14, 14, 14,  0,
1224 };
1225
1226 static const uint8_t grid_3_bitvals[26] = {
1227      1, 17,  2, 16,  3, 18,  4, 15,  5, 19,  6, 14,  7, 20,  8, 13,
1228      9, 21, 10, 12, 11, 22, 12, 11, 12,  0,
1229 };
1230
1231 static const uint8_t rsd_bitvals[18] = {
1232      2,  2,  2,  3,  3,  1,  3,  4,  3,  0,  4,  5,  5,  6,  6,  7,
1233      6,  4,
1234 };
1235
1236 static const uint16_t vlc_offs[80] = {
1237         0,   512,   640,   768,  1282,  1794,  2436,  3080,  3770,  4454,  5364,
1238      5372,  5380,  5388,  5392,  5396,  5412,  5420,  5428,  5460,  5492,  5508,
1239      5572,  5604,  5668,  5796,  5860,  5892,  6412,  6668,  6796,  7308,  7564,
1240      7820,  8076,  8620,  9132,  9388,  9910, 10166, 10680, 11196, 11726, 12240,
1241     12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264,
1242     18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622, 24200, 24748, 25276,
1243     25792, 26306, 26826, 26890, 26954, 27468, 27500, 28038, 28554, 29086, 29630,
1244     30150, 30214
1245 };
1246
1247 DCAVLC  ff_dca_vlc_bit_allocation;
1248 DCAVLC  ff_dca_vlc_transition_mode;
1249 DCAVLC  ff_dca_vlc_scale_factor;
1250 DCAVLC  ff_dca_vlc_quant_index[DCA_CODE_BOOKS];
1251
1252 VLC     ff_dca_vlc_tnl_grp[5];
1253 VLC     ff_dca_vlc_tnl_scf;
1254 VLC     ff_dca_vlc_damp;
1255 VLC     ff_dca_vlc_dph;
1256 VLC     ff_dca_vlc_fst_rsd_amp;
1257 VLC     ff_dca_vlc_rsd_apprx;
1258 VLC     ff_dca_vlc_rsd_amp;
1259 VLC     ff_dca_vlc_avg_g3;
1260 VLC     ff_dca_vlc_st_grid;
1261 VLC     ff_dca_vlc_grid_2;
1262 VLC     ff_dca_vlc_grid_3;
1263 VLC     ff_dca_vlc_rsd;
1264
1265 av_cold void ff_dca_init_vlcs(void)
1266 {
1267     static VLCElem dca_table[30214];
1268     int i, j, k = 0;
1269
1270 #define DCA_INIT_VLC(vlc, a, b, c, d)                                       \
1271     do {                                                                    \
1272         vlc.table           = &dca_table[vlc_offs[k]];                      \
1273         vlc.table_allocated = vlc_offs[k + 1] - vlc_offs[k];                \
1274         init_vlc(&vlc, a, b, c, 1, 1, d, 2, 2, INIT_VLC_USE_NEW_STATIC);    \
1275         k++;                                                                \
1276     } while (0)
1277
1278     ff_dca_vlc_bit_allocation.offset    = 1;
1279     ff_dca_vlc_bit_allocation.max_depth = 2;
1280     for (i = 0; i < 5; i++)
1281         DCA_INIT_VLC(ff_dca_vlc_bit_allocation.vlc[i], bitalloc_12_vlc_bits[i], 12,
1282                      bitalloc_12_bits[i], bitalloc_12_codes[i]);
1283
1284     ff_dca_vlc_scale_factor.offset    = -64;
1285     ff_dca_vlc_scale_factor.max_depth = 2;
1286     for (i = 0; i < 5; i++)
1287         DCA_INIT_VLC(ff_dca_vlc_scale_factor.vlc[i], SCALES_VLC_BITS, 129,
1288                      scales_bits[i], scales_codes[i]);
1289
1290     ff_dca_vlc_transition_mode.offset    = 0;
1291     ff_dca_vlc_transition_mode.max_depth = 1;
1292     for (i = 0; i < 4; i++)
1293         DCA_INIT_VLC(ff_dca_vlc_transition_mode.vlc[i], tmode_vlc_bits[i], 4,
1294                      tmode_bits[i], tmode_codes[i]);
1295
1296     for (i = 0; i < DCA_CODE_BOOKS; i++) {
1297         ff_dca_vlc_quant_index[i].offset    = bitalloc_offsets[i];
1298         ff_dca_vlc_quant_index[i].max_depth = 1 + (i > 4);
1299         for (j = 0; bitalloc_codes[i][j]; j++)
1300             DCA_INIT_VLC(ff_dca_vlc_quant_index[i].vlc[j], bitalloc_maxbits[i][j],
1301                          bitalloc_sizes[i], bitalloc_bits[i][j], bitalloc_codes[i][j]);
1302     }
1303
1304 #define LBR_INIT_VLC(vlc, tab, nb_bits)                                 \
1305     do {                                                                \
1306         vlc.table           = &dca_table[vlc_offs[k]];                  \
1307         vlc.table_allocated = vlc_offs[k + 1] - vlc_offs[k];            \
1308         ff_init_vlc_sparse(&vlc, nb_bits, FF_ARRAY_ELEMS(tab##_codes),  \
1309                            &tab##_bitvals[0], 2, 1,                     \
1310                            tab##_codes, 2, 2,                           \
1311                            &tab##_bitvals[1], 2, 1,                     \
1312                            INIT_VLC_LE | INIT_VLC_USE_NEW_STATIC);      \
1313         k++;                                                            \
1314     } while (0)
1315
1316     LBR_INIT_VLC(ff_dca_vlc_tnl_grp[0],  tnl_grp_0,   9);
1317     LBR_INIT_VLC(ff_dca_vlc_tnl_grp[1],  tnl_grp_1,   9);
1318     LBR_INIT_VLC(ff_dca_vlc_tnl_grp[2],  tnl_grp_2,   9);
1319     LBR_INIT_VLC(ff_dca_vlc_tnl_grp[3],  tnl_grp_3,   9);
1320     LBR_INIT_VLC(ff_dca_vlc_tnl_grp[4],  tnl_grp_4,   9);
1321     LBR_INIT_VLC(ff_dca_vlc_tnl_scf,     tnl_scf,     9);
1322     LBR_INIT_VLC(ff_dca_vlc_damp,        damp,        6);
1323     LBR_INIT_VLC(ff_dca_vlc_dph,         dph,         6);
1324     LBR_INIT_VLC(ff_dca_vlc_fst_rsd_amp, fst_rsd_amp, 9);
1325     LBR_INIT_VLC(ff_dca_vlc_rsd_apprx,   rsd_apprx,   5);
1326     LBR_INIT_VLC(ff_dca_vlc_rsd_amp,     rsd_amp,     9);
1327     LBR_INIT_VLC(ff_dca_vlc_avg_g3,      avg_g3,      9);
1328     LBR_INIT_VLC(ff_dca_vlc_st_grid,     st_grid,     9);
1329     LBR_INIT_VLC(ff_dca_vlc_grid_2,      grid_2,      9);
1330     LBR_INIT_VLC(ff_dca_vlc_grid_3,      grid_3,      9);
1331     LBR_INIT_VLC(ff_dca_vlc_rsd,         rsd,         6);
1332 }
1333
1334 uint32_t ff_dca_vlc_calc_quant_bits(int *values, uint8_t n, uint8_t sel, uint8_t table)
1335 {
1336     uint8_t i, id;
1337     uint32_t sum = 0;
1338     for (i = 0; i < n; i++) {
1339         id = values[i] - bitalloc_offsets[table];
1340         av_assert0(id < bitalloc_sizes[table]);
1341         sum += bitalloc_bits[table][sel][id];
1342     }
1343     return sum;
1344 }
1345
1346 void ff_dca_vlc_enc_quant(PutBitContext *pb, int *values, uint8_t n, uint8_t sel, uint8_t table)
1347 {
1348     uint8_t i, id;
1349     for (i = 0; i < n; i++) {
1350         id = values[i] - bitalloc_offsets[table];
1351         av_assert0(id < bitalloc_sizes[table]);
1352         put_bits(pb, bitalloc_bits[table][sel][id], bitalloc_codes[table][sel][id]);
1353     }
1354 }
1355
1356 uint32_t ff_dca_vlc_calc_alloc_bits(int *values, uint8_t n, uint8_t sel)
1357 {
1358     uint8_t i, id;
1359     uint32_t sum = 0;
1360     for (i = 0; i < n; i++) {
1361         id = values[i] - 1;
1362         sum += bitalloc_12_bits[sel][id];
1363     }
1364     return sum;
1365 }
1366
1367 void ff_dca_vlc_enc_alloc(PutBitContext *pb, int *values, uint8_t n, uint8_t sel)
1368 {
1369     uint8_t i, id;
1370     for (i = 0; i < n; i++) {
1371         id = values[i] - 1;
1372         put_bits(pb, bitalloc_12_bits[sel][id], bitalloc_12_codes[sel][id]);
1373     }
1374 }