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
17typedef struct
18{
19 int16_t cosine;
20 int16_t minus_sine;
22
23static 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
37static 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
61static 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
105static 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
189static 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
353static 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
677static 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
687static 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
702static 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:35