1 /*
2  * Copyright 2012-16 Advanced Micro Devices, Inc.
3  *
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:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
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.
21  *
22  * Authors: AMD
23  *
24  */
25 
26 #include "transform.h"
27 
28 static const uint16_t filter_2tap_16p[18] = {
29 	4096, 0,
30 	3840, 256,
31 	3584, 512,
32 	3328, 768,
33 	3072, 1024,
34 	2816, 1280,
35 	2560, 1536,
36 	2304, 1792,
37 	2048, 2048
38 };
39 
40 static const uint16_t filter_3tap_16p_upscale[27] = {
41 	2048, 2048, 0,
42 	1708, 2424, 16348,
43 	1372, 2796, 16308,
44 	1056, 3148, 16272,
45 	768, 3464, 16244,
46 	512, 3728, 16236,
47 	296, 3928, 16252,
48 	124, 4052, 16296,
49 	0, 4096, 0
50 };
51 
52 static const uint16_t filter_3tap_16p_117[27] = {
53 	2048, 2048, 0,
54 	1824, 2276, 16376,
55 	1600, 2496, 16380,
56 	1376, 2700, 16,
57 	1156, 2880, 52,
58 	948, 3032, 108,
59 	756, 3144, 192,
60 	580, 3212, 296,
61 	428, 3236, 428
62 };
63 
64 static const uint16_t filter_3tap_16p_150[27] = {
65 	2048, 2048, 0,
66 	1872, 2184, 36,
67 	1692, 2308, 88,
68 	1516, 2420, 156,
69 	1340, 2516, 236,
70 	1168, 2592, 328,
71 	1004, 2648, 440,
72 	844, 2684, 560,
73 	696, 2696, 696
74 };
75 
76 static const uint16_t filter_3tap_16p_183[27] = {
77 	2048, 2048, 0,
78 	1892, 2104, 92,
79 	1744, 2152, 196,
80 	1592, 2196, 300,
81 	1448, 2232, 412,
82 	1304, 2256, 528,
83 	1168, 2276, 648,
84 	1032, 2288, 772,
85 	900, 2292, 900
86 };
87 
88 static const uint16_t filter_4tap_16p_upscale[36] = {
89 	0, 4096, 0, 0,
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
98 };
99 
100 static const uint16_t filter_4tap_16p_117[36] = {
101 	428, 3236, 428, 0,
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
110 };
111 
112 static const uint16_t filter_4tap_16p_150[36] = {
113 	696, 2700, 696, 0,
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
122 };
123 
124 static const uint16_t filter_4tap_16p_183[36] = {
125 	940, 2208, 940, 0,
126 	832, 2200, 1052, 4,
127 	728, 2180, 1164, 16,
128 	628, 2148, 1280, 36,
129 	536, 2100, 1392, 60,
130 	448, 2044, 1504, 92,
131 	368, 1976, 1612, 132,
132 	296, 1900, 1716, 176,
133 	232, 1812, 1812, 232
134 };
135 
136 static const uint16_t filter_2tap_64p[66] = {
137 	4096, 0,
138 	4032, 64,
139 	3968, 128,
140 	3904, 192,
141 	3840, 256,
142 	3776, 320,
143 	3712, 384,
144 	3648, 448,
145 	3584, 512,
146 	3520, 576,
147 	3456, 640,
148 	3392, 704,
149 	3328, 768,
150 	3264, 832,
151 	3200, 896,
152 	3136, 960,
153 	3072, 1024,
154 	3008, 1088,
155 	2944, 1152,
156 	2880, 1216,
157 	2816, 1280,
158 	2752, 1344,
159 	2688, 1408,
160 	2624, 1472,
161 	2560, 1536,
162 	2496, 1600,
163 	2432, 1664,
164 	2368, 1728,
165 	2304, 1792,
166 	2240, 1856,
167 	2176, 1920,
168 	2112, 1984,
169 	2048, 2048 };
170 
171 static const uint16_t filter_3tap_64p_upscale[99] = {
172 	2048, 2048, 0,
173 	1960, 2140, 16376,
174 	1876, 2236, 16364,
175 	1792, 2328, 16356,
176 	1708, 2424, 16348,
177 	1620, 2516, 16336,
178 	1540, 2612, 16328,
179 	1456, 2704, 16316,
180 	1372, 2796, 16308,
181 	1292, 2884, 16296,
182 	1212, 2976, 16288,
183 	1136, 3060, 16280,
184 	1056, 3148, 16272,
185 	984, 3228, 16264,
186 	908, 3312, 16256,
187 	836, 3388, 16248,
188 	768, 3464, 16244,
189 	700, 3536, 16240,
190 	636, 3604, 16236,
191 	572, 3668, 16236,
192 	512, 3728, 16236,
193 	456, 3784, 16236,
194 	400, 3836, 16240,
195 	348, 3884, 16244,
196 	296, 3928, 16252,
197 	252, 3964, 16260,
198 	204, 4000, 16268,
199 	164, 4028, 16284,
200 	124, 4052, 16296,
201 	88, 4072, 16316,
202 	56, 4084, 16336,
203 	24, 4092, 16356,
204 	0, 4096, 0
205 };
206 
207 static const uint16_t filter_3tap_64p_117[99] = {
208 	2048, 2048, 0,
209 	1992, 2104, 16380,
210 	1936, 2160, 16380,
211 	1880, 2220, 16376,
212 	1824, 2276, 16376,
213 	1768, 2332, 16376,
214 	1712, 2388, 16376,
215 	1656, 2444, 16376,
216 	1600, 2496, 16380,
217 	1544, 2548, 0,
218 	1488, 2600, 4,
219 	1432, 2652, 8,
220 	1376, 2700, 16,
221 	1320, 2748, 20,
222 	1264, 2796, 32,
223 	1212, 2840, 40,
224 	1156, 2880, 52,
225 	1104, 2920, 64,
226 	1052, 2960, 80,
227 	1000, 2996, 92,
228 	948, 3032, 108,
229 	900, 3060, 128,
230 	852, 3092, 148,
231 	804, 3120, 168,
232 	756, 3144, 192,
233 	712, 3164, 216,
234 	668, 3184, 240,
235 	624, 3200, 268,
236 	580, 3212, 296,
237 	540, 3220, 328,
238 	500, 3228, 360,
239 	464, 3232, 392,
240 	428, 3236, 428
241 };
242 
243 static const uint16_t filter_3tap_64p_150[99] = {
244 	2048, 2048, 0,
245 	2004, 2080, 8,
246 	1960, 2116, 16,
247 	1916, 2148, 28,
248 	1872, 2184, 36,
249 	1824, 2216, 48,
250 	1780, 2248, 60,
251 	1736, 2280, 76,
252 	1692, 2308, 88,
253 	1648, 2336, 104,
254 	1604, 2368, 120,
255 	1560, 2392, 136,
256 	1516, 2420, 156,
257 	1472, 2444, 172,
258 	1428, 2472, 192,
259 	1384, 2492, 212,
260 	1340, 2516, 236,
261 	1296, 2536, 256,
262 	1252, 2556, 280,
263 	1212, 2576, 304,
264 	1168, 2592, 328,
265 	1124, 2608, 356,
266 	1084, 2624, 384,
267 	1044, 2636, 412,
268 	1004, 2648, 440,
269 	964, 2660, 468,
270 	924, 2668, 500,
271 	884, 2676, 528,
272 	844, 2684, 560,
273 	808, 2688, 596,
274 	768, 2692, 628,
275 	732, 2696, 664,
276 	696, 2696, 696
277 };
278 
279 static const uint16_t filter_3tap_64p_183[99] = {
280 	2048, 2048, 0,
281 	2008, 2060, 20,
282 	1968, 2076, 44,
283 	1932, 2088, 68,
284 	1892, 2104, 92,
285 	1856, 2116, 120,
286 	1816, 2128, 144,
287 	1780, 2140, 168,
288 	1744, 2152, 196,
289 	1704, 2164, 220,
290 	1668, 2176, 248,
291 	1632, 2188, 272,
292 	1592, 2196, 300,
293 	1556, 2204, 328,
294 	1520, 2216, 356,
295 	1484, 2224, 384,
296 	1448, 2232, 412,
297 	1412, 2240, 440,
298 	1376, 2244, 468,
299 	1340, 2252, 496,
300 	1304, 2256, 528,
301 	1272, 2264, 556,
302 	1236, 2268, 584,
303 	1200, 2272, 616,
304 	1168, 2276, 648,
305 	1132, 2280, 676,
306 	1100, 2284, 708,
307 	1064, 2288, 740,
308 	1032, 2288, 772,
309 	996, 2292, 800,
310 	964, 2292, 832,
311 	932, 2292, 868,
312 	900, 2292, 900
313 };
314 
315 static const uint16_t filter_4tap_64p_upscale[132] = {
316 	0, 4096, 0, 0,
317 	16344, 4092, 40, 0,
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 };
349 
350 static const uint16_t filter_4tap_64p_117[132] = {
351 	420, 3248, 420, 0,
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 };
384 
385 static const uint16_t filter_4tap_64p_150[132] = {
386 	696, 2700, 696, 0,
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 };
419 
420 static const uint16_t filter_4tap_64p_183[132] = {
421 	944, 2204, 944, 0,
422 	916, 2204, 972, 0,
423 	888, 2200, 996, 0,
424 	860, 2200, 1024, 4,
425 	832, 2196, 1052, 4,
426 	808, 2192, 1080, 8,
427 	780, 2188, 1108, 12,
428 	756, 2180, 1140, 12,
429 	728, 2176, 1168, 16,
430 	704, 2168, 1196, 20,
431 	680, 2160, 1224, 24,
432 	656, 2152, 1252, 28,
433 	632, 2144, 1280, 36,
434 	608, 2132, 1308, 40,
435 	584, 2120, 1336, 48,
436 	560, 2112, 1364, 52,
437 	536, 2096, 1392, 60,
438 	516, 2084, 1420, 68,
439 	492, 2072, 1448, 76,
440 	472, 2056, 1476, 84,
441 	452, 2040, 1504, 92,
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 };
454 
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,
488 	0, 0, 4096, 0, 0 };
489 
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 };
524 
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 };
559 
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 };
594 
595 static const uint16_t filter_6tap_64p_upscale[198] = {
596 	0, 0, 4092, 0, 0, 0,
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 };
629 
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 };
664 
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 };
699 
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 };
734 
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 };
769 
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 };
804 
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 };
839 
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 };
874 
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 };
909 
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 };
944 
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 };
979 
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 };
1014 
1015 const uint16_t *get_filter_3tap_16p(struct fixed31_32 ratio)
1016 {
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;
1023 	else
1024 		return filter_3tap_16p_183;
1025 }
1026 
1027 const uint16_t *get_filter_3tap_64p(struct fixed31_32 ratio)
1028 {
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;
1035 	else
1036 		return filter_3tap_64p_183;
1037 }
1038 
1039 const uint16_t *get_filter_4tap_16p(struct fixed31_32 ratio)
1040 {
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;
1047 	else
1048 		return filter_4tap_16p_183;
1049 }
1050 
1051 const uint16_t *get_filter_4tap_64p(struct fixed31_32 ratio)
1052 {
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;
1059 	else
1060 		return filter_4tap_64p_183;
1061 }
1062 
1063 const uint16_t *get_filter_5tap_64p(struct fixed31_32 ratio)
1064 {
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;
1071 	else
1072 		return filter_5tap_64p_183;
1073 }
1074 
1075 const uint16_t *get_filter_6tap_64p(struct fixed31_32 ratio)
1076 {
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;
1083 	else
1084 		return filter_6tap_64p_183;
1085 }
1086 
1087 const uint16_t *get_filter_7tap_64p(struct fixed31_32 ratio)
1088 {
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;
1095 	else
1096 		return filter_7tap_64p_183;
1097 }
1098 
1099 const uint16_t *get_filter_8tap_64p(struct fixed31_32 ratio)
1100 {
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;
1107 	else
1108 		return filter_8tap_64p_183;
1109 }
1110 
1111 const uint16_t *get_filter_2tap_16p(void)
1112 {
1113 	return filter_2tap_16p;
1114 }
1115 
1116 const uint16_t *get_filter_2tap_64p(void)
1117 {
1118 	return filter_2tap_64p;
1119 }
1120