libhwjpeg: resolve compilation errors
[GitHub/LineageOS/android_hardware_samsung_slsi_exynos.git] / include / swconverter.h
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_*/