• Home
  • History
  • Annotate
  • 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_TYPE;
57  
58  typedef enum _CSC_MEMTYPE {
59      CSC_MEMORY_MMAP = 1,
60      CSC_MEMORY_USERPTR,
61      CSC_MEMORY_OVERLAY,
62      CSC_MEMORY_DMABUF,
63      CSC_MEMORY_MFC,
64  } CSC_MEMTYPE;
65  
66  typedef enum _CSC_HW_ID {
67      CSC_HW_GSC0 = 0,
68      CSC_HW_GSC1,
69      CSC_HW_GSC2,
70      CSC_HW_GSC3,
71      CSC_HW_SC0,
72      CSC_HW_SC1,
73      CSC_HW_SC2,
74      CSC_HW_MAX,
75  } CSC_HW_ID;
76  
77  typedef enum _CSC_PLANE {
78      CSC_Y_PLANE = 0,
79      CSC_RGB_PLANE = 0,
80      CSC_U_PLANE = 1,
81      CSC_UV_PLANE = 1,
82      CSC_V_PLANE = 2
83  } CSC_PLANE;
84  
85  typedef enum _CSC_HW_TYPE {
86      CSC_HW_TYPE_FIMC = 0,
87      CSC_HW_TYPE_GSCALER
88  } CSC_HW_TYPE;
89  
90  typedef enum _CSC_EQ_MODE {
91      CSC_EQ_MODE_USER = 0,
92      CSC_EQ_MODE_AUTO
93  } CSC_EQ_MODE;
94  
95  typedef enum _CSC_EQ_COLORSPACE {
96      CSC_EQ_COLORSPACE_SMPTE170M     = 1,
97      CSC_EQ_COLORSPACE_SMPTE240M     = 2,
98      CSC_EQ_COLORSPACE_REC709        = 3,
99      CSC_EQ_COLORSPACE_BT878         = 4,
100      CSC_EQ_COLORSPACE_470_SYSTEM_M  = 5,
101      CSC_EQ_COLORSPACE_470_SYSTEM_BG = 6,
102      CSC_EQ_COLORSPACE_BT2020        = 10,
103  } CSC_EQ_COLORSPACE;
104  
105  typedef enum _CSC_EQ_RANGE {
106      CSC_EQ_RANGE_NARROW = 0,
107      CSC_EQ_RANGE_FULL
108  } CSC_EQ_RANGE;
109  
110  typedef enum _CSC_HW_FILTER {
111      CSC_FT_NONE = 0,
112      CSC_FT_BLUR,
113      CSC_FT_240,
114      CSC_FT_480,
115      CSC_FT_720,
116      CSC_FT_960,
117      CSC_FT_1080,
118      CSC_FT_MAX
119  } CSC_HW_FILTER;
120  
121  typedef struct _CSC_FORMAT {
122      unsigned int width;
123      unsigned int height;
124      unsigned int crop_left;
125      unsigned int crop_top;
126      unsigned int crop_width;
127      unsigned int crop_height;
128      unsigned int color_format;
129      unsigned int cacheable;
130      unsigned int mode_drm;
131  } CSC_FORMAT;
132  
133  typedef struct _CSC_BUFFER {
134      void *planes[CSC_MAX_PLANES];
135      int mem_type;
136  } CSC_BUFFER;
137  
138  typedef struct _CSC_HW_PROPERTY {
139      int fixed_node;
140      int mode_drm;
141  } CSC_HW_PROPERTY;
142  
143  typedef struct _CSC_HANDLE {
144      CSC_FORMAT      dst_format;
145      CSC_FORMAT      src_format;
146      CSC_BUFFER      dst_buffer;
147      CSC_BUFFER      src_buffer;
148      CSC_METHOD      csc_method;
149      CSC_HW_TYPE     csc_hw_type;
150      void           *csc_hw_handle;
151      CSC_HW_PROPERTY hw_property;
152  
153      /* CSC Equation */
154      CSC_EQ_MODE       csc_mode;
155      CSC_EQ_RANGE      csc_range;
156      CSC_EQ_COLORSPACE colorspace;
157  
158      /* Denoising filter */
159      CSC_HW_FILTER    filter;
160  
161      unsigned int     frame_rate;
162  } CSC_HANDLE;
163  
164  /*
165   * change hal pixel format to omx pixel format
166   *
167   * @param hal_format
168   *   hal pixel format[in]
169   *
170   * @return
171   *   omx pixel format
172   */
173  unsigned int hal_2_omx_pixel_format(
174      unsigned int hal_format);
175  
176  /*
177   * change omx pixel format to hal pixel format
178   *
179   * @param hal_format
180   *   omx pixel format[in]
181   *
182   * @return
183   *   hal pixel format
184   */
185  unsigned int omx_2_hal_pixel_format(
186      unsigned int omx_format);
187  
188  /*
189   * Init CSC handle
190   *
191   * @return
192   *   csc handle
193   */
194  void *csc_init(
195      CSC_METHOD method);
196  
197  /*
198   * Deinit CSC handle
199   *
200   * @param handle
201   *   CSC handle[in]
202   *
203   * @return
204   *   error code
205   */
206  CSC_ERRORCODE csc_deinit(
207      void *handle);
208  
209  /*
210   * get color space converter method
211   *
212   * @param handle
213   *   CSC handle[in]
214   *
215   * @param method
216   *   CSC method[out]
217   *
218   * @return
219   *   error code
220   */
221  CSC_ERRORCODE csc_get_method(
222      void           *handle,
223      CSC_METHOD     *method);
224  
225  /*
226   * set color space converter method
227   *
228   * @param handle
229   *   CSC handle[in]
230   *
231   * @param method
232   *   CSC method[in]
233   *
234   * @return
235   *   error code
236   */
237  CSC_ERRORCODE csc_set_method(
238      void           *handle,
239      CSC_METHOD      method);
240  
241  /*
242   * Set hw property
243   *
244   * @param handle
245   *   CSC handle[in]
246   *
247   * @param property
248   *   csc hw property[in]
249   *
250   * @param value
251   *   csc hw property value[in]
252   *
253   * @return
254   *   csc handle
255   */
256  CSC_ERRORCODE csc_set_hw_property(
257      void                *handle,
258      CSC_HW_PROPERTY_TYPE property,
259      int                  value);
260  
261  /*
262   * Get csc equation property.
263   *
264   * @param handle
265   *   CSC handle[in]
266   *
267   * @param mode
268   *   csc equation mode[out]
269   *
270   * @param colorspace
271   *   csc color space[out]
272   *
273   * @param range
274   *   csc equation range[out]
275   *
276   * @return
277   *   error code
278   */
279  CSC_ERRORCODE csc_get_eq_property(
280      void              *handle,
281      CSC_EQ_MODE       *csc_mode,
282      CSC_EQ_RANGE      *csc_range,
283      CSC_EQ_COLORSPACE *colorspace);
284  
285  /*
286   * Set csc equation property.
287   *
288   * @param handle
289   *   CSC handle[in]
290   *
291   * @param mode
292   *   csc equation mode[in]
293   *
294   * @param colorspace
295   *   csc color space[in]
296   *
297   * @param range
298   *   csc equation range[in]
299   *
300   * @return
301   *   error code
302   */
303  CSC_ERRORCODE csc_set_eq_property(
304      void              *handle,
305      CSC_EQ_MODE        csc_mode,
306      CSC_EQ_RANGE       csc_range,
307      CSC_EQ_COLORSPACE  colorspace);
308  
309  /*
310   * Set csc filter property.
311   *
312   * @param handle
313   *   CSC handle[in]
314   *
315   * @param filter
316   *   csc filter info[in]
317   *
318   * @return
319   *   error code
320   */
321  CSC_ERRORCODE csc_set_filter_property(
322      void              *handle,
323      CSC_HW_FILTER     filter);
324  
325  /*
326   * Set framerate.
327   *
328   * @param handle
329   *   CSC handle[in]
330   *
331   * @param frame_rate
332   *   frame rate[in]
333   *
334   * @return
335   *   error code
336   */
337  CSC_ERRORCODE csc_set_framerate(
338      void              *handle,
339      unsigned int      frame_rate);
340  
341  /*
342   * Get source format.
343   *
344   * @param handle
345   *   CSC handle[in]
346   *
347   * @param width
348   *   address of image width[out]
349   *
350   * @param height
351   *   address of image height[out]
352   *
353   * @param crop_left
354   *   address of image left crop size[out]
355   *
356   * @param crop_top
357   *   address of image top crop size[out]
358   *
359   * @param crop_width
360   *   address of cropped image width[out]
361   *
362   * @param crop_height
363   *   address of cropped image height[out]
364   *
365   * @param color_format
366   *   address of source color format(HAL format)[out]
367   *
368   * @return
369   *   error code
370   */
371  CSC_ERRORCODE csc_get_src_format(
372      void           *handle,
373      unsigned int   *width,
374      unsigned int   *height,
375      unsigned int   *crop_left,
376      unsigned int   *crop_top,
377      unsigned int   *crop_width,
378      unsigned int   *crop_height,
379      unsigned int   *color_format,
380      unsigned int   *cacheable);
381  
382  /*
383   * Set source format.
384   * Don't call each converting time.
385   * Pls call this function as below.
386   *   1. first converting time
387   *   2. format is changed
388   *
389   * @param handle
390   *   CSC handle[in]
391   *
392   * @param width
393   *   image width[in]
394   *
395   * @param height
396   *   image height[in]
397   *
398   * @param crop_left
399   *   image left crop size[in]
400   *
401   * @param crop_top
402   *   image top crop size[in]
403   *
404   * @param crop_width
405   *   cropped image width[in]
406   *
407   * @param crop_height
408   *   cropped image height[in]
409   *
410   * @param color_format
411   *   source color format(HAL format)[in]
412   *
413   * @return
414   *   error code
415   */
416  CSC_ERRORCODE csc_set_src_format(
417      void           *handle,
418      unsigned int    width,
419      unsigned int    height,
420      unsigned int    crop_left,
421      unsigned int    crop_top,
422      unsigned int    crop_width,
423      unsigned int    crop_height,
424      unsigned int    color_format,
425      unsigned int    cacheable);
426  
427  /*
428   * Get destination format.
429   *
430   * @param handle
431   *   CSC handle[in]
432   *
433   * @param width
434   *   address of image width[out]
435   *
436   * @param height
437   *   address of image height[out]
438   *
439   * @param crop_left
440   *   address of image left crop size[out]
441   *
442   * @param crop_top
443   *   address of image top crop size[out]
444   *
445   * @param crop_width
446   *   address of cropped image width[out]
447   *
448   * @param crop_height
449   *   address of cropped image height[out]
450   *
451   * @param color_format
452   *   address of color format(HAL format)[out]
453   *
454   * @return
455   *   error code
456   */
457  CSC_ERRORCODE csc_get_dst_format(
458      void           *handle,
459      unsigned int   *width,
460      unsigned int   *height,
461      unsigned int   *crop_left,
462      unsigned int   *crop_top,
463      unsigned int   *crop_width,
464      unsigned int   *crop_height,
465      unsigned int   *color_format,
466      unsigned int   *cacheable);
467  
468  /*
469   * Set destination format
470   * Don't call each converting time.
471   * Pls call this function as below.
472   *   1. first converting time
473   *   2. format is changed
474   *
475   * @param handle
476   *   CSC handle[in]
477   *
478   * @param width
479   *   image width[in]
480   *
481   * @param height
482   *   image height[in]
483   *
484   * @param crop_left
485   *   image left crop size[in]
486   *
487   * @param crop_top
488   *   image top crop size[in]
489   *
490   * @param crop_width
491   *   cropped image width[in]
492   *
493   * @param crop_height
494   *   cropped image height[in]
495   *
496   * @param color_format
497   *   destination color format(HAL format)[in]
498   *
499   * @return
500   *   error code
501   */
502  CSC_ERRORCODE csc_set_dst_format(
503      void           *handle,
504      unsigned int    width,
505      unsigned int    height,
506      unsigned int    crop_left,
507      unsigned int    crop_top,
508      unsigned int    crop_width,
509      unsigned int    crop_height,
510      unsigned int    color_format,
511      unsigned int    cacheable);
512  
513  /*
514   * Setup source buffer
515   * set_format func should be called before this this func.
516   *
517   * @param handle
518   *   CSC handle[in]
519   *
520   * @param src_buffer
521   *   source buffer pointer array[in]
522   *
523   * @param y
524   *   y or RGB destination pointer[in]
525   *
526   * @param u
527   *   u or uv destination pointer[in]
528   *
529   * @param v
530   *   v or none destination pointer[in]
531   *
532   * @return
533   *   error code
534   */
535  CSC_ERRORCODE csc_set_src_buffer(
536      void *handle,
537      void *addr[CSC_MAX_PLANES],
538      int mem_type);
539  
540  /*
541   * Setup destination buffer
542   *
543   * @param handle
544   *   CSC handle[in]
545   *
546   * @param y
547   *   y or RGB destination pointer[in]
548   *
549   * @param u
550   *   u or uv destination pointer[in]
551   *
552   * @param v
553   *   v or none destination pointer[in]
554   *
555   * @return
556   *   error code
557   */
558  CSC_ERRORCODE csc_set_dst_buffer(
559      void *handle,
560      void *addr[CSC_MAX_PLANES],
561      int mem_type);
562  
563  /*
564   * Convert color space with presetup color format
565   *
566   * @param handle
567   *   CSC handle[in]
568   *
569   * @return
570   *   error code
571   */
572  CSC_ERRORCODE csc_convert(
573      void *handle);
574  
575  CSC_ERRORCODE csc_convert_with_rotation(
576      void *handle, int rotation, int flip_horizontal, int flip_vertical);
577  
578  #ifdef __cplusplus
579  }
580  #endif
581  
582  #endif
583