/*
* 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_HW_TYPE,
} CSC_HW_PROPERTY_TYPE;
typedef enum _CSC_HW_TYPE {
CSC_HW_TYPE_NONE = 0,
CSC_HW_TYPE_FIMC,
CSC_HW_TYPE_GSCALER,
CSC_HW_TYPE_G2D,
} CSC_HW_TYPE;
/*
* 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);
/*
* change hal pixel format to g2d color format
*
* @param hal_format
* hal pixel format[in]
*
* @return
* g2d color format
*/
unsigned int hal_2_g2d_color_format(unsigned int hal_format);
/*
* change hal pixel format to g2d pixel order
*
* @param hal_format
* hal pixel format[in]
*
* @return
* g2d pixel order
*/
unsigned int hal_2_g2d_pixel_order(unsigned int hal_format);
/*
* change hal pixel format to g2d "bpp" (actual bpp for RGB formats, 8 bpp for
* YUV formats)
*
* @param hal_format
* hal pixel format[in]
*
* @return
* g2d bpp
*/
size_t hal_2_g2d_bpp(unsigned int hal_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 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]);
/*
* 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]);
/*
* Convert color space with presetup color format
*
* @param handle
* CSC handle[in]
*
* @return
* error code
*/
CSC_ERRORCODE csc_convert(
void *handle);
#ifdef __cplusplus
}
#endif
#endif