/* * Copyright 2020 Rockchip Electronics Co. LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __IEP2_H__ #define __IEP2_H__ #include #include "rk_type.h" #include "iep2_pd.h" #include "iep2_ff.h" #define TILE_W 16 #define TILE_H 4 #define MVL 28 #define MVR 27 #define TEST_DBG //printf #define FLOOR(v, r) (((v) / (r)) * (r)) #define RKCLIP(a, min, max) ((a < min) ? (min) : ((a > max) ? max : a)) #define RKABS(a) (RK_U32)(((a) >= 0) ? (a) : -(a)) #define RKMIN(a, b) (((a) < (b)) ? (a) : (b)) #define RKMAX(a, b) (((a) > (b)) ? (a) : (b)) struct iep2_addr { uint32_t y; uint32_t cbcr; uint32_t cr; }; struct iep2_params { uint32_t src_fmt; uint32_t src_yuv_swap; uint32_t dst_fmt; uint32_t dst_yuv_swap; uint32_t tile_cols; uint32_t tile_rows; uint32_t src_y_stride; uint32_t src_uv_stride; uint32_t dst_y_stride; struct iep2_addr src[3]; // current, next, previous struct iep2_addr dst[2]; // top/bottom field reconstructed frame uint32_t mv_addr; uint32_t md_addr; uint32_t dil_mode; uint32_t dil_out_mode; uint32_t dil_field_order; uint32_t md_theta; uint32_t md_r; uint32_t md_lambda; uint32_t dect_resi_thr; uint32_t osd_area_num; uint32_t osd_gradh_thr; uint32_t osd_gradv_thr; uint32_t osd_pos_limit_en; uint32_t osd_pos_limit_num; uint32_t osd_limit_area[2]; uint32_t osd_line_num; uint32_t osd_pec_thr; uint32_t osd_x_sta[8]; uint32_t osd_x_end[8]; uint32_t osd_y_sta[8]; uint32_t osd_y_end[8]; uint32_t me_pena; uint32_t mv_bonus; uint32_t mv_similar_thr; uint32_t mv_similar_num_thr0; int32_t me_thr_offset; uint32_t mv_left_limit; uint32_t mv_right_limit; int8_t mv_tru_list[8]; uint32_t mv_tru_vld[8]; uint32_t eedi_thr0; uint32_t ble_backtoma_num; uint32_t comb_cnt_thr; uint32_t comb_feature_thr; uint32_t comb_t_thr; uint32_t comb_osd_vld[8]; uint32_t mtn_en; uint32_t mtn_tab[16]; uint32_t pd_mode; uint32_t roi_en; uint32_t roi_layer_num; uint32_t roi_mode[8]; uint32_t xsta[8]; uint32_t xend[8]; uint32_t ysta[8]; uint32_t yend[8]; }; struct iep2_output { uint32_t mv_hist[MVL + MVR + 1]; uint32_t dect_pd_tcnt; uint32_t dect_pd_bcnt; uint32_t dect_ff_cur_tcnt; uint32_t dect_ff_cur_bcnt; uint32_t dect_ff_nxt_tcnt; uint32_t dect_ff_nxt_bcnt; uint32_t dect_ff_ble_tcnt; uint32_t dect_ff_ble_bcnt; uint32_t dect_ff_nz; uint32_t dect_ff_comb_f; uint32_t dect_osd_cnt; uint32_t out_comb_cnt; uint32_t out_osd_comb_cnt; uint32_t ff_gradt_tcnt; uint32_t ff_gradt_bcnt; uint32_t x_sta[8]; uint32_t x_end[8]; uint32_t y_sta[8]; uint32_t y_end[8]; }; struct iep2_api_ctx { struct iep2_params params; struct iep2_output output; struct iep2_ff_info ff_inf; struct iep2_pd_info pd_inf; MppBufferGroup memGroup; MppBuffer mv_buf; MppBuffer md_buf; int fd; }; #endif