/* * 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