583 lines
11 KiB
C
583 lines
11 KiB
C
/*
|
|
* 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
|