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  *   © 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  * $Id: dct4_a.h,v 1.4 2008/09/25 15:56:31 steveu Exp $
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 };

Generated on 16 Jul 2011 for libg722_1 by  doxygen 1.6.1