blob: 98b4652cffc5abfa0ee1ca61831a390fbf131b1e [file] [log] [blame]
/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* @file csc.h
*
* @brief color space convertion abstract header
*
* @author Pyoungjae Jung (pjet.jung@samsung.com)
*
* @version 1.0
*
* @history
* 2011.12.27 : Create
*/
#ifndef CSC_H
#define CSC_H
#ifdef __cplusplus
extern "C" {
#endif
#define CSC_MAX_PLANES 3
typedef enum _CSC_ERRORCODE {
CSC_ErrorNone = 0,
CSC_Error,
CSC_ErrorNotInit,
CSC_ErrorInvalidAddress,
CSC_ErrorUnsupportFormat,
CSC_ErrorNotImplemented
} CSC_ERRORCODE;
typedef enum _CSC_METHOD {
CSC_METHOD_SW = 0,
CSC_METHOD_HW
} CSC_METHOD;
typedef enum _CSC_HW_PROPERTY_TYPE {
CSC_HW_PROPERTY_FIXED_NODE = 0,
CSC_HW_PROPERTY_MODE_DRM,
} CSC_HW_PROPERTY_TYPE;
typedef enum _CSC_MEMTYPE {
CSC_MEMORY_MMAP = 1,
CSC_MEMORY_USERPTR,
CSC_MEMORY_OVERLAY,
CSC_MEMORY_DMABUF,
CSC_MEMORY_MFC,
} CSC_MEMTYPE;
typedef enum _CSC_HW_ID {
CSC_HW_GSC0 = 0,
CSC_HW_GSC1,
CSC_HW_GSC2,
CSC_HW_GSC3,
CSC_HW_SC0,
CSC_HW_SC1,
CSC_HW_SC2,
CSC_HW_MAX,
} CSC_HW_ID;
typedef enum _CSC_PLANE {
CSC_Y_PLANE = 0,
CSC_RGB_PLANE = 0,
CSC_U_PLANE = 1,
CSC_UV_PLANE = 1,
CSC_V_PLANE = 2
} CSC_PLANE;
typedef enum _CSC_HW_TYPE {
CSC_HW_TYPE_FIMC = 0,
CSC_HW_TYPE_GSCALER
} CSC_HW_TYPE;
typedef enum _CSC_EQ_MODE {
CSC_EQ_MODE_USER = 0,
CSC_EQ_MODE_AUTO
} CSC_EQ_MODE;
typedef enum _CSC_EQ_COLORSPACE {
CSC_EQ_COLORSPACE_SMPTE170M = 1,
CSC_EQ_COLORSPACE_SMPTE240M = 2,
CSC_EQ_COLORSPACE_REC709 = 3,
CSC_EQ_COLORSPACE_BT878 = 4,
CSC_EQ_COLORSPACE_470_SYSTEM_M = 5,
CSC_EQ_COLORSPACE_470_SYSTEM_BG = 6,
CSC_EQ_COLORSPACE_BT2020 = 10,
} CSC_EQ_COLORSPACE;
typedef enum _CSC_EQ_RANGE {
CSC_EQ_RANGE_NARROW = 0,
CSC_EQ_RANGE_FULL
} CSC_EQ_RANGE;
typedef enum _CSC_HW_FILTER {
CSC_FT_NONE = 0,
CSC_FT_BLUR,
CSC_FT_240,
CSC_FT_480,
CSC_FT_720,
CSC_FT_960,
CSC_FT_1080,
CSC_FT_MAX
} CSC_HW_FILTER;
typedef struct _CSC_FORMAT {
unsigned int width;
unsigned int height;
unsigned int crop_left;
unsigned int crop_top;
unsigned int crop_width;
unsigned int crop_height;
unsigned int color_format;
unsigned int cacheable;
unsigned int mode_drm;
} CSC_FORMAT;
typedef struct _CSC_BUFFER {
void *planes[CSC_MAX_PLANES];
int mem_type;
} CSC_BUFFER;
typedef struct _CSC_HW_PROPERTY {
int fixed_node;
int mode_drm;
} CSC_HW_PROPERTY;
typedef struct _CSC_HANDLE {
CSC_FORMAT dst_format;
CSC_FORMAT src_format;
CSC_BUFFER dst_buffer;
CSC_BUFFER src_buffer;
CSC_METHOD csc_method;
CSC_HW_TYPE csc_hw_type;
void *csc_hw_handle;
CSC_HW_PROPERTY hw_property;
/* CSC Equation */
CSC_EQ_MODE csc_mode;
CSC_EQ_RANGE csc_range;
CSC_EQ_COLORSPACE colorspace;
/* Denoising filter */
CSC_HW_FILTER filter;
unsigned int frame_rate;
} CSC_HANDLE;
/*
* change hal pixel format to omx pixel format
*
* @param hal_format
* hal pixel format[in]
*
* @return
* omx pixel format
*/
unsigned int hal_2_omx_pixel_format(
unsigned int hal_format);
/*
* change omx pixel format to hal pixel format
*
* @param hal_format
* omx pixel format[in]
*
* @return
* hal pixel format
*/
unsigned int omx_2_hal_pixel_format(
unsigned int omx_format);
/*
* Init CSC handle
*
* @return
* csc handle
*/
void *csc_init(
CSC_METHOD method);
/*
* Deinit CSC handle
*
* @param handle
* CSC handle[in]
*
* @return
* error code
*/
CSC_ERRORCODE csc_deinit(
void *handle);
/*
* get color space converter method
*
* @param handle
* CSC handle[in]
*
* @param method
* CSC method[out]
*
* @return
* error code
*/
CSC_ERRORCODE csc_get_method(
void *handle,
CSC_METHOD *method);
/*
* set color space converter method
*
* @param handle
* CSC handle[in]
*
* @param method
* CSC method[in]
*
* @return
* error code
*/
CSC_ERRORCODE csc_set_method(
void *handle,
CSC_METHOD method);
/*
* Set hw property
*
* @param handle
* CSC handle[in]
*
* @param property
* csc hw property[in]
*
* @param value
* csc hw property value[in]
*
* @return
* csc handle
*/
CSC_ERRORCODE csc_set_hw_property(
void *handle,
CSC_HW_PROPERTY_TYPE property,
int value);
/*
* Get csc equation property.
*
* @param handle
* CSC handle[in]
*
* @param mode
* csc equation mode[out]
*
* @param colorspace
* csc color space[out]
*
* @param range
* csc equation range[out]
*
* @return
* error code
*/
CSC_ERRORCODE csc_get_eq_property(
void *handle,
CSC_EQ_MODE *csc_mode,
CSC_EQ_RANGE *csc_range,
CSC_EQ_COLORSPACE *colorspace);
/*
* Set csc equation property.
*
* @param handle
* CSC handle[in]
*
* @param mode
* csc equation mode[in]
*
* @param colorspace
* csc color space[in]
*
* @param range
* csc equation range[in]
*
* @return
* error code
*/
CSC_ERRORCODE csc_set_eq_property(
void *handle,
CSC_EQ_MODE csc_mode,
CSC_EQ_RANGE csc_range,
CSC_EQ_COLORSPACE colorspace);
/*
* Set csc filter property.
*
* @param handle
* CSC handle[in]
*
* @param filter
* csc filter info[in]
*
* @return
* error code
*/
CSC_ERRORCODE csc_set_filter_property(
void *handle,
CSC_HW_FILTER filter);
/*
* Set framerate.
*
* @param handle
* CSC handle[in]
*
* @param frame_rate
* frame rate[in]
*
* @return
* error code
*/
CSC_ERRORCODE csc_set_framerate(
void *handle,
unsigned int frame_rate);
/*
* Get source format.
*
* @param handle
* CSC handle[in]
*
* @param width
* address of image width[out]
*
* @param height
* address of image height[out]
*
* @param crop_left
* address of image left crop size[out]
*
* @param crop_top
* address of image top crop size[out]
*
* @param crop_width
* address of cropped image width[out]
*
* @param crop_height
* address of cropped image height[out]
*
* @param color_format
* address of source color format(HAL format)[out]
*
* @return
* error code
*/
CSC_ERRORCODE csc_get_src_format(
void *handle,
unsigned int *width,
unsigned int *height,
unsigned int *crop_left,
unsigned int *crop_top,
unsigned int *crop_width,
unsigned int *crop_height,
unsigned int *color_format,
unsigned int *cacheable);
/*
* Set source format.
* Don't call each converting time.
* Pls call this function as below.
* 1. first converting time
* 2. format is changed
*
* @param handle
* CSC handle[in]
*
* @param width
* image width[in]
*
* @param height
* image height[in]
*
* @param crop_left
* image left crop size[in]
*
* @param crop_top
* image top crop size[in]
*
* @param crop_width
* cropped image width[in]
*
* @param crop_height
* cropped image height[in]
*
* @param color_format
* source color format(HAL format)[in]
*
* @return
* error code
*/
CSC_ERRORCODE csc_set_src_format(
void *handle,
unsigned int width,
unsigned int height,
unsigned int crop_left,
unsigned int crop_top,
unsigned int crop_width,
unsigned int crop_height,
unsigned int color_format,
unsigned int cacheable);
/*
* Get destination format.
*
* @param handle
* CSC handle[in]
*
* @param width
* address of image width[out]
*
* @param height
* address of image height[out]
*
* @param crop_left
* address of image left crop size[out]
*
* @param crop_top
* address of image top crop size[out]
*
* @param crop_width
* address of cropped image width[out]
*
* @param crop_height
* address of cropped image height[out]
*
* @param color_format
* address of color format(HAL format)[out]
*
* @return
* error code
*/
CSC_ERRORCODE csc_get_dst_format(
void *handle,
unsigned int *width,
unsigned int *height,
unsigned int *crop_left,
unsigned int *crop_top,
unsigned int *crop_width,
unsigned int *crop_height,
unsigned int *color_format,
unsigned int *cacheable);
/*
* Set destination format
* Don't call each converting time.
* Pls call this function as below.
* 1. first converting time
* 2. format is changed
*
* @param handle
* CSC handle[in]
*
* @param width
* image width[in]
*
* @param height
* image height[in]
*
* @param crop_left
* image left crop size[in]
*
* @param crop_top
* image top crop size[in]
*
* @param crop_width
* cropped image width[in]
*
* @param crop_height
* cropped image height[in]
*
* @param color_format
* destination color format(HAL format)[in]
*
* @return
* error code
*/
CSC_ERRORCODE csc_set_dst_format(
void *handle,
unsigned int width,
unsigned int height,
unsigned int crop_left,
unsigned int crop_top,
unsigned int crop_width,
unsigned int crop_height,
unsigned int color_format,
unsigned int cacheable);
/*
* Setup source buffer
* set_format func should be called before this this func.
*
* @param handle
* CSC handle[in]
*
* @param src_buffer
* source buffer pointer array[in]
*
* @param y
* y or RGB destination pointer[in]
*
* @param u
* u or uv destination pointer[in]
*
* @param v
* v or none destination pointer[in]
*
* @return
* error code
*/
CSC_ERRORCODE csc_set_src_buffer(
void *handle,
void *addr[CSC_MAX_PLANES],
int mem_type);
/*
* Setup destination buffer
*
* @param handle
* CSC handle[in]
*
* @param y
* y or RGB destination pointer[in]
*
* @param u
* u or uv destination pointer[in]
*
* @param v
* v or none destination pointer[in]
*
* @return
* error code
*/
CSC_ERRORCODE csc_set_dst_buffer(
void *handle,
void *addr[CSC_MAX_PLANES],
int mem_type);
/*
* Convert color space with presetup color format
*
* @param handle
* CSC handle[in]
*
* @return
* error code
*/
CSC_ERRORCODE csc_convert(
void *handle);
CSC_ERRORCODE csc_convert_with_rotation(
void *handle, int rotation, int flip_horizontal, int flip_vertical);
#ifdef __cplusplus
}
#endif
#endif