423 lines
11 KiB
C
423 lines
11 KiB
C
/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR MIT)
|
|
*
|
|
* Copyright (C) 2019 Rockchip Electronics Co., Ltd.
|
|
*/
|
|
|
|
#ifndef _UAPI_RK_ISPP_CONFIG_H
|
|
#define _UAPI_RK_ISPP_CONFIG_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/v4l2-controls.h>
|
|
|
|
#define ISPP_API_VERSION KERNEL_VERSION(1, 8, 0)
|
|
|
|
#define ISPP_ID_TNR (0)
|
|
#define ISPP_ID_NR (1)
|
|
#define ISPP_ID_SHP (2)
|
|
#define ISPP_ID_FEC (3)
|
|
#define ISPP_ID_ORB (4)
|
|
#define ISPP_ID_MAX (5)
|
|
|
|
#define ISPP_MODULE_TNR BIT(ISPP_ID_TNR)/* 2TO1 */
|
|
#define ISPP_MODULE_NR BIT(ISPP_ID_NR)
|
|
#define ISPP_MODULE_SHP BIT(ISPP_ID_SHP)
|
|
#define ISPP_MODULE_FEC BIT(ISPP_ID_FEC)/* CALIBRATION */
|
|
#define ISPP_MODULE_ORB BIT(ISPP_ID_ORB)
|
|
/* extra function */
|
|
#define ISPP_MODULE_TNR_3TO1 (BIT(16) | ISPP_MODULE_TNR)
|
|
#define ISPP_MODULE_FEC_ST (BIT(17) | ISPP_MODULE_FEC)/* STABILIZATION */
|
|
|
|
#define TNR_SIGMA_CURVE_SIZE 17
|
|
#define TNR_LUMA_CURVE_SIZE 6
|
|
#define TNR_GFCOEF6_SIZE 6
|
|
#define TNR_GFCOEF3_SIZE 3
|
|
#define TNR_SCALE_YG_SIZE 4
|
|
#define TNR_SCALE_YL_SIZE 3
|
|
#define TNR_SCALE_CG_SIZE 3
|
|
#define TNR_SCALE_Y2CG_SIZE 3
|
|
#define TNR_SCALE_CL_SIZE 2
|
|
#define TNR_SCALE_Y2CL_SIZE 3
|
|
#define TNR_WEIGHT_Y_SIZE 3
|
|
|
|
#define NR_UVNR_UVGAIN_SIZE 2
|
|
#define NR_UVNR_T1FLT_WTQ_SIZE 8
|
|
#define NR_UVNR_T2GEN_WTQ_SIZE 4
|
|
#define NR_UVNR_T2FLT_WT_SIZE 3
|
|
#define NR_YNR_SGM_DX_SIZE 16
|
|
#define NR_YNR_SGM_Y_SIZE 17
|
|
#define NR_YNR_HWEIT_D_SIZE 20
|
|
#define NR_YNR_HGRAD_Y_SIZE 24
|
|
#define NR_YNR_HSTV_Y_SIZE 17
|
|
#define NR_YNR_CI_SIZE 4
|
|
#define NR_YNR_LGAIN_MIN_SIZE 4
|
|
#define NR_YNR_LWEIT_FLT_SIZE 4
|
|
#define NR_YNR_HGAIN_SGM_SIZE 4
|
|
#define NR_YNR_HWEIT_SIZE 4
|
|
#define NR_YNR_LWEIT_CMP_SIZE 2
|
|
#define NR_YNR_ST_SCALE_SIZE 3
|
|
|
|
#define SHP_PBF_KERNEL_SIZE 3
|
|
#define SHP_MRF_KERNEL_SIZE 6
|
|
#define SHP_MBF_KERNEL_SIZE 12
|
|
#define SHP_HRF_KERNEL_SIZE 6
|
|
#define SHP_HBF_KERNEL_SIZE 3
|
|
#define SHP_EDGE_COEF_SIZE 3
|
|
#define SHP_EDGE_SMOTH_SIZE 3
|
|
#define SHP_EDGE_GAUS_SIZE 6
|
|
#define SHP_DOG_KERNEL_SIZE 6
|
|
#define SHP_LUM_POINT_SIZE 6
|
|
#define SHP_SIGMA_SIZE 8
|
|
#define SHP_LUM_CLP_SIZE 8
|
|
#define SHP_LUM_MIN_SIZE 8
|
|
#define SHP_EDGE_LUM_THED_SIZE 8
|
|
#define SHP_CLAMP_SIZE 8
|
|
#define SHP_DETAIL_ALPHA_SIZE 8
|
|
|
|
#define ORB_DATA_NUM 10000
|
|
#define ORB_BRIEF_NUM 15
|
|
#define ORB_DUMMY_NUM 13
|
|
|
|
#define FEC_MESH_BUF_MAX 7
|
|
#define FEC_MESH_BUF_NUM 2
|
|
|
|
#define MAX_BUF_IDXFD_NUM 64
|
|
|
|
/************VIDIOC_PRIVATE*************/
|
|
#define RKISPP_CMD_SET_INIT_MODULE \
|
|
_IOW('V', BASE_VIDIOC_PRIVATE + 0, int)
|
|
|
|
#define RKISPP_CMD_GET_FECBUF_INFO \
|
|
_IOR('V', BASE_VIDIOC_PRIVATE + 1, struct rkispp_fecbuf_info)
|
|
|
|
#define RKISPP_CMD_SET_FECBUF_SIZE \
|
|
_IOW('V', BASE_VIDIOC_PRIVATE + 2, struct rkispp_fecbuf_size)
|
|
|
|
#define RKISPP_CMD_TRIGGER_MODE \
|
|
_IOW('V', BASE_VIDIOC_PRIVATE + 3, struct rkispp_trigger_mode)
|
|
|
|
#define RKISPP_CMD_GET_TNRBUF_FD \
|
|
_IOR('V', BASE_VIDIOC_PRIVATE + 4, struct rkispp_buf_idxfd)
|
|
|
|
#define RKISPP_CMD_GET_NRBUF_FD \
|
|
_IOR('V', BASE_VIDIOC_PRIVATE + 5, struct rkispp_buf_idxfd)
|
|
|
|
/**independent fec video**/
|
|
#define RKISPP_CMD_FEC_IN_OUT \
|
|
_IOW('V', BASE_VIDIOC_PRIVATE + 10, struct rkispp_fec_in_out)
|
|
#define RKISPP_CMD_FEC_BUF_ADD \
|
|
_IOW('V', BASE_VIDIOC_PRIVATE + 11, int)
|
|
#define RKISPP_CMD_FEC_BUF_DEL \
|
|
_IOW('V', BASE_VIDIOC_PRIVATE + 12, int)
|
|
|
|
/************EVENT_PRIVATE**************/
|
|
#define RKISPP_V4L2_EVENT_TNR_COMPLETE \
|
|
(V4L2_EVENT_PRIVATE_START + 3)
|
|
|
|
struct rkispp_fec_in_out {
|
|
int in_width;
|
|
int in_height;
|
|
int out_width;
|
|
int out_height;
|
|
int in_fourcc;
|
|
int out_fourcc;
|
|
int in_pic_fd;
|
|
int out_pic_fd;
|
|
int mesh_xint_fd;
|
|
int mesh_xfra_fd;
|
|
int mesh_yint_fd;
|
|
int mesh_yfra_fd;
|
|
};
|
|
|
|
struct rkispp_buf_idxfd {
|
|
__u32 buf_num;
|
|
__u32 index[MAX_BUF_IDXFD_NUM];
|
|
__s32 dmafd[MAX_BUF_IDXFD_NUM];
|
|
} __attribute__ ((packed));
|
|
|
|
struct rkispp_trigger_mode {
|
|
__u32 module;
|
|
__u32 on;
|
|
} __attribute__ ((packed));
|
|
|
|
struct rkispp_tnr_config {
|
|
__u8 opty_en;
|
|
__u8 optc_en;
|
|
__u8 gain_en;
|
|
__u8 pk0_y;
|
|
__u8 pk1_y;
|
|
__u8 pk0_c;
|
|
__u8 pk1_c;
|
|
__u8 glb_gain_cur_sqrt;
|
|
__u8 sigma_x[TNR_SIGMA_CURVE_SIZE - 1];
|
|
__u8 gfcoef_y0[TNR_GFCOEF6_SIZE];
|
|
__u8 gfcoef_y1[TNR_GFCOEF3_SIZE];
|
|
__u8 gfcoef_y2[TNR_GFCOEF3_SIZE];
|
|
__u8 gfcoef_y3[TNR_GFCOEF3_SIZE];
|
|
__u8 gfcoef_yg0[TNR_GFCOEF6_SIZE];
|
|
__u8 gfcoef_yg1[TNR_GFCOEF3_SIZE];
|
|
__u8 gfcoef_yg2[TNR_GFCOEF3_SIZE];
|
|
__u8 gfcoef_yg3[TNR_GFCOEF3_SIZE];
|
|
__u8 gfcoef_yl0[TNR_GFCOEF6_SIZE];
|
|
__u8 gfcoef_yl1[TNR_GFCOEF3_SIZE];
|
|
__u8 gfcoef_yl2[TNR_GFCOEF3_SIZE];
|
|
__u8 gfcoef_cg0[TNR_GFCOEF6_SIZE];
|
|
__u8 gfcoef_cg1[TNR_GFCOEF3_SIZE];
|
|
__u8 gfcoef_cg2[TNR_GFCOEF3_SIZE];
|
|
__u8 gfcoef_cl0[TNR_GFCOEF6_SIZE];
|
|
__u8 gfcoef_cl1[TNR_GFCOEF3_SIZE];
|
|
__u8 weight_y[TNR_WEIGHT_Y_SIZE];
|
|
|
|
__u16 glb_gain_cur __attribute__((aligned(2)));
|
|
__u16 glb_gain_nxt;
|
|
__u16 glb_gain_cur_div;
|
|
__u16 txt_th1_y;
|
|
__u16 txt_th0_c;
|
|
__u16 txt_th1_c;
|
|
__u16 txt_thy_dlt;
|
|
__u16 txt_thc_dlt;
|
|
__u16 txt_th0_y;
|
|
__u16 sigma_y[TNR_SIGMA_CURVE_SIZE];
|
|
__u16 luma_curve[TNR_LUMA_CURVE_SIZE];
|
|
__u16 scale_yg[TNR_SCALE_YG_SIZE];
|
|
__u16 scale_yl[TNR_SCALE_YL_SIZE];
|
|
__u16 scale_cg[TNR_SCALE_CG_SIZE];
|
|
__u16 scale_y2cg[TNR_SCALE_Y2CG_SIZE];
|
|
__u16 scale_cl[TNR_SCALE_CL_SIZE];
|
|
__u16 scale_y2cl[TNR_SCALE_Y2CL_SIZE];
|
|
} __attribute__ ((packed));
|
|
|
|
struct rkispp_nr_config {
|
|
__u8 uvnr_step1_en;
|
|
__u8 uvnr_step2_en;
|
|
__u8 nr_gain_en;
|
|
__u8 uvnr_sd32_self_en;
|
|
__u8 uvnr_nobig_en;
|
|
__u8 uvnr_big_en;
|
|
__u8 uvnr_gain_1sigma;
|
|
__u8 uvnr_gain_offset;
|
|
__u8 uvnr_gain_t2gen;
|
|
__u8 uvnr_gain_iso;
|
|
__u8 uvnr_t1gen_m3alpha;
|
|
__u8 uvnr_t1flt_mode;
|
|
__u8 uvnr_t1flt_wtp;
|
|
__u8 uvnr_t2gen_m3alpha;
|
|
__u8 uvnr_t2gen_wtp;
|
|
__u8 uvnr_gain_uvgain[NR_UVNR_UVGAIN_SIZE];
|
|
__u8 uvnr_t1flt_wtq[NR_UVNR_T1FLT_WTQ_SIZE];
|
|
__u8 uvnr_t2gen_wtq[NR_UVNR_T2GEN_WTQ_SIZE];
|
|
__u8 uvnr_t2flt_wtp;
|
|
__u8 uvnr_t2flt_wt[NR_UVNR_T2FLT_WT_SIZE];
|
|
__u8 ynr_sgm_dx[NR_YNR_SGM_DX_SIZE];
|
|
__u8 ynr_lci[NR_YNR_CI_SIZE];
|
|
__u8 ynr_lgain_min[NR_YNR_LGAIN_MIN_SIZE];
|
|
__u8 ynr_lgain_max;
|
|
__u8 ynr_lmerge_bound;
|
|
__u8 ynr_lmerge_ratio;
|
|
__u8 ynr_lweit_flt[NR_YNR_LWEIT_FLT_SIZE];
|
|
__u8 ynr_hlci[NR_YNR_CI_SIZE];
|
|
__u8 ynr_lhci[NR_YNR_CI_SIZE];
|
|
__u8 ynr_hhci[NR_YNR_CI_SIZE];
|
|
__u8 ynr_hgain_sgm[NR_YNR_HGAIN_SGM_SIZE];
|
|
__u8 ynr_hweit_d[NR_YNR_HWEIT_D_SIZE];
|
|
__u8 ynr_hgrad_y[NR_YNR_HGRAD_Y_SIZE];
|
|
__u8 ynr_hmax_adjust;
|
|
__u8 ynr_hstrength;
|
|
__u8 ynr_lweit_cmp[NR_YNR_LWEIT_CMP_SIZE];
|
|
__u8 ynr_lmaxgain_lv4;
|
|
|
|
__u16 uvnr_t1flt_msigma __attribute__((aligned(2)));
|
|
__u16 uvnr_t2gen_msigma;
|
|
__u16 uvnr_t2flt_msigma;
|
|
__u16 ynr_lsgm_y[NR_YNR_SGM_Y_SIZE];
|
|
__u16 ynr_hsgm_y[NR_YNR_SGM_Y_SIZE];
|
|
__u16 ynr_hweit[NR_YNR_HWEIT_SIZE];
|
|
__u16 ynr_hstv_y[NR_YNR_HSTV_Y_SIZE];
|
|
__u16 ynr_st_scale[NR_YNR_ST_SCALE_SIZE];
|
|
} __attribute__ ((packed));
|
|
|
|
struct rkispp_sharp_config {
|
|
__u8 rotation;
|
|
__u8 scl_down_v;
|
|
__u8 scl_down_h;
|
|
__u8 tile_ycnt;
|
|
__u8 tile_xcnt;
|
|
__u8 alpha_adp_en;
|
|
__u8 yin_flt_en;
|
|
__u8 edge_avg_en;
|
|
__u8 ehf_th;
|
|
__u8 pbf_ratio;
|
|
__u8 edge_thed;
|
|
__u8 dir_min;
|
|
__u8 pbf_shf_bits;
|
|
__u8 mbf_shf_bits;
|
|
__u8 hbf_shf_bits;
|
|
__u8 m_ratio;
|
|
__u8 h_ratio;
|
|
__u8 pbf_k[SHP_PBF_KERNEL_SIZE];
|
|
__u8 mrf_k[SHP_MRF_KERNEL_SIZE];
|
|
__u8 mbf_k[SHP_MBF_KERNEL_SIZE];
|
|
__u8 hrf_k[SHP_HRF_KERNEL_SIZE];
|
|
__u8 hbf_k[SHP_HBF_KERNEL_SIZE];
|
|
__s8 eg_coef[SHP_EDGE_COEF_SIZE];
|
|
__u8 eg_smoth[SHP_EDGE_SMOTH_SIZE];
|
|
__u8 eg_gaus[SHP_EDGE_GAUS_SIZE];
|
|
__s8 dog_k[SHP_DOG_KERNEL_SIZE];
|
|
__u8 lum_point[SHP_LUM_POINT_SIZE];
|
|
__u8 pbf_sigma[SHP_SIGMA_SIZE];
|
|
__u8 lum_clp_m[SHP_LUM_CLP_SIZE];
|
|
__s8 lum_min_m[SHP_LUM_MIN_SIZE];
|
|
__u8 mbf_sigma[SHP_SIGMA_SIZE];
|
|
__u8 lum_clp_h[SHP_LUM_CLP_SIZE];
|
|
__u8 hbf_sigma[SHP_SIGMA_SIZE];
|
|
__u8 edge_lum_thed[SHP_EDGE_LUM_THED_SIZE];
|
|
__u8 clamp_pos[SHP_CLAMP_SIZE];
|
|
__u8 clamp_neg[SHP_CLAMP_SIZE];
|
|
__u8 detail_alpha[SHP_DETAIL_ALPHA_SIZE];
|
|
|
|
__u16 hbf_ratio __attribute__((aligned(2)));
|
|
__u16 smoth_th4;
|
|
__u16 l_alpha;
|
|
__u16 g_alpha;
|
|
__u16 rfl_ratio;
|
|
__u16 rfh_ratio;
|
|
} __attribute__ ((packed));
|
|
|
|
enum rkispp_fecbuf_stat {
|
|
FEC_BUF_INIT = 0,
|
|
FEC_BUF_WAIT2CHIP,
|
|
FEC_BUF_CHIPINUSE,
|
|
};
|
|
|
|
struct rkispp_fecbuf_info {
|
|
__s32 buf_fd[FEC_MESH_BUF_MAX];
|
|
__u32 buf_size[FEC_MESH_BUF_MAX];
|
|
} __attribute__ ((packed));
|
|
|
|
struct rkispp_fecbuf_size {
|
|
__u32 meas_width;
|
|
__u32 meas_height;
|
|
__u32 meas_mode;
|
|
int buf_cnt;
|
|
} __attribute__ ((packed));
|
|
|
|
struct rkispp_fec_head {
|
|
enum rkispp_fecbuf_stat stat;
|
|
__u32 meshxf_oft;
|
|
__u32 meshyf_oft;
|
|
__u32 meshxi_oft;
|
|
__u32 meshyi_oft;
|
|
} __attribute__ ((packed));
|
|
|
|
struct rkispp_fec_config {
|
|
__u8 mesh_density;
|
|
__u8 crop_en;
|
|
__u16 crop_width __attribute__((aligned(2)));
|
|
__u16 crop_height;
|
|
__u32 mesh_size __attribute__((aligned(4)));
|
|
__s32 buf_fd;
|
|
} __attribute__ ((packed));
|
|
|
|
struct rkispp_orb_config {
|
|
__u8 limit_value;
|
|
__u32 max_feature __attribute__((aligned(4)));
|
|
} __attribute__ ((packed));
|
|
|
|
struct rkispp_buf_info {
|
|
/* __s32 fd; */
|
|
__u32 index;
|
|
__u32 size;
|
|
} __attribute__ ((packed));
|
|
|
|
/**
|
|
* struct rkispp_params_cfghead - Rockchip ISPP Input Parameters Meta Data
|
|
*
|
|
* @module_en_update: mask the enable bits of which module should be updated
|
|
* @module_ens: mask the enable value of each module, only update the module
|
|
* which correspond bit was set in module_en_update
|
|
* @module_cfg_update: mask the config bits of which module should be updated
|
|
*/
|
|
struct rkispp_params_cfghead {
|
|
__u32 module_en_update;
|
|
__u32 module_ens;
|
|
__u32 module_cfg_update;
|
|
|
|
__u32 frame_id;
|
|
} __attribute__ ((packed));
|
|
|
|
/**
|
|
* struct rkispp_params_tnrcfg - Rockchip ISPP Input Parameters Meta Data
|
|
*/
|
|
struct rkispp_params_tnrcfg {
|
|
struct rkispp_params_cfghead head;
|
|
|
|
struct rkispp_tnr_config tnr_cfg;
|
|
/* struct rkispp_buf_info gain; */
|
|
/* struct rkispp_buf_info image; */
|
|
} __attribute__ ((packed));
|
|
|
|
/**
|
|
* struct rkispp_params_nrcfg - Rockchip ISPP Input Parameters Meta Data
|
|
*/
|
|
struct rkispp_params_nrcfg {
|
|
struct rkispp_params_cfghead head;
|
|
|
|
struct rkispp_nr_config nr_cfg;
|
|
struct rkispp_sharp_config shp_cfg;
|
|
struct rkispp_orb_config orb_cfg;
|
|
|
|
struct rkispp_buf_info gain;
|
|
/* struct rkispp_buf_info image; */
|
|
} __attribute__ ((packed));
|
|
|
|
/**
|
|
* struct rkispp_params_feccfg - Rockchip ISPP Input Parameters Meta Data
|
|
*/
|
|
struct rkispp_params_feccfg {
|
|
struct rkispp_params_cfghead head;
|
|
|
|
struct rkispp_fec_config fec_cfg;
|
|
struct rkispp_buf_info image;
|
|
} __attribute__ ((packed));
|
|
|
|
struct rkispp_orb_data {
|
|
__u8 brief[ORB_BRIEF_NUM];
|
|
__u32 y : 13;
|
|
__u32 x : 13;
|
|
__u32 dmy1 : 6;
|
|
__u8 dmy2[ORB_DUMMY_NUM];
|
|
} __attribute__ ((packed));
|
|
|
|
/**
|
|
* struct rkispp_stats_nrbuf - Rockchip ISPP Statistics
|
|
*
|
|
* @meas_type: measurement types
|
|
* @frame_id: frame ID for sync
|
|
* @data: statistics data
|
|
*/
|
|
struct rkispp_stats_nrbuf {
|
|
struct rkispp_orb_data data[ORB_DATA_NUM];
|
|
|
|
__u32 total_num __attribute__((aligned(4)));
|
|
__u32 meas_type;
|
|
__u32 frame_id;
|
|
|
|
struct rkispp_buf_info image;
|
|
} __attribute__ ((packed));
|
|
|
|
/**
|
|
* struct rkispp_stats_tnrbuf - Rockchip ISPP Statistics
|
|
*
|
|
* @meas_type: measurement types
|
|
* @frame_id: frame ID for sync
|
|
*/
|
|
struct rkispp_stats_tnrbuf {
|
|
__u32 meas_type;
|
|
__u32 frame_id;
|
|
|
|
struct rkispp_buf_info gain;
|
|
struct rkispp_buf_info gainkg;
|
|
/* struct rkispp_buf_info image; */
|
|
} __attribute__ ((packed));
|
|
|
|
#endif
|