1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2015 Rockchip Electronics Co. LTD 3*437bfbebSnyanmisaka * 4*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 5*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 6*437bfbebSnyanmisaka * You may obtain a copy of the License at 7*437bfbebSnyanmisaka * 8*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 9*437bfbebSnyanmisaka * 10*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 11*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 12*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 14*437bfbebSnyanmisaka * limitations under the License. 15*437bfbebSnyanmisaka */ 16*437bfbebSnyanmisaka 17*437bfbebSnyanmisaka #ifndef __IEP_API_H__ 18*437bfbebSnyanmisaka #define __IEP_API_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "rk_type.h" 21*437bfbebSnyanmisaka #include "mpp_err.h" 22*437bfbebSnyanmisaka 23*437bfbebSnyanmisaka #include "iep_common.h" 24*437bfbebSnyanmisaka 25*437bfbebSnyanmisaka /* 26*437bfbebSnyanmisaka * IepCmdParamSetSrc is parameter for: 27*437bfbebSnyanmisaka * IEP_CMD_SET_SRC 28*437bfbebSnyanmisaka * IEP_CMD_SET_DST 29*437bfbebSnyanmisaka * IEP_CMD_SET_DEI_SRC1 30*437bfbebSnyanmisaka * IEP_CMD_SET_DEI_DST1 31*437bfbebSnyanmisaka */ 32*437bfbebSnyanmisaka typedef struct IepCmdParamImage_t { 33*437bfbebSnyanmisaka IepImg image; 34*437bfbebSnyanmisaka } IepCmdParamImage; 35*437bfbebSnyanmisaka 36*437bfbebSnyanmisaka typedef enum IepDeiMode_e { 37*437bfbebSnyanmisaka IEP_DEI_MODE_DISABLE, 38*437bfbebSnyanmisaka IEP_DEI_MODE_I2O1, 39*437bfbebSnyanmisaka IEP_DEI_MODE_I4O1, 40*437bfbebSnyanmisaka IEP_DEI_MODE_I4O2, 41*437bfbebSnyanmisaka IEP_DEI_MODE_BYPASS, 42*437bfbebSnyanmisaka IEP_DEI_MODE_BUTT, 43*437bfbebSnyanmisaka } IepDeiMode; 44*437bfbebSnyanmisaka 45*437bfbebSnyanmisaka typedef enum IepDeiFldOrder { 46*437bfbebSnyanmisaka IEP_DEI_FLD_ORDER_TOP_FIRST, 47*437bfbebSnyanmisaka IEP_DEI_FLD_ORDER_BOT_FIRST, 48*437bfbebSnyanmisaka IEP_DEI_FLD_ORDER_BUTT, 49*437bfbebSnyanmisaka } IepDeiFldOrder; 50*437bfbebSnyanmisaka 51*437bfbebSnyanmisaka /* IepCmdParamDeiCfg is parameter for IEP_CMD_SET_DEI_CFG */ 52*437bfbebSnyanmisaka typedef struct IepCmdParamDeiCfg_t { 53*437bfbebSnyanmisaka IepDeiMode dei_mode; 54*437bfbebSnyanmisaka IepDeiFldOrder dei_field_order; 55*437bfbebSnyanmisaka 56*437bfbebSnyanmisaka RK_U32 dei_high_freq_en; 57*437bfbebSnyanmisaka RK_U32 dei_high_freq_fct; // [0, 127] 58*437bfbebSnyanmisaka 59*437bfbebSnyanmisaka RK_U32 dei_ei_mode; // deinterlace edge interpolation 0: disable, 1: enable 60*437bfbebSnyanmisaka RK_U32 dei_ei_smooth; // deinterlace edge interpolation for smooth effect 0: disable, 1: enable 61*437bfbebSnyanmisaka RK_U32 dei_ei_sel; // deinterlace edge interpolation select 62*437bfbebSnyanmisaka RK_U32 dei_ei_radius; // deinterlace edge interpolation radius [0, 3] 63*437bfbebSnyanmisaka } IepCmdParamDeiCfg; 64*437bfbebSnyanmisaka 65*437bfbebSnyanmisaka typedef enum IepVideoMode_e { 66*437bfbebSnyanmisaka IEP_VIDEO_MODE_BLACK_SCREEN, 67*437bfbebSnyanmisaka IEP_VIDEO_MODE_BLUE_SCREEN, 68*437bfbebSnyanmisaka IEP_VIDEO_MODE_COLOR_BAR, 69*437bfbebSnyanmisaka IEP_VIDEO_MODE_NORMAL_VIDEO 70*437bfbebSnyanmisaka } IepVideoMode; 71*437bfbebSnyanmisaka 72*437bfbebSnyanmisaka /* IepCmdParamYuvEnhance is parameter for IEP_CMD_SET_YUV_ENHANCE */ 73*437bfbebSnyanmisaka typedef struct IepCmdParamYuvEnhance_t { 74*437bfbebSnyanmisaka float saturation; // [0, 1.992] 75*437bfbebSnyanmisaka float contrast; // [0, 1.992] 76*437bfbebSnyanmisaka RK_S8 brightness; // [-32, 31] 77*437bfbebSnyanmisaka float hue_angle; // [-30, 30] 78*437bfbebSnyanmisaka IepVideoMode video_mode; 79*437bfbebSnyanmisaka RK_U8 color_bar_y; // [0, 127] 80*437bfbebSnyanmisaka RK_U8 color_bar_u; // [0, 127] 81*437bfbebSnyanmisaka RK_U8 color_bar_v; // [0, 127] 82*437bfbebSnyanmisaka } IepCmdParamYuvEnhance; 83*437bfbebSnyanmisaka 84*437bfbebSnyanmisaka typedef enum IepRgbEnhanceMode_e { 85*437bfbebSnyanmisaka IEP_RGB_ENHANCE_MODE_NO_OPERATION, 86*437bfbebSnyanmisaka IEP_RGB_ENHANCE_MODE_DENOISE, 87*437bfbebSnyanmisaka IEP_RGB_ENHANCE_MODE_DETAIL_ENHANCE, 88*437bfbebSnyanmisaka IEP_RGB_ENHANCE_MODE_EDGE_ENHANCE 89*437bfbebSnyanmisaka } IepRgbEnhanceMode; 90*437bfbebSnyanmisaka 91*437bfbebSnyanmisaka typedef enum IepRgbEnhanceOrder_e { 92*437bfbebSnyanmisaka IEP_RGB_ENHANCE_ORDER_CG_DDE, // CG(Contrast & Gammar) prior to DDE (De-noise, Detail & Edge Enhance) 93*437bfbebSnyanmisaka IEP_RGB_ENHANCE_ORDER_DDE_CG // DDE prior to CG 94*437bfbebSnyanmisaka } IepRgbEnhanceOrder; 95*437bfbebSnyanmisaka 96*437bfbebSnyanmisaka /* IepCmdParamRgbEnhance is parameter for IEP_CMD_SET_RGB_ENHANCE */ 97*437bfbebSnyanmisaka typedef struct IepCmdParamRgbEnhance { 98*437bfbebSnyanmisaka float coe; // [0, 3.96875] 99*437bfbebSnyanmisaka IepRgbEnhanceMode mode; 100*437bfbebSnyanmisaka RK_U8 cg_en; // sw_rgb_con_gam_en 101*437bfbebSnyanmisaka double cg_rr; 102*437bfbebSnyanmisaka double cg_rg; 103*437bfbebSnyanmisaka double cg_rb; 104*437bfbebSnyanmisaka IepRgbEnhanceOrder order; 105*437bfbebSnyanmisaka 106*437bfbebSnyanmisaka /// more than this value considered as detail, and less than this value considered as noise. 107*437bfbebSnyanmisaka RK_S32 threshold; // [0, 255] 108*437bfbebSnyanmisaka 109*437bfbebSnyanmisaka /// combine the original pixel and enhanced pixel 110*437bfbebSnyanmisaka /// if (enh_alpha_num / enh_alpha_base <= 1 ) enh_alpha_base = 8, else enh_alpha_base = 4 111*437bfbebSnyanmisaka /// (1/8 ... 8/8) (5/4 ... 24/4) 112*437bfbebSnyanmisaka RK_S32 alpha_num; // [0, 24] 113*437bfbebSnyanmisaka RK_S32 alpha_base; // {4, 8} 114*437bfbebSnyanmisaka RK_S32 radius; // [1, 4] 115*437bfbebSnyanmisaka } IepCmdParamRgbEnhance; 116*437bfbebSnyanmisaka 117*437bfbebSnyanmisaka typedef enum IepScaleAlg_e { 118*437bfbebSnyanmisaka IEP_SCALE_ALG_HERMITE, 119*437bfbebSnyanmisaka IEP_SCALE_ALG_SPLINE, 120*437bfbebSnyanmisaka IEP_SCALE_ALG_CATROM, 121*437bfbebSnyanmisaka IEP_SCALE_ALG_MITCHELL 122*437bfbebSnyanmisaka } IepScaleAlg; 123*437bfbebSnyanmisaka 124*437bfbebSnyanmisaka /* IepCmdParamScale is parameter for IEP_CMD_SET_SCALE */ 125*437bfbebSnyanmisaka typedef struct IepCmdParamScale_t { 126*437bfbebSnyanmisaka IepScaleAlg scale_alg; 127*437bfbebSnyanmisaka } IepCmdParamScale; 128*437bfbebSnyanmisaka 129*437bfbebSnyanmisaka typedef enum IepColorConvertMode_e { 130*437bfbebSnyanmisaka IEP_COLOR_MODE_BT601_L, 131*437bfbebSnyanmisaka IEP_COLOR_MODE_BT601_F, 132*437bfbebSnyanmisaka IEP_COLOR_MODE_BT709_L, 133*437bfbebSnyanmisaka IEP_COLOR_MODE_BT709_F 134*437bfbebSnyanmisaka } IepColorConvertMode; 135*437bfbebSnyanmisaka 136*437bfbebSnyanmisaka /* IepCmdParamColorConvert is parameter for IEP_CMD_SET_COLOR_CONVERT */ 137*437bfbebSnyanmisaka typedef struct IepCmdParamColorConvert_t { 138*437bfbebSnyanmisaka IepColorConvertMode rgb2yuv_mode; 139*437bfbebSnyanmisaka IepColorConvertMode yuv2rgb_mode; 140*437bfbebSnyanmisaka RK_U8 rgb2yuv_input_clip; // 0:R/G/B [0, 255], 1:R/G/B [16, 235] 141*437bfbebSnyanmisaka RK_U8 yuv2rgb_input_clip; // 0:Y/U/V [0, 255], 1:Y [16, 235] U/V [16, 240] 142*437bfbebSnyanmisaka RK_U8 global_alpha_value; // global alpha value for output ARGB 143*437bfbebSnyanmisaka RK_U8 dither_up_en; 144*437bfbebSnyanmisaka RK_U8 dither_down_en; 145*437bfbebSnyanmisaka } IepCmdParamColorConvert; 146*437bfbebSnyanmisaka 147*437bfbebSnyanmisaka /* IepCap is parameter for IEP_CMD_QUERY_CAP */ 148*437bfbebSnyanmisaka typedef struct IepCap_t { 149*437bfbebSnyanmisaka RK_U8 scaling_supported; 150*437bfbebSnyanmisaka RK_U8 i4_deinterlace_supported; 151*437bfbebSnyanmisaka RK_U8 i2_deinterlace_supported; 152*437bfbebSnyanmisaka RK_U8 compression_noise_reduction_supported; 153*437bfbebSnyanmisaka RK_U8 sampling_noise_reduction_supported; 154*437bfbebSnyanmisaka RK_U8 hsb_enhancement_supported; 155*437bfbebSnyanmisaka RK_U8 cg_enhancement_supported; 156*437bfbebSnyanmisaka RK_U8 direct_path_supported; 157*437bfbebSnyanmisaka RK_U16 max_dynamic_width; 158*437bfbebSnyanmisaka RK_U16 max_dynamic_height; 159*437bfbebSnyanmisaka RK_U16 max_static_width; 160*437bfbebSnyanmisaka RK_U16 max_static_height; 161*437bfbebSnyanmisaka RK_U8 max_enhance_radius; 162*437bfbebSnyanmisaka } IepCap; 163*437bfbebSnyanmisaka 164*437bfbebSnyanmisaka typedef void* IepCtx; 165*437bfbebSnyanmisaka 166*437bfbebSnyanmisaka #ifdef __cplusplus 167*437bfbebSnyanmisaka extern "C" { 168*437bfbebSnyanmisaka #endif 169*437bfbebSnyanmisaka 170*437bfbebSnyanmisaka MPP_RET iep_init(IepCtx *ctx); 171*437bfbebSnyanmisaka MPP_RET iep_deinit(IepCtx ctx); 172*437bfbebSnyanmisaka MPP_RET iep_control(IepCtx ctx, IepCmd cmd, void *param); 173*437bfbebSnyanmisaka 174*437bfbebSnyanmisaka iep_com_ctx* rockchip_iep_api_alloc_ctx(void); 175*437bfbebSnyanmisaka void rockchip_iep_api_release_ctx(iep_com_ctx *com_ctx); 176*437bfbebSnyanmisaka 177*437bfbebSnyanmisaka #ifdef __cplusplus 178*437bfbebSnyanmisaka } 179*437bfbebSnyanmisaka #endif 180*437bfbebSnyanmisaka 181*437bfbebSnyanmisaka #endif /* __IEP_API_H__ */ 182