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