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