2 * Copyright 2012-16 Advanced Micro Devices, Inc.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
26 #include "transform.h"
28 static const uint16_t filter_2tap_16p[18] = {
40 static const uint16_t filter_3tap_16p_upscale[27] = {
52 static const uint16_t filter_3tap_16p_117[27] = {
64 static const uint16_t filter_3tap_16p_150[27] = {
76 static const uint16_t filter_3tap_16p_183[27] = {
88 static const uint16_t filter_4tap_16p_upscale[36] = {
90 16240, 4056, 180, 16380,
91 16136, 3952, 404, 16364,
92 16072, 3780, 664, 16344,
93 16040, 3556, 952, 16312,
94 16036, 3284, 1268, 16272,
95 16052, 2980, 1604, 16224,
96 16084, 2648, 1952, 16176,
97 16128, 2304, 2304, 16128
100 static const uint16_t filter_4tap_16p_117[36] = {
102 276, 3232, 604, 16364,
103 148, 3184, 800, 16340,
104 44, 3104, 1016, 16312,
105 16344, 2984, 1244, 16284,
106 16284, 2832, 1488, 16256,
107 16244, 2648, 1732, 16236,
108 16220, 2440, 1976, 16220,
109 16212, 2216, 2216, 16212
112 static const uint16_t filter_4tap_16p_150[36] = {
114 560, 2700, 848, 16364,
115 436, 2676, 1008, 16348,
116 328, 2628, 1180, 16336,
117 232, 2556, 1356, 16328,
118 152, 2460, 1536, 16328,
119 84, 2344, 1716, 16332,
120 28, 2208, 1888, 16348,
121 16376, 2052, 2052, 16376
124 static const uint16_t filter_4tap_16p_183[36] = {
131 368, 1976, 1612, 132,
132 296, 1900, 1716, 176,
136 static const uint16_t filter_2tap_64p[66] = {
171 static const uint16_t filter_3tap_64p_upscale[99] = {
207 static const uint16_t filter_3tap_64p_117[99] = {
243 static const uint16_t filter_3tap_64p_150[99] = {
279 static const uint16_t filter_3tap_64p_183[99] = {
315 static const uint16_t filter_4tap_64p_upscale[132] = {
318 16308, 4084, 84, 16380,
319 16272, 4072, 132, 16380,
320 16240, 4056, 180, 16380,
321 16212, 4036, 232, 16376,
322 16184, 4012, 288, 16372,
323 16160, 3984, 344, 16368,
324 16136, 3952, 404, 16364,
325 16116, 3916, 464, 16360,
326 16100, 3872, 528, 16356,
327 16084, 3828, 596, 16348,
328 16072, 3780, 664, 16344,
329 16060, 3728, 732, 16336,
330 16052, 3676, 804, 16328,
331 16044, 3616, 876, 16320,
332 16040, 3556, 952, 16312,
333 16036, 3492, 1028, 16300,
334 16032, 3424, 1108, 16292,
335 16032, 3356, 1188, 16280,
336 16036, 3284, 1268, 16272,
337 16036, 3212, 1352, 16260,
338 16040, 3136, 1436, 16248,
339 16044, 3056, 1520, 16236,
340 16052, 2980, 1604, 16224,
341 16060, 2896, 1688, 16212,
342 16064, 2816, 1776, 16200,
343 16076, 2732, 1864, 16188,
344 16084, 2648, 1952, 16176,
345 16092, 2564, 2040, 16164,
346 16104, 2476, 2128, 16152,
347 16116, 2388, 2216, 16140,
348 16128, 2304, 2304, 16128 };
350 static const uint16_t filter_4tap_64p_117[132] = {
352 380, 3248, 464, 16380,
353 344, 3248, 508, 16372,
354 308, 3248, 552, 16368,
355 272, 3240, 596, 16364,
356 236, 3236, 644, 16356,
357 204, 3224, 692, 16352,
358 172, 3212, 744, 16344,
359 144, 3196, 796, 16340,
360 116, 3180, 848, 16332,
361 88, 3160, 900, 16324,
362 60, 3136, 956, 16320,
363 36, 3112, 1012, 16312,
364 16, 3084, 1068, 16304,
365 16380, 3056, 1124, 16296,
366 16360, 3024, 1184, 16292,
367 16340, 2992, 1244, 16284,
368 16324, 2956, 1304, 16276,
369 16308, 2920, 1364, 16268,
370 16292, 2880, 1424, 16264,
371 16280, 2836, 1484, 16256,
372 16268, 2792, 1548, 16252,
373 16256, 2748, 1608, 16244,
374 16248, 2700, 1668, 16240,
375 16240, 2652, 1732, 16232,
376 16232, 2604, 1792, 16228,
377 16228, 2552, 1856, 16224,
378 16220, 2500, 1916, 16220,
379 16216, 2444, 1980, 16216,
380 16216, 2388, 2040, 16216,
381 16212, 2332, 2100, 16212,
382 16212, 2276, 2160, 16212,
383 16212, 2220, 2220, 16212 };
385 static const uint16_t filter_4tap_64p_150[132] = {
387 660, 2704, 732, 16380,
388 628, 2704, 768, 16376,
389 596, 2704, 804, 16372,
390 564, 2700, 844, 16364,
391 532, 2696, 884, 16360,
392 500, 2692, 924, 16356,
393 472, 2684, 964, 16352,
394 440, 2676, 1004, 16352,
395 412, 2668, 1044, 16348,
396 384, 2656, 1088, 16344,
397 360, 2644, 1128, 16340,
398 332, 2632, 1172, 16336,
399 308, 2616, 1216, 16336,
400 284, 2600, 1260, 16332,
401 260, 2580, 1304, 16332,
402 236, 2560, 1348, 16328,
403 216, 2540, 1392, 16328,
404 196, 2516, 1436, 16328,
405 176, 2492, 1480, 16324,
406 156, 2468, 1524, 16324,
407 136, 2440, 1568, 16328,
408 120, 2412, 1612, 16328,
409 104, 2384, 1656, 16328,
410 88, 2352, 1700, 16332,
411 72, 2324, 1744, 16332,
412 60, 2288, 1788, 16336,
413 48, 2256, 1828, 16340,
414 36, 2220, 1872, 16344,
415 24, 2184, 1912, 16352,
416 12, 2148, 1952, 16356,
417 4, 2112, 1996, 16364,
418 16380, 2072, 2036, 16372 };
420 static const uint16_t filter_4tap_64p_183[132] = {
442 428, 2024, 1532, 100,
443 408, 2008, 1560, 112,
444 392, 1992, 1584, 120,
445 372, 1972, 1612, 132,
446 352, 1956, 1636, 144,
447 336, 1936, 1664, 156,
448 316, 1916, 1688, 168,
449 300, 1896, 1712, 180,
450 284, 1876, 1736, 192,
451 268, 1852, 1760, 208,
452 252, 1832, 1784, 220,
453 236, 1808, 1808, 236 };
455 static const uint16_t filter_5tap_64p_upscale[165] = {
456 15936, 2496, 2496, 15936, 0,
457 15948, 2404, 2580, 15924, 0,
458 15960, 2312, 2664, 15912, 4,
459 15976, 2220, 2748, 15904, 8,
460 15992, 2128, 2832, 15896, 12,
461 16004, 2036, 2912, 15888, 16,
462 16020, 1944, 2992, 15880, 20,
463 16036, 1852, 3068, 15876, 20,
464 16056, 1760, 3140, 15876, 24,
465 16072, 1668, 3216, 15872, 28,
466 16088, 1580, 3284, 15872, 32,
467 16104, 1492, 3352, 15876, 32,
468 16120, 1404, 3420, 15876, 36,
469 16140, 1316, 3480, 15884, 40,
470 16156, 1228, 3540, 15892, 40,
471 16172, 1144, 3600, 15900, 40,
472 16188, 1060, 3652, 15908, 44,
473 16204, 980, 3704, 15924, 44,
474 16220, 900, 3756, 15936, 44,
475 16236, 824, 3800, 15956, 44,
476 16248, 744, 3844, 15972, 44,
477 16264, 672, 3884, 15996, 44,
478 16276, 600, 3920, 16020, 44,
479 16292, 528, 3952, 16044, 40,
480 16304, 460, 3980, 16072, 40,
481 16316, 396, 4008, 16104, 36,
482 16328, 332, 4032, 16136, 32,
483 16336, 272, 4048, 16172, 28,
484 16348, 212, 4064, 16208, 24,
485 16356, 156, 4080, 16248, 16,
486 16368, 100, 4088, 16292, 12,
487 16376, 48, 4092, 16336, 4,
490 static const uint16_t filter_5tap_64p_117[165] = {
491 16056, 2372, 2372, 16056, 0,
492 16052, 2312, 2432, 16060, 0,
493 16052, 2252, 2488, 16064, 0,
494 16052, 2188, 2548, 16072, 0,
495 16052, 2124, 2600, 16076, 0,
496 16052, 2064, 2656, 16088, 0,
497 16052, 2000, 2708, 16096, 0,
498 16056, 1932, 2760, 16108, 0,
499 16060, 1868, 2808, 16120, 0,
500 16064, 1804, 2856, 16132, 0,
501 16068, 1740, 2904, 16148, 16380,
502 16076, 1676, 2948, 16164, 16380,
503 16080, 1612, 2992, 16180, 16376,
504 16088, 1544, 3032, 16200, 16372,
505 16096, 1480, 3072, 16220, 16372,
506 16104, 1420, 3108, 16244, 16368,
507 16112, 1356, 3144, 16268, 16364,
508 16120, 1292, 3180, 16292, 16360,
509 16128, 1232, 3212, 16320, 16356,
510 16136, 1168, 3240, 16344, 16352,
511 16144, 1108, 3268, 16376, 16344,
512 16156, 1048, 3292, 20, 16340,
513 16164, 988, 3316, 52, 16332,
514 16172, 932, 3336, 88, 16328,
515 16184, 872, 3356, 124, 16320,
516 16192, 816, 3372, 160, 16316,
517 16204, 760, 3388, 196, 16308,
518 16212, 708, 3400, 236, 16300,
519 16220, 656, 3412, 276, 16292,
520 16232, 604, 3420, 320, 16284,
521 16240, 552, 3424, 364, 16276,
522 16248, 504, 3428, 408, 16268,
523 16256, 456, 3428, 456, 16256 };
525 static const uint16_t filter_5tap_64p_150[165] = {
526 16368, 2064, 2064, 16368, 0,
527 16352, 2028, 2100, 16380, 16380,
528 16340, 1996, 2132, 12, 16376,
529 16328, 1960, 2168, 24, 16376,
530 16316, 1924, 2204, 44, 16372,
531 16308, 1888, 2236, 60, 16368,
532 16296, 1848, 2268, 76, 16364,
533 16288, 1812, 2300, 96, 16360,
534 16280, 1772, 2328, 116, 16356,
535 16272, 1736, 2360, 136, 16352,
536 16268, 1696, 2388, 160, 16348,
537 16260, 1656, 2416, 180, 16344,
538 16256, 1616, 2440, 204, 16340,
539 16248, 1576, 2464, 228, 16336,
540 16244, 1536, 2492, 252, 16332,
541 16240, 1496, 2512, 276, 16324,
542 16240, 1456, 2536, 304, 16320,
543 16236, 1416, 2556, 332, 16316,
544 16232, 1376, 2576, 360, 16312,
545 16232, 1336, 2592, 388, 16308,
546 16232, 1296, 2612, 416, 16300,
547 16232, 1256, 2628, 448, 16296,
548 16232, 1216, 2640, 480, 16292,
549 16232, 1172, 2652, 512, 16288,
550 16232, 1132, 2664, 544, 16284,
551 16232, 1092, 2676, 576, 16280,
552 16236, 1056, 2684, 608, 16272,
553 16236, 1016, 2692, 644, 16268,
554 16240, 976, 2700, 680, 16264,
555 16240, 936, 2704, 712, 16260,
556 16244, 900, 2708, 748, 16256,
557 16248, 860, 2708, 788, 16252,
558 16248, 824, 2708, 824, 16248 };
560 static const uint16_t filter_5tap_64p_183[165] = {
561 228, 1816, 1816, 228, 0,
562 216, 1792, 1836, 248, 16380,
563 200, 1772, 1860, 264, 16376,
564 184, 1748, 1884, 280, 16376,
565 168, 1728, 1904, 300, 16372,
566 156, 1704, 1928, 316, 16368,
567 144, 1680, 1948, 336, 16364,
568 128, 1656, 1968, 356, 16364,
569 116, 1632, 1988, 376, 16360,
570 104, 1604, 2008, 396, 16356,
571 96, 1580, 2024, 416, 16356,
572 84, 1556, 2044, 440, 16352,
573 72, 1528, 2060, 460, 16348,
574 64, 1504, 2076, 484, 16348,
575 52, 1476, 2092, 504, 16344,
576 44, 1448, 2104, 528, 16344,
577 36, 1424, 2120, 552, 16340,
578 28, 1396, 2132, 576, 16340,
579 20, 1368, 2144, 600, 16340,
580 12, 1340, 2156, 624, 16336,
581 4, 1312, 2168, 652, 16336,
582 0, 1284, 2180, 676, 16336,
583 16376, 1256, 2188, 700, 16332,
584 16372, 1228, 2196, 728, 16332,
585 16368, 1200, 2204, 752, 16332,
586 16364, 1172, 2212, 780, 16332,
587 16356, 1144, 2216, 808, 16332,
588 16352, 1116, 2220, 836, 16332,
589 16352, 1084, 2224, 860, 16332,
590 16348, 1056, 2228, 888, 16336,
591 16344, 1028, 2232, 916, 16336,
592 16340, 1000, 2232, 944, 16336,
593 16340, 972, 2232, 972, 16340 };
595 static const uint16_t filter_6tap_64p_upscale[198] = {
597 12, 16332, 4092, 52, 16368, 0,
598 24, 16280, 4088, 108, 16356, 0,
599 36, 16236, 4080, 168, 16340, 0,
600 44, 16188, 4064, 228, 16324, 0,
601 56, 16148, 4052, 292, 16308, 0,
602 64, 16108, 4032, 356, 16292, 4,
603 72, 16072, 4008, 424, 16276, 4,
604 80, 16036, 3980, 492, 16256, 4,
605 88, 16004, 3952, 564, 16240, 8,
606 96, 15972, 3920, 636, 16220, 8,
607 100, 15944, 3884, 712, 16204, 12,
608 108, 15916, 3844, 788, 16184, 16,
609 112, 15896, 3800, 864, 16164, 20,
610 116, 15872, 3756, 944, 16144, 20,
611 120, 15852, 3708, 1024, 16124, 24,
612 120, 15836, 3656, 1108, 16104, 28,
613 124, 15824, 3600, 1192, 16084, 32,
614 124, 15808, 3544, 1276, 16064, 36,
615 124, 15800, 3484, 1360, 16044, 40,
616 128, 15792, 3420, 1448, 16024, 44,
617 128, 15784, 3352, 1536, 16004, 48,
618 124, 15780, 3288, 1624, 15988, 52,
619 124, 15776, 3216, 1712, 15968, 56,
620 124, 15776, 3144, 1800, 15948, 64,
621 120, 15776, 3068, 1888, 15932, 68,
622 120, 15780, 2992, 1976, 15912, 72,
623 116, 15784, 2916, 2064, 15896, 76,
624 112, 15792, 2836, 2152, 15880, 80,
625 108, 15796, 2752, 2244, 15868, 84,
626 104, 15804, 2672, 2328, 15852, 88,
627 104, 15816, 2588, 2416, 15840, 92,
628 100, 15828, 2504, 2504, 15828, 100 };
630 static const uint16_t filter_6tap_64p_117[198] = {
631 16168, 476, 3568, 476, 16168, 0,
632 16180, 428, 3564, 528, 16156, 0,
633 16192, 376, 3556, 584, 16144, 4,
634 16204, 328, 3548, 636, 16128, 4,
635 16216, 280, 3540, 692, 16116, 8,
636 16228, 232, 3524, 748, 16104, 12,
637 16240, 188, 3512, 808, 16092, 12,
638 16252, 148, 3492, 864, 16080, 16,
639 16264, 104, 3472, 924, 16068, 16,
640 16276, 64, 3452, 984, 16056, 20,
641 16284, 28, 3428, 1044, 16048, 24,
642 16296, 16376, 3400, 1108, 16036, 24,
643 16304, 16340, 3372, 1168, 16024, 28,
644 16316, 16304, 3340, 1232, 16016, 32,
645 16324, 16272, 3308, 1296, 16004, 32,
646 16332, 16244, 3272, 1360, 15996, 36,
647 16344, 16212, 3236, 1424, 15988, 36,
648 16352, 16188, 3200, 1488, 15980, 40,
649 16360, 16160, 3160, 1552, 15972, 40,
650 16368, 16136, 3116, 1616, 15964, 40,
651 16372, 16112, 3072, 1680, 15956, 44,
652 16380, 16092, 3028, 1744, 15952, 44,
653 0, 16072, 2980, 1808, 15948, 44,
654 8, 16052, 2932, 1872, 15944, 48,
655 12, 16036, 2880, 1936, 15940, 48,
656 16, 16020, 2828, 2000, 15936, 48,
657 20, 16008, 2776, 2064, 15936, 48,
658 24, 15996, 2724, 2128, 15936, 48,
659 28, 15984, 2668, 2192, 15936, 48,
660 32, 15972, 2612, 2252, 15940, 44,
661 36, 15964, 2552, 2316, 15940, 44,
662 40, 15956, 2496, 2376, 15944, 44,
663 40, 15952, 2436, 2436, 15952, 40 };
665 static const uint16_t filter_6tap_64p_150[198] = {
666 16148, 920, 2724, 920, 16148, 0,
667 16152, 880, 2724, 956, 16148, 0,
668 16152, 844, 2720, 996, 16144, 0,
669 16156, 804, 2716, 1032, 16144, 0,
670 16156, 768, 2712, 1072, 16144, 0,
671 16160, 732, 2708, 1112, 16144, 16380,
672 16164, 696, 2700, 1152, 16144, 16380,
673 16168, 660, 2692, 1192, 16148, 16380,
674 16172, 628, 2684, 1232, 16148, 16380,
675 16176, 592, 2672, 1272, 16152, 16376,
676 16180, 560, 2660, 1312, 16152, 16376,
677 16184, 524, 2648, 1348, 16156, 16376,
678 16192, 492, 2632, 1388, 16160, 16372,
679 16196, 460, 2616, 1428, 16164, 16372,
680 16200, 432, 2600, 1468, 16168, 16368,
681 16204, 400, 2584, 1508, 16176, 16364,
682 16212, 368, 2564, 1548, 16180, 16364,
683 16216, 340, 2544, 1588, 16188, 16360,
684 16220, 312, 2524, 1628, 16196, 16356,
685 16228, 284, 2504, 1668, 16204, 16356,
686 16232, 256, 2480, 1704, 16212, 16352,
687 16240, 232, 2456, 1744, 16224, 16348,
688 16244, 204, 2432, 1780, 16232, 16344,
689 16248, 180, 2408, 1820, 16244, 16340,
690 16256, 156, 2380, 1856, 16256, 16336,
691 16260, 132, 2352, 1896, 16268, 16332,
692 16268, 108, 2324, 1932, 16280, 16328,
693 16272, 88, 2296, 1968, 16292, 16324,
694 16276, 64, 2268, 2004, 16308, 16320,
695 16284, 44, 2236, 2036, 16324, 16312,
696 16288, 24, 2204, 2072, 16340, 16308,
697 16292, 8, 2172, 2108, 16356, 16304,
698 16300, 16372, 2140, 2140, 16372, 16300 };
700 static const uint16_t filter_6tap_64p_183[198] = {
701 16296, 1032, 2196, 1032, 16296, 0,
702 16292, 1004, 2200, 1060, 16304, 16380,
703 16288, 976, 2200, 1088, 16308, 16380,
704 16284, 952, 2196, 1116, 16312, 16376,
705 16284, 924, 2196, 1144, 16320, 16376,
706 16280, 900, 2192, 1172, 16324, 16372,
707 16276, 872, 2192, 1200, 16332, 16368,
708 16276, 848, 2188, 1228, 16340, 16368,
709 16272, 820, 2180, 1256, 16348, 16364,
710 16272, 796, 2176, 1280, 16356, 16360,
711 16268, 768, 2168, 1308, 16364, 16360,
712 16268, 744, 2164, 1336, 16372, 16356,
713 16268, 716, 2156, 1364, 16380, 16352,
714 16264, 692, 2148, 1392, 4, 16352,
715 16264, 668, 2136, 1420, 16, 16348,
716 16264, 644, 2128, 1448, 28, 16344,
717 16264, 620, 2116, 1472, 36, 16340,
718 16264, 596, 2108, 1500, 48, 16340,
719 16268, 572, 2096, 1524, 60, 16336,
720 16268, 548, 2080, 1552, 72, 16332,
721 16268, 524, 2068, 1576, 88, 16328,
722 16268, 504, 2056, 1604, 100, 16324,
723 16272, 480, 2040, 1628, 112, 16324,
724 16272, 456, 2024, 1652, 128, 16320,
725 16272, 436, 2008, 1680, 144, 16316,
726 16276, 416, 1992, 1704, 156, 16312,
727 16276, 392, 1976, 1724, 172, 16308,
728 16280, 372, 1956, 1748, 188, 16308,
729 16280, 352, 1940, 1772, 204, 16304,
730 16284, 332, 1920, 1796, 224, 16300,
731 16288, 312, 1900, 1816, 240, 16296,
732 16288, 296, 1880, 1840, 256, 16296,
733 16292, 276, 1860, 1860, 276, 16292 };
735 static const uint16_t filter_7tap_64p_upscale[231] = {
736 176, 15760, 2488, 2488, 15760, 176, 0,
737 172, 15772, 2404, 2572, 15752, 180, 16380,
738 168, 15784, 2324, 2656, 15740, 184, 16380,
739 164, 15800, 2240, 2736, 15732, 188, 16376,
740 160, 15812, 2152, 2816, 15728, 192, 16376,
741 152, 15828, 2068, 2896, 15724, 192, 16376,
742 148, 15848, 1984, 2972, 15720, 196, 16372,
743 140, 15864, 1896, 3048, 15720, 196, 16372,
744 136, 15884, 1812, 3124, 15720, 196, 16368,
745 128, 15900, 1724, 3196, 15720, 196, 16368,
746 120, 15920, 1640, 3268, 15724, 196, 16368,
747 116, 15940, 1552, 3336, 15732, 196, 16364,
748 108, 15964, 1468, 3400, 15740, 196, 16364,
749 104, 15984, 1384, 3464, 15748, 192, 16364,
750 96, 16004, 1300, 3524, 15760, 188, 16364,
751 88, 16028, 1216, 3584, 15776, 184, 16364,
752 84, 16048, 1132, 3640, 15792, 180, 16360,
753 76, 16072, 1048, 3692, 15812, 176, 16360,
754 68, 16092, 968, 3744, 15832, 168, 16360,
755 64, 16116, 888, 3788, 15856, 160, 16360,
756 56, 16140, 812, 3832, 15884, 152, 16360,
757 52, 16160, 732, 3876, 15912, 144, 16360,
758 44, 16184, 656, 3912, 15944, 136, 16364,
759 40, 16204, 584, 3944, 15976, 124, 16364,
760 32, 16228, 512, 3976, 16012, 116, 16364,
761 28, 16248, 440, 4004, 16048, 104, 16364,
762 24, 16268, 372, 4028, 16092, 88, 16368,
763 20, 16288, 304, 4048, 16132, 76, 16368,
764 12, 16308, 240, 4064, 16180, 60, 16372,
765 8, 16328, 176, 4076, 16228, 48, 16372,
766 4, 16348, 112, 4088, 16276, 32, 16376,
767 0, 16364, 56, 4092, 16328, 16, 16380,
768 0, 0, 0, 4096, 0, 0, 0 };
770 static const uint16_t filter_7tap_64p_117[231] = {
771 92, 15868, 2464, 2464, 15868, 92, 0,
772 96, 15864, 2404, 2528, 15876, 88, 0,
773 100, 15860, 2344, 2584, 15884, 84, 0,
774 104, 15856, 2280, 2644, 15892, 76, 0,
775 108, 15852, 2216, 2700, 15904, 72, 0,
776 108, 15852, 2152, 2756, 15916, 64, 0,
777 112, 15852, 2088, 2812, 15932, 60, 0,
778 112, 15852, 2024, 2864, 15948, 52, 0,
779 112, 15856, 1960, 2916, 15964, 44, 0,
780 116, 15860, 1892, 2964, 15984, 36, 0,
781 116, 15864, 1828, 3016, 16004, 24, 4,
782 116, 15868, 1760, 3060, 16024, 16, 4,
783 116, 15876, 1696, 3108, 16048, 8, 8,
784 116, 15884, 1628, 3152, 16072, 16380, 8,
785 112, 15892, 1564, 3192, 16100, 16372, 8,
786 112, 15900, 1496, 3232, 16124, 16360, 12,
787 112, 15908, 1428, 3268, 16156, 16348, 12,
788 108, 15920, 1364, 3304, 16188, 16336, 16,
789 108, 15928, 1300, 3340, 16220, 16324, 20,
790 104, 15940, 1232, 3372, 16252, 16312, 20,
791 104, 15952, 1168, 3400, 16288, 16300, 24,
792 100, 15964, 1104, 3428, 16328, 16284, 28,
793 96, 15980, 1040, 3452, 16364, 16272, 28,
794 96, 15992, 976, 3476, 20, 16256, 32,
795 92, 16004, 916, 3496, 64, 16244, 36,
796 88, 16020, 856, 3516, 108, 16228, 40,
797 84, 16032, 792, 3532, 152, 16216, 44,
798 80, 16048, 732, 3544, 200, 16200, 48,
799 80, 16064, 676, 3556, 248, 16184, 48,
800 76, 16080, 616, 3564, 296, 16168, 52,
801 72, 16092, 560, 3568, 344, 16156, 56,
802 68, 16108, 504, 3572, 396, 16140, 60,
803 64, 16124, 452, 3576, 452, 16124, 64 };
805 static const uint16_t filter_7tap_64p_150[231] = {
806 16224, 16380, 2208, 2208, 16380, 16224, 0,
807 16232, 16360, 2172, 2236, 16, 16216, 0,
808 16236, 16340, 2140, 2268, 40, 16212, 0,
809 16244, 16324, 2104, 2296, 60, 16204, 4,
810 16252, 16304, 2072, 2324, 84, 16196, 4,
811 16256, 16288, 2036, 2352, 108, 16192, 4,
812 16264, 16268, 2000, 2380, 132, 16184, 8,
813 16272, 16252, 1960, 2408, 160, 16176, 8,
814 16276, 16240, 1924, 2432, 184, 16172, 8,
815 16284, 16224, 1888, 2456, 212, 16164, 8,
816 16288, 16212, 1848, 2480, 240, 16160, 12,
817 16296, 16196, 1812, 2500, 268, 16152, 12,
818 16300, 16184, 1772, 2524, 296, 16144, 12,
819 16308, 16172, 1736, 2544, 324, 16140, 12,
820 16312, 16164, 1696, 2564, 356, 16136, 12,
821 16320, 16152, 1656, 2584, 388, 16128, 12,
822 16324, 16144, 1616, 2600, 416, 16124, 12,
823 16328, 16136, 1576, 2616, 448, 16116, 12,
824 16332, 16128, 1536, 2632, 480, 16112, 12,
825 16340, 16120, 1496, 2648, 516, 16108, 12,
826 16344, 16112, 1456, 2660, 548, 16104, 12,
827 16348, 16104, 1416, 2672, 580, 16100, 12,
828 16352, 16100, 1376, 2684, 616, 16096, 12,
829 16356, 16096, 1336, 2696, 652, 16092, 12,
830 16360, 16092, 1296, 2704, 688, 16088, 12,
831 16364, 16088, 1256, 2712, 720, 16084, 12,
832 16368, 16084, 1220, 2720, 760, 16084, 8,
833 16368, 16080, 1180, 2724, 796, 16080, 8,
834 16372, 16080, 1140, 2732, 832, 16080, 8,
835 16376, 16076, 1100, 2732, 868, 16076, 4,
836 16380, 16076, 1060, 2736, 908, 16076, 4,
837 16380, 16076, 1020, 2740, 944, 16076, 0,
838 0, 16076, 984, 2740, 984, 16076, 0 };
840 static const uint16_t filter_7tap_64p_183[231] = {
841 16216, 324, 1884, 1884, 324, 16216, 0,
842 16220, 304, 1864, 1904, 344, 16216, 0,
843 16224, 284, 1844, 1924, 364, 16216, 0,
844 16224, 264, 1824, 1944, 384, 16212, 16380,
845 16228, 248, 1804, 1960, 408, 16212, 16380,
846 16228, 228, 1784, 1976, 428, 16208, 16380,
847 16232, 212, 1760, 1996, 452, 16208, 16380,
848 16236, 192, 1740, 2012, 472, 16208, 16376,
849 16240, 176, 1716, 2028, 496, 16208, 16376,
850 16240, 160, 1696, 2040, 516, 16208, 16376,
851 16244, 144, 1672, 2056, 540, 16208, 16376,
852 16248, 128, 1648, 2068, 564, 16208, 16372,
853 16252, 112, 1624, 2084, 588, 16208, 16372,
854 16256, 96, 1600, 2096, 612, 16208, 16368,
855 16256, 84, 1576, 2108, 636, 16208, 16368,
856 16260, 68, 1552, 2120, 660, 16208, 16368,
857 16264, 56, 1524, 2132, 684, 16212, 16364,
858 16268, 40, 1500, 2140, 712, 16212, 16364,
859 16272, 28, 1476, 2152, 736, 16216, 16360,
860 16276, 16, 1448, 2160, 760, 16216, 16356,
861 16280, 4, 1424, 2168, 788, 16220, 16356,
862 16284, 16376, 1396, 2176, 812, 16224, 16352,
863 16288, 16368, 1372, 2184, 840, 16224, 16352,
864 16292, 16356, 1344, 2188, 864, 16228, 16348,
865 16292, 16344, 1320, 2196, 892, 16232, 16344,
866 16296, 16336, 1292, 2200, 916, 16236, 16344,
867 16300, 16324, 1264, 2204, 944, 16240, 16340,
868 16304, 16316, 1240, 2208, 972, 16248, 16336,
869 16308, 16308, 1212, 2212, 996, 16252, 16332,
870 16312, 16300, 1184, 2216, 1024, 16256, 16332,
871 16316, 16292, 1160, 2216, 1052, 16264, 16328,
872 16316, 16284, 1132, 2216, 1076, 16268, 16324,
873 16320, 16276, 1104, 2216, 1104, 16276, 16320 };
875 static const uint16_t filter_8tap_64p_upscale[264] = {
876 0, 0, 0, 4096, 0, 0, 0, 0,
877 16376, 20, 16328, 4092, 56, 16364, 4, 0,
878 16372, 36, 16272, 4088, 116, 16340, 12, 0,
879 16364, 56, 16220, 4080, 180, 16320, 20, 0,
880 16360, 76, 16172, 4064, 244, 16296, 24, 16380,
881 16356, 92, 16124, 4048, 312, 16276, 32, 16380,
882 16352, 108, 16080, 4032, 380, 16252, 40, 16380,
883 16344, 124, 16036, 4008, 452, 16228, 48, 16380,
884 16340, 136, 15996, 3980, 524, 16204, 56, 16380,
885 16340, 152, 15956, 3952, 600, 16180, 64, 16376,
886 16336, 164, 15920, 3920, 672, 16156, 76, 16376,
887 16332, 176, 15888, 3884, 752, 16132, 84, 16376,
888 16328, 188, 15860, 3844, 828, 16104, 92, 16372,
889 16328, 200, 15828, 3800, 908, 16080, 100, 16372,
890 16324, 208, 15804, 3756, 992, 16056, 108, 16372,
891 16324, 216, 15780, 3708, 1072, 16032, 120, 16368,
892 16320, 224, 15760, 3656, 1156, 16008, 128, 16368,
893 16320, 232, 15740, 3604, 1240, 15984, 136, 16364,
894 16320, 240, 15724, 3548, 1324, 15960, 144, 16364,
895 16320, 244, 15708, 3488, 1412, 15936, 152, 16360,
896 16320, 248, 15696, 3428, 1496, 15912, 160, 16360,
897 16320, 252, 15688, 3364, 1584, 15892, 172, 16356,
898 16320, 256, 15680, 3296, 1672, 15868, 180, 16352,
899 16320, 256, 15672, 3228, 1756, 15848, 188, 16352,
900 16320, 256, 15668, 3156, 1844, 15828, 192, 16348,
901 16320, 260, 15668, 3084, 1932, 15808, 200, 16348,
902 16320, 256, 15668, 3012, 2020, 15792, 208, 16344,
903 16324, 256, 15668, 2936, 2108, 15772, 216, 16344,
904 16324, 256, 15672, 2856, 2192, 15756, 220, 16340,
905 16324, 252, 15676, 2776, 2280, 15740, 228, 16336,
906 16328, 252, 15684, 2696, 2364, 15728, 232, 16336,
907 16328, 248, 15692, 2616, 2448, 15716, 240, 16332,
908 16332, 244, 15704, 2532, 2532, 15704, 244, 16332 };
910 static const uint16_t filter_8tap_64p_117[264] = {
911 116, 16100, 428, 3564, 428, 16100, 116, 0,
912 112, 16116, 376, 3564, 484, 16084, 120, 16380,
913 104, 16136, 324, 3560, 540, 16064, 124, 16380,
914 100, 16152, 272, 3556, 600, 16048, 128, 16380,
915 96, 16168, 220, 3548, 656, 16032, 136, 16376,
916 88, 16188, 172, 3540, 716, 16016, 140, 16376,
917 84, 16204, 124, 3528, 780, 16000, 144, 16376,
918 80, 16220, 76, 3512, 840, 15984, 148, 16372,
919 76, 16236, 32, 3496, 904, 15968, 152, 16372,
920 68, 16252, 16376, 3480, 968, 15952, 156, 16372,
921 64, 16268, 16332, 3456, 1032, 15936, 160, 16372,
922 60, 16284, 16292, 3432, 1096, 15920, 164, 16368,
923 56, 16300, 16252, 3408, 1164, 15908, 164, 16368,
924 48, 16316, 16216, 3380, 1228, 15892, 168, 16368,
925 44, 16332, 16180, 3348, 1296, 15880, 168, 16368,
926 40, 16348, 16148, 3316, 1364, 15868, 172, 16364,
927 36, 16360, 16116, 3284, 1428, 15856, 172, 16364,
928 32, 16376, 16084, 3248, 1496, 15848, 176, 16364,
929 28, 4, 16052, 3208, 1564, 15836, 176, 16364,
930 24, 16, 16028, 3168, 1632, 15828, 176, 16364,
931 20, 28, 16000, 3124, 1700, 15820, 176, 16364,
932 16, 40, 15976, 3080, 1768, 15812, 176, 16364,
933 12, 52, 15952, 3036, 1836, 15808, 176, 16364,
934 8, 64, 15932, 2988, 1904, 15800, 176, 16364,
935 4, 76, 15912, 2940, 1972, 15800, 172, 16364,
936 4, 84, 15892, 2888, 2040, 15796, 172, 16364,
937 0, 96, 15876, 2836, 2104, 15792, 168, 16364,
938 16380, 104, 15864, 2780, 2172, 15792, 164, 16364,
939 16380, 112, 15848, 2724, 2236, 15792, 160, 16364,
940 16376, 120, 15836, 2668, 2300, 15796, 156, 16368,
941 16376, 128, 15828, 2608, 2364, 15800, 152, 16368,
942 16372, 136, 15816, 2548, 2428, 15804, 148, 16368,
943 16372, 140, 15812, 2488, 2488, 15812, 140, 16372 };
945 static const uint16_t filter_8tap_64p_150[264] = {
946 16380, 16020, 1032, 2756, 1032, 16020, 16380, 0,
947 0, 16020, 992, 2756, 1068, 16024, 16376, 0,
948 4, 16020, 952, 2752, 1108, 16024, 16372, 0,
949 8, 16020, 916, 2748, 1148, 16028, 16368, 0,
950 12, 16020, 876, 2744, 1184, 16032, 16364, 4,
951 16, 16020, 840, 2740, 1224, 16036, 16356, 4,
952 20, 16024, 800, 2732, 1264, 16040, 16352, 4,
953 20, 16024, 764, 2724, 1304, 16044, 16348, 8,
954 24, 16028, 728, 2716, 1344, 16052, 16340, 8,
955 28, 16028, 692, 2704, 1380, 16056, 16336, 12,
956 28, 16032, 656, 2696, 1420, 16064, 16328, 12,
957 32, 16036, 620, 2684, 1460, 16072, 16324, 12,
958 36, 16040, 584, 2668, 1500, 16080, 16316, 16,
959 36, 16044, 548, 2656, 1536, 16088, 16308, 16,
960 36, 16048, 516, 2640, 1576, 16096, 16304, 20,
961 40, 16052, 480, 2624, 1612, 16108, 16296, 20,
962 40, 16060, 448, 2608, 1652, 16120, 16288, 20,
963 44, 16064, 416, 2588, 1692, 16132, 16280, 24,
964 44, 16068, 384, 2568, 1728, 16144, 16276, 24,
965 44, 16076, 352, 2548, 1764, 16156, 16268, 28,
966 44, 16080, 320, 2528, 1804, 16168, 16260, 28,
967 44, 16088, 292, 2508, 1840, 16184, 16252, 28,
968 44, 16096, 264, 2484, 1876, 16200, 16244, 32,
969 48, 16100, 232, 2460, 1912, 16216, 16236, 32,
970 48, 16108, 204, 2436, 1948, 16232, 16228, 32,
971 48, 16116, 176, 2412, 1980, 16248, 16220, 36,
972 48, 16124, 152, 2384, 2016, 16264, 16216, 36,
973 44, 16128, 124, 2356, 2052, 16284, 16208, 36,
974 44, 16136, 100, 2328, 2084, 16304, 16200, 40,
975 44, 16144, 72, 2300, 2116, 16324, 16192, 40,
976 44, 16152, 48, 2272, 2148, 16344, 16184, 40,
977 44, 16160, 24, 2244, 2180, 16364, 16176, 40,
978 44, 16168, 4, 2212, 2212, 4, 16168, 44 };
980 static const uint16_t filter_8tap_64p_183[264] = {
981 16264, 16264, 1164, 2244, 1164, 16264, 16264, 0,
982 16268, 16256, 1136, 2240, 1188, 16272, 16260, 0,
983 16272, 16248, 1108, 2240, 1216, 16280, 16256, 0,
984 16276, 16240, 1080, 2236, 1240, 16292, 16252, 0,
985 16280, 16232, 1056, 2236, 1268, 16300, 16248, 0,
986 16284, 16224, 1028, 2232, 1292, 16312, 16244, 0,
987 16288, 16216, 1000, 2228, 1320, 16324, 16240, 0,
988 16292, 16212, 976, 2224, 1344, 16336, 16236, 0,
989 16296, 16204, 948, 2220, 1372, 16348, 16232, 0,
990 16300, 16200, 920, 2212, 1396, 16360, 16228, 4,
991 16304, 16196, 896, 2204, 1424, 16372, 16224, 4,
992 16308, 16188, 868, 2200, 1448, 0, 16220, 4,
993 16312, 16184, 844, 2192, 1472, 12, 16216, 4,
994 16316, 16180, 816, 2184, 1500, 28, 16212, 4,
995 16320, 16176, 792, 2172, 1524, 40, 16208, 4,
996 16324, 16172, 764, 2164, 1548, 56, 16204, 0,
997 16328, 16172, 740, 2156, 1572, 72, 16200, 0,
998 16328, 16168, 712, 2144, 1596, 88, 16196, 0,
999 16332, 16164, 688, 2132, 1620, 100, 16192, 0,
1000 16336, 16164, 664, 2120, 1644, 120, 16192, 0,
1001 16340, 16160, 640, 2108, 1668, 136, 16188, 0,
1002 16344, 16160, 616, 2096, 1688, 152, 16184, 0,
1003 16344, 16160, 592, 2080, 1712, 168, 16180, 0,
1004 16348, 16156, 568, 2068, 1736, 188, 16176, 16380,
1005 16352, 16156, 544, 2052, 1756, 204, 16176, 16380,
1006 16352, 16156, 520, 2036, 1780, 224, 16172, 16380,
1007 16356, 16156, 496, 2024, 1800, 244, 16172, 16380,
1008 16360, 16156, 472, 2008, 1820, 260, 16168, 16376,
1009 16360, 16156, 452, 1988, 1840, 280, 16164, 16376,
1010 16364, 16156, 428, 1972, 1860, 300, 16164, 16376,
1011 16364, 16156, 408, 1956, 1880, 320, 16164, 16372,
1012 16368, 16160, 384, 1936, 1900, 344, 16160, 16372,
1013 16368, 16160, 364, 1920, 1920, 364, 16160, 16368 };
1015 const uint16_t *get_filter_3tap_16p(struct fixed31_32 ratio)
1017 if (ratio.value < dc_fixpt_one.value)
1018 return filter_3tap_16p_upscale;
1019 else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
1020 return filter_3tap_16p_117;
1021 else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
1022 return filter_3tap_16p_150;
1024 return filter_3tap_16p_183;
1027 const uint16_t *get_filter_3tap_64p(struct fixed31_32 ratio)
1029 if (ratio.value < dc_fixpt_one.value)
1030 return filter_3tap_64p_upscale;
1031 else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
1032 return filter_3tap_64p_117;
1033 else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
1034 return filter_3tap_64p_150;
1036 return filter_3tap_64p_183;
1039 const uint16_t *get_filter_4tap_16p(struct fixed31_32 ratio)
1041 if (ratio.value < dc_fixpt_one.value)
1042 return filter_4tap_16p_upscale;
1043 else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
1044 return filter_4tap_16p_117;
1045 else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
1046 return filter_4tap_16p_150;
1048 return filter_4tap_16p_183;
1051 const uint16_t *get_filter_4tap_64p(struct fixed31_32 ratio)
1053 if (ratio.value < dc_fixpt_one.value)
1054 return filter_4tap_64p_upscale;
1055 else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
1056 return filter_4tap_64p_117;
1057 else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
1058 return filter_4tap_64p_150;
1060 return filter_4tap_64p_183;
1063 const uint16_t *get_filter_5tap_64p(struct fixed31_32 ratio)
1065 if (ratio.value < dc_fixpt_one.value)
1066 return filter_5tap_64p_upscale;
1067 else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
1068 return filter_5tap_64p_117;
1069 else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
1070 return filter_5tap_64p_150;
1072 return filter_5tap_64p_183;
1075 const uint16_t *get_filter_6tap_64p(struct fixed31_32 ratio)
1077 if (ratio.value < dc_fixpt_one.value)
1078 return filter_6tap_64p_upscale;
1079 else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
1080 return filter_6tap_64p_117;
1081 else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
1082 return filter_6tap_64p_150;
1084 return filter_6tap_64p_183;
1087 const uint16_t *get_filter_7tap_64p(struct fixed31_32 ratio)
1089 if (ratio.value < dc_fixpt_one.value)
1090 return filter_7tap_64p_upscale;
1091 else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
1092 return filter_7tap_64p_117;
1093 else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
1094 return filter_7tap_64p_150;
1096 return filter_7tap_64p_183;
1099 const uint16_t *get_filter_8tap_64p(struct fixed31_32 ratio)
1101 if (ratio.value < dc_fixpt_one.value)
1102 return filter_8tap_64p_upscale;
1103 else if (ratio.value < dc_fixpt_from_fraction(4, 3).value)
1104 return filter_8tap_64p_117;
1105 else if (ratio.value < dc_fixpt_from_fraction(5, 3).value)
1106 return filter_8tap_64p_150;
1108 return filter_8tap_64p_183;
1111 const uint16_t *get_filter_2tap_16p(void)
1113 return filter_2tap_16p;
1116 const uint16_t *get_filter_2tap_64p(void)
1118 return filter_2tap_64p;