libg722_1  0.0.1
dct4_a.h
1 /*
2  * g722_1 - a library for the G.722.1 and Annex C codecs
3  *
4  * dct4_a.h
5  *
6  * Adapted by Steve Underwood <steveu@coppice.org> from the reference
7  * code supplied with ITU G.722.1, which is:
8  *
9  * (C) 2004 Polycom, Inc.
10  * All rights reserved.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15  */
16 
17 typedef struct
18 {
19  int16_t cosine;
20  int16_t minus_sine;
21 } cos_msin_t;
22 
23 static const cos_msin_t a_cos_msin_2[10] =
24 {
25  {29805, -1171},
26  {29621, -3506},
27  {29255, -5819},
28  {28708, -8097},
29  {27984, -10324},
30  {27088, -12488},
31  {26025, -14575},
32  {24801, -16572},
33  {23425, -18466},
34  {21903, -20247}
35 };
36 
37 static const cos_msin_t a_cos_msin_4[20] =
38 {
39  {29822, -586},
40  {29776, -1756},
41  {29684, -2924},
42  {29547, -4087},
43  {29364, -5244},
44  {29135, -6392},
45  {28862, -7531},
46  {28544, -8659},
47  {28182, -9773},
48  {27776, -10871},
49  {27328, -11954},
50  {26838, -13017},
51  {26306, -14061},
52  {25734, -15083},
53  {25122, -16081},
54  {24471, -17055},
55  {23783, -18003},
56  {23057, -18923},
57  {22297, -19813},
58  {21502, -20673}
59 };
60 
61 static const cos_msin_t a_cos_msin_8[40] =
62 {
63  {29827, -293},
64  {29815, -878},
65  {29792, -1464},
66  {29758, -2048},
67  {29712, -2632},
68  {29654, -3215},
69  {29586, -3797},
70  {29505, -4377},
71  {29414, -4955},
72  {29311, -5532},
73  {29196, -6106},
74  {29071, -6678},
75  {28934, -7248},
76  {28786, -7814},
77  {28627, -8378},
78  {28457, -8938},
79  {28276, -9495},
80  {28084, -10049},
81  {27882, -10598},
82  {27668, -11144},
83  {27444, -11685},
84  {27209, -12221},
85  {26964, -12753},
86  {26709, -13280},
87  {26443, -13802},
88  {26167, -14318},
89  {25881, -14829},
90  {25584, -15335},
91  {25278, -15834},
92  {24963, -16327},
93  {24637, -16814},
94  {24302, -17295},
95  {23958, -17769},
96  {23605, -18236},
97  {23242, -18695},
98  {22871, -19148},
99  {22490, -19594},
100  {22101, -20031},
101  {21704, -20461},
102  {21298, -20884}
103 };
104 
105 static const cos_msin_t a_cos_msin_16[80] =
106 {
107  {29828, -146},
108  {29825, -439},
109  {29819, -732},
110  {29811, -1025},
111  {29799, -1317},
112  {29785, -1610},
113  {29767, -1902},
114  {29747, -2194},
115  {29724, -2486},
116  {29698, -2778},
117  {29670, -3069},
118  {29638, -3360},
119  {29604, -3651},
120  {29567, -3942},
121  {29526, -4232},
122  {29483, -4521},
123  {29438, -4811},
124  {29389, -5099},
125  {29338, -5388},
126  {29283, -5676},
127  {29226, -5963},
128  {29166, -6249},
129  {29103, -6535},
130  {29038, -6821},
131  {28969, -7106},
132  {28898, -7390},
133  {28824, -7673},
134  {28748, -7956},
135  {28668, -8237},
136  {28586, -8518},
137  {28501, -8799},
138  {28413, -9078},
139  {28323, -9357},
140  {28229, -9634},
141  {28133, -9911},
142  {28035, -10187},
143  {27933, -10461},
144  {27829, -10735},
145  {27723, -11008},
146  {27613, -11279},
147  {27501, -11550},
148  {27387, -11819},
149  {27269, -12088},
150  {27149, -12355},
151  {27027, -12621},
152  {26901, -12885},
153  {26774, -13149},
154  {26643, -13411},
155  {26510, -13672},
156  {26375, -13932},
157  {26237, -14190},
158  {26096, -14447},
159  {25953, -14702},
160  {25807, -14956},
161  {25659, -15209},
162  {25509, -15460},
163  {25356, -15710},
164  {25200, -15958},
165  {25043, -16205},
166  {24882, -16450},
167  {24720, -16693},
168  {24554, -16935},
169  {24387, -17175},
170  {24217, -17414},
171  {24045, -17651},
172  {23871, -17886},
173  {23694, -18119},
174  {23515, -18351},
175  {23334, -18581},
176  {23150, -18809},
177  {22964, -19036},
178  {22776, -19260},
179  {22586, -19483},
180  {22394, -19704},
181  {22199, -19923},
182  {22003, -20140},
183  {21804, -20355},
184  {21603, -20568},
185  {21400, -20779},
186  {21195, -20988}
187 };
188 
189 static const cos_msin_t a_cos_msin_32[160] =
190 {
191  {29828, -73},
192  {29827, -220},
193  {29826, -366},
194  {29824, -512},
195  {29821, -659},
196  {29817, -805},
197  {29813, -952},
198  {29808, -1098},
199  {29802, -1244},
200  {29796, -1390},
201  {29789, -1537},
202  {29781, -1683},
203  {29772, -1829},
204  {29763, -1975},
205  {29753, -2121},
206  {29742, -2267},
207  {29730, -2413},
208  {29718, -2559},
209  {29705, -2705},
210  {29692, -2851},
211  {29677, -2997},
212  {29662, -3142},
213  {29646, -3288},
214  {29630, -3433},
215  {29613, -3579},
216  {29595, -3724},
217  {29576, -3869},
218  {29557, -4014},
219  {29537, -4159},
220  {29516, -4304},
221  {29494, -4449},
222  {29472, -4594},
223  {29449, -4738},
224  {29426, -4883},
225  {29401, -5027},
226  {29376, -5172},
227  {29351, -5316},
228  {29324, -5460},
229  {29297, -5604},
230  {29269, -5747},
231  {29241, -5891},
232  {29211, -6034},
233  {29181, -6178},
234  {29151, -6321},
235  {29119, -6464},
236  {29087, -6607},
237  {29054, -6749},
238  {29021, -6892},
239  {28987, -7034},
240  {28952, -7177},
241  {28916, -7319},
242  {28880, -7460},
243  {28843, -7602},
244  {28805, -7744},
245  {28767, -7885},
246  {28728, -8026},
247  {28688, -8167},
248  {28648, -8308},
249  {28607, -8448},
250  {28565, -8589},
251  {28522, -8729},
252  {28479, -8869},
253  {28435, -9008},
254  {28391, -9148},
255  {28346, -9287},
256  {28300, -9426},
257  {28253, -9565},
258  {28206, -9703},
259  {28158, -9842},
260  {28109, -9980},
261  {28060, -10118},
262  {28010, -10255},
263  {27959, -10393},
264  {27908, -10530},
265  {27856, -10667},
266  {27803, -10803},
267  {27750, -10940},
268  {27696, -11076},
269  {27641, -11212},
270  {27586, -11347},
271  {27529, -11482},
272  {27473, -11617},
273  {27415, -11752},
274  {27357, -11886},
275  {27299, -12021},
276  {27239, -12154},
277  {27179, -12288},
278  {27119, -12421},
279  {27057, -12554},
280  {26996, -12687},
281  {26933, -12819},
282  {26870, -12951},
283  {26806, -13083},
284  {26741, -13215},
285  {26676, -13346},
286  {26610, -13476},
287  {26544, -13607},
288  {26477, -13737},
289  {26409, -13867},
290  {26340, -13996},
291  {26271, -14125},
292  {26202, -14254},
293  {26132, -14383},
294  {26061, -14511},
295  {25989, -14638},
296  {25917, -14766},
297  {25844, -14893},
298  {25771, -15020},
299  {25697, -15146},
300  {25622, -15272},
301  {25547, -15397},
302  {25471, -15523},
303  {25394, -15648},
304  {25317, -15772},
305  {25239, -15896},
306  {25161, -16020},
307  {25082, -16143},
308  {25003, -16266},
309  {24923, -16389},
310  {24842, -16511},
311  {24760, -16632},
312  {24678, -16754},
313  {24596, -16875},
314  {24513, -16995},
315  {24429, -17115},
316  {24345, -17235},
317  {24260, -17354},
318  {24174, -17473},
319  {24088, -17592},
320  {24002, -17710},
321  {23914, -17827},
322  {23827, -17945},
323  {23738, -18061},
324  {23649, -18178},
325  {23560, -18293},
326  {23470, -18409},
327  {23379, -18524},
328  {23288, -18638},
329  {23196, -18752},
330  {23104, -18866},
331  {23011, -18979},
332  {22917, -19092},
333  {22824, -19204},
334  {22729, -19316},
335  {22634, -19427},
336  {22538, -19538},
337  {22442, -19649},
338  {22345, -19759},
339  {22248, -19868},
340  {22150, -19977},
341  {22052, -20086},
342  {21953, -20194},
343  {21854, -20301},
344  {21754, -20408},
345  {21653, -20515},
346  {21552, -20621},
347  {21451, -20726},
348  {21349, -20831},
349  {21246, -20936},
350  {21143, -21040}
351 };
352 
353 static const cos_msin_t a_cos_msin_64[320] =
354 {
355  {29827, -34},
356  {29827, -106},
357  {29827, -177},
358  {29827, -249},
359  {29826, -320},
360  {29825, -392},
361  {29824, -463},
362  {29823, -535},
363  {29821, -606},
364  {29819, -678},
365  {29818, -750},
366  {29816, -821},
367  {29814, -893},
368  {29812, -964},
369  {29809, -1035},
370  {29807, -1106},
371  {29804, -1177},
372  {29801, -1249},
373  {29797, -1320},
374  {29795, -1392},
375  {29791, -1463},
376  {29787, -1535},
377  {29784, -1606},
378  {29780, -1678},
379  {29776, -1749},
380  {29771, -1820},
381  {29767, -1892},
382  {29763, -1963},
383  {29758, -2035},
384  {29753, -2106},
385  {29748, -2177},
386  {29742, -2249},
387  {29737, -2320},
388  {29731, -2391},
389  {29726, -2462},
390  {29719, -2534},
391  {29713, -2605},
392  {29707, -2676},
393  {29701, -2747},
394  {29694, -2819},
395  {29686, -2890},
396  {29680, -2961},
397  {29673, -3032},
398  {29665, -3103},
399  {29658, -3174},
400  {29650, -3245},
401  {29643, -3316},
402  {29635, -3387},
403  {29626, -3459},
404  {29618, -3529},
405  {29610, -3600},
406  {29601, -3671},
407  {29592, -3742},
408  {29583, -3813},
409  {29574, -3884},
410  {29564, -3955},
411  {29554, -4026},
412  {29544, -4097},
413  {29535, -4167},
414  {29525, -4238},
415  {29514, -4309},
416  {29504, -4380},
417  {29493, -4450},
418  {29483, -4521},
419  {29472, -4591},
420  {29461, -4662},
421  {29450, -4733},
422  {29439, -4803},
423  {29427, -4874},
424  {29415, -4944},
425  {29403, -5015},
426  {29391, -5085},
427  {29379, -5155},
428  {29366, -5226},
429  {29353, -5296},
430  {29341, -5367},
431  {29328, -5438},
432  {29314, -5508},
433  {29301, -5578},
434  {29289, -5648},
435  {29274, -5718},
436  {29260, -5788},
437  {29247, -5858},
438  {29232, -5928},
439  {29218, -5998},
440  {29204, -6068},
441  {29188, -6139},
442  {29175, -6209},
443  {29159, -6279},
444  {29145, -6348},
445  {29128, -6418},
446  {29114, -6488},
447  {29097, -6557},
448  {29082, -6627},
449  {29066, -6697},
450  {29050, -6767},
451  {29034, -6837},
452  {29017, -6906},
453  {29001, -6975},
454  {28984, -7045},
455  {28966, -7114},
456  {28950, -7184},
457  {28933, -7254},
458  {28915, -7323},
459  {28897, -7392},
460  {28880, -7461},
461  {28862, -7530},
462  {28843, -7600},
463  {28825, -7669},
464  {28807, -7738},
465  {28788, -7806},
466  {28769, -7875},
467  {28751, -7944},
468  {28732, -8014},
469  {28712, -8082},
470  {28692, -8151},
471  {28672, -8219},
472  {28653, -8289},
473  {28633, -8357},
474  {28613, -8425},
475  {28593, -8494},
476  {28572, -8563},
477  {28551, -8632},
478  {28531, -8700},
479  {28510, -8768},
480  {28488, -8837},
481  {28468, -8905},
482  {28447, -8973},
483  {28425, -9041},
484  {28403, -9109},
485  {28381, -9177},
486  {28359, -9245},
487  {28336, -9313},
488  {28315, -9381},
489  {28292, -9448},
490  {28269, -9517},
491  {28246, -9584},
492  {28223, -9652},
493  {28200, -9720},
494  {28176, -9787},
495  {28153, -9854},
496  {28129, -9922},
497  {28105, -9990},
498  {28082, -10056},
499  {28057, -10124},
500  {28032, -10191},
501  {28009, -10258},
502  {27984, -10326},
503  {27959, -10392},
504  {27934, -10460},
505  {27909, -10526},
506  {27883, -10593},
507  {27858, -10661},
508  {27832, -10727},
509  {27807, -10794},
510  {27780, -10860},
511  {27754, -10927},
512  {27728, -10993},
513  {27701, -11059},
514  {27676, -11126},
515  {27648, -11192},
516  {27622, -11259},
517  {27595, -11324},
518  {27567, -11391},
519  {27540, -11456},
520  {27512, -11523},
521  {27484, -11588},
522  {27456, -11655},
523  {27429, -11720},
524  {27401, -11786},
525  {27372, -11852},
526  {27344, -11917},
527  {27315, -11982},
528  {27286, -12049},
529  {27257, -12114},
530  {27229, -12179},
531  {27199, -12244},
532  {27169, -12309},
533  {27140, -12375},
534  {27110, -12439},
535  {27080, -12505},
536  {27050, -12570},
537  {27019, -12634},
538  {26990, -12699},
539  {26958, -12764},
540  {26928, -12828},
541  {26897, -12892},
542  {26866, -12956},
543  {26835, -13021},
544  {26804, -13086},
545  {26773, -13149},
546  {26741, -13214},
547  {26709, -13278},
548  {26677, -13342},
549  {26645, -13406},
550  {26613, -13470},
551  {26581, -13534},
552  {26549, -13597},
553  {26515, -13661},
554  {26483, -13725},
555  {26450, -13788},
556  {26417, -13851},
557  {26384, -13915},
558  {26350, -13978},
559  {26316, -14041},
560  {26283, -14103},
561  {26248, -14166},
562  {26215, -14229},
563  {26180, -14292},
564  {26146, -14355},
565  {26112, -14417},
566  {26077, -14480},
567  {26042, -14543},
568  {26008, -14605},
569  {25972, -14667},
570  {25937, -14730},
571  {25901, -14792},
572  {25866, -14854},
573  {25830, -14916},
574  {25794, -14977},
575  {25759, -15039},
576  {25723, -15101},
577  {25687, -15162},
578  {25650, -15224},
579  {25613, -15286},
580  {25577, -15347},
581  {25540, -15408},
582  {25503, -15470},
583  {25465, -15531},
584  {25428, -15592},
585  {25391, -15653},
586  {25353, -15714},
587  {25315, -15774},
588  {25277, -15834},
589  {25240, -15895},
590  {25201, -15956},
591  {25162, -16016},
592  {25124, -16076},
593  {25086, -16136},
594  {25047, -16196},
595  {25008, -16256},
596  {24969, -16316},
597  {24930, -16375},
598  {24891, -16436},
599  {24851, -16496},
600  {24811, -16555},
601  {24772, -16615},
602  {24732, -16674},
603  {24692, -16732},
604  {24652, -16791},
605  {24612, -16852},
606  {24572, -16911},
607  {24531, -16969},
608  {24490, -17027},
609  {24449, -17086},
610  {24408, -17145},
611  {24367, -17203},
612  {24325, -17261},
613  {24284, -17320},
614  {24242, -17379},
615  {24200, -17436},
616  {24158, -17494},
617  {24116, -17552},
618  {24075, -17610},
619  {24032, -17668},
620  {23990, -17725},
621  {23947, -17782},
622  {23904, -17840},
623  {23862, -17897},
624  {23819, -17954},
625  {23775, -18011},
626  {23732, -18068},
627  {23689, -18125},
628  {23645, -18181},
629  {23602, -18238},
630  {23558, -18294},
631  {23514, -18351},
632  {23470, -18407},
633  {23426, -18464},
634  {23381, -18520},
635  {23337, -18576},
636  {23293, -18632},
637  {23248, -18688},
638  {23202, -18743},
639  {23158, -18799},
640  {23112, -18854},
641  {23068, -18910},
642  {23022, -18964},
643  {22977, -19020},
644  {22931, -19074},
645  {22885, -19129},
646  {22839, -19185},
647  {22793, -19239},
648  {22747, -19294},
649  {22700, -19348},
650  {22655, -19403},
651  {22607, -19457},
652  {22561, -19511},
653  {22514, -19565},
654  {22467, -19619},
655  {22421, -19673},
656  {22373, -19726},
657  {22326, -19780},
658  {22279, -19834},
659  {22230, -19887},
660  {22183, -19940},
661  {22135, -19993},
662  {22087, -20047},
663  {22039, -20099},
664  {21991, -20152},
665  {21942, -20205},
666  {21894, -20257},
667  {21845, -20309},
668  {21797, -20362},
669  {21748, -20413},
670  {21699, -20466},
671  {21650, -20518},
672  {21601, -20570},
673  {21551, -20621},
674  {21502, -20674}
675 };
676 
677 static const cos_msin_t *a_cos_msin_table[] =
678 {
679  a_cos_msin_2,
680  a_cos_msin_4,
681  a_cos_msin_8,
682  a_cos_msin_16,
683  a_cos_msin_32,
684  a_cos_msin_64
685 };
686 
687 static const int16_t dct_core_a[10][10] =
688 {
689 
690  { 10453, 10196, 9688, 8941, 7973, 6810, 5479, 4013, 2448, 823 },
691  { 10196, 7973, 4013, -823, -5479, -8941, -10453, -9688, -6810, -2448 },
692  { 9688 , 4013, -4013, -9688, -9688, -4013, 4013, 9688, 9688, 4013 },
693  { 8941 , -823, -9688, -7973, 2448, 10196, 6810, -4013, -10453, -5479 },
694  { 7973 , -5479, -9688, 2448, 10453, 823, -10196, -4013, 8941, 6810 },
695  { 6810 , -8941, -4013, 10196, 823, -10453, 2448, 9688, -5479, -7973 },
696  { 5479 , -10453, 4013, 6810, -10196, 2448, 7973, -9688, 823, 8941 },
697  { 4013 , -9688, 9688, -4013, -4013, 9688, -9688, 4013, 4013, -9688 },
698  { 2448 , -6810, 9688, -10453, 8941, -5479, 823, 4013, -7973, 10196 },
699  { 823 , -2448, 4013, -5479, 6810, -7973, 8941, -9688, 10196, -10453 }
700 };
701 
702 static const int16_t anal_bias[320] =
703 {
704  1, 1, 3, 1, 4, 1, 3, -2, 4, 3,
705  4, 1, 3, 0, 2, -3, 0, 0, 2, 2,
706  4, 1, 1, -5, 4, 1, 2, -1, 0, -1,
707  1, -2, 0, 2, 2, 2, 4, 1, 3, 0,
708  5, 3, 2, 0, 3, 0, 1, -4, 1, 1,
709  2, 0, 4, 0, 1, -4, 6, 1, 3, -1,
710  1, 0, 0, -4, 1, 1, 3, 1, 3, 2,
711  4, -2, 4, 3, 5, 1, 3, 0, 1, -3,
712  1, 1, 2, 0, 4, 1, 2, -4, 4, 2,
713  2, -1, 1, -1, 1, -4, 0, 0, 3, 0,
714  5, 2, 3, -1, 6, 2, 5, 0, 4, 0,
715  1, -3, 1, 0, 3, 0, 4, 0, 1, -3,
716  4, 1, 3, -1, 1, -2, 1, -4, 0, 1,
717  2, 1, 3, 2, 2, -2, 4, 3, 3, 0,
718  3, 0, 0, -2, 1, 0, 2, 0, 5, -1,
719  1, -3, 4, 2, 2, 0, 2, -3, 1, -4,
720  -1, 1, 2, 2, 4, 1, 3, -1, 5, 2,
721  2, 0, 3, -1, 2, -3, 0, 1, 2, 2,
722  4, 0, 1, -5, 5, 1, 3, 0, 2, -1,
723  0, -2, 1, 2, 2, 2, 4, 1, 0, 0,
724  4, 2, 4, 1, 4, -1, 1, -4, 0, 1,
725  3, 1, 5, 1, 1, -2, 4, 0, 2, 0,
726  2, -1, 0, -2, 0, 1, 1, 1, 4, 2,
727  3, -2, 5, 4, 4, 0, 3, 0, 3, -4,
728  1, 2, 2, 0, 4, 1, 0, -3, 4, 2,
729  3, -1, 1, -1, 1, -4, 0, 2, 3, 1,
730  4, 1, 3, 0, 3, 3, 4, 1, 2, 0,
731  1, -3, 2, 2, 2, 1, 5, 0, 1, -4,
732  4, 1, 3, -2, 3, -1, 0, -2, 0, 2,
733  2, 0, 5, 1, 4, -1, 4, 3, 4, 1,
734  3, 0, 1, -4, 2, 0, 3, 1, 5, 0,
735  1, -5, 5, 2, 2, 0, 0, 0, 0, -4
736 };
Definition: dct4.c:34