428 lines
8.0 KiB
C
428 lines
8.0 KiB
C
/*
|
|
*
|
|
* Copyright 2012 Samsung Electronics S.LSI Co. LTD
|
|
*
|
|
* 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 exynos_gscaler.h
|
|
* \brief header file for Gscaler HAL
|
|
* \author ShinWon Lee (shinwon.lee@samsung.com)
|
|
* \date 2012/01/09
|
|
*
|
|
* <b>Revision History: </b>
|
|
* - 2012/01/09 : ShinWon Lee(shinwon.lee@samsung.com) \n
|
|
* Create
|
|
*
|
|
* - 2012/02/07 : ShinWon Lee(shinwon.lee@samsung.com) \n
|
|
* Change file name to exynos_gscaler.h
|
|
*
|
|
* - 2012/02/09 : Sangwoo, Parkk(sw5771.park@samsung.com) \n
|
|
* Use Multiple Gscaler by Multiple Process
|
|
*
|
|
* - 2012/02/20 : Sangwoo, Park(sw5771.park@samsung.com) \n
|
|
* Add exynos_gsc_set_rotation() API
|
|
*
|
|
* - 2012/02/20 : ShinWon Lee(shinwon.lee@samsung.com) \n
|
|
* Add size constrain
|
|
*
|
|
*/
|
|
|
|
/*!
|
|
* \defgroup exynos_gscaler
|
|
* \brief API for gscaler
|
|
* \addtogroup Exynos
|
|
*/
|
|
#ifndef EXYNOS_GSCALER_H_
|
|
#define EXYNOS_GSCALER_H_
|
|
|
|
#include <exynos_scaler.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//#define EXYNOS_GSC_TRACE 1
|
|
#ifdef EXYNOS_GSC_TRACE
|
|
#define EXYNOS_GSC_LOG_TAG "Exynos_gscaler"
|
|
#define Exynos_gsc_In() (ALOGD("Exynos_gscaler:: %s In , Line: %d", __FUNCTION__, __LINE__)
|
|
#define Exynos_gsc_Out() (ALOGD("Exynos_gscaler:: %s Out , Line: %d", __FUNCTION__, __LINE__)
|
|
#else
|
|
#define Exynos_gsc_In() ((void *)0)
|
|
#define Exynos_gsc_Out() ((void *)0)
|
|
#endif
|
|
|
|
typedef exynos_sc_img exynos_mpp_img;
|
|
|
|
/*
|
|
* Create libgscaler handle.
|
|
* Gscaler dev_num is dynamically changed.
|
|
*
|
|
* \ingroup exynos_gscaler
|
|
*
|
|
* \return
|
|
* libgscaler handle
|
|
*/
|
|
void *exynos_gsc_create(
|
|
void);
|
|
|
|
/*!
|
|
* Create exclusive libgscaler handle.
|
|
* Other module can't use dev_num of Gscaler.
|
|
*
|
|
* \ingroup exynos_gscaler
|
|
*
|
|
* \param dev_num
|
|
* gscaler dev_num[in]
|
|
* \param gsc_mode
|
|
*It should be set to GSC_M2M_MODE or GSC_OUTPUT_MODE.
|
|
*
|
|
*\param out_mode
|
|
*It should be set to GSC_OUT_FIMD or GSC_OUT_TV.
|
|
*
|
|
* \return
|
|
* libgscaler handle
|
|
*/
|
|
void *exynos_gsc_create_exclusive(
|
|
int dev_num,
|
|
int gsc_mode,
|
|
int out_mode,
|
|
int allow_drm);
|
|
|
|
/*!
|
|
* Destroy libgscaler handle
|
|
*
|
|
* \ingroup exynos_gscaler
|
|
*
|
|
* \param handle
|
|
* libgscaler handle[in]
|
|
*/
|
|
void exynos_gsc_destroy(
|
|
void *handle);
|
|
|
|
/*!
|
|
* Set csc equation property
|
|
*
|
|
* \ingroup exynos_gscaler
|
|
*
|
|
* \param handle
|
|
* libgscaler handle[in]
|
|
*
|
|
* \param eq_auto
|
|
* csc mode (0: user, 1: auto)[in]
|
|
*
|
|
* \param range_full
|
|
* csc range (0: narrow, 1: full)[in]
|
|
*
|
|
* \param v4l2_colorspace
|
|
* ITU_R v4l2 colorspace(1: 601, 3: 709)[in]
|
|
*/
|
|
int exynos_gsc_set_csc_property(
|
|
void *handle,
|
|
unsigned int eq_auto,
|
|
unsigned int range_full,
|
|
unsigned int v4l2_colorspace);
|
|
|
|
/*!
|
|
* Set source format.
|
|
*
|
|
* \ingroup exynos_gscaler
|
|
*
|
|
* \param handle
|
|
* libgscaler 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 v4l2_colorformat
|
|
* color format[in]
|
|
*
|
|
* \param cacheable
|
|
* ccacheable[in]
|
|
*
|
|
* \param mode_drm
|
|
* mode_drm[in]
|
|
*
|
|
* \return
|
|
* error code
|
|
*/
|
|
int exynos_gsc_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 v4l2_colorformat,
|
|
unsigned int cacheable,
|
|
unsigned int mode_drm);
|
|
|
|
/*!
|
|
* Set destination format.
|
|
*
|
|
* \ingroup exynos_gscaler
|
|
*
|
|
* \param handle
|
|
* libgscaler 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 v4l2_colorformat
|
|
* color format[in]
|
|
*
|
|
* \param cacheable
|
|
* ccacheable[in]
|
|
*
|
|
* \param mode_drm
|
|
* mode_drm[in]
|
|
*
|
|
* \return
|
|
* error code
|
|
*/
|
|
int exynos_gsc_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 v4l2_colorformat,
|
|
unsigned int cacheable,
|
|
unsigned int mode_drm);
|
|
|
|
/*!
|
|
* Set rotation.
|
|
*
|
|
* \ingroup exynos_gscaler
|
|
*
|
|
* \param handle
|
|
* libgscaler handle[in]
|
|
*
|
|
* \param rotation
|
|
* image rotation. It should be multiple of 90[in]
|
|
*
|
|
* \param flip_horizontal
|
|
* image flip_horizontal[in]
|
|
*
|
|
* \param flip_vertical
|
|
* image flip_vertical[in]
|
|
*
|
|
* \return
|
|
* error code
|
|
*/
|
|
int exynos_gsc_set_rotation(
|
|
void *handle,
|
|
int rotation,
|
|
int flip_horizontal,
|
|
int flip_vertical);
|
|
|
|
/*!
|
|
* Set source buffer
|
|
*
|
|
* \ingroup exynos_gscaler
|
|
*
|
|
* \param handle
|
|
* libgscaler handle[in]
|
|
*
|
|
* \param addr
|
|
* buffer pointer array[in]
|
|
*
|
|
* \param acquireFenceFd
|
|
* acquire fence fd for the buffer or -1[in]
|
|
*
|
|
* \return
|
|
* error code
|
|
*/
|
|
int exynos_gsc_set_src_addr(
|
|
void *handle,
|
|
void *addr[3],
|
|
int mem_type,
|
|
int acquireFenceFd);
|
|
|
|
/*!
|
|
* Set destination buffer
|
|
*
|
|
* \param handle
|
|
* libgscaler handle[in]
|
|
*
|
|
* \param addr
|
|
* buffer pointer array[in]
|
|
*
|
|
* \param acquireFenceFd
|
|
* acquire fence fd for the buffer or -1[in]
|
|
*
|
|
* \return
|
|
* error code
|
|
*/
|
|
int exynos_gsc_set_dst_addr(
|
|
void *handle,
|
|
void *addr[3],
|
|
int mem_type,
|
|
int acquireFenceFd);
|
|
|
|
/*!
|
|
* Convert color space with presetup color format
|
|
*
|
|
* \ingroup exynos_gscaler
|
|
*
|
|
* \param handle
|
|
* libgscaler handle[in]
|
|
*
|
|
* \return
|
|
* error code
|
|
*/
|
|
int exynos_gsc_convert(
|
|
void *handle);
|
|
|
|
/*
|
|
* API for setting GSC subdev crop
|
|
* Used in OTF mode
|
|
*/
|
|
int exynos_gsc_subdev_s_crop(
|
|
void *handle,
|
|
exynos_mpp_img *src_img,
|
|
exynos_mpp_img *dst_img);
|
|
|
|
/*
|
|
*api for setting the GSC config.
|
|
It configures the GSC for given config
|
|
*/
|
|
int exynos_gsc_config_exclusive(
|
|
void *handle,
|
|
exynos_mpp_img *src_img,
|
|
exynos_mpp_img *dst_img);
|
|
|
|
/*
|
|
*api for GSC-OUT run.
|
|
It queues the srcBuf to GSC and deques a buf from driver.
|
|
It should be called after configuring the GSC.
|
|
*/
|
|
int exynos_gsc_run_exclusive(
|
|
void *handle,
|
|
exynos_mpp_img *src_img,
|
|
exynos_mpp_img *dst_img);
|
|
|
|
/*!
|
|
* Create exclusive libgscaler blend handle.
|
|
* Other module can't use dev_num of Gscaler.
|
|
*
|
|
* \ingroup exynos_gscaler
|
|
*
|
|
* \param dev_num
|
|
* gscaler dev_num[in]
|
|
* \param gsc_mode
|
|
* \return
|
|
* libgscaler handle
|
|
*/
|
|
void *exynos_gsc_create_blend_exclusive(
|
|
int dev_num,
|
|
int gsc_mode,
|
|
int out_mode,
|
|
int allow_drm);
|
|
|
|
/*
|
|
*api for setting the GSC blend config.
|
|
It configures the GSC for given config
|
|
*/
|
|
int exynos_gsc_config_blend_exclusive(
|
|
void *handle,
|
|
exynos_mpp_img *src_img,
|
|
exynos_mpp_img *dst_img,
|
|
struct SrcBlendInfo *srcblendinfo);
|
|
|
|
/*
|
|
* Blocks until the current frame is done processing.
|
|
*/
|
|
int exynos_gsc_wait_frame_done_exclusive
|
|
(void *handle);
|
|
|
|
/*
|
|
*api for GSC stop.
|
|
It stops the GSC OUT streaming.
|
|
*/
|
|
int exynos_gsc_stop_exclusive
|
|
(void *handle);
|
|
|
|
/*
|
|
*api for GSC free_and_close.
|
|
*/
|
|
int exynos_gsc_free_and_close
|
|
(void *handle);
|
|
|
|
enum {
|
|
GSC_M2M_MODE = 0,
|
|
GSC_OUTPUT_MODE,
|
|
GSC_CAPTURE_MODE,
|
|
GSC_RESERVED_MODE,
|
|
};
|
|
|
|
/*flag info */
|
|
enum {
|
|
GSC_DUMMY = 0,
|
|
GSC_OUT_FIMD,
|
|
GSC_OUT_TV,
|
|
GSC_RESERVED,
|
|
};
|
|
|
|
enum {
|
|
GSC_DONE_CNG_CFG = 0,
|
|
GSC_NEED_CNG_CFG,
|
|
};
|
|
|
|
enum {
|
|
GSC_MEM_MMAP = 1,
|
|
GSC_MEM_USERPTR,
|
|
GSC_MEM_OVERLAY,
|
|
GSC_MEM_DMABUF,
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /*EXYNOS_GSCALER_H_*/
|