GCC Code Coverage Report
Directory: ../../../ffmpeg/ Exec Total Coverage
File: src/libavcodec/dcahuff.c Lines: 51 61 83.6 %
Date: 2019-11-22 03:34:36 Branches: 20 26 76.9 %

Line Branch Exec Source
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
1263
92
av_cold void ff_dca_init_vlcs(void)
1264
{
1265
    static VLC_TYPE dca_table[30214][2];
1266
    static int vlcs_initialized = 0;
1267
92
    int i, j, k = 0;
1268
1269
92
    if (vlcs_initialized)
1270
45
        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
47
    ff_dca_vlc_bit_allocation.offset    = 1;
1281
47
    ff_dca_vlc_bit_allocation.max_depth = 2;
1282
282
    for (i = 0; i < 5; i++)
1283
235
        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
47
    ff_dca_vlc_scale_factor.offset    = -64;
1287
47
    ff_dca_vlc_scale_factor.max_depth = 2;
1288
282
    for (i = 0; i < 5; i++)
1289
235
        DCA_INIT_VLC(ff_dca_vlc_scale_factor.vlc[i], SCALES_VLC_BITS, 129,
1290
                     scales_bits[i], scales_codes[i]);
1291
1292
47
    ff_dca_vlc_transition_mode.offset    = 0;
1293
47
    ff_dca_vlc_transition_mode.max_depth = 1;
1294
235
    for (i = 0; i < 4; i++)
1295
188
        DCA_INIT_VLC(ff_dca_vlc_transition_mode.vlc[i], tmode_vlc_bits[i], 4,
1296
                     tmode_bits[i], tmode_codes[i]);
1297
1298
517
    for (i = 0; i < DCA_CODE_BOOKS; i++) {
1299
470
        ff_dca_vlc_quant_index[i].offset    = bitalloc_offsets[i];
1300
470
        ff_dca_vlc_quant_index[i].max_depth = 1 + (i > 4);
1301
2726
        for (j = 0; bitalloc_codes[i][j]; j++)
1302
2256
            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
47
    LBR_INIT_VLC(ff_dca_vlc_tnl_grp[0],  tnl_grp_0,   9);
1319
47
    LBR_INIT_VLC(ff_dca_vlc_tnl_grp[1],  tnl_grp_1,   9);
1320
47
    LBR_INIT_VLC(ff_dca_vlc_tnl_grp[2],  tnl_grp_2,   9);
1321
47
    LBR_INIT_VLC(ff_dca_vlc_tnl_grp[3],  tnl_grp_3,   9);
1322
47
    LBR_INIT_VLC(ff_dca_vlc_tnl_grp[4],  tnl_grp_4,   9);
1323
47
    LBR_INIT_VLC(ff_dca_vlc_tnl_scf,     tnl_scf,     9);
1324
47
    LBR_INIT_VLC(ff_dca_vlc_damp,        damp,        6);
1325
47
    LBR_INIT_VLC(ff_dca_vlc_dph,         dph,         6);
1326
47
    LBR_INIT_VLC(ff_dca_vlc_fst_rsd_amp, fst_rsd_amp, 9);
1327
47
    LBR_INIT_VLC(ff_dca_vlc_rsd_apprx,   rsd_apprx,   5);
1328
47
    LBR_INIT_VLC(ff_dca_vlc_rsd_amp,     rsd_amp,     9);
1329
47
    LBR_INIT_VLC(ff_dca_vlc_avg_g3,      avg_g3,      9);
1330
47
    LBR_INIT_VLC(ff_dca_vlc_st_grid,     st_grid,     9);
1331
47
    LBR_INIT_VLC(ff_dca_vlc_grid_2,      grid_2,      9);
1332
47
    LBR_INIT_VLC(ff_dca_vlc_grid_3,      grid_3,      9);
1333
47
    LBR_INIT_VLC(ff_dca_vlc_rsd,         rsd,         6);
1334
1335
47
    vlcs_initialized = 1;
1336
}
1337
1338
374950
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
374950
    uint32_t sum = 0;
1342
6374150
    for (i = 0; i < n; i++) {
1343
5999200
        id = values[i] - bitalloc_offsets[table];
1344
5999200
        av_assert0(id < bitalloc_sizes[table]);
1345
5999200
        sum += bitalloc_bits[table][sel][id];
1346
    }
1347
374950
    return sum;
1348
}
1349
1350
16068
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
144612
    for (i = 0; i < n; i++) {
1354
128544
        id = values[i] - bitalloc_offsets[table];
1355
128544
        av_assert0(id < bitalloc_sizes[table]);
1356
128544
        put_bits(pb, bitalloc_bits[table][sel][id], bitalloc_codes[table][sel][id]);
1357
    }
1358
16068
}
1359
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
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
}