am 88c954f6: remove misleading error messages: free only allocated ion buffers on...
[GitHub/LineageOS/android_hardware_samsung_slsi_exynos5.git] / libcsc / csc.h
CommitLineData
47bd9530
JC
1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/*
18 * @file csc.h
19 *
20 * @brief color space convertion abstract header
21 *
22 * @author Pyoungjae Jung (pjet.jung@samsung.com)
23 *
24 * @version 1.0
25 *
26 * @history
27 * 2011.12.27 : Create
28 */
29
30#ifndef CSC_H
31#define CSC_H
32
33#ifdef __cplusplus
34extern "C" {
35#endif
36
f77a2a9d
SK
37#define CSC_MAX_PLANES 3
38
47bd9530
JC
39typedef enum _CSC_ERRORCODE {
40 CSC_ErrorNone = 0,
41 CSC_Error,
42 CSC_ErrorNotInit,
43 CSC_ErrorInvalidAddress,
44 CSC_ErrorUnsupportFormat,
45 CSC_ErrorNotImplemented
46} CSC_ERRORCODE;
47
48typedef enum _CSC_METHOD {
49 CSC_METHOD_SW = 0,
3b540849 50 CSC_METHOD_HW
47bd9530
JC
51} CSC_METHOD;
52
3b540849
JC
53typedef enum _CSC_HW_PROPERTY_TYPE {
54 CSC_HW_PROPERTY_FIXED_NODE = 0,
55 CSC_HW_PROPERTY_MODE_DRM,
c3fb36ed 56 CSC_HW_PROPERTY_HW_TYPE,
3b540849
JC
57} CSC_HW_PROPERTY_TYPE;
58
c3fb36ed
GH
59typedef enum _CSC_HW_TYPE {
60 CSC_HW_TYPE_NONE = 0,
61 CSC_HW_TYPE_FIMC,
62 CSC_HW_TYPE_GSCALER,
63 CSC_HW_TYPE_G2D,
64} CSC_HW_TYPE;
65
47bd9530
JC
66/*
67 * change hal pixel format to omx pixel format
68 *
69 * @param hal_format
70 * hal pixel format[in]
71 *
72 * @return
73 * omx pixel format
74 */
75unsigned int hal_2_omx_pixel_format(
76 unsigned int hal_format);
77
78/*
79 * change omx pixel format to hal pixel format
80 *
81 * @param hal_format
82 * omx pixel format[in]
83 *
84 * @return
85 * hal pixel format
86 */
87unsigned int omx_2_hal_pixel_format(
88 unsigned int omx_format);
89
8f10f92b
GH
90/*
91 * change hal pixel format to g2d color format
92 *
93 * @param hal_format
94 * hal pixel format[in]
95 *
96 * @return
97 * g2d color format
98 */
99unsigned int hal_2_g2d_color_format(unsigned int hal_format);
100
101/*
102 * change hal pixel format to g2d pixel order
103 *
104 * @param hal_format
105 * hal pixel format[in]
106 *
107 * @return
108 * g2d pixel order
109 */
110unsigned int hal_2_g2d_pixel_order(unsigned int hal_format);
111
112/*
113 * change hal pixel format to g2d "bpp" (actual bpp for RGB formats, 8 bpp for
114 * YUV formats)
115 *
116 * @param hal_format
117 * hal pixel format[in]
118 *
119 * @return
120 * g2d bpp
121 */
122size_t hal_2_g2d_bpp(unsigned int hal_format);
123
47bd9530
JC
124/*
125 * Init CSC handle
126 *
127 * @return
128 * csc handle
129 */
130void *csc_init(
3b540849 131 CSC_METHOD method);
47bd9530
JC
132
133/*
134 * Deinit CSC handle
135 *
136 * @param handle
137 * CSC handle[in]
138 *
139 * @return
140 * error code
141 */
142CSC_ERRORCODE csc_deinit(
143 void *handle);
144
145/*
146 * get color space converter method
147 *
148 * @param handle
149 * CSC handle[in]
150 *
151 * @param method
152 * CSC method[out]
153 *
154 * @return
155 * error code
156 */
157CSC_ERRORCODE csc_get_method(
158 void *handle,
159 CSC_METHOD *method);
160
4f74fdad
GH
161/*
162 * set color space converter method
163 *
164 * @param handle
165 * CSC handle[in]
166 *
167 * @param method
168 * CSC method[in]
169 *
170 * @return
171 * error code
172 */
173CSC_ERRORCODE csc_set_method(
174 void *handle,
175 CSC_METHOD method);
176
3b540849
JC
177/*
178 * Set hw property
179 *
180 * @param handle
181 * CSC handle[in]
182 *
183 * @param property
184 * csc hw property[in]
185 *
186 * @param value
187 * csc hw property value[in]
188 *
189 * @return
190 * csc handle
191 */
192CSC_ERRORCODE csc_set_hw_property(
193 void *handle,
194 CSC_HW_PROPERTY_TYPE property,
195 int value);
196
47bd9530
JC
197/*
198 * Get source format.
199 *
200 * @param handle
201 * CSC handle[in]
202 *
203 * @param width
204 * address of image width[out]
205 *
206 * @param height
207 * address of image height[out]
208 *
209 * @param crop_left
210 * address of image left crop size[out]
211 *
212 * @param crop_top
213 * address of image top crop size[out]
214 *
215 * @param crop_width
216 * address of cropped image width[out]
217 *
218 * @param crop_height
219 * address of cropped image height[out]
220 *
221 * @param color_format
222 * address of source color format(HAL format)[out]
223 *
224 * @return
225 * error code
226 */
227CSC_ERRORCODE csc_get_src_format(
228 void *handle,
229 unsigned int *width,
230 unsigned int *height,
231 unsigned int *crop_left,
232 unsigned int *crop_top,
233 unsigned int *crop_width,
234 unsigned int *crop_height,
235 unsigned int *color_format,
236 unsigned int *cacheable);
237
238/*
239 * Set source format.
240 * Don't call each converting time.
241 * Pls call this function as below.
242 * 1. first converting time
243 * 2. format is changed
244 *
245 * @param handle
246 * CSC handle[in]
247 *
248 * @param width
249 * image width[in]
250 *
251 * @param height
252 * image height[in]
253 *
254 * @param crop_left
255 * image left crop size[in]
256 *
257 * @param crop_top
258 * image top crop size[in]
259 *
260 * @param crop_width
261 * cropped image width[in]
262 *
263 * @param crop_height
264 * cropped image height[in]
265 *
266 * @param color_format
267 * source color format(HAL format)[in]
268 *
269 * @return
270 * error code
271 */
272CSC_ERRORCODE csc_set_src_format(
273 void *handle,
274 unsigned int width,
275 unsigned int height,
276 unsigned int crop_left,
277 unsigned int crop_top,
278 unsigned int crop_width,
279 unsigned int crop_height,
280 unsigned int color_format,
281 unsigned int cacheable);
282
283/*
284 * Get destination format.
285 *
286 * @param handle
287 * CSC handle[in]
288 *
289 * @param width
290 * address of image width[out]
291 *
292 * @param height
293 * address of image height[out]
294 *
295 * @param crop_left
296 * address of image left crop size[out]
297 *
298 * @param crop_top
299 * address of image top crop size[out]
300 *
301 * @param crop_width
302 * address of cropped image width[out]
303 *
304 * @param crop_height
305 * address of cropped image height[out]
306 *
307 * @param color_format
308 * address of color format(HAL format)[out]
309 *
310 * @return
311 * error code
312 */
313CSC_ERRORCODE csc_get_dst_format(
314 void *handle,
315 unsigned int *width,
316 unsigned int *height,
317 unsigned int *crop_left,
318 unsigned int *crop_top,
319 unsigned int *crop_width,
320 unsigned int *crop_height,
321 unsigned int *color_format,
322 unsigned int *cacheable);
323
324/*
325 * Set destination format
326 * Don't call each converting time.
327 * Pls call this function as below.
328 * 1. first converting time
329 * 2. format is changed
330 *
331 * @param handle
332 * CSC handle[in]
333 *
334 * @param width
335 * image width[in]
336 *
337 * @param height
338 * image height[in]
339 *
340 * @param crop_left
341 * image left crop size[in]
342 *
343 * @param crop_top
344 * image top crop size[in]
345 *
346 * @param crop_width
347 * cropped image width[in]
348 *
349 * @param crop_height
350 * cropped image height[in]
351 *
352 * @param color_format
353 * destination color format(HAL format)[in]
354 *
355 * @return
356 * error code
357 */
358CSC_ERRORCODE csc_set_dst_format(
359 void *handle,
360 unsigned int width,
361 unsigned int height,
362 unsigned int crop_left,
363 unsigned int crop_top,
364 unsigned int crop_width,
365 unsigned int crop_height,
366 unsigned int color_format,
367 unsigned int cacheable);
368
369/*
370 * Setup source buffer
371 * set_format func should be called before this this func.
372 *
373 * @param handle
374 * CSC handle[in]
375 *
376 * @param src_buffer
377 * source buffer pointer array[in]
378 *
379 * @param y
380 * y or RGB destination pointer[in]
381 *
382 * @param u
383 * u or uv destination pointer[in]
384 *
385 * @param v
386 * v or none destination pointer[in]
387 *
388 * @return
389 * error code
390 */
391CSC_ERRORCODE csc_set_src_buffer(
f77a2a9d
SK
392 void *handle,
393 void *addr[CSC_MAX_PLANES]);
47bd9530
JC
394
395/*
396 * Setup destination buffer
397 *
398 * @param handle
399 * CSC handle[in]
400 *
401 * @param y
402 * y or RGB destination pointer[in]
403 *
404 * @param u
405 * u or uv destination pointer[in]
406 *
407 * @param v
408 * v or none destination pointer[in]
409 *
410 * @return
411 * error code
412 */
413CSC_ERRORCODE csc_set_dst_buffer(
f77a2a9d
SK
414 void *handle,
415 void *addr[CSC_MAX_PLANES]);
47bd9530
JC
416
417/*
418 * Convert color space with presetup color format
419 *
420 * @param handle
421 * CSC handle[in]
422 *
423 * @return
424 * error code
425 */
426CSC_ERRORCODE csc_convert(
427 void *handle);
428
429#ifdef __cplusplus
430}
431#endif
432
433#endif