dct4_a.h

00001 /*
00002  * g722_1 - a library for the G.722.1 and Annex C codecs
00003  *
00004  * dct4_a.h
00005  *
00006  * Adapted by Steve Underwood <steveu@coppice.org> from the reference
00007  * code supplied with ITU G.722.1, which is:
00008  *
00009  *   (C) 2004 Polycom, Inc.
00010  *   All rights reserved.
00011  *
00012  * This program is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
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 };

Generated on 29 Mar 2018 for libg722_1 by  doxygen 1.6.1