xref: /rockchip-linux_mpp/mpp/vproc/vdpp/vdpp2.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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