00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 typedef struct
00020 {
00021 int16_t cosine;
00022 int16_t minus_sine;
00023 } cos_msin_t;
00024
00025 static const cos_msin_t a_cos_msin_2[10] =
00026 {
00027 {29805, -1171},
00028 {29621, -3506},
00029 {29255, -5819},
00030 {28708, -8097},
00031 {27984, -10324},
00032 {27088, -12488},
00033 {26025, -14575},
00034 {24801, -16572},
00035 {23425, -18466},
00036 {21903, -20247}
00037 };
00038
00039 static const cos_msin_t a_cos_msin_4[20] =
00040 {
00041 {29822, -586},
00042 {29776, -1756},
00043 {29684, -2924},
00044 {29547, -4087},
00045 {29364, -5244},
00046 {29135, -6392},
00047 {28862, -7531},
00048 {28544, -8659},
00049 {28182, -9773},
00050 {27776, -10871},
00051 {27328, -11954},
00052 {26838, -13017},
00053 {26306, -14061},
00054 {25734, -15083},
00055 {25122, -16081},
00056 {24471, -17055},
00057 {23783, -18003},
00058 {23057, -18923},
00059 {22297, -19813},
00060 {21502, -20673}
00061 };
00062
00063 static const cos_msin_t a_cos_msin_8[40] =
00064 {
00065 {29827, -293},
00066 {29815, -878},
00067 {29792, -1464},
00068 {29758, -2048},
00069 {29712, -2632},
00070 {29654, -3215},
00071 {29586, -3797},
00072 {29505, -4377},
00073 {29414, -4955},
00074 {29311, -5532},
00075 {29196, -6106},
00076 {29071, -6678},
00077 {28934, -7248},
00078 {28786, -7814},
00079 {28627, -8378},
00080 {28457, -8938},
00081 {28276, -9495},
00082 {28084, -10049},
00083 {27882, -10598},
00084 {27668, -11144},
00085 {27444, -11685},
00086 {27209, -12221},
00087 {26964, -12753},
00088 {26709, -13280},
00089 {26443, -13802},
00090 {26167, -14318},
00091 {25881, -14829},
00092 {25584, -15335},
00093 {25278, -15834},
00094 {24963, -16327},
00095 {24637, -16814},
00096 {24302, -17295},
00097 {23958, -17769},
00098 {23605, -18236},
00099 {23242, -18695},
00100 {22871, -19148},
00101 {22490, -19594},
00102 {22101, -20031},
00103 {21704, -20461},
00104 {21298, -20884}
00105 };
00106
00107 static const cos_msin_t a_cos_msin_16[80] =
00108 {
00109 {29828, -146},
00110 {29825, -439},
00111 {29819, -732},
00112 {29811, -1025},
00113 {29799, -1317},
00114 {29785, -1610},
00115 {29767, -1902},
00116 {29747, -2194},
00117 {29724, -2486},
00118 {29698, -2778},
00119 {29670, -3069},
00120 {29638, -3360},
00121 {29604, -3651},
00122 {29567, -3942},
00123 {29526, -4232},
00124 {29483, -4521},
00125 {29438, -4811},
00126 {29389, -5099},
00127 {29338, -5388},
00128 {29283, -5676},
00129 {29226, -5963},
00130 {29166, -6249},
00131 {29103, -6535},
00132 {29038, -6821},
00133 {28969, -7106},
00134 {28898, -7390},
00135 {28824, -7673},
00136 {28748, -7956},
00137 {28668, -8237},
00138 {28586, -8518},
00139 {28501, -8799},
00140 {28413, -9078},
00141 {28323, -9357},
00142 {28229, -9634},
00143 {28133, -9911},
00144 {28035, -10187},
00145 {27933, -10461},
00146 {27829, -10735},
00147 {27723, -11008},
00148 {27613, -11279},
00149 {27501, -11550},
00150 {27387, -11819},
00151 {27269, -12088},
00152 {27149, -12355},
00153 {27027, -12621},
00154 {26901, -12885},
00155 {26774, -13149},
00156 {26643, -13411},
00157 {26510, -13672},
00158 {26375, -13932},
00159 {26237, -14190},
00160 {26096, -14447},
00161 {25953, -14702},
00162 {25807, -14956},
00163 {25659, -15209},
00164 {25509, -15460},
00165 {25356, -15710},
00166 {25200, -15958},
00167 {25043, -16205},
00168 {24882, -16450},
00169 {24720, -16693},
00170 {24554, -16935},
00171 {24387, -17175},
00172 {24217, -17414},
00173 {24045, -17651},
00174 {23871, -17886},
00175 {23694, -18119},
00176 {23515, -18351},
00177 {23334, -18581},
00178 {23150, -18809},
00179 {22964, -19036},
00180 {22776, -19260},
00181 {22586, -19483},
00182 {22394, -19704},
00183 {22199, -19923},
00184 {22003, -20140},
00185 {21804, -20355},
00186 {21603, -20568},
00187 {21400, -20779},
00188 {21195, -20988}
00189 };
00190
00191 static const cos_msin_t a_cos_msin_32[160] =
00192 {
00193 {29828, -73},
00194 {29827, -220},
00195 {29826, -366},
00196 {29824, -512},
00197 {29821, -659},
00198 {29817, -805},
00199 {29813, -952},
00200 {29808, -1098},
00201 {29802, -1244},
00202 {29796, -1390},
00203 {29789, -1537},
00204 {29781, -1683},
00205 {29772, -1829},
00206 {29763, -1975},
00207 {29753, -2121},
00208 {29742, -2267},
00209 {29730, -2413},
00210 {29718, -2559},
00211 {29705, -2705},
00212 {29692, -2851},
00213 {29677, -2997},
00214 {29662, -3142},
00215 {29646, -3288},
00216 {29630, -3433},
00217 {29613, -3579},
00218 {29595, -3724},
00219 {29576, -3869},
00220 {29557, -4014},
00221 {29537, -4159},
00222 {29516, -4304},
00223 {29494, -4449},
00224 {29472, -4594},
00225 {29449, -4738},
00226 {29426, -4883},
00227 {29401, -5027},
00228 {29376, -5172},
00229 {29351, -5316},
00230 {29324, -5460},
00231 {29297, -5604},
00232 {29269, -5747},
00233 {29241, -5891},
00234 {29211, -6034},
00235 {29181, -6178},
00236 {29151, -6321},
00237 {29119, -6464},
00238 {29087, -6607},
00239 {29054, -6749},
00240 {29021, -6892},
00241 {28987, -7034},
00242 {28952, -7177},
00243 {28916, -7319},
00244 {28880, -7460},
00245 {28843, -7602},
00246 {28805, -7744},
00247 {28767, -7885},
00248 {28728, -8026},
00249 {28688, -8167},
00250 {28648, -8308},
00251 {28607, -8448},
00252 {28565, -8589},
00253 {28522, -8729},
00254 {28479, -8869},
00255 {28435, -9008},
00256 {28391, -9148},
00257 {28346, -9287},
00258 {28300, -9426},
00259 {28253, -9565},
00260 {28206, -9703},
00261 {28158, -9842},
00262 {28109, -9980},
00263 {28060, -10118},
00264 {28010, -10255},
00265 {27959, -10393},
00266 {27908, -10530},
00267 {27856, -10667},
00268 {27803, -10803},
00269 {27750, -10940},
00270 {27696, -11076},
00271 {27641, -11212},
00272 {27586, -11347},
00273 {27529, -11482},
00274 {27473, -11617},
00275 {27415, -11752},
00276 {27357, -11886},
00277 {27299, -12021},
00278 {27239, -12154},
00279 {27179, -12288},
00280 {27119, -12421},
00281 {27057, -12554},
00282 {26996, -12687},
00283 {26933, -12819},
00284 {26870, -12951},
00285 {26806, -13083},
00286 {26741, -13215},
00287 {26676, -13346},
00288 {26610, -13476},
00289 {26544, -13607},
00290 {26477, -13737},
00291 {26409, -13867},
00292 {26340, -13996},
00293 {26271, -14125},
00294 {26202, -14254},
00295 {26132, -14383},
00296 {26061, -14511},
00297 {25989, -14638},
00298 {25917, -14766},
00299 {25844, -14893},
00300 {25771, -15020},
00301 {25697, -15146},
00302 {25622, -15272},
00303 {25547, -15397},
00304 {25471, -15523},
00305 {25394, -15648},
00306 {25317, -15772},
00307 {25239, -15896},
00308 {25161, -16020},
00309 {25082, -16143},
00310 {25003, -16266},
00311 {24923, -16389},
00312 {24842, -16511},
00313 {24760, -16632},
00314 {24678, -16754},
00315 {24596, -16875},
00316 {24513, -16995},
00317 {24429, -17115},
00318 {24345, -17235},
00319 {24260, -17354},
00320 {24174, -17473},
00321 {24088, -17592},
00322 {24002, -17710},
00323 {23914, -17827},
00324 {23827, -17945},
00325 {23738, -18061},
00326 {23649, -18178},
00327 {23560, -18293},
00328 {23470, -18409},
00329 {23379, -18524},
00330 {23288, -18638},
00331 {23196, -18752},
00332 {23104, -18866},
00333 {23011, -18979},
00334 {22917, -19092},
00335 {22824, -19204},
00336 {22729, -19316},
00337 {22634, -19427},
00338 {22538, -19538},
00339 {22442, -19649},
00340 {22345, -19759},
00341 {22248, -19868},
00342 {22150, -19977},
00343 {22052, -20086},
00344 {21953, -20194},
00345 {21854, -20301},
00346 {21754, -20408},
00347 {21653, -20515},
00348 {21552, -20621},
00349 {21451, -20726},
00350 {21349, -20831},
00351 {21246, -20936},
00352 {21143, -21040}
00353 };
00354
00355 static const cos_msin_t a_cos_msin_64[320] =
00356 {
00357 {29827, -34},
00358 {29827, -106},
00359 {29827, -177},
00360 {29827, -249},
00361 {29826, -320},
00362 {29825, -392},
00363 {29824, -463},
00364 {29823, -535},
00365 {29821, -606},
00366 {29819, -678},
00367 {29818, -750},
00368 {29816, -821},
00369 {29814, -893},
00370 {29812, -964},
00371 {29809, -1035},
00372 {29807, -1106},
00373 {29804, -1177},
00374 {29801, -1249},
00375 {29797, -1320},
00376 {29795, -1392},
00377 {29791, -1463},
00378 {29787, -1535},
00379 {29784, -1606},
00380 {29780, -1678},
00381 {29776, -1749},
00382 {29771, -1820},
00383 {29767, -1892},
00384 {29763, -1963},
00385 {29758, -2035},
00386 {29753, -2106},
00387 {29748, -2177},
00388 {29742, -2249},
00389 {29737, -2320},
00390 {29731, -2391},
00391 {29726, -2462},
00392 {29719, -2534},
00393 {29713, -2605},
00394 {29707, -2676},
00395 {29701, -2747},
00396 {29694, -2819},
00397 {29686, -2890},
00398 {29680, -2961},
00399 {29673, -3032},
00400 {29665, -3103},
00401 {29658, -3174},
00402 {29650, -3245},
00403 {29643, -3316},
00404 {29635, -3387},
00405 {29626, -3459},
00406 {29618, -3529},
00407 {29610, -3600},
00408 {29601, -3671},
00409 {29592, -3742},
00410 {29583, -3813},
00411 {29574, -3884},
00412 {29564, -3955},
00413 {29554, -4026},
00414 {29544, -4097},
00415 {29535, -4167},
00416 {29525, -4238},
00417 {29514, -4309},
00418 {29504, -4380},
00419 {29493, -4450},
00420 {29483, -4521},
00421 {29472, -4591},
00422 {29461, -4662},
00423 {29450, -4733},
00424 {29439, -4803},
00425 {29427, -4874},
00426 {29415, -4944},
00427 {29403, -5015},
00428 {29391, -5085},
00429 {29379, -5155},
00430 {29366, -5226},
00431 {29353, -5296},
00432 {29341, -5367},
00433 {29328, -5438},
00434 {29314, -5508},
00435 {29301, -5578},
00436 {29289, -5648},
00437 {29274, -5718},
00438 {29260, -5788},
00439 {29247, -5858},
00440 {29232, -5928},
00441 {29218, -5998},
00442 {29204, -6068},
00443 {29188, -6139},
00444 {29175, -6209},
00445 {29159, -6279},
00446 {29145, -6348},
00447 {29128, -6418},
00448 {29114, -6488},
00449 {29097, -6557},
00450 {29082, -6627},
00451 {29066, -6697},
00452 {29050, -6767},
00453 {29034, -6837},
00454 {29017, -6906},
00455 {29001, -6975},
00456 {28984, -7045},
00457 {28966, -7114},
00458 {28950, -7184},
00459 {28933, -7254},
00460 {28915, -7323},
00461 {28897, -7392},
00462 {28880, -7461},
00463 {28862, -7530},
00464 {28843, -7600},
00465 {28825, -7669},
00466 {28807, -7738},
00467 {28788, -7806},
00468 {28769, -7875},
00469 {28751, -7944},
00470 {28732, -8014},
00471 {28712, -8082},
00472 {28692, -8151},
00473 {28672, -8219},
00474 {28653, -8289},
00475 {28633, -8357},
00476 {28613, -8425},
00477 {28593, -8494},
00478 {28572, -8563},
00479 {28551, -8632},
00480 {28531, -8700},
00481 {28510, -8768},
00482 {28488, -8837},
00483 {28468, -8905},
00484 {28447, -8973},
00485 {28425, -9041},
00486 {28403, -9109},
00487 {28381, -9177},
00488 {28359, -9245},
00489 {28336, -9313},
00490 {28315, -9381},
00491 {28292, -9448},
00492 {28269, -9517},
00493 {28246, -9584},
00494 {28223, -9652},
00495 {28200, -9720},
00496 {28176, -9787},
00497 {28153, -9854},
00498 {28129, -9922},
00499 {28105, -9990},
00500 {28082, -10056},
00501 {28057, -10124},
00502 {28032, -10191},
00503 {28009, -10258},
00504 {27984, -10326},
00505 {27959, -10392},
00506 {27934, -10460},
00507 {27909, -10526},
00508 {27883, -10593},
00509 {27858, -10661},
00510 {27832, -10727},
00511 {27807, -10794},
00512 {27780, -10860},
00513 {27754, -10927},
00514 {27728, -10993},
00515 {27701, -11059},
00516 {27676, -11126},
00517 {27648, -11192},
00518 {27622, -11259},
00519 {27595, -11324},
00520 {27567, -11391},
00521 {27540, -11456},
00522 {27512, -11523},
00523 {27484, -11588},
00524 {27456, -11655},
00525 {27429, -11720},
00526 {27401, -11786},
00527 {27372, -11852},
00528 {27344, -11917},
00529 {27315, -11982},
00530 {27286, -12049},
00531 {27257, -12114},
00532 {27229, -12179},
00533 {27199, -12244},
00534 {27169, -12309},
00535 {27140, -12375},
00536 {27110, -12439},
00537 {27080, -12505},
00538 {27050, -12570},
00539 {27019, -12634},
00540 {26990, -12699},
00541 {26958, -12764},
00542 {26928, -12828},
00543 {26897, -12892},
00544 {26866, -12956},
00545 {26835, -13021},
00546 {26804, -13086},
00547 {26773, -13149},
00548 {26741, -13214},
00549 {26709, -13278},
00550 {26677, -13342},
00551 {26645, -13406},
00552 {26613, -13470},
00553 {26581, -13534},
00554 {26549, -13597},
00555 {26515, -13661},
00556 {26483, -13725},
00557 {26450, -13788},
00558 {26417, -13851},
00559 {26384, -13915},
00560 {26350, -13978},
00561 {26316, -14041},
00562 {26283, -14103},
00563 {26248, -14166},
00564 {26215, -14229},
00565 {26180, -14292},
00566 {26146, -14355},
00567 {26112, -14417},
00568 {26077, -14480},
00569 {26042, -14543},
00570 {26008, -14605},
00571 {25972, -14667},
00572 {25937, -14730},
00573 {25901, -14792},
00574 {25866, -14854},
00575 {25830, -14916},
00576 {25794, -14977},
00577 {25759, -15039},
00578 {25723, -15101},
00579 {25687, -15162},
00580 {25650, -15224},
00581 {25613, -15286},
00582 {25577, -15347},
00583 {25540, -15408},
00584 {25503, -15470},
00585 {25465, -15531},
00586 {25428, -15592},
00587 {25391, -15653},
00588 {25353, -15714},
00589 {25315, -15774},
00590 {25277, -15834},
00591 {25240, -15895},
00592 {25201, -15956},
00593 {25162, -16016},
00594 {25124, -16076},
00595 {25086, -16136},
00596 {25047, -16196},
00597 {25008, -16256},
00598 {24969, -16316},
00599 {24930, -16375},
00600 {24891, -16436},
00601 {24851, -16496},
00602 {24811, -16555},
00603 {24772, -16615},
00604 {24732, -16674},
00605 {24692, -16732},
00606 {24652, -16791},
00607 {24612, -16852},
00608 {24572, -16911},
00609 {24531, -16969},
00610 {24490, -17027},
00611 {24449, -17086},
00612 {24408, -17145},
00613 {24367, -17203},
00614 {24325, -17261},
00615 {24284, -17320},
00616 {24242, -17379},
00617 {24200, -17436},
00618 {24158, -17494},
00619 {24116, -17552},
00620 {24075, -17610},
00621 {24032, -17668},
00622 {23990, -17725},
00623 {23947, -17782},
00624 {23904, -17840},
00625 {23862, -17897},
00626 {23819, -17954},
00627 {23775, -18011},
00628 {23732, -18068},
00629 {23689, -18125},
00630 {23645, -18181},
00631 {23602, -18238},
00632 {23558, -18294},
00633 {23514, -18351},
00634 {23470, -18407},
00635 {23426, -18464},
00636 {23381, -18520},
00637 {23337, -18576},
00638 {23293, -18632},
00639 {23248, -18688},
00640 {23202, -18743},
00641 {23158, -18799},
00642 {23112, -18854},
00643 {23068, -18910},
00644 {23022, -18964},
00645 {22977, -19020},
00646 {22931, -19074},
00647 {22885, -19129},
00648 {22839, -19185},
00649 {22793, -19239},
00650 {22747, -19294},
00651 {22700, -19348},
00652 {22655, -19403},
00653 {22607, -19457},
00654 {22561, -19511},
00655 {22514, -19565},
00656 {22467, -19619},
00657 {22421, -19673},
00658 {22373, -19726},
00659 {22326, -19780},
00660 {22279, -19834},
00661 {22230, -19887},
00662 {22183, -19940},
00663 {22135, -19993},
00664 {22087, -20047},
00665 {22039, -20099},
00666 {21991, -20152},
00667 {21942, -20205},
00668 {21894, -20257},
00669 {21845, -20309},
00670 {21797, -20362},
00671 {21748, -20413},
00672 {21699, -20466},
00673 {21650, -20518},
00674 {21601, -20570},
00675 {21551, -20621},
00676 {21502, -20674}
00677 };
00678
00679 static const cos_msin_t *a_cos_msin_table[] =
00680 {
00681 a_cos_msin_2,
00682 a_cos_msin_4,
00683 a_cos_msin_8,
00684 a_cos_msin_16,
00685 a_cos_msin_32,
00686 a_cos_msin_64
00687 };
00688
00689 static const int16_t dct_core_a[10][10] =
00690 {
00691
00692 { 10453, 10196, 9688, 8941, 7973, 6810, 5479, 4013, 2448, 823 },
00693 { 10196, 7973, 4013, -823, -5479, -8941, -10453, -9688, -6810, -2448 },
00694 { 9688 , 4013, -4013, -9688, -9688, -4013, 4013, 9688, 9688, 4013 },
00695 { 8941 , -823, -9688, -7973, 2448, 10196, 6810, -4013, -10453, -5479 },
00696 { 7973 , -5479, -9688, 2448, 10453, 823, -10196, -4013, 8941, 6810 },
00697 { 6810 , -8941, -4013, 10196, 823, -10453, 2448, 9688, -5479, -7973 },
00698 { 5479 , -10453, 4013, 6810, -10196, 2448, 7973, -9688, 823, 8941 },
00699 { 4013 , -9688, 9688, -4013, -4013, 9688, -9688, 4013, 4013, -9688 },
00700 { 2448 , -6810, 9688, -10453, 8941, -5479, 823, 4013, -7973, 10196 },
00701 { 823 , -2448, 4013, -5479, 6810, -7973, 8941, -9688, 10196, -10453 }
00702 };
00703
00704 static const int16_t anal_bias[320] =
00705 {
00706 1, 1, 3, 1, 4, 1, 3, -2, 4, 3,
00707 4, 1, 3, 0, 2, -3, 0, 0, 2, 2,
00708 4, 1, 1, -5, 4, 1, 2, -1, 0, -1,
00709 1, -2, 0, 2, 2, 2, 4, 1, 3, 0,
00710 5, 3, 2, 0, 3, 0, 1, -4, 1, 1,
00711 2, 0, 4, 0, 1, -4, 6, 1, 3, -1,
00712 1, 0, 0, -4, 1, 1, 3, 1, 3, 2,
00713 4, -2, 4, 3, 5, 1, 3, 0, 1, -3,
00714 1, 1, 2, 0, 4, 1, 2, -4, 4, 2,
00715 2, -1, 1, -1, 1, -4, 0, 0, 3, 0,
00716 5, 2, 3, -1, 6, 2, 5, 0, 4, 0,
00717 1, -3, 1, 0, 3, 0, 4, 0, 1, -3,
00718 4, 1, 3, -1, 1, -2, 1, -4, 0, 1,
00719 2, 1, 3, 2, 2, -2, 4, 3, 3, 0,
00720 3, 0, 0, -2, 1, 0, 2, 0, 5, -1,
00721 1, -3, 4, 2, 2, 0, 2, -3, 1, -4,
00722 -1, 1, 2, 2, 4, 1, 3, -1, 5, 2,
00723 2, 0, 3, -1, 2, -3, 0, 1, 2, 2,
00724 4, 0, 1, -5, 5, 1, 3, 0, 2, -1,
00725 0, -2, 1, 2, 2, 2, 4, 1, 0, 0,
00726 4, 2, 4, 1, 4, -1, 1, -4, 0, 1,
00727 3, 1, 5, 1, 1, -2, 4, 0, 2, 0,
00728 2, -1, 0, -2, 0, 1, 1, 1, 4, 2,
00729 3, -2, 5, 4, 4, 0, 3, 0, 3, -4,
00730 1, 2, 2, 0, 4, 1, 0, -3, 4, 2,
00731 3, -1, 1, -1, 1, -4, 0, 2, 3, 1,
00732 4, 1, 3, 0, 3, 3, 4, 1, 2, 0,
00733 1, -3, 2, 2, 2, 1, 5, 0, 1, -4,
00734 4, 1, 3, -2, 3, -1, 0, -2, 0, 2,
00735 2, 0, 5, 1, 4, -1, 4, 3, 4, 1,
00736 3, 0, 1, -4, 2, 0, 3, 1, 5, 0,
00737 1, -5, 5, 2, 2, 0, 0, 0, 0, -4
00738 };