freeswitch/libs/libg722_1/src/dct4_a.h

737 lines
16 KiB
C

/*
* g722_1 - a library for the G.722.1 and Annex C codecs
*
* dct4_a.h
*
* Adapted by Steve Underwood <steveu@coppice.org> from the reference
* code supplied with ITU G.722.1, which is:
*
* (C) 2004 Polycom, Inc.
* All rights reserved.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
typedef struct
{
int16_t cosine;
int16_t minus_sine;
} cos_msin_t;
static const cos_msin_t a_cos_msin_2[10] =
{
{29805, -1171},
{29621, -3506},
{29255, -5819},
{28708, -8097},
{27984, -10324},
{27088, -12488},
{26025, -14575},
{24801, -16572},
{23425, -18466},
{21903, -20247}
};
static const cos_msin_t a_cos_msin_4[20] =
{
{29822, -586},
{29776, -1756},
{29684, -2924},
{29547, -4087},
{29364, -5244},
{29135, -6392},
{28862, -7531},
{28544, -8659},
{28182, -9773},
{27776, -10871},
{27328, -11954},
{26838, -13017},
{26306, -14061},
{25734, -15083},
{25122, -16081},
{24471, -17055},
{23783, -18003},
{23057, -18923},
{22297, -19813},
{21502, -20673}
};
static const cos_msin_t a_cos_msin_8[40] =
{
{29827, -293},
{29815, -878},
{29792, -1464},
{29758, -2048},
{29712, -2632},
{29654, -3215},
{29586, -3797},
{29505, -4377},
{29414, -4955},
{29311, -5532},
{29196, -6106},
{29071, -6678},
{28934, -7248},
{28786, -7814},
{28627, -8378},
{28457, -8938},
{28276, -9495},
{28084, -10049},
{27882, -10598},
{27668, -11144},
{27444, -11685},
{27209, -12221},
{26964, -12753},
{26709, -13280},
{26443, -13802},
{26167, -14318},
{25881, -14829},
{25584, -15335},
{25278, -15834},
{24963, -16327},
{24637, -16814},
{24302, -17295},
{23958, -17769},
{23605, -18236},
{23242, -18695},
{22871, -19148},
{22490, -19594},
{22101, -20031},
{21704, -20461},
{21298, -20884}
};
static const cos_msin_t a_cos_msin_16[80] =
{
{29828, -146},
{29825, -439},
{29819, -732},
{29811, -1025},
{29799, -1317},
{29785, -1610},
{29767, -1902},
{29747, -2194},
{29724, -2486},
{29698, -2778},
{29670, -3069},
{29638, -3360},
{29604, -3651},
{29567, -3942},
{29526, -4232},
{29483, -4521},
{29438, -4811},
{29389, -5099},
{29338, -5388},
{29283, -5676},
{29226, -5963},
{29166, -6249},
{29103, -6535},
{29038, -6821},
{28969, -7106},
{28898, -7390},
{28824, -7673},
{28748, -7956},
{28668, -8237},
{28586, -8518},
{28501, -8799},
{28413, -9078},
{28323, -9357},
{28229, -9634},
{28133, -9911},
{28035, -10187},
{27933, -10461},
{27829, -10735},
{27723, -11008},
{27613, -11279},
{27501, -11550},
{27387, -11819},
{27269, -12088},
{27149, -12355},
{27027, -12621},
{26901, -12885},
{26774, -13149},
{26643, -13411},
{26510, -13672},
{26375, -13932},
{26237, -14190},
{26096, -14447},
{25953, -14702},
{25807, -14956},
{25659, -15209},
{25509, -15460},
{25356, -15710},
{25200, -15958},
{25043, -16205},
{24882, -16450},
{24720, -16693},
{24554, -16935},
{24387, -17175},
{24217, -17414},
{24045, -17651},
{23871, -17886},
{23694, -18119},
{23515, -18351},
{23334, -18581},
{23150, -18809},
{22964, -19036},
{22776, -19260},
{22586, -19483},
{22394, -19704},
{22199, -19923},
{22003, -20140},
{21804, -20355},
{21603, -20568},
{21400, -20779},
{21195, -20988}
};
static const cos_msin_t a_cos_msin_32[160] =
{
{29828, -73},
{29827, -220},
{29826, -366},
{29824, -512},
{29821, -659},
{29817, -805},
{29813, -952},
{29808, -1098},
{29802, -1244},
{29796, -1390},
{29789, -1537},
{29781, -1683},
{29772, -1829},
{29763, -1975},
{29753, -2121},
{29742, -2267},
{29730, -2413},
{29718, -2559},
{29705, -2705},
{29692, -2851},
{29677, -2997},
{29662, -3142},
{29646, -3288},
{29630, -3433},
{29613, -3579},
{29595, -3724},
{29576, -3869},
{29557, -4014},
{29537, -4159},
{29516, -4304},
{29494, -4449},
{29472, -4594},
{29449, -4738},
{29426, -4883},
{29401, -5027},
{29376, -5172},
{29351, -5316},
{29324, -5460},
{29297, -5604},
{29269, -5747},
{29241, -5891},
{29211, -6034},
{29181, -6178},
{29151, -6321},
{29119, -6464},
{29087, -6607},
{29054, -6749},
{29021, -6892},
{28987, -7034},
{28952, -7177},
{28916, -7319},
{28880, -7460},
{28843, -7602},
{28805, -7744},
{28767, -7885},
{28728, -8026},
{28688, -8167},
{28648, -8308},
{28607, -8448},
{28565, -8589},
{28522, -8729},
{28479, -8869},
{28435, -9008},
{28391, -9148},
{28346, -9287},
{28300, -9426},
{28253, -9565},
{28206, -9703},
{28158, -9842},
{28109, -9980},
{28060, -10118},
{28010, -10255},
{27959, -10393},
{27908, -10530},
{27856, -10667},
{27803, -10803},
{27750, -10940},
{27696, -11076},
{27641, -11212},
{27586, -11347},
{27529, -11482},
{27473, -11617},
{27415, -11752},
{27357, -11886},
{27299, -12021},
{27239, -12154},
{27179, -12288},
{27119, -12421},
{27057, -12554},
{26996, -12687},
{26933, -12819},
{26870, -12951},
{26806, -13083},
{26741, -13215},
{26676, -13346},
{26610, -13476},
{26544, -13607},
{26477, -13737},
{26409, -13867},
{26340, -13996},
{26271, -14125},
{26202, -14254},
{26132, -14383},
{26061, -14511},
{25989, -14638},
{25917, -14766},
{25844, -14893},
{25771, -15020},
{25697, -15146},
{25622, -15272},
{25547, -15397},
{25471, -15523},
{25394, -15648},
{25317, -15772},
{25239, -15896},
{25161, -16020},
{25082, -16143},
{25003, -16266},
{24923, -16389},
{24842, -16511},
{24760, -16632},
{24678, -16754},
{24596, -16875},
{24513, -16995},
{24429, -17115},
{24345, -17235},
{24260, -17354},
{24174, -17473},
{24088, -17592},
{24002, -17710},
{23914, -17827},
{23827, -17945},
{23738, -18061},
{23649, -18178},
{23560, -18293},
{23470, -18409},
{23379, -18524},
{23288, -18638},
{23196, -18752},
{23104, -18866},
{23011, -18979},
{22917, -19092},
{22824, -19204},
{22729, -19316},
{22634, -19427},
{22538, -19538},
{22442, -19649},
{22345, -19759},
{22248, -19868},
{22150, -19977},
{22052, -20086},
{21953, -20194},
{21854, -20301},
{21754, -20408},
{21653, -20515},
{21552, -20621},
{21451, -20726},
{21349, -20831},
{21246, -20936},
{21143, -21040}
};
static const cos_msin_t a_cos_msin_64[320] =
{
{29827, -34},
{29827, -106},
{29827, -177},
{29827, -249},
{29826, -320},
{29825, -392},
{29824, -463},
{29823, -535},
{29821, -606},
{29819, -678},
{29818, -750},
{29816, -821},
{29814, -893},
{29812, -964},
{29809, -1035},
{29807, -1106},
{29804, -1177},
{29801, -1249},
{29797, -1320},
{29795, -1392},
{29791, -1463},
{29787, -1535},
{29784, -1606},
{29780, -1678},
{29776, -1749},
{29771, -1820},
{29767, -1892},
{29763, -1963},
{29758, -2035},
{29753, -2106},
{29748, -2177},
{29742, -2249},
{29737, -2320},
{29731, -2391},
{29726, -2462},
{29719, -2534},
{29713, -2605},
{29707, -2676},
{29701, -2747},
{29694, -2819},
{29686, -2890},
{29680, -2961},
{29673, -3032},
{29665, -3103},
{29658, -3174},
{29650, -3245},
{29643, -3316},
{29635, -3387},
{29626, -3459},
{29618, -3529},
{29610, -3600},
{29601, -3671},
{29592, -3742},
{29583, -3813},
{29574, -3884},
{29564, -3955},
{29554, -4026},
{29544, -4097},
{29535, -4167},
{29525, -4238},
{29514, -4309},
{29504, -4380},
{29493, -4450},
{29483, -4521},
{29472, -4591},
{29461, -4662},
{29450, -4733},
{29439, -4803},
{29427, -4874},
{29415, -4944},
{29403, -5015},
{29391, -5085},
{29379, -5155},
{29366, -5226},
{29353, -5296},
{29341, -5367},
{29328, -5438},
{29314, -5508},
{29301, -5578},
{29289, -5648},
{29274, -5718},
{29260, -5788},
{29247, -5858},
{29232, -5928},
{29218, -5998},
{29204, -6068},
{29188, -6139},
{29175, -6209},
{29159, -6279},
{29145, -6348},
{29128, -6418},
{29114, -6488},
{29097, -6557},
{29082, -6627},
{29066, -6697},
{29050, -6767},
{29034, -6837},
{29017, -6906},
{29001, -6975},
{28984, -7045},
{28966, -7114},
{28950, -7184},
{28933, -7254},
{28915, -7323},
{28897, -7392},
{28880, -7461},
{28862, -7530},
{28843, -7600},
{28825, -7669},
{28807, -7738},
{28788, -7806},
{28769, -7875},
{28751, -7944},
{28732, -8014},
{28712, -8082},
{28692, -8151},
{28672, -8219},
{28653, -8289},
{28633, -8357},
{28613, -8425},
{28593, -8494},
{28572, -8563},
{28551, -8632},
{28531, -8700},
{28510, -8768},
{28488, -8837},
{28468, -8905},
{28447, -8973},
{28425, -9041},
{28403, -9109},
{28381, -9177},
{28359, -9245},
{28336, -9313},
{28315, -9381},
{28292, -9448},
{28269, -9517},
{28246, -9584},
{28223, -9652},
{28200, -9720},
{28176, -9787},
{28153, -9854},
{28129, -9922},
{28105, -9990},
{28082, -10056},
{28057, -10124},
{28032, -10191},
{28009, -10258},
{27984, -10326},
{27959, -10392},
{27934, -10460},
{27909, -10526},
{27883, -10593},
{27858, -10661},
{27832, -10727},
{27807, -10794},
{27780, -10860},
{27754, -10927},
{27728, -10993},
{27701, -11059},
{27676, -11126},
{27648, -11192},
{27622, -11259},
{27595, -11324},
{27567, -11391},
{27540, -11456},
{27512, -11523},
{27484, -11588},
{27456, -11655},
{27429, -11720},
{27401, -11786},
{27372, -11852},
{27344, -11917},
{27315, -11982},
{27286, -12049},
{27257, -12114},
{27229, -12179},
{27199, -12244},
{27169, -12309},
{27140, -12375},
{27110, -12439},
{27080, -12505},
{27050, -12570},
{27019, -12634},
{26990, -12699},
{26958, -12764},
{26928, -12828},
{26897, -12892},
{26866, -12956},
{26835, -13021},
{26804, -13086},
{26773, -13149},
{26741, -13214},
{26709, -13278},
{26677, -13342},
{26645, -13406},
{26613, -13470},
{26581, -13534},
{26549, -13597},
{26515, -13661},
{26483, -13725},
{26450, -13788},
{26417, -13851},
{26384, -13915},
{26350, -13978},
{26316, -14041},
{26283, -14103},
{26248, -14166},
{26215, -14229},
{26180, -14292},
{26146, -14355},
{26112, -14417},
{26077, -14480},
{26042, -14543},
{26008, -14605},
{25972, -14667},
{25937, -14730},
{25901, -14792},
{25866, -14854},
{25830, -14916},
{25794, -14977},
{25759, -15039},
{25723, -15101},
{25687, -15162},
{25650, -15224},
{25613, -15286},
{25577, -15347},
{25540, -15408},
{25503, -15470},
{25465, -15531},
{25428, -15592},
{25391, -15653},
{25353, -15714},
{25315, -15774},
{25277, -15834},
{25240, -15895},
{25201, -15956},
{25162, -16016},
{25124, -16076},
{25086, -16136},
{25047, -16196},
{25008, -16256},
{24969, -16316},
{24930, -16375},
{24891, -16436},
{24851, -16496},
{24811, -16555},
{24772, -16615},
{24732, -16674},
{24692, -16732},
{24652, -16791},
{24612, -16852},
{24572, -16911},
{24531, -16969},
{24490, -17027},
{24449, -17086},
{24408, -17145},
{24367, -17203},
{24325, -17261},
{24284, -17320},
{24242, -17379},
{24200, -17436},
{24158, -17494},
{24116, -17552},
{24075, -17610},
{24032, -17668},
{23990, -17725},
{23947, -17782},
{23904, -17840},
{23862, -17897},
{23819, -17954},
{23775, -18011},
{23732, -18068},
{23689, -18125},
{23645, -18181},
{23602, -18238},
{23558, -18294},
{23514, -18351},
{23470, -18407},
{23426, -18464},
{23381, -18520},
{23337, -18576},
{23293, -18632},
{23248, -18688},
{23202, -18743},
{23158, -18799},
{23112, -18854},
{23068, -18910},
{23022, -18964},
{22977, -19020},
{22931, -19074},
{22885, -19129},
{22839, -19185},
{22793, -19239},
{22747, -19294},
{22700, -19348},
{22655, -19403},
{22607, -19457},
{22561, -19511},
{22514, -19565},
{22467, -19619},
{22421, -19673},
{22373, -19726},
{22326, -19780},
{22279, -19834},
{22230, -19887},
{22183, -19940},
{22135, -19993},
{22087, -20047},
{22039, -20099},
{21991, -20152},
{21942, -20205},
{21894, -20257},
{21845, -20309},
{21797, -20362},
{21748, -20413},
{21699, -20466},
{21650, -20518},
{21601, -20570},
{21551, -20621},
{21502, -20674}
};
static const cos_msin_t *a_cos_msin_table[] =
{
a_cos_msin_2,
a_cos_msin_4,
a_cos_msin_8,
a_cos_msin_16,
a_cos_msin_32,
a_cos_msin_64
};
static const int16_t dct_core_a[10][10] =
{
{ 10453, 10196, 9688, 8941, 7973, 6810, 5479, 4013, 2448, 823 },
{ 10196, 7973, 4013, -823, -5479, -8941, -10453, -9688, -6810, -2448 },
{ 9688 , 4013, -4013, -9688, -9688, -4013, 4013, 9688, 9688, 4013 },
{ 8941 , -823, -9688, -7973, 2448, 10196, 6810, -4013, -10453, -5479 },
{ 7973 , -5479, -9688, 2448, 10453, 823, -10196, -4013, 8941, 6810 },
{ 6810 , -8941, -4013, 10196, 823, -10453, 2448, 9688, -5479, -7973 },
{ 5479 , -10453, 4013, 6810, -10196, 2448, 7973, -9688, 823, 8941 },
{ 4013 , -9688, 9688, -4013, -4013, 9688, -9688, 4013, 4013, -9688 },
{ 2448 , -6810, 9688, -10453, 8941, -5479, 823, 4013, -7973, 10196 },
{ 823 , -2448, 4013, -5479, 6810, -7973, 8941, -9688, 10196, -10453 }
};
static const int16_t anal_bias[320] =
{
1, 1, 3, 1, 4, 1, 3, -2, 4, 3,
4, 1, 3, 0, 2, -3, 0, 0, 2, 2,
4, 1, 1, -5, 4, 1, 2, -1, 0, -1,
1, -2, 0, 2, 2, 2, 4, 1, 3, 0,
5, 3, 2, 0, 3, 0, 1, -4, 1, 1,
2, 0, 4, 0, 1, -4, 6, 1, 3, -1,
1, 0, 0, -4, 1, 1, 3, 1, 3, 2,
4, -2, 4, 3, 5, 1, 3, 0, 1, -3,
1, 1, 2, 0, 4, 1, 2, -4, 4, 2,
2, -1, 1, -1, 1, -4, 0, 0, 3, 0,
5, 2, 3, -1, 6, 2, 5, 0, 4, 0,
1, -3, 1, 0, 3, 0, 4, 0, 1, -3,
4, 1, 3, -1, 1, -2, 1, -4, 0, 1,
2, 1, 3, 2, 2, -2, 4, 3, 3, 0,
3, 0, 0, -2, 1, 0, 2, 0, 5, -1,
1, -3, 4, 2, 2, 0, 2, -3, 1, -4,
-1, 1, 2, 2, 4, 1, 3, -1, 5, 2,
2, 0, 3, -1, 2, -3, 0, 1, 2, 2,
4, 0, 1, -5, 5, 1, 3, 0, 2, -1,
0, -2, 1, 2, 2, 2, 4, 1, 0, 0,
4, 2, 4, 1, 4, -1, 1, -4, 0, 1,
3, 1, 5, 1, 1, -2, 4, 0, 2, 0,
2, -1, 0, -2, 0, 1, 1, 1, 4, 2,
3, -2, 5, 4, 4, 0, 3, 0, 3, -4,
1, 2, 2, 0, 4, 1, 0, -3, 4, 2,
3, -1, 1, -1, 1, -4, 0, 2, 3, 1,
4, 1, 3, 0, 3, 3, 4, 1, 2, 0,
1, -3, 2, 2, 2, 1, 5, 0, 1, -4,
4, 1, 3, -2, 3, -1, 0, -2, 0, 2,
2, 0, 5, 1, 4, -1, 4, 3, 4, 1,
3, 0, 1, -4, 2, 0, 3, 1, 5, 0,
1, -5, 5, 2, 2, 0, 0, 0, 0, -4
};