xref: /rockchip-linux_mpp/mpp/vproc/iep2/iep2.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2020 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 __IEP2_H__
18*437bfbebSnyanmisaka #define __IEP2_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include <stdint.h>
21*437bfbebSnyanmisaka 
22*437bfbebSnyanmisaka #include "rk_type.h"
23*437bfbebSnyanmisaka 
24*437bfbebSnyanmisaka #include "iep2_pd.h"
25*437bfbebSnyanmisaka #include "iep2_ff.h"
26*437bfbebSnyanmisaka 
27*437bfbebSnyanmisaka #define TILE_W                  16
28*437bfbebSnyanmisaka #define TILE_H                  4
29*437bfbebSnyanmisaka #define MVL                     28
30*437bfbebSnyanmisaka #define MVR                     27
31*437bfbebSnyanmisaka 
32*437bfbebSnyanmisaka #define TEST_DBG                //printf
33*437bfbebSnyanmisaka #define FLOOR(v, r)             (((v) / (r)) * (r))
34*437bfbebSnyanmisaka 
35*437bfbebSnyanmisaka #define RKCLIP(a, min, max)     ((a < min) ? (min) : ((a > max) ? max : a))
36*437bfbebSnyanmisaka #define RKABS(a)                (RK_U32)(((a) >= 0) ? (a) : -(a))
37*437bfbebSnyanmisaka #define RKMIN(a, b)             (((a) < (b)) ? (a) : (b))
38*437bfbebSnyanmisaka #define RKMAX(a, b)             (((a) > (b)) ? (a) : (b))
39*437bfbebSnyanmisaka 
40*437bfbebSnyanmisaka struct iep2_addr {
41*437bfbebSnyanmisaka     uint32_t y;
42*437bfbebSnyanmisaka     uint32_t cbcr;
43*437bfbebSnyanmisaka     uint32_t cr;
44*437bfbebSnyanmisaka };
45*437bfbebSnyanmisaka 
46*437bfbebSnyanmisaka struct iep2_params {
47*437bfbebSnyanmisaka     uint32_t src_fmt;
48*437bfbebSnyanmisaka     uint32_t src_yuv_swap;
49*437bfbebSnyanmisaka     uint32_t dst_fmt;
50*437bfbebSnyanmisaka     uint32_t dst_yuv_swap;
51*437bfbebSnyanmisaka     uint32_t tile_cols;
52*437bfbebSnyanmisaka     uint32_t tile_rows;
53*437bfbebSnyanmisaka     uint32_t src_y_stride;
54*437bfbebSnyanmisaka     uint32_t src_uv_stride;
55*437bfbebSnyanmisaka     uint32_t dst_y_stride;
56*437bfbebSnyanmisaka 
57*437bfbebSnyanmisaka     struct iep2_addr src[3]; // current, next, previous
58*437bfbebSnyanmisaka     struct iep2_addr dst[2]; // top/bottom field reconstructed frame
59*437bfbebSnyanmisaka     uint32_t mv_addr;
60*437bfbebSnyanmisaka     uint32_t md_addr;
61*437bfbebSnyanmisaka 
62*437bfbebSnyanmisaka     uint32_t dil_mode;
63*437bfbebSnyanmisaka     uint32_t dil_out_mode;
64*437bfbebSnyanmisaka     uint32_t dil_field_order;
65*437bfbebSnyanmisaka 
66*437bfbebSnyanmisaka     uint32_t md_theta;
67*437bfbebSnyanmisaka     uint32_t md_r;
68*437bfbebSnyanmisaka     uint32_t md_lambda;
69*437bfbebSnyanmisaka 
70*437bfbebSnyanmisaka     uint32_t dect_resi_thr;
71*437bfbebSnyanmisaka     uint32_t osd_area_num;
72*437bfbebSnyanmisaka     uint32_t osd_gradh_thr;
73*437bfbebSnyanmisaka     uint32_t osd_gradv_thr;
74*437bfbebSnyanmisaka 
75*437bfbebSnyanmisaka     uint32_t osd_pos_limit_en;
76*437bfbebSnyanmisaka     uint32_t osd_pos_limit_num;
77*437bfbebSnyanmisaka 
78*437bfbebSnyanmisaka     uint32_t osd_limit_area[2];
79*437bfbebSnyanmisaka 
80*437bfbebSnyanmisaka     uint32_t osd_line_num;
81*437bfbebSnyanmisaka     uint32_t osd_pec_thr;
82*437bfbebSnyanmisaka 
83*437bfbebSnyanmisaka     uint32_t osd_x_sta[8];
84*437bfbebSnyanmisaka     uint32_t osd_x_end[8];
85*437bfbebSnyanmisaka     uint32_t osd_y_sta[8];
86*437bfbebSnyanmisaka     uint32_t osd_y_end[8];
87*437bfbebSnyanmisaka 
88*437bfbebSnyanmisaka     uint32_t me_pena;
89*437bfbebSnyanmisaka     uint32_t mv_bonus;
90*437bfbebSnyanmisaka     uint32_t mv_similar_thr;
91*437bfbebSnyanmisaka     uint32_t mv_similar_num_thr0;
92*437bfbebSnyanmisaka     int32_t me_thr_offset;
93*437bfbebSnyanmisaka 
94*437bfbebSnyanmisaka     uint32_t mv_left_limit;
95*437bfbebSnyanmisaka     uint32_t mv_right_limit;
96*437bfbebSnyanmisaka 
97*437bfbebSnyanmisaka     int8_t mv_tru_list[8];
98*437bfbebSnyanmisaka     uint32_t mv_tru_vld[8];
99*437bfbebSnyanmisaka 
100*437bfbebSnyanmisaka     uint32_t eedi_thr0;
101*437bfbebSnyanmisaka 
102*437bfbebSnyanmisaka     uint32_t ble_backtoma_num;
103*437bfbebSnyanmisaka 
104*437bfbebSnyanmisaka     uint32_t comb_cnt_thr;
105*437bfbebSnyanmisaka     uint32_t comb_feature_thr;
106*437bfbebSnyanmisaka     uint32_t comb_t_thr;
107*437bfbebSnyanmisaka     uint32_t comb_osd_vld[8];
108*437bfbebSnyanmisaka 
109*437bfbebSnyanmisaka     uint32_t mtn_en;
110*437bfbebSnyanmisaka     uint32_t mtn_tab[16];
111*437bfbebSnyanmisaka 
112*437bfbebSnyanmisaka     uint32_t pd_mode;
113*437bfbebSnyanmisaka 
114*437bfbebSnyanmisaka     uint32_t roi_en;
115*437bfbebSnyanmisaka     uint32_t roi_layer_num;
116*437bfbebSnyanmisaka     uint32_t roi_mode[8];
117*437bfbebSnyanmisaka     uint32_t xsta[8];
118*437bfbebSnyanmisaka     uint32_t xend[8];
119*437bfbebSnyanmisaka     uint32_t ysta[8];
120*437bfbebSnyanmisaka     uint32_t yend[8];
121*437bfbebSnyanmisaka };
122*437bfbebSnyanmisaka 
123*437bfbebSnyanmisaka struct iep2_output {
124*437bfbebSnyanmisaka     uint32_t mv_hist[MVL + MVR + 1];
125*437bfbebSnyanmisaka     uint32_t dect_pd_tcnt;
126*437bfbebSnyanmisaka     uint32_t dect_pd_bcnt;
127*437bfbebSnyanmisaka     uint32_t dect_ff_cur_tcnt;
128*437bfbebSnyanmisaka     uint32_t dect_ff_cur_bcnt;
129*437bfbebSnyanmisaka     uint32_t dect_ff_nxt_tcnt;
130*437bfbebSnyanmisaka     uint32_t dect_ff_nxt_bcnt;
131*437bfbebSnyanmisaka     uint32_t dect_ff_ble_tcnt;
132*437bfbebSnyanmisaka     uint32_t dect_ff_ble_bcnt;
133*437bfbebSnyanmisaka     uint32_t dect_ff_nz;
134*437bfbebSnyanmisaka     uint32_t dect_ff_comb_f;
135*437bfbebSnyanmisaka     uint32_t dect_osd_cnt;
136*437bfbebSnyanmisaka     uint32_t out_comb_cnt;
137*437bfbebSnyanmisaka     uint32_t out_osd_comb_cnt;
138*437bfbebSnyanmisaka     uint32_t ff_gradt_tcnt;
139*437bfbebSnyanmisaka     uint32_t ff_gradt_bcnt;
140*437bfbebSnyanmisaka     uint32_t x_sta[8];
141*437bfbebSnyanmisaka     uint32_t x_end[8];
142*437bfbebSnyanmisaka     uint32_t y_sta[8];
143*437bfbebSnyanmisaka     uint32_t y_end[8];
144*437bfbebSnyanmisaka };
145*437bfbebSnyanmisaka 
146*437bfbebSnyanmisaka struct iep2_api_ctx {
147*437bfbebSnyanmisaka     struct iep2_params params;
148*437bfbebSnyanmisaka     struct iep2_output output;
149*437bfbebSnyanmisaka     /* output */
150*437bfbebSnyanmisaka     struct iep2_ff_info ff_inf;
151*437bfbebSnyanmisaka     struct iep2_pd_info pd_inf;
152*437bfbebSnyanmisaka 
153*437bfbebSnyanmisaka     MppBufferGroup memGroup;
154*437bfbebSnyanmisaka     MppBuffer mv_buf;
155*437bfbebSnyanmisaka     MppBuffer md_buf;
156*437bfbebSnyanmisaka     int first_cfg;
157*437bfbebSnyanmisaka     int fd;
158*437bfbebSnyanmisaka };
159*437bfbebSnyanmisaka 
160*437bfbebSnyanmisaka #endif
161