1 | #ifdef SDL_SSE2_INTRINSICS |
2 | |
3 | #include "yuv_rgb_common.h" |
4 | |
5 | // yuv to rgb, sse implementation |
6 | // pointers must be 16 byte aligned, and strides must be divisable by 16 |
7 | void yuv420_rgb565_sse( |
8 | uint32_t width, uint32_t height, |
9 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
10 | uint8_t *rgb, uint32_t rgb_stride, |
11 | YCbCrType yuv_type); |
12 | |
13 | void yuv420_rgb24_sse( |
14 | uint32_t width, uint32_t height, |
15 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
16 | uint8_t *rgb, uint32_t rgb_stride, |
17 | YCbCrType yuv_type); |
18 | |
19 | void yuv420_rgba_sse( |
20 | uint32_t width, uint32_t height, |
21 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
22 | uint8_t *rgb, uint32_t rgb_stride, |
23 | YCbCrType yuv_type); |
24 | |
25 | void yuv420_bgra_sse( |
26 | uint32_t width, uint32_t height, |
27 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
28 | uint8_t *rgb, uint32_t rgb_stride, |
29 | YCbCrType yuv_type); |
30 | |
31 | void yuv420_argb_sse( |
32 | uint32_t width, uint32_t height, |
33 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
34 | uint8_t *rgb, uint32_t rgb_stride, |
35 | YCbCrType yuv_type); |
36 | |
37 | void yuv420_abgr_sse( |
38 | uint32_t width, uint32_t height, |
39 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
40 | uint8_t *rgb, uint32_t rgb_stride, |
41 | YCbCrType yuv_type); |
42 | |
43 | void yuv422_rgb565_sse( |
44 | uint32_t width, uint32_t height, |
45 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
46 | uint8_t *rgb, uint32_t rgb_stride, |
47 | YCbCrType yuv_type); |
48 | |
49 | void yuv422_rgb24_sse( |
50 | uint32_t width, uint32_t height, |
51 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
52 | uint8_t *rgb, uint32_t rgb_stride, |
53 | YCbCrType yuv_type); |
54 | |
55 | void yuv422_rgba_sse( |
56 | uint32_t width, uint32_t height, |
57 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
58 | uint8_t *rgb, uint32_t rgb_stride, |
59 | YCbCrType yuv_type); |
60 | |
61 | void yuv422_bgra_sse( |
62 | uint32_t width, uint32_t height, |
63 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
64 | uint8_t *rgb, uint32_t rgb_stride, |
65 | YCbCrType yuv_type); |
66 | |
67 | void yuv422_argb_sse( |
68 | uint32_t width, uint32_t height, |
69 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
70 | uint8_t *rgb, uint32_t rgb_stride, |
71 | YCbCrType yuv_type); |
72 | |
73 | void yuv422_abgr_sse( |
74 | uint32_t width, uint32_t height, |
75 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
76 | uint8_t *rgb, uint32_t rgb_stride, |
77 | YCbCrType yuv_type); |
78 | |
79 | void yuvnv12_rgb565_sse( |
80 | uint32_t width, uint32_t height, |
81 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
82 | uint8_t *rgb, uint32_t rgb_stride, |
83 | YCbCrType yuv_type); |
84 | |
85 | void yuvnv12_rgb24_sse( |
86 | uint32_t width, uint32_t height, |
87 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
88 | uint8_t *rgb, uint32_t rgb_stride, |
89 | YCbCrType yuv_type); |
90 | |
91 | void yuvnv12_rgba_sse( |
92 | uint32_t width, uint32_t height, |
93 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
94 | uint8_t *rgb, uint32_t rgb_stride, |
95 | YCbCrType yuv_type); |
96 | |
97 | void yuvnv12_bgra_sse( |
98 | uint32_t width, uint32_t height, |
99 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
100 | uint8_t *rgb, uint32_t rgb_stride, |
101 | YCbCrType yuv_type); |
102 | |
103 | void yuvnv12_argb_sse( |
104 | uint32_t width, uint32_t height, |
105 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
106 | uint8_t *rgb, uint32_t rgb_stride, |
107 | YCbCrType yuv_type); |
108 | |
109 | void yuvnv12_abgr_sse( |
110 | uint32_t width, uint32_t height, |
111 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
112 | uint8_t *rgb, uint32_t rgb_stride, |
113 | YCbCrType yuv_type); |
114 | |
115 | // yuv to rgb, sse implementation |
116 | // pointers do not need to be 16 byte aligned |
117 | void yuv420_rgb565_sseu( |
118 | uint32_t width, uint32_t height, |
119 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
120 | uint8_t *rgb, uint32_t rgb_stride, |
121 | YCbCrType yuv_type); |
122 | |
123 | void yuv420_rgb24_sseu( |
124 | uint32_t width, uint32_t height, |
125 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
126 | uint8_t *rgb, uint32_t rgb_stride, |
127 | YCbCrType yuv_type); |
128 | |
129 | void yuv420_rgba_sseu( |
130 | uint32_t width, uint32_t height, |
131 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
132 | uint8_t *rgb, uint32_t rgb_stride, |
133 | YCbCrType yuv_type); |
134 | |
135 | void yuv420_bgra_sseu( |
136 | uint32_t width, uint32_t height, |
137 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
138 | uint8_t *rgb, uint32_t rgb_stride, |
139 | YCbCrType yuv_type); |
140 | |
141 | void yuv420_argb_sseu( |
142 | uint32_t width, uint32_t height, |
143 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
144 | uint8_t *rgb, uint32_t rgb_stride, |
145 | YCbCrType yuv_type); |
146 | |
147 | void yuv420_abgr_sseu( |
148 | uint32_t width, uint32_t height, |
149 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
150 | uint8_t *rgb, uint32_t rgb_stride, |
151 | YCbCrType yuv_type); |
152 | |
153 | void yuv422_rgb565_sseu( |
154 | uint32_t width, uint32_t height, |
155 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
156 | uint8_t *rgb, uint32_t rgb_stride, |
157 | YCbCrType yuv_type); |
158 | |
159 | void yuv422_rgb24_sseu( |
160 | uint32_t width, uint32_t height, |
161 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
162 | uint8_t *rgb, uint32_t rgb_stride, |
163 | YCbCrType yuv_type); |
164 | |
165 | void yuv422_rgba_sseu( |
166 | uint32_t width, uint32_t height, |
167 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
168 | uint8_t *rgb, uint32_t rgb_stride, |
169 | YCbCrType yuv_type); |
170 | |
171 | void yuv422_bgra_sseu( |
172 | uint32_t width, uint32_t height, |
173 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
174 | uint8_t *rgb, uint32_t rgb_stride, |
175 | YCbCrType yuv_type); |
176 | |
177 | void yuv422_argb_sseu( |
178 | uint32_t width, uint32_t height, |
179 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
180 | uint8_t *rgb, uint32_t rgb_stride, |
181 | YCbCrType yuv_type); |
182 | |
183 | void yuv422_abgr_sseu( |
184 | uint32_t width, uint32_t height, |
185 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
186 | uint8_t *rgb, uint32_t rgb_stride, |
187 | YCbCrType yuv_type); |
188 | |
189 | void yuvnv12_rgb565_sseu( |
190 | uint32_t width, uint32_t height, |
191 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
192 | uint8_t *rgb, uint32_t rgb_stride, |
193 | YCbCrType yuv_type); |
194 | |
195 | void yuvnv12_rgb24_sseu( |
196 | uint32_t width, uint32_t height, |
197 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
198 | uint8_t *rgb, uint32_t rgb_stride, |
199 | YCbCrType yuv_type); |
200 | |
201 | void yuvnv12_rgba_sseu( |
202 | uint32_t width, uint32_t height, |
203 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
204 | uint8_t *rgb, uint32_t rgb_stride, |
205 | YCbCrType yuv_type); |
206 | |
207 | void yuvnv12_bgra_sseu( |
208 | uint32_t width, uint32_t height, |
209 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
210 | uint8_t *rgb, uint32_t rgb_stride, |
211 | YCbCrType yuv_type); |
212 | |
213 | void yuvnv12_argb_sseu( |
214 | uint32_t width, uint32_t height, |
215 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
216 | uint8_t *rgb, uint32_t rgb_stride, |
217 | YCbCrType yuv_type); |
218 | |
219 | void yuvnv12_abgr_sseu( |
220 | uint32_t width, uint32_t height, |
221 | const uint8_t *y, const uint8_t *u, const uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
222 | uint8_t *rgb, uint32_t rgb_stride, |
223 | YCbCrType yuv_type); |
224 | |
225 | |
226 | // rgb to yuv, sse implementation |
227 | // pointers must be 16 byte aligned, and strides must be divisible by 16 |
228 | void rgb24_yuv420_sse( |
229 | uint32_t width, uint32_t height, |
230 | const uint8_t *rgb, uint32_t rgb_stride, |
231 | uint8_t *y, uint8_t *u, uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
232 | YCbCrType yuv_type); |
233 | |
234 | // rgb to yuv, sse implementation |
235 | // pointers do not need to be 16 byte aligned |
236 | void rgb24_yuv420_sseu( |
237 | uint32_t width, uint32_t height, |
238 | const uint8_t *rgb, uint32_t rgb_stride, |
239 | uint8_t *y, uint8_t *u, uint8_t *v, uint32_t y_stride, uint32_t uv_stride, |
240 | YCbCrType yuv_type); |
241 | #endif |
242 | |