]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.2/Modules/yuvconvert.c
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Modules / yuvconvert.c
CommitLineData
4710c53d 1\r
2#include "yuv.h"\r
3\r
4void\r
5yuv_sv411_to_cl422dc(int invert, void *data, void *yuv, int width, int height)\r
6{\r
7 struct yuv411 *in = data;\r
8 struct yuv422 *out_even = yuv;\r
9 struct yuv422 *out_odd = out_even + width / 2;\r
10 int i, j; /* counters */\r
11\r
12 for (i = height / 2; i--; ) {\r
13 for (j = width / 4; j--; ) {\r
14 YUV422_Y0(*out_even) = YUV411_Y00(*in);\r
15 YUV422_U0(*out_even) = YUV411_U00(*in);\r
16 YUV422_V0(*out_even) = YUV411_V00(*in);\r
17 YUV422_Y1(*out_even) = YUV411_Y01(*in);\r
18 out_even++;\r
19 YUV422_Y0(*out_even) = YUV411_Y02(*in);\r
20 YUV422_U0(*out_even) = YUV411_U02(*in);\r
21 YUV422_V0(*out_even) = YUV411_V02(*in);\r
22 YUV422_Y1(*out_even) = YUV411_Y03(*in);\r
23 out_even++;\r
24 YUV422_Y0(*out_odd) = YUV411_Y10(*in);\r
25 YUV422_U0(*out_odd) = YUV411_U10(*in);\r
26 YUV422_V0(*out_odd) = YUV411_V10(*in);\r
27 YUV422_Y1(*out_odd) = YUV411_Y11(*in);\r
28 out_odd++;\r
29 YUV422_Y0(*out_odd) = YUV411_Y12(*in);\r
30 YUV422_U0(*out_odd) = YUV411_U12(*in);\r
31 YUV422_V0(*out_odd) = YUV411_V12(*in);\r
32 YUV422_Y1(*out_odd) = YUV411_Y13(*in);\r
33 out_odd++;\r
34 in++;\r
35 }\r
36 out_even += width / 2;\r
37 out_odd += width / 2;\r
38 }\r
39}\r
40\r
41void\r
42yuv_sv411_to_cl422dc_quartersize(int invert, void *data, void *yuv,\r
43 int width, int height)\r
44{\r
45 int w4 = width / 4; /* quarter of width is used often */\r
46 struct yuv411 *in_even = data;\r
47 struct yuv411 *in_odd = in_even + w4;\r
48 struct yuv422 *out_even = yuv;\r
49 struct yuv422 *out_odd = out_even + w4;\r
50 int i, j; /* counters */\r
51 int u, v; /* U and V values */\r
52\r
53 for (i = height / 4; i--; ) {\r
54 for (j = w4; j--; ) {\r
55 u = YUV411_U00(*in_even);\r
56 v = YUV411_V00(*in_even);\r
57\r
58 YUV422_Y0(*out_even) = YUV411_Y00(*in_even);\r
59 YUV422_U0(*out_even) = u;\r
60 YUV422_V0(*out_even) = v;\r
61 YUV422_Y1(*out_even) = YUV411_Y02(*in_even);\r
62\r
63 YUV422_Y0(*out_odd) = YUV411_Y10(*in_odd);\r
64 YUV422_U0(*out_odd) = u;\r
65 YUV422_V0(*out_odd) = v;\r
66 YUV422_Y1(*out_odd) = YUV411_Y12(*in_odd);\r
67\r
68 in_even++;\r
69 in_odd++;\r
70 out_even++;\r
71 out_odd++;\r
72 }\r
73 in_even += w4;\r
74 in_odd += w4;\r
75 out_even += w4;\r
76 out_odd += w4;\r
77 }\r
78}\r
79\r
80void\r
81yuv_sv411_to_cl422dc_sixteenthsize(int invert, void *data, void *yuv,\r
82 int width, int height)\r
83{\r
84 int w4_3 = 3 * width / 4; /* three quarters of width is used often */\r
85 int w8 = width / 8; /* and so is one eighth */\r
86 struct yuv411 *in_even = data;\r
87 struct yuv411 *in_odd = in_even + width / 2;\r
88 struct yuv422 *out_even = yuv;\r
89 struct yuv422 *out_odd = out_even + w8;\r
90 int i, j; /* counters */\r
91 int u, v; /* U and V values */\r
92\r
93 for (i = height / 8; i--; ) {\r
94 for (j = w8; j--; ) {\r
95 u = YUV411_U00(in_even[0]);\r
96 v = YUV411_V00(in_even[0]);\r
97\r
98 YUV422_Y0(*out_even) = YUV411_Y00(in_even[0]);\r
99 YUV422_U0(*out_even) = u;\r
100 YUV422_V0(*out_even) = v;\r
101 YUV422_Y1(*out_even) = YUV411_Y00(in_even[1]);\r
102\r
103 YUV422_Y0(*out_odd) = YUV411_Y00(in_odd[0]);\r
104 YUV422_U0(*out_odd) = u;\r
105 YUV422_V0(*out_odd) = v;\r
106 YUV422_Y1(*out_odd) = YUV411_Y00(in_even[1]);\r
107\r
108 in_even += 2;\r
109 in_odd += 2;\r
110 out_even++;\r
111 out_odd++;\r
112 }\r
113 in_even += w4_3;\r
114 in_odd += w4_3;\r
115 out_even += w8;\r
116 out_odd += w8;\r
117 }\r
118}\r