1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */ 2*437bfbebSnyanmisaka /* 3*437bfbebSnyanmisaka * Copyright (c) 2024 Rockchip Electronics Co., Ltd. 4*437bfbebSnyanmisaka */ 5*437bfbebSnyanmisaka 6*437bfbebSnyanmisaka #ifndef __VDPP2_H__ 7*437bfbebSnyanmisaka #define __VDPP2_H__ 8*437bfbebSnyanmisaka 9*437bfbebSnyanmisaka #include "vdpp2_reg.h" 10*437bfbebSnyanmisaka #include "vdpp_common.h" 11*437bfbebSnyanmisaka 12*437bfbebSnyanmisaka /* vdpp log marco */ 13*437bfbebSnyanmisaka #define VDPP2_DBG_TRACE (0x00000001) 14*437bfbebSnyanmisaka #define VDPP2_DBG_INT (0x00000002) 15*437bfbebSnyanmisaka #define VDPP2_DBG_CHECK (0x00000004) 16*437bfbebSnyanmisaka 17*437bfbebSnyanmisaka extern RK_U32 vdpp2_debug; 18*437bfbebSnyanmisaka 19*437bfbebSnyanmisaka #define VDPP2_DBG(level, fmt, ...)\ 20*437bfbebSnyanmisaka do {\ 21*437bfbebSnyanmisaka if (level & vdpp2_debug)\ 22*437bfbebSnyanmisaka { mpp_log(fmt, ## __VA_ARGS__); }\ 23*437bfbebSnyanmisaka } while (0) 24*437bfbebSnyanmisaka 25*437bfbebSnyanmisaka typedef struct ShpParams_t { 26*437bfbebSnyanmisaka RK_S32 sharp_enable; 27*437bfbebSnyanmisaka RK_S32 sharp_coloradj_bypass_en; 28*437bfbebSnyanmisaka 29*437bfbebSnyanmisaka RK_S32 lti_h_enable; 30*437bfbebSnyanmisaka RK_S32 lti_h_radius; 31*437bfbebSnyanmisaka RK_S32 lti_h_slope; 32*437bfbebSnyanmisaka RK_S32 lti_h_thresold; 33*437bfbebSnyanmisaka RK_S32 lti_h_gain; 34*437bfbebSnyanmisaka RK_S32 lti_h_noise_thr_pos; 35*437bfbebSnyanmisaka RK_S32 lti_h_noise_thr_neg; 36*437bfbebSnyanmisaka 37*437bfbebSnyanmisaka RK_S32 lti_v_enable; 38*437bfbebSnyanmisaka RK_S32 lti_v_radius; 39*437bfbebSnyanmisaka RK_S32 lti_v_slope; 40*437bfbebSnyanmisaka RK_S32 lti_v_thresold; 41*437bfbebSnyanmisaka RK_S32 lti_v_gain; 42*437bfbebSnyanmisaka RK_S32 lti_v_noise_thr_pos; 43*437bfbebSnyanmisaka RK_S32 lti_v_noise_thr_neg; 44*437bfbebSnyanmisaka 45*437bfbebSnyanmisaka RK_S32 cti_h_enable; 46*437bfbebSnyanmisaka RK_S32 cti_h_radius; 47*437bfbebSnyanmisaka RK_S32 cti_h_slope; 48*437bfbebSnyanmisaka RK_S32 cti_h_thresold; 49*437bfbebSnyanmisaka RK_S32 cti_h_gain; 50*437bfbebSnyanmisaka RK_S32 cti_h_noise_thr_pos; 51*437bfbebSnyanmisaka RK_S32 cti_h_noise_thr_neg; 52*437bfbebSnyanmisaka 53*437bfbebSnyanmisaka RK_S32 peaking_enable; 54*437bfbebSnyanmisaka RK_S32 peaking_gain; 55*437bfbebSnyanmisaka 56*437bfbebSnyanmisaka RK_S32 peaking_coring_enable; 57*437bfbebSnyanmisaka RK_S32 peaking_coring_zero[8]; 58*437bfbebSnyanmisaka RK_S32 peaking_coring_thr[8]; 59*437bfbebSnyanmisaka RK_S32 peaking_coring_ratio[8]; 60*437bfbebSnyanmisaka 61*437bfbebSnyanmisaka RK_S32 peaking_gain_enable; 62*437bfbebSnyanmisaka RK_S32 peaking_gain_pos[8]; 63*437bfbebSnyanmisaka RK_S32 peaking_gain_neg[8]; 64*437bfbebSnyanmisaka 65*437bfbebSnyanmisaka RK_S32 peaking_limit_ctrl_enable; 66*437bfbebSnyanmisaka RK_S32 peaking_limit_ctrl_pos0[8]; 67*437bfbebSnyanmisaka RK_S32 peaking_limit_ctrl_pos1[8]; 68*437bfbebSnyanmisaka RK_S32 peaking_limit_ctrl_neg0[8]; 69*437bfbebSnyanmisaka RK_S32 peaking_limit_ctrl_neg1[8]; 70*437bfbebSnyanmisaka RK_S32 peaking_limit_ctrl_ratio[8]; 71*437bfbebSnyanmisaka RK_S32 peaking_limit_ctrl_bnd_pos[8]; 72*437bfbebSnyanmisaka RK_S32 peaking_limit_ctrl_bnd_neg[8]; 73*437bfbebSnyanmisaka 74*437bfbebSnyanmisaka RK_S32 peaking_edge_ctrl_enable; 75*437bfbebSnyanmisaka RK_S32 peaking_edge_ctrl_non_dir_thr; 76*437bfbebSnyanmisaka RK_S32 peaking_edge_ctrl_dir_cmp_ratio; 77*437bfbebSnyanmisaka RK_S32 peaking_edge_ctrl_non_dir_wgt_offset; 78*437bfbebSnyanmisaka RK_S32 peaking_edge_ctrl_non_dir_wgt_ratio; 79*437bfbebSnyanmisaka RK_S32 peaking_edge_ctrl_dir_cnt_thr; 80*437bfbebSnyanmisaka RK_S32 peaking_edge_ctrl_dir_cnt_avg; 81*437bfbebSnyanmisaka RK_S32 peaking_edge_ctrl_dir_cnt_offset; 82*437bfbebSnyanmisaka RK_S32 peaking_edge_ctrl_diag_dir_thr; 83*437bfbebSnyanmisaka RK_S32 peaking_edge_ctrl_diag_adj_gain_tab[8]; 84*437bfbebSnyanmisaka 85*437bfbebSnyanmisaka RK_S32 peaking_estc_enable; 86*437bfbebSnyanmisaka RK_S32 peaking_estc_delta_offset_h; 87*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_over_h; 88*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_under_h; 89*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_over_unlimit_h; 90*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_under_unlimit_h; 91*437bfbebSnyanmisaka RK_S32 peaking_estc_delta_offset_v; 92*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_over_v; 93*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_under_v; 94*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_over_unlimit_v; 95*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_under_unlimit_v; 96*437bfbebSnyanmisaka RK_S32 peaking_estc_delta_offset_d0; 97*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_over_d0; 98*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_under_d0; 99*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_over_unlimit_d0; 100*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_under_unlimit_d0; 101*437bfbebSnyanmisaka RK_S32 peaking_estc_delta_offset_d1; 102*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_over_d1; 103*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_under_d1; 104*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_over_unlimit_d1; 105*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_under_unlimit_d1; 106*437bfbebSnyanmisaka RK_S32 peaking_estc_delta_offset_non; 107*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_over_non; 108*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_under_non; 109*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_over_unlimit_non; 110*437bfbebSnyanmisaka RK_S32 peaking_estc_alpha_under_unlimit_non; 111*437bfbebSnyanmisaka RK_S32 peaking_filter_cfg_diag_enh_coef; 112*437bfbebSnyanmisaka 113*437bfbebSnyanmisaka RK_S32 peaking_filt_core_H0[6]; 114*437bfbebSnyanmisaka RK_S32 peaking_filt_core_H1[6]; 115*437bfbebSnyanmisaka RK_S32 peaking_filt_core_H2[6]; 116*437bfbebSnyanmisaka RK_S32 peaking_filt_core_H3[6]; 117*437bfbebSnyanmisaka RK_S32 peaking_filt_core_V0[3]; 118*437bfbebSnyanmisaka RK_S32 peaking_filt_core_V1[3]; 119*437bfbebSnyanmisaka RK_S32 peaking_filt_core_V2[3]; 120*437bfbebSnyanmisaka RK_S32 peaking_filt_core_USM[3]; 121*437bfbebSnyanmisaka 122*437bfbebSnyanmisaka RK_S32 shootctrl_enable; 123*437bfbebSnyanmisaka RK_S32 shootctrl_filter_radius; 124*437bfbebSnyanmisaka RK_S32 shootctrl_delta_offset; 125*437bfbebSnyanmisaka RK_S32 shootctrl_alpha_over; 126*437bfbebSnyanmisaka RK_S32 shootctrl_alpha_under; 127*437bfbebSnyanmisaka RK_S32 shootctrl_alpha_over_unlimit; 128*437bfbebSnyanmisaka RK_S32 shootctrl_alpha_under_unlimit; 129*437bfbebSnyanmisaka 130*437bfbebSnyanmisaka RK_S32 global_gain_enable; 131*437bfbebSnyanmisaka RK_S32 global_gain_lum_mode; 132*437bfbebSnyanmisaka RK_S32 global_gain_lum_grd[6]; 133*437bfbebSnyanmisaka RK_S32 global_gain_lum_val[6]; 134*437bfbebSnyanmisaka RK_S32 global_gain_adp_grd[6]; 135*437bfbebSnyanmisaka RK_S32 global_gain_adp_val[6]; 136*437bfbebSnyanmisaka RK_S32 global_gain_var_grd[6]; 137*437bfbebSnyanmisaka RK_S32 global_gain_var_val[6]; 138*437bfbebSnyanmisaka 139*437bfbebSnyanmisaka RK_S32 color_ctrl_enable; 140*437bfbebSnyanmisaka 141*437bfbebSnyanmisaka RK_S32 color_ctrl_p0_scaling_coef; 142*437bfbebSnyanmisaka RK_S32 color_ctrl_p0_point_u; 143*437bfbebSnyanmisaka RK_S32 color_ctrl_p0_point_v; 144*437bfbebSnyanmisaka RK_S32 color_ctrl_p0_roll_tab[16]; 145*437bfbebSnyanmisaka 146*437bfbebSnyanmisaka RK_S32 color_ctrl_p1_scaling_coef; 147*437bfbebSnyanmisaka RK_S32 color_ctrl_p1_point_u; 148*437bfbebSnyanmisaka RK_S32 color_ctrl_p1_point_v; 149*437bfbebSnyanmisaka RK_S32 color_ctrl_p1_roll_tab[16]; 150*437bfbebSnyanmisaka 151*437bfbebSnyanmisaka RK_S32 color_ctrl_p2_scaling_coef; 152*437bfbebSnyanmisaka RK_S32 color_ctrl_p2_point_u; 153*437bfbebSnyanmisaka RK_S32 color_ctrl_p2_point_v; 154*437bfbebSnyanmisaka RK_S32 color_ctrl_p2_roll_tab[16]; 155*437bfbebSnyanmisaka 156*437bfbebSnyanmisaka RK_S32 color_ctrl_p3_scaling_coef; 157*437bfbebSnyanmisaka RK_S32 color_ctrl_p3_point_u; 158*437bfbebSnyanmisaka RK_S32 color_ctrl_p3_point_v; 159*437bfbebSnyanmisaka RK_S32 color_ctrl_p3_roll_tab[16]; 160*437bfbebSnyanmisaka 161*437bfbebSnyanmisaka RK_S32 tex_adj_enable; 162*437bfbebSnyanmisaka RK_S32 tex_adj_y_mode_select; 163*437bfbebSnyanmisaka RK_S32 tex_adj_mode_select; 164*437bfbebSnyanmisaka RK_S32 tex_adj_grd[6]; 165*437bfbebSnyanmisaka RK_S32 tex_adj_val[6]; 166*437bfbebSnyanmisaka } ShpParams; 167*437bfbebSnyanmisaka 168*437bfbebSnyanmisaka typedef struct EsParams_t { 169*437bfbebSnyanmisaka RK_U32 es_bEnabledES; 170*437bfbebSnyanmisaka RK_U32 es_iAngleDelta; 171*437bfbebSnyanmisaka RK_U32 es_iAngleDeltaExtra; 172*437bfbebSnyanmisaka RK_U32 es_iGradNoDirTh; 173*437bfbebSnyanmisaka RK_U32 es_iGradFlatTh; 174*437bfbebSnyanmisaka RK_U32 es_iWgtGain; 175*437bfbebSnyanmisaka RK_U32 es_iWgtDecay; 176*437bfbebSnyanmisaka RK_U32 es_iLowConfTh; 177*437bfbebSnyanmisaka RK_U32 es_iLowConfRatio; 178*437bfbebSnyanmisaka RK_U32 es_iConfCntTh; 179*437bfbebSnyanmisaka RK_U32 es_iWgtLocalTh; 180*437bfbebSnyanmisaka RK_U32 es_iK1; 181*437bfbebSnyanmisaka RK_U32 es_iK2; 182*437bfbebSnyanmisaka RK_U32 es_iDeltaLimit; 183*437bfbebSnyanmisaka RK_U32 es_iDiff2conf_lut_x[9]; 184*437bfbebSnyanmisaka RK_U32 es_iDiff2conf_lut_y[9]; 185*437bfbebSnyanmisaka RK_U32 es_bEndpointCheckEnable; 186*437bfbebSnyanmisaka RK_U32 es_tan_hi_th; 187*437bfbebSnyanmisaka RK_U32 es_tan_lo_th; 188*437bfbebSnyanmisaka } EsParams; 189*437bfbebSnyanmisaka 190*437bfbebSnyanmisaka struct vdpp2_params { 191*437bfbebSnyanmisaka RK_U32 src_fmt; 192*437bfbebSnyanmisaka RK_U32 src_yuv_swap; 193*437bfbebSnyanmisaka RK_U32 dst_fmt; 194*437bfbebSnyanmisaka RK_U32 dst_yuv_swap; 195*437bfbebSnyanmisaka RK_U32 src_width; 196*437bfbebSnyanmisaka RK_U32 src_height; 197*437bfbebSnyanmisaka RK_U32 src_width_vir; 198*437bfbebSnyanmisaka RK_U32 src_height_vir; 199*437bfbebSnyanmisaka RK_U32 dst_width; 200*437bfbebSnyanmisaka RK_U32 dst_height; 201*437bfbebSnyanmisaka RK_U32 dst_width_vir; 202*437bfbebSnyanmisaka RK_U32 dst_height_vir; 203*437bfbebSnyanmisaka RK_U32 yuv_out_diff; 204*437bfbebSnyanmisaka RK_U32 dst_c_width; 205*437bfbebSnyanmisaka RK_U32 dst_c_height; 206*437bfbebSnyanmisaka RK_U32 dst_c_width_vir; 207*437bfbebSnyanmisaka RK_U32 dst_c_height_vir; 208*437bfbebSnyanmisaka RK_U32 working_mode; // 2 - VDPP, 3 - DCI HIST 209*437bfbebSnyanmisaka 210*437bfbebSnyanmisaka struct vdpp_addr src; // src frame 211*437bfbebSnyanmisaka struct vdpp_addr dst; // dst frame 212*437bfbebSnyanmisaka struct vdpp_addr dst_c; // dst chroma 213*437bfbebSnyanmisaka 214*437bfbebSnyanmisaka RK_S32 hist; // dci hist fd 215*437bfbebSnyanmisaka 216*437bfbebSnyanmisaka struct dmsr_params dmsr_params; 217*437bfbebSnyanmisaka struct zme_params zme_params; 218*437bfbebSnyanmisaka /* vdpp2 new feature */ 219*437bfbebSnyanmisaka EsParams es_params; 220*437bfbebSnyanmisaka ShpParams shp_params; 221*437bfbebSnyanmisaka 222*437bfbebSnyanmisaka RK_U32 hist_cnt_en; 223*437bfbebSnyanmisaka RK_U32 dci_hsd_mode; 224*437bfbebSnyanmisaka RK_U32 dci_vsd_mode; 225*437bfbebSnyanmisaka RK_U32 dci_yrgb_gather_num; 226*437bfbebSnyanmisaka RK_U32 dci_yrgb_gather_en; 227*437bfbebSnyanmisaka RK_S32 dci_format; 228*437bfbebSnyanmisaka RK_S32 dci_alpha_swap; 229*437bfbebSnyanmisaka RK_S32 dci_rbuv_swap; 230*437bfbebSnyanmisaka RK_S32 dci_csc_range; 231*437bfbebSnyanmisaka }; 232*437bfbebSnyanmisaka 233*437bfbebSnyanmisaka struct vdpp2_api_ctx { 234*437bfbebSnyanmisaka RK_S32 fd; 235*437bfbebSnyanmisaka struct vdpp2_params params; 236*437bfbebSnyanmisaka struct vdpp2_reg reg; 237*437bfbebSnyanmisaka struct dmsr_reg dmsr; 238*437bfbebSnyanmisaka struct zme_reg zme; 239*437bfbebSnyanmisaka }; 240*437bfbebSnyanmisaka 241*437bfbebSnyanmisaka #ifdef __cplusplus 242*437bfbebSnyanmisaka extern "C" { 243*437bfbebSnyanmisaka #endif 244*437bfbebSnyanmisaka 245*437bfbebSnyanmisaka MPP_RET vdpp2_init(VdppCtx *ictx); 246*437bfbebSnyanmisaka MPP_RET vdpp2_deinit(VdppCtx ictx); 247*437bfbebSnyanmisaka MPP_RET vdpp2_control(VdppCtx ictx, VdppCmd cmd, void *iparam); 248*437bfbebSnyanmisaka RK_S32 vdpp2_check_cap(VdppCtx ictx); 249*437bfbebSnyanmisaka 250*437bfbebSnyanmisaka #ifdef __cplusplus 251*437bfbebSnyanmisaka } 252*437bfbebSnyanmisaka #endif 253*437bfbebSnyanmisaka 254*437bfbebSnyanmisaka #endif 255