1 /*
2 * MPEG layer 3 tables source file
3 *
4 * Copyright (c) 1999 Albert L Faber
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
15 *
16 * You should have received a copy of the GNU Library General Public
17 * License along with this library; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
20 */
21
22 /* $Id$ */
23
24 #ifdef HAVE_CONFIG_H
25 # include <config.h>
26 #endif
27
28 #include "machine.h"
29
30 #include "lame.h"
31 #include "tables.h"
32
33
34 static const uint16_t t1HB[] = {
35 1, 1,
36 1, 0
37 };
38
39 static const uint16_t t2HB[] = {
40 1, 2, 1,
41 3, 1, 1,
42 3, 2, 0
43 };
44
45 static const uint16_t t3HB[] = {
46 3, 2, 1,
47 1, 1, 1,
48 3, 2, 0
49 };
50
51 static const uint16_t t5HB[] = {
52 1, 2, 6, 5,
53 3, 1, 4, 4,
54 7, 5, 7, 1,
55 6, 1, 1, 0
56 };
57
58 static const uint16_t t6HB[] = {
59 7, 3, 5, 1,
60 6, 2, 3, 2,
61 5, 4, 4, 1,
62 3, 3, 2, 0
63 };
64
65 static const uint16_t t7HB[] = {
66 1, 2, 10, 19, 16, 10,
67 3, 3, 7, 10, 5, 3,
68 11, 4, 13, 17, 8, 4,
69 12, 11, 18, 15, 11, 2,
70 7, 6, 9, 14, 3, 1,
71 6, 4, 5, 3, 2, 0
72 };
73
74 static const uint16_t t8HB[] = {
75 3, 4, 6, 18, 12, 5,
76 5, 1, 2, 16, 9, 3,
77 7, 3, 5, 14, 7, 3,
78 19, 17, 15, 13, 10, 4,
79 13, 5, 8, 11, 5, 1,
80 12, 4, 4, 1, 1, 0
81 };
82
83 static const uint16_t t9HB[] = {
84 7, 5, 9, 14, 15, 7,
85 6, 4, 5, 5, 6, 7,
86 7, 6, 8, 8, 8, 5,
87 15, 6, 9, 10, 5, 1,
88 11, 7, 9, 6, 4, 1,
89 14, 4, 6, 2, 6, 0
90 };
91
92 static const uint16_t t10HB[] = {
93 1, 2, 10, 23, 35, 30, 12, 17,
94 3, 3, 8, 12, 18, 21, 12, 7,
95 11, 9, 15, 21, 32, 40, 19, 6,
96 14, 13, 22, 34, 46, 23, 18, 7,
97 20, 19, 33, 47, 27, 22, 9, 3,
98 31, 22, 41, 26, 21, 20, 5, 3,
99 14, 13, 10, 11, 16, 6, 5, 1,
100 9, 8, 7, 8, 4, 4, 2, 0
101 };
102
103 static const uint16_t t11HB[] = {
104 3, 4, 10, 24, 34, 33, 21, 15,
105 5, 3, 4, 10, 32, 17, 11, 10,
106 11, 7, 13, 18, 30, 31, 20, 5,
107 25, 11, 19, 59, 27, 18, 12, 5,
108 35, 33, 31, 58, 30, 16, 7, 5,
109 28, 26, 32, 19, 17, 15, 8, 14,
110 14, 12, 9, 13, 14, 9, 4, 1,
111 11, 4, 6, 6, 6, 3, 2, 0
112 };
113
114 static const uint16_t t12HB[] = {
115 9, 6, 16, 33, 41, 39, 38, 26,
116 7, 5, 6, 9, 23, 16, 26, 11,
117 17, 7, 11, 14, 21, 30, 10, 7,
118 17, 10, 15, 12, 18, 28, 14, 5,
119 32, 13, 22, 19, 18, 16, 9, 5,
120 40, 17, 31, 29, 17, 13, 4, 2,
121 27, 12, 11, 15, 10, 7, 4, 1,
122 27, 12, 8, 12, 6, 3, 1, 0
123 };
124
125 static const uint16_t t13HB[] = {
126 1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19,
127 3, 4, 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14,
128 15, 13, 23, 36, 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16,
129 22, 20, 37, 61, 56, 79, 73, 64, 43, 76, 56, 37, 26, 31, 25, 14,
130 35, 16, 60, 57, 97, 75, 114, 91, 54, 73, 55, 41, 48, 53, 23, 24,
131 58, 27, 50, 96, 76, 70, 93, 84, 77, 58, 79, 29, 74, 49, 41, 17,
132 47, 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50, 59, 38, 36, 15,
133 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44, 43, 42,
134 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16,
135 53, 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11,
136 35, 33, 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22,
137 53, 25, 23, 38, 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7,
138 34, 32, 28, 39, 49, 75, 30, 52, 48, 40, 52, 28, 18, 17, 9, 5,
139 45, 21, 34, 64, 56, 50, 49, 45, 31, 19, 12, 15, 10, 7, 6, 3,
140 48, 23, 20, 39, 36, 35, 53, 21, 16, 23, 13, 10, 6, 1, 4, 2,
141 16, 15, 17, 27, 25, 20, 29, 11, 17, 12, 16, 8, 1, 1, 0, 1
142 };
143
144 static const uint16_t t15HB[] = {
145 7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63,
146 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36,
147 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56, 33,
148 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29,
149 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27,
150 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38,
151 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30,
152 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25,
153 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20,
154 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15,
155 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9,
156 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11,
157 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7,
158 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3,
159 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1,
160 71, 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0
161 };
162
163 static const uint16_t t16HB[] = {
164 1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195, 376, 17,
165 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119, 201, 107, 207, 9,
166 15, 13, 23, 38, 67, 58, 103, 90, 161, 72, 127, 117, 110, 209, 206, 16,
167 45, 21, 39, 69, 64, 114, 99, 87, 158, 140, 252, 212, 199, 387, 365, 26,
168 75, 36, 68, 65, 115, 101, 179, 164, 155, 264, 246, 226, 395, 382, 362, 9,
169 66, 30, 59, 56, 102, 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16,
170 111, 54, 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10,
171 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372, 380, 889, 884, 8,
172 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383, 727, 713, 708, 7,
173 154, 76, 73, 141, 131, 256, 245, 426, 406, 394, 384, 735, 359, 710, 352, 11,
174 139, 129, 67, 125, 247, 233, 229, 219, 393, 743, 737, 720, 885, 882, 439, 4,
175 243, 120, 118, 115, 227, 223, 396, 746, 742, 736, 721, 712, 706, 223, 436, 6,
176 202, 224, 222, 218, 216, 389, 386, 381, 364, 888, 443, 707, 440, 437, 1728, 4,
177 747, 211, 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2,
178 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870, 434, 0,
179 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7, 5, 3, 1, 3
180 };
181
182 static const uint16_t t24HB[] = {
183 15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032, 88,
184 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297, 279, 42,
185 47, 22, 41, 74, 68, 128, 120, 221, 207, 194, 182, 340, 315, 295, 541, 18,
186 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325, 311, 293, 271, 16,
187 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352, 323, 306, 285, 540, 14,
188 263, 66, 129, 126, 119, 114, 214, 202, 192, 180, 341, 317, 301, 281, 262, 12,
189 249, 123, 121, 117, 113, 215, 206, 195, 185, 347, 330, 308, 291, 272, 520, 10,
190 435, 115, 111, 109, 211, 203, 196, 187, 353, 332, 313, 298, 283, 531, 381, 17,
191 427, 212, 208, 205, 201, 193, 186, 177, 169, 320, 303, 286, 268, 514, 377, 16,
192 335, 199, 197, 191, 189, 181, 174, 333, 321, 305, 289, 275, 521, 379, 371, 11,
193 668, 184, 183, 179, 175, 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10,
194 652, 346, 171, 168, 164, 318, 309, 299, 287, 276, 263, 513, 375, 368, 362, 6,
195 648, 322, 316, 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4,
196 620, 300, 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2,
197 1033, 280, 278, 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0,
198 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1, 3
199 };
200
201 static const uint16_t t32HB[] = {
202 1 << 0, 5 << 1, 4 << 1, 5 << 2, 6 << 1, 5 << 2, 4 << 2, 4 << 3,
203 7 << 1, 3 << 2, 6 << 2, 0 << 3, 7 << 2, 2 << 3, 3 << 3, 1 << 4
204 };
205
206 static const uint16_t t33HB[] = {
207 15 << 0, 14 << 1, 13 << 1, 12 << 2, 11 << 1, 10 << 2, 9 << 2, 8 << 3,
208 7 << 1, 6 << 2, 5 << 2, 4 << 3, 3 << 2, 2 << 3, 1 << 3, 0 << 4
209 };
210
211
212 const uint8_t t1l[] = {
213 1, 4,
214 3, 5
215 };
216
217 static const uint8_t t2l[] = {
218 1, 4, 7,
219 4, 5, 7,
220 6, 7, 8
221 };
222
223 static const uint8_t t3l[] = {
224 2, 3, 7,
225 4, 4, 7,
226 6, 7, 8
227 };
228
229 static const uint8_t t5l[] = {
230 1, 4, 7, 8,
231 4, 5, 8, 9,
232 7, 8, 9, 10,
233 8, 8, 9, 10
234 };
235
236 static const uint8_t t6l[] = {
237 3, 4, 6, 8,
238 4, 4, 6, 7,
239 5, 6, 7, 8,
240 7, 7, 8, 9
241 };
242
243 static const uint8_t t7l[] = {
244 1, 4, 7, 9, 9, 10,
245 4, 6, 8, 9, 9, 10,
246 7, 7, 9, 10, 10, 11,
247 8, 9, 10, 11, 11, 11,
248 8, 9, 10, 11, 11, 12,
249 9, 10, 11, 12, 12, 12
250 };
251
252 static const uint8_t t8l[] = {
253 2, 4, 7, 9, 9, 10,
254 4, 4, 6, 10, 10, 10,
255 7, 6, 8, 10, 10, 11,
256 9, 10, 10, 11, 11, 12,
257 9, 9, 10, 11, 12, 12,
258 10, 10, 11, 11, 13, 13
259 };
260
261 static const uint8_t t9l[] = {
262 3, 4, 6, 7, 9, 10,
263 4, 5, 6, 7, 8, 10,
264 5, 6, 7, 8, 9, 10,
265 7, 7, 8, 9, 9, 10,
266 8, 8, 9, 9, 10, 11,
267 9, 9, 10, 10, 11, 11
268 };
269
270 static const uint8_t t10l[] = {
271 1, 4, 7, 9, 10, 10, 10, 11,
272 4, 6, 8, 9, 10, 11, 10, 10,
273 7, 8, 9, 10, 11, 12, 11, 11,
274 8, 9, 10, 11, 12, 12, 11, 12,
275 9, 10, 11, 12, 12, 12, 12, 12,
276 10, 11, 12, 12, 13, 13, 12, 13,
277 9, 10, 11, 12, 12, 12, 13, 13,
278 10, 10, 11, 12, 12, 13, 13, 13
279 };
280
281 static const uint8_t t11l[] = {
282 2, 4, 6, 8, 9, 10, 9, 10,
283 4, 5, 6, 8, 10, 10, 9, 10,
284 6, 7, 8, 9, 10, 11, 10, 10,
285 8, 8, 9, 11, 10, 12, 10, 11,
286 9, 10, 10, 11, 11, 12, 11, 12,
287 9, 10, 11, 12, 12, 13, 12, 13,
288 9, 9, 9, 10, 11, 12, 12, 12,
289 9, 9, 10, 11, 12, 12, 12, 12
290 };
291
292 static const uint8_t t12l[] = {
293 4, 4, 6, 8, 9, 10, 10, 10,
294 4, 5, 6, 7, 9, 9, 10, 10,
295 6, 6, 7, 8, 9, 10, 9, 10,
296 7, 7, 8, 8, 9, 10, 10, 10,
297 8, 8, 9, 9, 10, 10, 10, 11,
298 9, 9, 10, 10, 10, 11, 10, 11,
299 9, 9, 9, 10, 10, 11, 11, 12,
300 10, 10, 10, 11, 11, 11, 11, 12
301 };
302
303 static const uint8_t t13l[] = {
304 1, 5, 7, 8, 9, 10, 10, 11, 10, 11, 12, 12, 13, 13, 14, 14,
305 4, 6, 8, 9, 10, 10, 11, 11, 11, 11, 12, 12, 13, 14, 14, 14,
306 7, 8, 9, 10, 11, 11, 12, 12, 11, 12, 12, 13, 13, 14, 15, 15,
307 8, 9, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 15,
308 9, 9, 11, 11, 12, 12, 13, 13, 12, 13, 13, 14, 14, 15, 15, 16,
309 10, 10, 11, 12, 12, 12, 13, 13, 13, 13, 14, 13, 15, 15, 16, 16,
310 10, 11, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 15, 15, 16, 16,
311 11, 11, 12, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 18, 18,
312 10, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 15, 15, 16, 17, 17,
313 11, 11, 12, 12, 13, 13, 13, 15, 14, 15, 15, 16, 16, 16, 18, 17,
314 11, 12, 12, 13, 13, 14, 14, 15, 14, 15, 16, 15, 16, 17, 18, 19,
315 12, 12, 12, 13, 14, 14, 14, 14, 15, 15, 15, 16, 17, 17, 17, 18,
316 12, 13, 13, 14, 14, 15, 14, 15, 16, 16, 17, 17, 17, 18, 18, 18,
317 13, 13, 14, 15, 15, 15, 16, 16, 16, 16, 16, 17, 18, 17, 18, 18,
318 14, 14, 14, 15, 15, 15, 17, 16, 16, 19, 17, 17, 17, 19, 18, 18,
319 13, 14, 15, 16, 16, 16, 17, 16, 17, 17, 18, 18, 21, 20, 21, 18
320 };
321
322 static const uint8_t t15l[] = {
323 3, 5, 6, 8, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 14,
324 5, 5, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13,
325 6, 7, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 13,
326 7, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13,
327 8, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13,
328 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 13, 13, 13, 14,
329 10, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14,
330 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 14,
331 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 14, 14,
332 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14,
333 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 14,
334 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15,
335 12, 12, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 15, 15,
336 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15,
337 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 14, 15,
338 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 15
339 };
340
341 static const uint8_t t16_5l[] = {
342 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 11,
343 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 11,
344 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 12,
345 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 13,
346 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 12,
347 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 13,
348 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 13,
349 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 13,
350 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 13,
351 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 14,
352 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 13,
353 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 14,
354 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 14,
355 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 14,
356 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 14,
357 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 12
358 };
359
360 static const uint8_t t16l[] = {
361 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 10,
362 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 10,
363 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 11,
364 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 12,
365 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 11,
366 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 12,
367 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 12,
368 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 12,
369 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 12,
370 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 13,
371 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 12,
372 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 13,
373 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 13,
374 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 13,
375 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 13,
376 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10
377 };
378
379 static const uint8_t t24l[] = {
380 4, 5, 7, 8, 9, 10, 10, 11, 11, 12, 12, 12, 12, 12, 13, 10,
381 5, 6, 7, 8, 9, 10, 10, 11, 11, 11, 12, 12, 12, 12, 12, 10,
382 7, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 9,
383 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 9,
384 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 12, 13, 9,
385 10, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 9,
386 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 9,
387 11, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 10,
388 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 10,
389 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 10,
390 12, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10,
391 12, 12, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10,
392 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 10,
393 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10,
394 13, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 10,
395 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 6
396 };
397
398 const uint8_t t32l[] = {
399 1 + 0, 4 + 1, 4 + 1, 5 + 2, 4 + 1, 6 + 2, 5 + 2, 6 + 3,
400 4 + 1, 5 + 2, 5 + 2, 6 + 3, 5 + 2, 6 + 3, 6 + 3, 6 + 4
401 };
402
403 const uint8_t t33l[] = {
404 4 + 0, 4 + 1, 4 + 1, 4 + 2, 4 + 1, 4 + 2, 4 + 2, 4 + 3,
405 4 + 1, 4 + 2, 4 + 2, 4 + 3, 4 + 2, 4 + 3, 4 + 3, 4 + 4
406 };
407
408
409 const struct huffcodetab ht[HTN] = {
410 /* xlen, linmax, table, hlen */
411 {0, 0, NULL, NULL},
412 {2, 0, t1HB, t1l},
413 {3, 0, t2HB, t2l},
414 {3, 0, t3HB, t3l},
415 {0, 0, NULL, NULL}, /* Apparently not used */
416 {4, 0, t5HB, t5l},
417 {4, 0, t6HB, t6l},
418 {6, 0, t7HB, t7l},
419 {6, 0, t8HB, t8l},
420 {6, 0, t9HB, t9l},
421 {8, 0, t10HB, t10l},
422 {8, 0, t11HB, t11l},
423 {8, 0, t12HB, t12l},
424 {16, 0, t13HB, t13l},
425 {0, 0, NULL, t16_5l}, /* Apparently not used */
426 {16, 0, t15HB, t15l},
427
428 {1, 1, t16HB, t16l},
429 {2, 3, t16HB, t16l},
430 {3, 7, t16HB, t16l},
431 {4, 15, t16HB, t16l},
432 {6, 63, t16HB, t16l},
433 {8, 255, t16HB, t16l},
434 {10, 1023, t16HB, t16l},
435 {13, 8191, t16HB, t16l},
436
437 {4, 15, t24HB, t24l},
438 {5, 31, t24HB, t24l},
439 {6, 63, t24HB, t24l},
440 {7, 127, t24HB, t24l},
441 {8, 255, t24HB, t24l},
442 {9, 511, t24HB, t24l},
443 {11, 2047, t24HB, t24l},
444 {13, 8191, t24HB, t24l},
445
446 {0, 0, t32HB, t32l},
447 {0, 0, t33HB, t33l},
448 };
449
450
451
452
453
454 /* for (i = 0; i < 16*16; i++) {
455 * largetbl[i] = ((ht[16].hlen[i]) << 16) + ht[24].hlen[i];
456 * }
457 */
458 const uint32_t largetbl[16 * 16] = {
459 0x010004, 0x050005, 0x070007, 0x090008, 0x0a0009, 0x0a000a, 0x0b000a, 0x0b000b,
460 0x0c000b, 0x0c000c, 0x0c000c, 0x0d000c, 0x0d000c, 0x0d000c, 0x0e000d, 0x0a000a,
461 0x040005, 0x060006, 0x080007, 0x090008, 0x0a0009, 0x0b000a, 0x0b000a, 0x0b000b,
462 0x0c000b, 0x0c000b, 0x0c000c, 0x0d000c, 0x0e000c, 0x0d000c, 0x0e000c, 0x0a000a,
463 0x070007, 0x080007, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000b,
464 0x0d000b, 0x0c000b, 0x0d000b, 0x0d000c, 0x0d000c, 0x0e000c, 0x0e000d, 0x0b0009,
465 0x090008, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0c000b,
466 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0c0009,
467 0x0a0009, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000a, 0x0d000b,
468 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000d, 0x0b0009,
469 0x0a000a, 0x0a0009, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0e000b,
470 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0c0009,
471 0x0b000a, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0d000b, 0x0d000b,
472 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000d, 0x0c0009,
473 0x0b000b, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b,
474 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x11000d, 0x11000d, 0x0c000a,
475 0x0b000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b,
476 0x0f000b, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000d, 0x10000d, 0x0c000a,
477 0x0c000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, 0x0f000c,
478 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0f000d, 0x10000d, 0x0f000d, 0x0d000a,
479 0x0c000c, 0x0d000b, 0x0c000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c,
480 0x0f000c, 0x10000c, 0x10000c, 0x10000d, 0x11000d, 0x11000d, 0x10000d, 0x0c000a,
481 0x0d000c, 0x0d000c, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x10000c,
482 0x10000c, 0x10000c, 0x10000c, 0x10000d, 0x10000d, 0x0f000d, 0x10000d, 0x0d000a,
483 0x0d000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c,
484 0x0f000c, 0x11000c, 0x10000d, 0x10000d, 0x10000d, 0x10000d, 0x12000d, 0x0d000a,
485 0x0f000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000c,
486 0x10000d, 0x12000d, 0x11000d, 0x11000d, 0x11000d, 0x13000d, 0x11000d, 0x0d000a,
487 0x0e000d, 0x0f000c, 0x0d000c, 0x0e000c, 0x10000c, 0x10000c, 0x0f000c, 0x10000d,
488 0x10000d, 0x11000d, 0x12000d, 0x11000d, 0x13000d, 0x11000d, 0x10000d, 0x0d000a,
489 0x0a0009, 0x0a0009, 0x0a0009, 0x0b0009, 0x0b0009, 0x0c0009, 0x0c0009, 0x0c0009,
490 0x0d0009, 0x0d0009, 0x0d0009, 0x0d000a, 0x0d000a, 0x0d000a, 0x0d000a, 0x0a0006
491 };
492
493 /* for (i = 0; i < 3*3; i++) {
494 * table23[i] = ((ht[2].hlen[i]) << 16) + ht[3].hlen[i];
495 * }
496 */
497 const uint32_t table23[3 * 3] = {
498 0x010002, 0x040003, 0x070007,
499 0x040004, 0x050004, 0x070007,
500 0x060006, 0x070007, 0x080008
501 };
502
503 /* for (i = 0; i < 4*4; i++) {
504 * table56[i] = ((ht[5].hlen[i]) << 16) + ht[6].hlen[i];
505 * }
506 */
507 const uint32_t table56[4 * 4] = {
508 0x010003, 0x040004, 0x070006, 0x080008, 0x040004, 0x050004, 0x080006, 0x090007,
509 0x070005, 0x080006, 0x090007, 0x0a0008, 0x080007, 0x080007, 0x090008, 0x0a0009
510 };
511
512
513
514 /*
515 * 0: MPEG-2 LSF
516 * 1: MPEG-1
517 * 2: MPEG-2.5 LSF FhG extention (1995-07-11 shn)
518 */
519
520 typedef enum {
521 MPEG_2 = 0,
522 MPEG_1 = 1,
523 MPEG_25 = 2
524 } MPEG_t;
525
526 const int bitrate_table[3][16] = {
527 {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1}, /* MPEG 2 */
528 {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1}, /* MPEG 1 */
529 {0, 8, 16, 24, 32, 40, 48, 56, 64, -1, -1, -1, -1, -1, -1, -1}, /* MPEG 2.5 */
530 };
531
532 const int samplerate_table[3][4] = {
533 {22050, 24000, 16000, -1}, /* MPEG 2 */
534 {44100, 48000, 32000, -1}, /* MPEG 1 */
535 {11025, 12000, 8000, -1}, /* MPEG 2.5 */
536 };
537
538 int
lame_get_bitrate(int mpeg_version,int table_index)539 lame_get_bitrate(int mpeg_version, int table_index)
540 {
541 if (0 <= mpeg_version && mpeg_version <= 2) {
542 if (0 <= table_index && table_index <= 15) {
543 return bitrate_table[mpeg_version][table_index];
544 }
545 }
546 return -1;
547 }
548
549 int
lame_get_samplerate(int mpeg_version,int table_index)550 lame_get_samplerate(int mpeg_version, int table_index)
551 {
552 if (0 <= mpeg_version && mpeg_version <= 2) {
553 if (0 <= table_index && table_index <= 3) {
554 return samplerate_table[mpeg_version][table_index];
555 }
556 }
557 return -1;
558 }
559
560
561 /* This is the scfsi_band table from 2.4.2.7 of the IS */
562 const int scfsi_band[5] = { 0, 6, 11, 16, 21 };
563
564 /* end of tables.c */
565