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