/* * Copyright 2015 Rockchip Electronics 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. */ #ifndef __IEP_API_H__ #define __IEP_API_H__ #include "rk_type.h" #include "mpp_err.h" #include "iep_common.h" /* * IepCmdParamSetSrc is parameter for: * IEP_CMD_SET_SRC * IEP_CMD_SET_DST * IEP_CMD_SET_DEI_SRC1 * IEP_CMD_SET_DEI_DST1 */ typedef struct IepCmdParamImage_t { IepImg image; } IepCmdParamImage; typedef enum IepDeiMode_e { IEP_DEI_MODE_DISABLE, IEP_DEI_MODE_I2O1, IEP_DEI_MODE_I4O1, IEP_DEI_MODE_I4O2, IEP_DEI_MODE_BYPASS, IEP_DEI_MODE_BUTT, } IepDeiMode; typedef enum IepDeiFldOrder { IEP_DEI_FLD_ORDER_TOP_FIRST, IEP_DEI_FLD_ORDER_BOT_FIRST, IEP_DEI_FLD_ORDER_BUTT, } IepDeiFldOrder; /* IepCmdParamDeiCfg is parameter for IEP_CMD_SET_DEI_CFG */ typedef struct IepCmdParamDeiCfg_t { IepDeiMode dei_mode; IepDeiFldOrder dei_field_order; RK_U32 dei_high_freq_en; RK_U32 dei_high_freq_fct; // [0, 127] RK_U32 dei_ei_mode; // deinterlace edge interpolation 0: disable, 1: enable RK_U32 dei_ei_smooth; // deinterlace edge interpolation for smooth effect 0: disable, 1: enable RK_U32 dei_ei_sel; // deinterlace edge interpolation select RK_U32 dei_ei_radius; // deinterlace edge interpolation radius [0, 3] } IepCmdParamDeiCfg; typedef enum IepVideoMode_e { IEP_VIDEO_MODE_BLACK_SCREEN, IEP_VIDEO_MODE_BLUE_SCREEN, IEP_VIDEO_MODE_COLOR_BAR, IEP_VIDEO_MODE_NORMAL_VIDEO } IepVideoMode; /* IepCmdParamYuvEnhance is parameter for IEP_CMD_SET_YUV_ENHANCE */ typedef struct IepCmdParamYuvEnhance_t { float saturation; // [0, 1.992] float contrast; // [0, 1.992] RK_S8 brightness; // [-32, 31] float hue_angle; // [-30, 30] IepVideoMode video_mode; RK_U8 color_bar_y; // [0, 127] RK_U8 color_bar_u; // [0, 127] RK_U8 color_bar_v; // [0, 127] } IepCmdParamYuvEnhance; typedef enum IepRgbEnhanceMode_e { IEP_RGB_ENHANCE_MODE_NO_OPERATION, IEP_RGB_ENHANCE_MODE_DENOISE, IEP_RGB_ENHANCE_MODE_DETAIL_ENHANCE, IEP_RGB_ENHANCE_MODE_EDGE_ENHANCE } IepRgbEnhanceMode; typedef enum IepRgbEnhanceOrder_e { IEP_RGB_ENHANCE_ORDER_CG_DDE, // CG(Contrast & Gammar) prior to DDE (De-noise, Detail & Edge Enhance) IEP_RGB_ENHANCE_ORDER_DDE_CG // DDE prior to CG } IepRgbEnhanceOrder; /* IepCmdParamRgbEnhance is parameter for IEP_CMD_SET_RGB_ENHANCE */ typedef struct IepCmdParamRgbEnhance { float coe; // [0, 3.96875] IepRgbEnhanceMode mode; RK_U8 cg_en; // sw_rgb_con_gam_en double cg_rr; double cg_rg; double cg_rb; IepRgbEnhanceOrder order; /// more than this value considered as detail, and less than this value considered as noise. RK_S32 threshold; // [0, 255] /// combine the original pixel and enhanced pixel /// if (enh_alpha_num / enh_alpha_base <= 1 ) enh_alpha_base = 8, else enh_alpha_base = 4 /// (1/8 ... 8/8) (5/4 ... 24/4) RK_S32 alpha_num; // [0, 24] RK_S32 alpha_base; // {4, 8} RK_S32 radius; // [1, 4] } IepCmdParamRgbEnhance; typedef enum IepScaleAlg_e { IEP_SCALE_ALG_HERMITE, IEP_SCALE_ALG_SPLINE, IEP_SCALE_ALG_CATROM, IEP_SCALE_ALG_MITCHELL } IepScaleAlg; /* IepCmdParamScale is parameter for IEP_CMD_SET_SCALE */ typedef struct IepCmdParamScale_t { IepScaleAlg scale_alg; } IepCmdParamScale; typedef enum IepColorConvertMode_e { IEP_COLOR_MODE_BT601_L, IEP_COLOR_MODE_BT601_F, IEP_COLOR_MODE_BT709_L, IEP_COLOR_MODE_BT709_F } IepColorConvertMode; /* IepCmdParamColorConvert is parameter for IEP_CMD_SET_COLOR_CONVERT */ typedef struct IepCmdParamColorConvert_t { IepColorConvertMode rgb2yuv_mode; IepColorConvertMode yuv2rgb_mode; RK_U8 rgb2yuv_input_clip; // 0:R/G/B [0, 255], 1:R/G/B [16, 235] RK_U8 yuv2rgb_input_clip; // 0:Y/U/V [0, 255], 1:Y [16, 235] U/V [16, 240] RK_U8 global_alpha_value; // global alpha value for output ARGB RK_U8 dither_up_en; RK_U8 dither_down_en; } IepCmdParamColorConvert; /* IepCap is parameter for IEP_CMD_QUERY_CAP */ typedef struct IepCap_t { RK_U8 scaling_supported; RK_U8 i4_deinterlace_supported; RK_U8 i2_deinterlace_supported; RK_U8 compression_noise_reduction_supported; RK_U8 sampling_noise_reduction_supported; RK_U8 hsb_enhancement_supported; RK_U8 cg_enhancement_supported; RK_U8 direct_path_supported; RK_U16 max_dynamic_width; RK_U16 max_dynamic_height; RK_U16 max_static_width; RK_U16 max_static_height; RK_U8 max_enhance_radius; } IepCap; typedef void* IepCtx; #ifdef __cplusplus extern "C" { #endif MPP_RET iep_init(IepCtx *ctx); MPP_RET iep_deinit(IepCtx ctx); MPP_RET iep_control(IepCtx ctx, IepCmd cmd, void *param); iep_com_ctx* rockchip_iep_api_alloc_ctx(void); void rockchip_iep_api_release_ctx(iep_com_ctx *com_ctx); #ifdef __cplusplus } #endif #endif /* __IEP_API_H__ */