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