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