Commit | Line | Data |
---|---|---|
5763fb39 T |
1 | /* |
2 | * | |
3 | * Copyright 2012 Samsung Electronics S.LSI Co. LTD | |
4 | * | |
5 | * Licensed under the Apache License, Version 2.0 (the "License"); | |
6 | * you may not use this file except in compliance with the License. | |
7 | * You may obtain a copy of the License at | |
8 | * | |
9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
10 | * | |
11 | * Unless required by applicable law or agreed to in writing, software | |
12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
14 | * See the License for the specific language governing permissions and | |
15 | * limitations under the License. | |
16 | */ | |
17 | ||
18 | /* | |
19 | * @file swconverter.h | |
20 | * @brief Exynos_OMX specific define. It support MFC's tiled format. | |
21 | * NV12T(tiled) layout: | |
22 | * Each element is not pixel. | |
23 | * MFC 5.x : It is 64x32 pixel block. | |
24 | * MFC 6.x : It is 16x16 pixel block. | |
25 | * uv pixel block is interleaved as u v u v u v ... | |
26 | * y1 y2 y7 y8 y9 y10 y15 y16 | |
27 | * y3 y4 y5 y6 y11 y12 y13 y14 | |
28 | * y17 y18 y23 y24 y25 y26 y31 y32 | |
29 | * y19 y20 y21 y22 y27 y28 y29 y30 | |
30 | * uv1 uv2 uv7 uv8 uv9 uv10 uv15 uv16 | |
31 | * uv3 uv4 uv5 uv6 uv11 uv12 uv13 uv14 | |
32 | * YUV420Planar(linear) layout: | |
33 | * Each element is not pixel. It is 64x32 pixel block. | |
34 | * y1 y2 y3 y4 y5 y6 y7 y8 | |
35 | * y9 y10 y11 y12 y13 y14 y15 y16 | |
36 | * y17 y18 y19 y20 y21 y22 y23 y24 | |
37 | * y25 y26 y27 y28 y29 y30 y31 y32 | |
38 | * u1 u2 u3 u4 u5 u6 u7 u8 | |
39 | * v1 v2 v3 v4 v5 v6 v7 v8 | |
40 | * YUV420Semiplanar(linear) layout: | |
41 | * Each element is not pixel. It is 64x32 pixel block. | |
42 | * uv pixel block is interleaved as u v u v u v ... | |
43 | * y1 y2 y3 y4 y5 y6 y7 y8 | |
44 | * y9 y10 y11 y12 y13 y14 y15 y16 | |
45 | * y17 y18 y19 y20 y21 y22 y23 y24 | |
46 | * y25 y26 y27 y28 y29 y30 y31 y32 | |
47 | * uv1 uv2 uv3 uv4 uv5 uv6 uv7 uv8 | |
48 | * uv9 uv10 uv11 uv12 uv13 uv14 uv15 uv16 | |
49 | * @author ShinWon Lee (shinwon.lee@samsung.com) | |
50 | * @version 1.0 | |
51 | * @history | |
52 | * 2012.02.01 : Create | |
53 | */ | |
54 | ||
55 | #ifndef SW_CONVERTOR_H_ | |
56 | #define SW_CONVERTOR_H_ | |
57 | ||
58 | /*--------------------------------------------------------------------------------*/ | |
59 | /* Format Conversion API */ | |
60 | /*--------------------------------------------------------------------------------*/ | |
61 | /* | |
62 | * C code only | |
63 | * De-interleaves src to dest1, dest2 | |
64 | * | |
65 | * @param dest1 | |
66 | * Address of de-interleaved data[out] | |
67 | * | |
68 | * @param dest2 | |
69 | * Address of de-interleaved data[out] | |
70 | * | |
71 | * @param src | |
72 | * Address of interleaved data[in] | |
73 | * | |
74 | * @param src_size | |
75 | * Size of interleaved data[in] | |
76 | */ | |
77 | void csc_deinterleave_memcpy( | |
78 | unsigned char *dest1, | |
79 | unsigned char *dest2, | |
80 | unsigned char *src, | |
81 | unsigned int src_size); | |
82 | ||
83 | /* | |
84 | * C code or Neon | |
85 | * Interleaves src1, src2 to dest | |
86 | * | |
87 | * @param dest | |
88 | * Address of interleaved data[out] | |
89 | * | |
90 | * @param src1 | |
91 | * Address of de-interleaved data[in] | |
92 | * | |
93 | * @param src2 | |
94 | * Address of de-interleaved data[in] | |
95 | * | |
96 | * @param src_size | |
97 | * Size of de-interleaved data[in] | |
98 | */ | |
99 | void csc_interleave_memcpy( | |
100 | unsigned char *dest, | |
101 | unsigned char *src1, | |
102 | unsigned char *src2, | |
103 | unsigned int src_size); | |
104 | ||
105 | /* | |
106 | * C code or Neon | |
107 | * Converts tiled data to linear | |
108 | * 1. y of nv12t to y of yuv420p | |
109 | * 2. y of nv12t to y of yuv420s | |
110 | * | |
111 | * @param dst | |
112 | * y address of yuv420[out] | |
113 | * | |
114 | * @param src | |
115 | * y address of nv12t[in] | |
116 | * | |
117 | * @param yuv420_width | |
118 | * real width of yuv420[in] | |
119 | * it should be even | |
120 | * | |
121 | * @param yuv420_height | |
122 | * real height of yuv420[in] | |
123 | * it should be even. | |
124 | * | |
125 | */ | |
126 | void csc_tiled_to_linear_y( | |
127 | unsigned char *y_dst, | |
128 | unsigned char *y_src, | |
129 | unsigned int width, | |
130 | unsigned int height); | |
131 | ||
132 | /* | |
133 | * C code or Neon | |
134 | * Converts tiled data to linear | |
135 | * 1. uv of nv12t to y of yuv420s | |
136 | * | |
137 | * @param dst | |
138 | * uv address of yuv420s[out] | |
139 | * | |
140 | * @param src | |
141 | * uv address of nv12t[in] | |
142 | * | |
143 | * @param yuv420_width | |
144 | * real width of yuv420s[in] | |
145 | * | |
146 | * @param yuv420_height | |
147 | * real height of yuv420s[in] | |
148 | * | |
149 | */ | |
150 | void csc_tiled_to_linear_uv( | |
151 | unsigned char *uv_dst, | |
152 | unsigned char *uv_src, | |
153 | unsigned int width, | |
154 | unsigned int height); | |
155 | ||
156 | /* | |
157 | * C code or Neon | |
158 | * Converts tiled data to linear | |
159 | * 1. uv of nt12t to uv of yuv420p | |
160 | * | |
161 | * @param u_dst | |
162 | * u address of yuv420p[out] | |
163 | * | |
164 | * @param v_dst | |
165 | * v address of yuv420p[out] | |
166 | * | |
167 | * @param uv_src | |
168 | * uv address of nt12t[in] | |
169 | * | |
170 | * @param yuv420_width | |
171 | * real width of yuv420p[in] | |
172 | * | |
173 | * @param yuv420_height | |
174 | * real height of yuv420p[in] | |
175 | */ | |
176 | void csc_tiled_to_linear_uv_deinterleave( | |
177 | unsigned char *u_dst, | |
178 | unsigned char *v_dst, | |
179 | unsigned char *uv_src, | |
180 | unsigned int width, | |
181 | unsigned int height); | |
182 | ||
183 | /* | |
184 | * Neon only | |
185 | * Converts linear data to tiled | |
186 | * 1. y of yuv420 to y of nv12t | |
187 | * | |
188 | * @param dst | |
189 | * y address of nv12t[out] | |
190 | * | |
191 | * @param src | |
192 | * y address of yuv420[in] | |
193 | * | |
194 | * @param yuv420_width | |
195 | * real width of yuv420[in] | |
196 | * it should be even | |
197 | * | |
198 | * @param yuv420_height | |
199 | * real height of yuv420[in] | |
200 | * it should be even. | |
201 | * | |
202 | */ | |
203 | void csc_linear_to_tiled_y( | |
204 | unsigned char *y_dst, | |
205 | unsigned char *y_src, | |
206 | unsigned int width, | |
207 | unsigned int height); | |
208 | ||
209 | /* | |
210 | * Neon only | |
211 | * Converts and interleaves linear data to tiled | |
212 | * 1. uv of nv12t to uv of yuv420 | |
213 | * | |
214 | * @param dst | |
215 | * uv address of nv12t[out] | |
216 | * | |
217 | * @param src | |
218 | * u address of yuv420[in] | |
219 | * | |
220 | * @param src | |
221 | * v address of yuv420[in] | |
222 | * | |
223 | * @param yuv420_width | |
224 | * real width of yuv420[in] | |
225 | * | |
226 | * @param yuv420_height | |
227 | * real height of yuv420[in] | |
228 | * | |
229 | */ | |
230 | void csc_linear_to_tiled_uv( | |
231 | unsigned char *uv_dst, | |
232 | unsigned char *u_src, | |
233 | unsigned char *v_src, | |
234 | unsigned int width, | |
235 | unsigned int height); | |
236 | ||
237 | /* | |
238 | * C code only | |
239 | * Converts RGB565 to YUV420P | |
240 | * | |
241 | * @param y_dst | |
242 | * Y plane address of YUV420P[out] | |
243 | * | |
244 | * @param u_dst | |
245 | * U plane address of YUV420P[out] | |
246 | * | |
247 | * @param v_dst | |
248 | * V plane address of YUV420P[out] | |
249 | * | |
250 | * @param rgb_src | |
251 | * Address of RGB565[in] | |
252 | * | |
253 | * @param width | |
254 | * Width of RGB565[in] | |
255 | * | |
256 | * @param height | |
257 | * Height of RGB565[in] | |
258 | */ | |
259 | void csc_RGB565_to_YUV420P( | |
260 | unsigned char *y_dst, | |
261 | unsigned char *u_dst, | |
262 | unsigned char *v_dst, | |
263 | unsigned char *rgb_src, | |
264 | int width, | |
265 | int height); | |
266 | ||
267 | /* | |
268 | * C code only | |
269 | * Converts RGB565 to YUV420SP | |
270 | * | |
271 | * @param y_dst | |
272 | * Y plane address of YUV420SP[out] | |
273 | * | |
274 | * @param uv_dst | |
275 | * UV plane address of YUV420SP[out] | |
276 | * | |
277 | * @param rgb_src | |
278 | * Address of RGB565[in] | |
279 | * | |
280 | * @param width | |
281 | * Width of RGB565[in] | |
282 | * | |
283 | * @param height | |
284 | * Height of RGB565[in] | |
285 | */ | |
286 | void csc_RGB565_to_YUV420SP( | |
287 | unsigned char *y_dst, | |
288 | unsigned char *uv_dst, | |
289 | unsigned char *rgb_src, | |
290 | int width, | |
291 | int height); | |
292 | ||
293 | /* | |
294 | * C code only | |
295 | * Converts BGRA8888 to YUV420P | |
296 | * | |
297 | * @param y_dst | |
298 | * Y plane address of YUV420P[out] | |
299 | * | |
300 | * @param u_dst | |
301 | * U plane address of YUV420P[out] | |
302 | * | |
303 | * @param v_dst | |
304 | * V plane address of YUV420P[out] | |
305 | * | |
306 | * @param rgb_src | |
307 | * Address of BGRA8888[in] | |
308 | * | |
309 | * @param width | |
310 | * Width of BGRA8888[in] | |
311 | * | |
312 | * @param height | |
313 | * Height of BGRA8888[in] | |
314 | */ | |
315 | void csc_BGRA8888_to_YUV420P( | |
316 | unsigned char *y_dst, | |
317 | unsigned char *u_dst, | |
318 | unsigned char *v_dst, | |
319 | unsigned char *rgb_src, | |
320 | unsigned int width, | |
321 | unsigned int height); | |
322 | ||
323 | /* | |
324 | * C code or Neon | |
325 | * Converts BGRA8888 to YUV420SP | |
326 | * | |
327 | * @param y_dst | |
328 | * Y plane address of YUV420SP[out] | |
329 | * | |
330 | * @param uv_dst | |
331 | * UV plane address of YUV420SP[out] | |
332 | * | |
333 | * @param rgb_src | |
334 | * Address of BGRA8888[in] | |
335 | * | |
336 | * @param width | |
337 | * Width of BGRA8888[in] | |
338 | * | |
339 | * @param height | |
340 | * Height of BGRA8888[in] | |
341 | */ | |
342 | void csc_BGRA8888_to_YUV420SP( | |
343 | unsigned char *y_dst, | |
344 | unsigned char *uv_dst, | |
345 | unsigned char *rgb_src, | |
346 | unsigned int width, | |
347 | unsigned int height); | |
348 | ||
349 | /* | |
350 | * C code only | |
351 | * Converts RGBA8888 to YUV420P | |
352 | * | |
353 | * @param y_dst | |
354 | * Y plane address of YUV420P[out] | |
355 | * | |
356 | * @param u_dst | |
357 | * U plane address of YUV420P[out] | |
358 | * | |
359 | * @param v_dst | |
360 | * V plane address of YUV420P[out] | |
361 | * | |
362 | * @param rgb_src | |
363 | * Address of RGBA8888[in] | |
364 | * | |
365 | * @param width | |
366 | * Width of RGBA8888[in] | |
367 | * | |
368 | * @param height | |
369 | * Height of RGBA8888[in] | |
370 | */ | |
371 | void csc_RGBA8888_to_YUV420P( | |
372 | unsigned char *y_dst, | |
373 | unsigned char *u_dst, | |
374 | unsigned char *v_dst, | |
375 | unsigned char *rgb_src, | |
376 | unsigned int width, | |
377 | unsigned int height); | |
378 | ||
379 | /* | |
380 | * C code or Neon | |
381 | * Converts RGBA8888 to YUV420SP | |
382 | * | |
383 | * @param y_dst | |
384 | * Y plane address of YUV420SP[out] | |
385 | * | |
386 | * @param uv_dst | |
387 | * UV plane address of YUV420SP[out] | |
388 | * | |
389 | * @param rgb_src | |
390 | * Address of RGBA8888[in] | |
391 | * | |
392 | * @param width | |
393 | * Width of RGBA8888[in] | |
394 | * | |
395 | * @param height | |
396 | * Height of RGBA8888[in] | |
397 | */ | |
398 | void csc_RGBA8888_to_YUV420SP( | |
399 | unsigned char *y_dst, | |
400 | unsigned char *uv_dst, | |
401 | unsigned char *rgb_src, | |
402 | unsigned int width, | |
403 | unsigned int height); | |
404 | ||
405 | #endif /*COLOR_SPACE_CONVERTOR_H_*/ |