1 /* 2 * debayer_head.h 3 * 4 * Copyright (c) 2021 Rockchip Corporation 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 */ 19 20 #ifndef __CALIBDBV2_DEBAYER_HEAD_H__ 21 #define __CALIBDBV2_DEBAYER_HEAD_H__ 22 23 #include <rk_aiq_comm.h> 24 25 #define DEBAYER_ISO_STEP_MAX 13 26 27 RKAIQ_BEGIN_DECLARE 28 29 typedef struct __debayer_array { 30 // M4_ARRAY_DESC("debayer_filter1", "u32", M4_SIZE(1,9), M4_RANGE(08, 65536), "[50,100,200,400,800,1600,3200,6400,12800]", M4_DIGIT(0), M4_DYNAMIC(0), 0) 31 int ISO[9]; 32 // M4_ARRAY_DESC("sharp_strength", "u8", M4_SIZE(1,9), M4_RANGE(0, 255), "[4,4,4,4,4,4,4,4,4]", M4_DIGIT(0), M4_DYNAMIC(0), 0) 33 unsigned char sharp_strength[9]; 34 // M4_ARRAY_DESC("debayer_hf_offset", "u16", M4_SIZE(1,9), M4_RANGE(0, 255), "[1,1,1,1,1,1,1,1,1]", M4_DIGIT(0), M4_DYNAMIC(0), 0) 35 unsigned short debayer_hf_offset[9]; 36 } Debayer_Array_t; 37 38 typedef struct __Debayer_Param { 39 // M4_BOOL_DESC("debayer_en", "1", 0, M4_HIDE(1)) 40 bool debayer_en; 41 // M4_ARRAY_DESC("debayer_filter1", "s8", M4_SIZE(1,5), M4_RANGE(-128, 128), "[2,-6,0,6,-2]", M4_DIGIT(0), M4_DYNAMIC(0), 0) 42 int debayer_filter1[5]; 43 // M4_ARRAY_DESC("debayer_filter2", "s8", M4_SIZE(1,5), M4_RANGE(-128, 128), "[2,-4,4,-4,2]", M4_DIGIT(0), M4_DYNAMIC(0), 0) 44 int debayer_filter2[5]; 45 // M4_NUMBER_DESC("debayer_gain_offset", "u8", M4_RANGE(0,128), "4", M4_DIGIT(0), 0) 46 unsigned char debayer_gain_offset; 47 // M4_NUMBER_DESC("debayer_offset", "u8", M4_RANGE(0,128), "1", M4_DIGIT(0), 0) 48 unsigned char debayer_offset; 49 // M4_BOOL_DESC("debayer_clip_en", "1", 0) 50 bool debayer_clip_en; 51 // M4_BOOL_DESC("debayer_filter_g_en", "1", 0) 52 bool debayer_filter_g_en; 53 // M4_BOOL_DESC("debayer_filter_c_en", "1", 0) 54 bool debayer_filter_c_en; 55 // M4_NUMBER_DESC("debayer_thed0", "u8", M4_RANGE(0,128), "3", M4_DIGIT(0), 0) 56 unsigned char debayer_thed0; 57 // M4_NUMBER_DESC("debayer_thed1", "u8", M4_RANGE(0,128), "6", M4_DIGIT(0), 0) 58 unsigned char debayer_thed1; 59 // M4_NUMBER_DESC("debayer_dist_scale", "u8", M4_RANGE(0,128), "8", M4_DIGIT(0), 0) 60 unsigned char debayer_dist_scale; 61 // M4_NUMBER_DESC("debayer_cnr_strength", "u8", M4_RANGE(0,128), "5", M4_DIGIT(0), 0) 62 unsigned char debayer_cnr_strength; 63 // M4_NUMBER_DESC("debayer_shift_num", "u8", M4_RANGE(0,128), "2", M4_DIGIT(0), 0) 64 unsigned char debayer_shift_num; 65 // M4_ARRAY_TABLE_DESC("ISO_Params", "array_table_ui", "default") 66 Debayer_Array_t array; 67 } Debayer_Param_t; 68 69 typedef struct __debayer { 70 // M4_STRUCT_DESC("DebayerTuningPara", "normal_ui_style") 71 Debayer_Param_t param; 72 } CalibDbV2_Debayer_t; 73 74 // TODO: add debayer v2 params 75 76 typedef struct CalibDbV2_Debayer_GInterp_s { 77 78 // M4_ARRAY_DESC("iso", "f32", M4_SIZE(1,13), M4_RANGE(50, 204800), "[50, 100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200, 102400, 204800]", M4_DIGIT(1), M4_DYNAMIC(0)) 79 float iso[DEBAYER_ISO_STEP_MAX]; 80 81 // M4_ARRAY_DESC("debayer_clip_en", "u8", M4_SIZE(1,13),M4_RANGE(0, 1),"0", M4_DIGIT(0), M4_DYNAMIC(0)) 82 unsigned char debayer_clip_en[DEBAYER_ISO_STEP_MAX]; 83 84 // M4_ARRAY_DESC("debayer_gain_offset", "u16", M4_SIZE(1,13),M4_RANGE(0,4095), "[1024, 1024,1024, 2047, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095]", M4_DIGIT(0), M4_DYNAMIC(0)) 85 unsigned short debayer_gain_offset[DEBAYER_ISO_STEP_MAX]; 86 87 // M4_ARRAY_DESC("debayer_max_ratio", "u8", M4_SIZE(1,13),M4_RANGE(0,63), "[4, 4, 4, 4, 3, 2, 1, 1, 1, 1, 1, 1, 1]", M4_DIGIT(0), M4_DYNAMIC(0)) 88 unsigned char debayer_max_ratio[DEBAYER_ISO_STEP_MAX]; 89 90 } CalibDbV2_Debayer_GInterp_t; 91 92 typedef struct CalibDbV2_Debayer_GDirectWgt_s { 93 94 // M4_ARRAY_DESC("iso", "f32", M4_SIZE(1,13), M4_RANGE(50, 204800), "[50, 100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200, 102400, 204800]", M4_DIGIT(1), M4_DYNAMIC(0)) 95 float iso[DEBAYER_ISO_STEP_MAX]; 96 97 // M4_ARRAY_DESC("debayer_hf_offset", "u16",M4_SIZE(1,13), M4_RANGE(0, 65535), "[4096, 4096, 8192, 16384, 32768, 32768, 65535, 65535, 65535, 65535, 65535, 65535, 65535]", M4_DIGIT(0), M4_DYNAMIC(0)) 98 unsigned short debayer_hf_offset[DEBAYER_ISO_STEP_MAX]; 99 100 // M4_ARRAY_DESC("debayer_thed0", "u8",M4_SIZE(1,13), M4_RANGE(0,15), "3", M4_DIGIT(0), M4_DYNAMIC(0)) 101 unsigned char debayer_thed0[DEBAYER_ISO_STEP_MAX]; 102 103 // M4_ARRAY_DESC("debayer_thed1", "u8",M4_SIZE(1,13), M4_RANGE(0,15), "6", M4_DIGIT(0), M4_DYNAMIC(0)) 104 unsigned char debayer_thed1[DEBAYER_ISO_STEP_MAX]; 105 106 // M4_ARRAY_DESC("debayer_dist_scale", "u8",M4_SIZE(1,13), M4_RANGE(0,15), "8", M4_DIGIT(0), M4_DYNAMIC(0)) 107 unsigned char debayer_dist_scale[DEBAYER_ISO_STEP_MAX]; 108 109 // M4_ARRAY_DESC("debayer_select_thed", "u8",M4_SIZE(1,13), M4_RANGE(0,255), "13", M4_DIGIT(0), M4_DYNAMIC(0)) 110 unsigned char debayer_select_thed[DEBAYER_ISO_STEP_MAX]; 111 112 } CalibDbV2_Debayer_GDirectWgt_t; 113 114 typedef struct CalibDbV2_Debayer_GFilter_s { 115 // M4_ARRAY_DESC("iso", "f32", M4_SIZE(1,13), M4_RANGE(50, 204800), "[50, 100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200, 102400, 204800]", M4_DIGIT(1), M4_DYNAMIC(0)) 116 float iso[DEBAYER_ISO_STEP_MAX]; 117 118 // M4_ARRAY_DESC("debayer_gfilter_en", "u8",M4_SIZE(1,13), M4_RANGE(0, 1), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 119 unsigned char debayer_gfilter_en[DEBAYER_ISO_STEP_MAX]; 120 121 // M4_ARRAY_DESC("debayer_gfilter_offset", "u16",M4_SIZE(1,13), M4_RANGE(0,2047), "1", M4_DIGIT(0), M4_DYNAMIC(0)) 122 unsigned short debayer_gfilter_offset[DEBAYER_ISO_STEP_MAX]; 123 124 } CalibDbV2_Debayer_GFilter_t; 125 126 typedef struct CalibDbV2_Debayer_CFilter_s { 127 128 // M4_ARRAY_DESC("iso", "f32", M4_SIZE(1,13), M4_RANGE(50, 204800), "[50, 100, 200, 400, 800, 1600, 3200, 6400, 12800, 25600, 51200, 102400, 204800]", M4_DIGIT(1), M4_DYNAMIC(0)) 129 float iso[DEBAYER_ISO_STEP_MAX]; 130 131 // M4_ARRAY_DESC("debayer_cfilter_en", "u8",M4_SIZE(1,13),M4_RANGE(0, 1), "1", M4_DIGIT(0), M4_DYNAMIC(0)) 132 unsigned char debayer_cfilter_en[DEBAYER_ISO_STEP_MAX]; 133 134 // M4_ARRAY_DESC("debayer_loggd_offset", "u16",M4_SIZE(1,13), M4_RANGE(0,4095), "1", M4_DIGIT(0), M4_DYNAMIC(0)) 135 unsigned short debayer_loggd_offset[DEBAYER_ISO_STEP_MAX]; 136 137 /* C_FILTER_IIR */ 138 139 // M4_ARRAY_DESC("debayer_cfilter_str", "f32",M4_SIZE(1,13), M4_RANGE(0,1), "0.0313", M4_DIGIT(4), M4_DYNAMIC(0)) 140 float debayer_cfilter_str[DEBAYER_ISO_STEP_MAX]; 141 142 // M4_ARRAY_DESC("debayer_wet_clip", "f32",M4_SIZE(1,13), M4_RANGE(0,15.875), "7.25", M4_DIGIT(2), M4_DYNAMIC(0)) 143 float debayer_wet_clip[DEBAYER_ISO_STEP_MAX]; 144 145 // M4_ARRAY_DESC("debayer_wet_ghost", "f32",M4_SIZE(1,13), M4_RANGE(0,0.98), "0.03", M4_DIGIT(2), M4_DYNAMIC(0)) 146 float debayer_wet_ghost[DEBAYER_ISO_STEP_MAX]; 147 148 // M4_ARRAY_DESC("debayer_wgtslope", "f32",M4_SIZE(1,13), M4_RANGE(0,31.992), "0.7", M4_DIGIT(3), M4_DYNAMIC(0)) 149 float debayer_wgtslope[DEBAYER_ISO_STEP_MAX]; 150 151 /* C_FILTER_BF */ 152 153 // M4_ARRAY_DESC("debayer_bf_sgm", "f32",M4_SIZE(1,13), M4_RANGE(0,1), "0.0266", M4_DIGIT(4), M4_DYNAMIC(0)) 154 float debayer_bf_sgm[DEBAYER_ISO_STEP_MAX]; 155 156 // M4_ARRAY_DESC("debayer_bf_clip", "u8",M4_SIZE(1,13), M4_RANGE(0,127), "1", M4_DIGIT(0), M4_DYNAMIC(0)) 157 unsigned char debayer_bf_clip[DEBAYER_ISO_STEP_MAX]; 158 159 // M4_ARRAY_DESC("debayer_bf_curwgt", "u8",M4_SIZE(1,13), M4_RANGE(0,127), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 160 unsigned char debayer_bf_curwgt[DEBAYER_ISO_STEP_MAX]; 161 162 // M4_ARRAY_DESC("debayer_loghf_offset", "u16",M4_SIZE(1,13), M4_RANGE(0,8191), "128", M4_DIGIT(0), M4_DYNAMIC(0)) 163 unsigned short debayer_loghf_offset[DEBAYER_ISO_STEP_MAX]; 164 165 /* C_FILTER_ALPHA */ 166 167 // M4_ARRAY_DESC("debayer_alpha_offset", "u16",M4_SIZE(1,13), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 168 unsigned short debayer_alpha_offset[DEBAYER_ISO_STEP_MAX]; 169 170 // M4_ARRAY_DESC("debayer_alpha_scale", "f32",M4_SIZE(1,13), M4_RANGE(0,1023.999), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) 171 float debayer_alpha_scale[DEBAYER_ISO_STEP_MAX]; 172 173 /* C_FILTER_EDGE */ 174 // M4_ARRAY_DESC("debayer_edge_offset", "u16",M4_SIZE(1,13), M4_RANGE(0,4095), "0", M4_DIGIT(0), M4_DYNAMIC(0)) 175 unsigned short debayer_edge_offset[DEBAYER_ISO_STEP_MAX]; 176 177 // M4_ARRAY_DESC("debayer_edge_scale", "f32",M4_SIZE(1,13), M4_RANGE(0,1023.999), "1.0", M4_DIGIT(3), M4_DYNAMIC(0)) 178 float debayer_edge_scale[DEBAYER_ISO_STEP_MAX]; 179 } CalibDbV2_Debayer_CFilter_t; 180 181 182 typedef struct CalibDbV2_Debayer_Tuning_s { 183 // M4_BOOL_DESC("debayer_en", "1") 184 bool debayer_en; 185 186 // M4_ARRAY_DESC("g_lowfreq_filter1", "s8", M4_SIZE(1,4), M4_RANGE(-16, 15), "[-2,2,-4,4]", M4_DIGIT(0), M4_DYNAMIC(0)) 187 int lowfreq_filter1[4]; 188 189 // M4_ARRAY_DESC("g_highfreq_filter2", "s8", M4_SIZE(1,4), M4_RANGE(-16, 15), "[-1,2,-2,4]", M4_DIGIT(0), M4_DYNAMIC(0)) 190 int highfreq_filter2[4]; 191 192 // M4_ARRAY_DESC("c_alpha_gaus_coe", "s8", M4_SIZE(1,3), M4_RANGE(0, 255), "[64,32,16]", M4_DIGIT(0), M4_DYNAMIC(0)) 193 int c_alpha_gaus_coe[3]; 194 195 // M4_ARRAY_DESC("c_guid_gaus_coe", "s8", M4_SIZE(1,3), M4_RANGE(0, 255), "[64,32,16]", M4_DIGIT(0), M4_DYNAMIC(0)) 196 int c_guid_gaus_coe[3]; 197 198 // M4_ARRAY_DESC("c_ce_gaus_coe", "s8", M4_SIZE(1,3), M4_RANGE(0, 255), "[64,32,16]", M4_DIGIT(0), M4_DYNAMIC(0)) 199 int c_ce_gaus_coe[3]; 200 201 // M4_ARRAY_TABLE_DESC("g_interp", "array_table_ui", M4_INDEX_DEFAULT) 202 CalibDbV2_Debayer_GInterp_t g_interp; 203 204 // M4_ARRAY_TABLE_DESC("g_drctwgt", "array_table_ui", M4_INDEX_DEFAULT) 205 CalibDbV2_Debayer_GDirectWgt_t g_drctwgt; 206 207 // M4_ARRAY_TABLE_DESC("g_fliter", "array_table_ui", M4_INDEX_DEFAULT) 208 CalibDbV2_Debayer_GFilter_t g_filter; 209 210 // M4_ARRAY_TABLE_DESC("c_fliter", "array_table_ui", M4_INDEX_DEFAULT) 211 CalibDbV2_Debayer_CFilter_t c_filter; 212 213 } CalibDbV2_Debayer_Tuning_t; 214 215 typedef struct CalibDbV2_Debayer_v2_s { 216 // M4_STRUCT_DESC("TuningPara", "normal_ui_style") 217 CalibDbV2_Debayer_Tuning_t param; 218 } CalibDbV2_Debayer_v2_t; 219 220 // TODO: add debayer v2-lite params 221 222 typedef struct CalibDbV2_Debayer_Tuning_Lite_s { 223 // M4_BOOL_DESC("debayer_en", "1") 224 bool debayer_en; 225 226 // M4_ARRAY_DESC("g_lowfreq_filter1", "s8", M4_SIZE(1,4), M4_RANGE(-16, 15), "[-2,2,-4,4]", M4_DIGIT(0), M4_DYNAMIC(0)) 227 int lowfreq_filter1[4]; 228 229 // M4_ARRAY_DESC("g_highfreq_filter2", "s8", M4_SIZE(1,4), M4_RANGE(-16, 15), "[-1,2,-2,4]", M4_DIGIT(0), M4_DYNAMIC(0)) 230 int highfreq_filter2[4]; 231 232 // M4_ARRAY_TABLE_DESC("g_interp", "array_table_ui", M4_INDEX_DEFAULT) 233 CalibDbV2_Debayer_GInterp_t g_interp; 234 235 // M4_ARRAY_TABLE_DESC("g_drctwgt", "array_table_ui", M4_INDEX_DEFAULT) 236 CalibDbV2_Debayer_GDirectWgt_t g_drctwgt; 237 238 // M4_ARRAY_TABLE_DESC("g_fliter", "array_table_ui", M4_INDEX_DEFAULT) 239 CalibDbV2_Debayer_GFilter_t g_filter; 240 241 } CalibDbV2_Debayer_Tuning_Lite_t; 242 243 typedef struct CalibDbV2_Debayer_v2_lite_s { 244 // M4_STRUCT_DESC("TuningPara", "normal_ui_style") 245 CalibDbV2_Debayer_Tuning_Lite_t param; 246 } CalibDbV2_Debayer_v2_lite_t; 247 248 249 RKAIQ_END_DECLARE 250 251 #endif 252