00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifdef HAVE_CONFIG_H
00025 # include <config.h>
00026 #endif
00027
00028 #include "lame.h"
00029 #include "machine.h"
00030 #include "encoder.h"
00031 #include "tables.h"
00032
00033
00034 static const short t1HB[] = {
00035 1, 1,
00036 1, 0
00037 };
00038
00039 static const short t2HB[] = {
00040 1, 2, 1,
00041 3, 1, 1,
00042 3, 2, 0
00043 };
00044
00045 static const short t3HB[] = {
00046 3, 2, 1,
00047 1, 1, 1,
00048 3, 2, 0
00049 };
00050
00051 static const short t5HB[] = {
00052 1, 2, 6, 5,
00053 3, 1, 4, 4,
00054 7, 5, 7, 1,
00055 6, 1, 1, 0
00056 };
00057
00058 static const short t6HB[] = {
00059 7, 3, 5, 1,
00060 6, 2, 3, 2,
00061 5, 4, 4, 1,
00062 3, 3, 2, 0
00063 };
00064
00065 static const short t7HB[] = {
00066 1, 2, 10, 19, 16, 10,
00067 3, 3, 7, 10, 5, 3,
00068 11, 4, 13, 17, 8, 4,
00069 12, 11, 18, 15, 11, 2,
00070 7, 6, 9, 14, 3, 1,
00071 6, 4, 5, 3, 2, 0
00072 };
00073
00074 static const short t8HB[] = {
00075 3, 4, 6, 18, 12, 5,
00076 5, 1, 2, 16, 9, 3,
00077 7, 3, 5, 14, 7, 3,
00078 19, 17, 15, 13, 10, 4,
00079 13, 5, 8, 11, 5, 1,
00080 12, 4, 4, 1, 1, 0
00081 };
00082
00083 static const short t9HB[] = {
00084 7, 5, 9, 14, 15, 7,
00085 6, 4, 5, 5, 6, 7,
00086 7, 6, 8, 8, 8, 5,
00087 15, 6, 9, 10, 5, 1,
00088 11, 7, 9, 6, 4, 1,
00089 14, 4, 6, 2, 6, 0
00090 };
00091
00092 static const short t10HB[] = {
00093 1, 2, 10, 23, 35, 30, 12, 17,
00094 3, 3, 8, 12, 18, 21, 12, 7,
00095 11, 9, 15, 21, 32, 40, 19, 6,
00096 14, 13, 22, 34, 46, 23, 18, 7,
00097 20, 19, 33, 47, 27, 22, 9, 3,
00098 31, 22, 41, 26, 21, 20, 5, 3,
00099 14, 13, 10, 11, 16, 6, 5, 1,
00100 9, 8, 7, 8, 4, 4, 2, 0
00101 };
00102
00103 static const short t11HB[] = {
00104 3, 4, 10, 24, 34, 33, 21, 15,
00105 5, 3, 4, 10, 32, 17, 11, 10,
00106 11, 7, 13, 18, 30, 31, 20, 5,
00107 25, 11, 19, 59, 27, 18, 12, 5,
00108 35, 33, 31, 58, 30, 16, 7, 5,
00109 28, 26, 32, 19, 17, 15, 8, 14,
00110 14, 12, 9, 13, 14, 9, 4, 1,
00111 11, 4, 6, 6, 6, 3, 2, 0
00112 };
00113
00114 static const short t12HB[] = {
00115 9, 6, 16, 33, 41, 39, 38, 26,
00116 7, 5, 6, 9, 23, 16, 26, 11,
00117 17, 7, 11, 14, 21, 30, 10, 7,
00118 17, 10, 15, 12, 18, 28, 14, 5,
00119 32, 13, 22, 19, 18, 16, 9, 5,
00120 40, 17, 31, 29, 17, 13, 4, 2,
00121 27, 12, 11, 15, 10, 7, 4, 1,
00122 27, 12, 8, 12, 6, 3, 1, 0
00123 };
00124
00125 static const short t13HB[] = {
00126 1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19,
00127 3, 4, 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14,
00128 15, 13, 23, 36, 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16,
00129 22, 20, 37, 61, 56, 79, 73, 64, 43, 76, 56, 37, 26, 31, 25, 14,
00130 35, 16, 60, 57, 97, 75, 114, 91, 54, 73, 55, 41, 48, 53, 23, 24,
00131 58, 27, 50, 96, 76, 70, 93, 84, 77, 58, 79, 29, 74, 49, 41, 17,
00132 47, 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50, 59, 38, 36, 15,
00133 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44, 43, 42,
00134 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16,
00135 53, 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11,
00136 35, 33, 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22,
00137 53, 25, 23, 38, 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7,
00138 34, 32, 28, 39, 49, 75, 30, 52, 48, 40, 52, 28, 18, 17, 9, 5,
00139 45, 21, 34, 64, 56, 50, 49, 45, 31, 19, 12, 15, 10, 7, 6, 3,
00140 48, 23, 20, 39, 36, 35, 53, 21, 16, 23, 13, 10, 6, 1, 4, 2,
00141 16, 15, 17, 27, 25, 20, 29, 11, 17, 12, 16, 8, 1, 1, 0, 1
00142 };
00143
00144 static const short t15HB[] = {
00145 7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63,
00146 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36,
00147 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56, 33,
00148 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29,
00149 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27,
00150 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38,
00151 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30,
00152 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25,
00153 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20,
00154 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15,
00155 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9,
00156 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11,
00157 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7,
00158 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3,
00159 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1,
00160 71, 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0
00161 };
00162
00163 static const short t16HB[] = {
00164 1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195, 376, 17,
00165 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119, 201, 107, 207, 9,
00166 15, 13, 23, 38, 67, 58, 103, 90, 161, 72, 127, 117, 110, 209, 206, 16,
00167 45, 21, 39, 69, 64, 114, 99, 87, 158, 140, 252, 212, 199, 387, 365, 26,
00168 75, 36, 68, 65, 115, 101, 179, 164, 155, 264, 246, 226, 395, 382, 362, 9,
00169 66, 30, 59, 56, 102, 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16,
00170 111, 54, 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10,
00171 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372, 380, 889, 884, 8,
00172 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383, 727, 713, 708, 7,
00173 154, 76, 73, 141, 131, 256, 245, 426, 406, 394, 384, 735, 359, 710, 352, 11,
00174 139, 129, 67, 125, 247, 233, 229, 219, 393, 743, 737, 720, 885, 882, 439, 4,
00175 243, 120, 118, 115, 227, 223, 396, 746, 742, 736, 721, 712, 706, 223, 436, 6,
00176 202, 224, 222, 218, 216, 389, 386, 381, 364, 888, 443, 707, 440, 437, 1728, 4,
00177 747, 211, 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2,
00178 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870, 434, 0,
00179 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7, 5, 3, 1, 3
00180 };
00181
00182 static const short t24HB[] = {
00183 15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032, 88,
00184 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297, 279, 42,
00185 47, 22, 41, 74, 68, 128, 120, 221, 207, 194, 182, 340, 315, 295, 541, 18,
00186 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325, 311, 293, 271, 16,
00187 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352, 323, 306, 285, 540, 14,
00188 263, 66, 129, 126, 119, 114, 214, 202, 192, 180, 341, 317, 301, 281, 262, 12,
00189 249, 123, 121, 117, 113, 215, 206, 195, 185, 347, 330, 308, 291, 272, 520, 10,
00190 435, 115, 111, 109, 211, 203, 196, 187, 353, 332, 313, 298, 283, 531, 381, 17,
00191 427, 212, 208, 205, 201, 193, 186, 177, 169, 320, 303, 286, 268, 514, 377, 16,
00192 335, 199, 197, 191, 189, 181, 174, 333, 321, 305, 289, 275, 521, 379, 371, 11,
00193 668, 184, 183, 179, 175, 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10,
00194 652, 346, 171, 168, 164, 318, 309, 299, 287, 276, 263, 513, 375, 368, 362, 6,
00195 648, 322, 316, 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4,
00196 620, 300, 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2,
00197 1033, 280, 278, 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0,
00198 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1, 3
00199 };
00200
00201 static const short t32HB[] = {
00202 1 << 0, 5 << 1, 4 << 1, 5 << 2, 6 << 1, 5 << 2, 4 << 2, 4 << 3,
00203 7 << 1, 3 << 2, 6 << 2, 0 << 3, 7 << 2, 2 << 3, 3 << 3, 1 << 4
00204 };
00205
00206 static const short t33HB[] = {
00207 15 << 0, 14 << 1, 13 << 1, 12 << 2, 11 << 1, 10 << 2, 9 << 2, 8 << 3,
00208 7 << 1, 6 << 2, 5 << 2, 4 << 3, 3 << 2, 2 << 3, 1 << 3, 0 << 4
00209 };
00210
00211
00212 const char t1l[] = {
00213 1, 4,
00214 3, 5
00215 };
00216
00217 const char t2l[] = {
00218 1, 4, 7,
00219 4, 5, 7,
00220 6, 7, 8
00221 };
00222
00223 const char t3l[] = {
00224 2, 3, 7,
00225 4, 4, 7,
00226 6, 7, 8
00227 };
00228
00229 const char t5l[] = {
00230 1, 4, 7, 8,
00231 4, 5, 8, 9,
00232 7, 8, 9, 10,
00233 8, 8, 9, 10
00234 };
00235
00236 const char t6l[] = {
00237 3, 4, 6, 8,
00238 4, 4, 6, 7,
00239 5, 6, 7, 8,
00240 7, 7, 8, 9
00241 };
00242
00243 const char t7l[] = {
00244 1, 4, 7, 9, 9, 10,
00245 4, 6, 8, 9, 9, 10,
00246 7, 7, 9, 10, 10, 11,
00247 8, 9, 10, 11, 11, 11,
00248 8, 9, 10, 11, 11, 12,
00249 9, 10, 11, 12, 12, 12
00250 };
00251
00252 const char t8l[] = {
00253 2, 4, 7, 9, 9, 10,
00254 4, 4, 6, 10, 10, 10,
00255 7, 6, 8, 10, 10, 11,
00256 9, 10, 10, 11, 11, 12,
00257 9, 9, 10, 11, 12, 12,
00258 10, 10, 11, 11, 13, 13
00259 };
00260
00261 const char t9l[] = {
00262 3, 4, 6, 7, 9, 10,
00263 4, 5, 6, 7, 8, 10,
00264 5, 6, 7, 8, 9, 10,
00265 7, 7, 8, 9, 9, 10,
00266 8, 8, 9, 9, 10, 11,
00267 9, 9, 10, 10, 11, 11
00268 };
00269
00270 const char t10l[] = {
00271 1, 4, 7, 9, 10, 10, 10, 11,
00272 4, 6, 8, 9, 10, 11, 10, 10,
00273 7, 8, 9, 10, 11, 12, 11, 11,
00274 8, 9, 10, 11, 12, 12, 11, 12,
00275 9, 10, 11, 12, 12, 12, 12, 12,
00276 10, 11, 12, 12, 13, 13, 12, 13,
00277 9, 10, 11, 12, 12, 12, 13, 13,
00278 10, 10, 11, 12, 12, 13, 13, 13
00279 };
00280
00281 const char t11l[] = {
00282 2, 4, 6, 8, 9, 10, 9, 10,
00283 4, 5, 6, 8, 10, 10, 9, 10,
00284 6, 7, 8, 9, 10, 11, 10, 10,
00285 8, 8, 9, 11, 10, 12, 10, 11,
00286 9, 10, 10, 11, 11, 12, 11, 12,
00287 9, 10, 11, 12, 12, 13, 12, 13,
00288 9, 9, 9, 10, 11, 12, 12, 12,
00289 9, 9, 10, 11, 12, 12, 12, 12
00290 };
00291
00292 const char t12l[] = {
00293 4, 4, 6, 8, 9, 10, 10, 10,
00294 4, 5, 6, 7, 9, 9, 10, 10,
00295 6, 6, 7, 8, 9, 10, 9, 10,
00296 7, 7, 8, 8, 9, 10, 10, 10,
00297 8, 8, 9, 9, 10, 10, 10, 11,
00298 9, 9, 10, 10, 10, 11, 10, 11,
00299 9, 9, 9, 10, 10, 11, 11, 12,
00300 10, 10, 10, 11, 11, 11, 11, 12
00301 };
00302
00303 const char t13l[] = {
00304 1, 5, 7, 8, 9, 10, 10, 11, 10, 11, 12, 12, 13, 13, 14, 14,
00305 4, 6, 8, 9, 10, 10, 11, 11, 11, 11, 12, 12, 13, 14, 14, 14,
00306 7, 8, 9, 10, 11, 11, 12, 12, 11, 12, 12, 13, 13, 14, 15, 15,
00307 8, 9, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 15,
00308 9, 9, 11, 11, 12, 12, 13, 13, 12, 13, 13, 14, 14, 15, 15, 16,
00309 10, 10, 11, 12, 12, 12, 13, 13, 13, 13, 14, 13, 15, 15, 16, 16,
00310 10, 11, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 15, 15, 16, 16,
00311 11, 11, 12, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 18, 18,
00312 10, 10, 11, 12, 12, 13, 13, 14, 14, 14, 14, 15, 15, 16, 17, 17,
00313 11, 11, 12, 12, 13, 13, 13, 15, 14, 15, 15, 16, 16, 16, 18, 17,
00314 11, 12, 12, 13, 13, 14, 14, 15, 14, 15, 16, 15, 16, 17, 18, 19,
00315 12, 12, 12, 13, 14, 14, 14, 14, 15, 15, 15, 16, 17, 17, 17, 18,
00316 12, 13, 13, 14, 14, 15, 14, 15, 16, 16, 17, 17, 17, 18, 18, 18,
00317 13, 13, 14, 15, 15, 15, 16, 16, 16, 16, 16, 17, 18, 17, 18, 18,
00318 14, 14, 14, 15, 15, 15, 17, 16, 16, 19, 17, 17, 17, 19, 18, 18,
00319 13, 14, 15, 16, 16, 16, 17, 16, 17, 17, 18, 18, 21, 20, 21, 18
00320 };
00321
00322 const char t15l[] = {
00323 3, 5, 6, 8, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 14,
00324 5, 5, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13,
00325 6, 7, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 13,
00326 7, 8, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13,
00327 8, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13,
00328 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 13, 13, 13, 14,
00329 10, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14,
00330 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 14,
00331 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 14, 14,
00332 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14,
00333 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 15, 14,
00334 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15,
00335 12, 12, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 15, 15,
00336 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15,
00337 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 14, 15,
00338 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 15
00339 };
00340
00341 const char t16_5l[] = {
00342 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 11,
00343 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 11,
00344 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 12,
00345 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 13,
00346 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 12,
00347 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 13,
00348 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 13,
00349 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 13,
00350 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 13,
00351 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 14,
00352 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 13,
00353 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 14,
00354 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 14,
00355 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 14,
00356 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 14,
00357 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 12
00358 };
00359
00360 const char t16l[] = {
00361 1, 5, 7, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 14, 10,
00362 4, 6, 8, 9, 10, 11, 11, 11, 12, 12, 12, 13, 14, 13, 14, 10,
00363 7, 8, 9, 10, 11, 11, 12, 12, 13, 12, 13, 13, 13, 14, 14, 11,
00364 9, 9, 10, 11, 11, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 12,
00365 10, 10, 11, 11, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 11,
00366 10, 10, 11, 11, 12, 13, 13, 14, 13, 14, 14, 15, 15, 15, 16, 12,
00367 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 16, 12,
00368 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 17, 17, 12,
00369 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 12,
00370 12, 12, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 15, 16, 15, 13,
00371 12, 13, 12, 13, 14, 14, 14, 14, 15, 16, 16, 16, 17, 17, 16, 12,
00372 13, 13, 13, 13, 14, 14, 15, 16, 16, 16, 16, 16, 16, 15, 16, 13,
00373 13, 14, 14, 14, 14, 15, 15, 15, 15, 17, 16, 16, 16, 16, 18, 13,
00374 15, 14, 14, 14, 15, 15, 16, 16, 16, 18, 17, 17, 17, 19, 17, 13,
00375 14, 15, 13, 14, 16, 16, 15, 16, 16, 17, 18, 17, 19, 17, 16, 13,
00376 10, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10
00377 };
00378
00379 const char t24l[] = {
00380 4, 5, 7, 8, 9, 10, 10, 11, 11, 12, 12, 12, 12, 12, 13, 10,
00381 5, 6, 7, 8, 9, 10, 10, 11, 11, 11, 12, 12, 12, 12, 12, 10,
00382 7, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 9,
00383 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 9,
00384 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 12, 13, 9,
00385 10, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 9,
00386 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 9,
00387 11, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 10,
00388 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 10,
00389 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 10,
00390 12, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10,
00391 12, 12, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 10,
00392 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 10,
00393 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 10,
00394 13, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 10,
00395 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 6
00396 };
00397
00398 const char t32l[] = {
00399 1 + 0, 4 + 1, 4 + 1, 5 + 2, 4 + 1, 6 + 2, 5 + 2, 6 + 3,
00400 4 + 1, 5 + 2, 5 + 2, 6 + 3, 5 + 2, 6 + 3, 6 + 3, 6 + 4
00401 };
00402
00403 const char t33l[] = {
00404 4 + 0, 4 + 1, 4 + 1, 4 + 2, 4 + 1, 4 + 2, 4 + 2, 4 + 3,
00405 4 + 1, 4 + 2, 4 + 2, 4 + 3, 4 + 2, 4 + 3, 4 + 3, 4 + 4
00406 };
00407
00408
00409 const struct huffcodetab ht[HTN] = {
00410
00411 {0, 0, NULL, NULL},
00412 {2, 0, t1HB, t1l},
00413 {3, 0, t2HB, t2l},
00414 {3, 0, t3HB, t3l},
00415 {0, 0, NULL, NULL},
00416 {4, 0, t5HB, t5l},
00417 {4, 0, t6HB, t6l},
00418 {6, 0, t7HB, t7l},
00419 {6, 0, t8HB, t8l},
00420 {6, 0, t9HB, t9l},
00421 {8, 0, t10HB, t10l},
00422 {8, 0, t11HB, t11l},
00423 {8, 0, t12HB, t12l},
00424 {16, 0, t13HB, t13l},
00425 {0, 0, NULL, t16_5l},
00426 {16, 0, t15HB, t15l},
00427
00428 {1, 1, t16HB, t16l},
00429 {2, 3, t16HB, t16l},
00430 {3, 7, t16HB, t16l},
00431 {4, 15, t16HB, t16l},
00432 {6, 63, t16HB, t16l},
00433 {8, 255, t16HB, t16l},
00434 {10, 1023, t16HB, t16l},
00435 {13, 8191, t16HB, t16l},
00436
00437 {4, 15, t24HB, t24l},
00438 {5, 31, t24HB, t24l},
00439 {6, 63, t24HB, t24l},
00440 {7, 127, t24HB, t24l},
00441 {8, 255, t24HB, t24l},
00442 {9, 511, t24HB, t24l},
00443 {11, 2047, t24HB, t24l},
00444 {13, 8191, t24HB, t24l},
00445
00446 {0, 0, t32HB, t32l},
00447 {0, 0, t33HB, t33l},
00448 };
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458 const unsigned int largetbl[16 * 16] = {
00459 0x010004, 0x050005, 0x070007, 0x090008, 0x0a0009, 0x0a000a, 0x0b000a, 0x0b000b,
00460 0x0c000b, 0x0c000c, 0x0c000c, 0x0d000c, 0x0d000c, 0x0d000c, 0x0e000d, 0x0a000a,
00461 0x040005, 0x060006, 0x080007, 0x090008, 0x0a0009, 0x0b000a, 0x0b000a, 0x0b000b,
00462 0x0c000b, 0x0c000b, 0x0c000c, 0x0d000c, 0x0e000c, 0x0d000c, 0x0e000c, 0x0a000a,
00463 0x070007, 0x080007, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000b,
00464 0x0d000b, 0x0c000b, 0x0d000b, 0x0d000c, 0x0d000c, 0x0e000c, 0x0e000d, 0x0b0009,
00465 0x090008, 0x090008, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0c000b,
00466 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0c0009,
00467 0x0a0009, 0x0a0009, 0x0b0009, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000a, 0x0d000b,
00468 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000d, 0x0b0009,
00469 0x0a000a, 0x0a0009, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0e000b,
00470 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0c0009,
00471 0x0b000a, 0x0b000a, 0x0b000a, 0x0c000a, 0x0d000a, 0x0d000b, 0x0d000b, 0x0d000b,
00472 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000d, 0x0c0009,
00473 0x0b000b, 0x0b000a, 0x0c000a, 0x0c000a, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b,
00474 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x0f000c, 0x11000d, 0x11000d, 0x0c000a,
00475 0x0b000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b,
00476 0x0f000b, 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000d, 0x10000d, 0x0c000a,
00477 0x0c000b, 0x0c000b, 0x0c000b, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000b, 0x0f000c,
00478 0x0f000c, 0x0f000c, 0x0f000c, 0x10000c, 0x0f000d, 0x10000d, 0x0f000d, 0x0d000a,
00479 0x0c000c, 0x0d000b, 0x0c000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0e000c, 0x0e000c,
00480 0x0f000c, 0x10000c, 0x10000c, 0x10000d, 0x11000d, 0x11000d, 0x10000d, 0x0c000a,
00481 0x0d000c, 0x0d000c, 0x0d000b, 0x0d000b, 0x0e000b, 0x0e000c, 0x0f000c, 0x10000c,
00482 0x10000c, 0x10000c, 0x10000c, 0x10000d, 0x10000d, 0x0f000d, 0x10000d, 0x0d000a,
00483 0x0d000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x0f000c,
00484 0x0f000c, 0x11000c, 0x10000d, 0x10000d, 0x10000d, 0x10000d, 0x12000d, 0x0d000a,
00485 0x0f000c, 0x0e000c, 0x0e000c, 0x0e000c, 0x0f000c, 0x0f000c, 0x10000c, 0x10000c,
00486 0x10000d, 0x12000d, 0x11000d, 0x11000d, 0x11000d, 0x13000d, 0x11000d, 0x0d000a,
00487 0x0e000d, 0x0f000c, 0x0d000c, 0x0e000c, 0x10000c, 0x10000c, 0x0f000c, 0x10000d,
00488 0x10000d, 0x11000d, 0x12000d, 0x11000d, 0x13000d, 0x11000d, 0x10000d, 0x0d000a,
00489 0x0a0009, 0x0a0009, 0x0a0009, 0x0b0009, 0x0b0009, 0x0c0009, 0x0c0009, 0x0c0009,
00490 0x0d0009, 0x0d0009, 0x0d0009, 0x0d000a, 0x0d000a, 0x0d000a, 0x0d000a, 0x0a0006
00491 };
00492
00493
00494
00495
00496
00497 const unsigned int table23[3 * 3] = {
00498 0x010002, 0x040003, 0x070007,
00499 0x040004, 0x050004, 0x070007,
00500 0x060006, 0x070007, 0x080008
00501 };
00502
00503
00504
00505
00506
00507 const unsigned int table56[4 * 4] = {
00508 0x010003, 0x040004, 0x070006, 0x080008, 0x040004, 0x050004, 0x080006, 0x090007,
00509 0x070005, 0x080006, 0x090007, 0x0a0008, 0x080007, 0x080007, 0x090008, 0x0a0009
00510 };
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520 typedef enum {
00521 MPEG_2 = 0,
00522 MPEG_1 = 1,
00523 MPEG_25 = 2
00524 } MPEG_t;
00525
00526 const int bitrate_table[3][16] = {
00527 {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1},
00528 {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1},
00529 {0, 8, 16, 24, 32, 40, 48, 56, 64, -1, -1, -1, -1, -1, -1, -1},
00530 };
00531
00532 const int samplerate_table[3][4] = {
00533 {22050, 24000, 16000, -1},
00534 {44100, 48000, 32000, -1},
00535 {11025, 12000, 8000, -1},
00536 };
00537
00538 const char *version_string[3] = { "2", "1", "2.5" };
00539
00540 const unsigned header_word[3] = { 0xFFF00000, 0xFFF80000, 0xFFE00000 };
00541
00542
00543 const int scfsi_band[5] = { 0, 6, 11, 16, 21 };
00544
00545