• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
34 extern "C" {
35 #endif
36 
37 #define CSC_MAX_PLANES 3
38 
39 typedef 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 
48 typedef enum _CSC_METHOD {
49     CSC_METHOD_SW = 0,
50     CSC_METHOD_HW
51 } CSC_METHOD;
52 
53 typedef enum _CSC_HW_PROPERTY_TYPE {
54     CSC_HW_PROPERTY_FIXED_NODE = 0,
55     CSC_HW_PROPERTY_MODE_DRM,
56     CSC_HW_PROPERTY_HW_TYPE,
57 } CSC_HW_PROPERTY_TYPE;
58 
59 typedef 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 
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  */
75 unsigned 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  */
87 unsigned int omx_2_hal_pixel_format(
88     unsigned int omx_format);
89 
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  */
99 unsigned 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  */
110 unsigned 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  */
122 size_t hal_2_g2d_bpp(unsigned int hal_format);
123 
124 /*
125  * Init CSC handle
126  *
127  * @return
128  *   csc handle
129  */
130 void *csc_init(
131     CSC_METHOD method);
132 
133 /*
134  * Deinit CSC handle
135  *
136  * @param handle
137  *   CSC handle[in]
138  *
139  * @return
140  *   error code
141  */
142 CSC_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  */
157 CSC_ERRORCODE csc_get_method(
158     void           *handle,
159     CSC_METHOD     *method);
160 
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  */
173 CSC_ERRORCODE csc_set_method(
174     void           *handle,
175     CSC_METHOD     method);
176 
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  */
192 CSC_ERRORCODE csc_set_hw_property(
193     void                *handle,
194     CSC_HW_PROPERTY_TYPE property,
195     int                  value);
196 
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  */
227 CSC_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  */
272 CSC_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  */
313 CSC_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  */
358 CSC_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  */
391 CSC_ERRORCODE csc_set_src_buffer(
392     void *handle,
393     void *addr[CSC_MAX_PLANES]);
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  */
413 CSC_ERRORCODE csc_set_dst_buffer(
414     void *handle,
415     void *addr[CSC_MAX_PLANES]);
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  */
426 CSC_ERRORCODE csc_convert(
427     void *handle);
428 
429 #ifdef __cplusplus
430 }
431 #endif
432 
433 #endif
434