1 /* 2 *rk_aiq_types_alsc_algo_int.h 3 * 4 * Copyright (c) 2019 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 _RK_AIQ_TYPE_ACNR_ALGO_INT_V2_H_ 21 #define _RK_AIQ_TYPE_ACNR_ALGO_INT_V2_H_ 22 23 #include <math.h> 24 #include <string.h> 25 #include <stdlib.h> 26 #include "rk_aiq_comm.h" 27 #include "RkAiqCalibDbTypes.h" 28 #include "acnr2/rk_aiq_types_acnr_algo_v2.h" 29 #include "cnr_head_v2.h" 30 #include "cnr_uapi_head_v2.h" 31 32 33 //RKAIQ_BEGIN_DECLARE 34 #define RK_CNR_V2_MAX_ISO_NUM (CALIBDB_MAX_ISO_LEVEL) 35 36 #define ACNRV2_RECALCULATE_DELTA_ISO (10) 37 // fix bit 38 #define RK_CNR_V2_sgmGain 4 39 #define RK_CNR_V2_sgmRatio 4 40 #define RK_CNR_V2_log2e 6 41 #define RK_CNR_V2_gainRatio 7 42 43 #define RK_CNR_V2_ratio 0 44 #define RK_CNR_V2_offset 4 45 46 #define RK_CNR_V2_uvgain_local 4 47 #define RK_CNR_V2_kernels 7 48 49 #define RK_CNR_V2_medRatio 4 50 #define RK_CNR_V2_sigmaR 0 51 #define RK_CNR_V2_sigmaD 0 52 #define RK_CNR_V2_uvgain 4 53 54 //exp(-x) 55 #define RK_CNR_V2_exp2_lut_num 15 56 #define RK_CNR_V2_exp2_lut_x 7 57 #define RK_CNR_V2_exp2_lut_y 7 58 59 #define RK_CNR_V2_bfRatio RK_CNR_V2_exp2_lut_y 60 61 #define RK_CNR_V2_SIGMA_FIX_BIT 8 62 63 //#define RKCNR_V2_SGM_ADJ_TABLE_LEN 13 64 65 #define RKCNR_V2_SIGMA_FIX_BIT 8 66 #define RKCNR_V2_LOCAL_GAIN_FIX_BITS 4 67 #define RKCNR_V2_G_GAIN_FIX_BITS 4 68 #define RKCNR_V2_G_GAIN_ALPHA_FIX_BITS 3 69 #define RKCNR_V2_GAIN_ISO_FIX_BITS 7 70 71 typedef enum AcnrV2_result_e { 72 ACNRV2_RET_SUCCESS = 0, // this has to be 0, if clauses rely on it 73 ACNRV2_RET_FAILURE = 1, // process failure 74 ACNRV2_RET_INVALID_PARM = 2, // invalid parameter 75 ACNRV2_RET_WRONG_CONFIG = 3, // feature not supported 76 ACNRV2_RET_BUSY = 4, // there's already something going on... 77 ACNRV2_RET_CANCELED = 5, // operation canceled 78 ACNRV2_RET_OUTOFMEM = 6, // out of memory 79 ACNRV2_RET_OUTOFRANGE = 7, // parameter/value out of range 80 ACNRV2_RET_NULL_POINTER = 8, // the/one/all parameter(s) is a(are) NULL pointer(s) 81 ACNRV2_RET_DIVISION_BY_ZERO = 9, // a divisor equals ZERO 82 ACNRV2_RET_NO_INPUTIMAGE = 10 // no input image 83 } AcnrV2_result_t; 84 85 typedef enum AcnrV2_State_e { 86 ACNRV2_STATE_INVALID = 0, /**< initialization value */ 87 ACNRV2_STATE_INITIALIZED = 1, /**< instance is created, but not initialized */ 88 ACNRV2_STATE_STOPPED = 2, /**< instance is confiured (ready to start) or stopped */ 89 ACNRV2_STATE_RUNNING = 3, /**< instance is running (processes frames) */ 90 ACNRV2_STATE_LOCKED = 4, /**< instance is locked (for taking snapshots) */ 91 ACNRV2_STATE_MAX /**< max */ 92 } AcnrV2_State_t; 93 94 typedef enum AcnrV2_OPMode_e { 95 ACNRV2_OP_MODE_INVALID = 0, /**< initialization value */ 96 ACNRV2_OP_MODE_AUTO = 1, /**< instance is created, but not initialized */ 97 ACNRV2_OP_MODE_MANUAL = 2, /**< instance is confiured (ready to start) or stopped */ 98 ACNRV2_OP_MODE_REG_MANUAL = 3, 99 ACNRV2_OP_MODE_MAX /**< max */ 100 } AcnrV2_OPMode_t; 101 102 typedef enum AcnrV2_ParamMode_e { 103 ACNRV2_PARAM_MODE_INVALID = 0, 104 ACNRV2_PARAM_MODE_NORMAL = 1, /**< initialization value */ 105 ACNRV2_PARAM_MODE_HDR = 2, /**< instance is created, but not initialized */ 106 ACNRV2_PARAM_MODE_GRAY = 3, /**< instance is confiured (ready to start) or stopped */ 107 ACNRV2_PARAM_MODE_MAX /**< max */ 108 } AcnrV2_ParamMode_t; 109 110 111 112 typedef struct RK_CNR_Params_V2_s 113 { 114 int enable; 115 float iso[RK_CNR_V2_MAX_ISO_NUM]; 116 int hf_bypass[RK_CNR_V2_MAX_ISO_NUM]; 117 int lf_bypass[RK_CNR_V2_MAX_ISO_NUM]; 118 119 // gain 120 float global_gain[RK_CNR_V2_MAX_ISO_NUM]; 121 float global_gain_alpha[RK_CNR_V2_MAX_ISO_NUM]; 122 float local_gain_scale[RK_CNR_V2_MAX_ISO_NUM]; 123 124 // strength adj by gain 125 int gain_adj_strength_ratio[RK_CNR_V2_MAX_ISO_NUM][RKCNR_V2_SGM_ADJ_TABLE_LEN]; 126 127 // 128 float color_sat_adj[RK_CNR_V2_MAX_ISO_NUM]; 129 float color_sat_adj_alpha[RK_CNR_V2_MAX_ISO_NUM]; 130 131 // step1 132 // median filter 133 float hf_spikes_reducion_strength[RK_CNR_V2_MAX_ISO_NUM]; 134 135 // bilateral filter 136 float hf_denoise_strength[RK_CNR_V2_MAX_ISO_NUM]; 137 float hf_color_sat[RK_CNR_V2_MAX_ISO_NUM]; 138 float hf_denoise_alpha[RK_CNR_V2_MAX_ISO_NUM]; 139 int hf_bf_wgt_clip[RK_CNR_V2_MAX_ISO_NUM]; 140 141 142 // step2 143 // median filter 144 float thumb_spikes_reducion_strength[RK_CNR_V2_MAX_ISO_NUM]; 145 146 // bilateral filter 147 float thumb_denoise_strength[RK_CNR_V2_MAX_ISO_NUM]; 148 float thumb_color_sat[RK_CNR_V2_MAX_ISO_NUM]; 149 150 // step3 151 // bilateral filter 152 float lf_denoise_strength[RK_CNR_V2_MAX_ISO_NUM]; 153 float lf_color_sat[RK_CNR_V2_MAX_ISO_NUM]; 154 float lf_denoise_alpha[RK_CNR_V2_MAX_ISO_NUM]; 155 156 // bilateral filter kernels 157 float kernel_5x5[5]; 158 } RK_CNR_Params_V2_t; 159 160 #if 0 161 typedef struct RK_CNR_Params_V2_Select_s 162 { 163 int enable; 164 165 // bypass 166 int hf_bypass; 167 int lf_bypass; 168 169 // gain 170 171 // gain 172 float global_gain; 173 float global_gain_alpha; 174 float local_gain_scale; 175 176 // strength adj by gain 177 int gain_adj_strength_ratio[RKCNR_V2_SGM_ADJ_TABLE_LEN]; 178 179 // 180 float color_sat_adj; 181 float color_sat_adj_alpha; 182 183 // step1 184 // median filter 185 float hf_spikes_reducion_strength; 186 187 // bilateral filter 188 float hf_denoise_strength; 189 float hf_color_sat; 190 float hf_denoise_alpha; 191 int hf_bf_wgt_clip; 192 193 // step2 194 195 // median filter 196 float thumb_spikes_reducion_strength; 197 198 // bilateral filter 199 float thumb_denoise_strength; 200 float thumb_color_sat; 201 202 // step3 203 // bilateral filter 204 float lf_denoise_strength; 205 float lf_color_sat; 206 float lf_denoise_alpha; 207 208 // bilateral filter kernels 209 float kernel_5x5[5]; 210 211 } RK_CNR_Params_V2_Select_t; 212 #endif 213 214 typedef struct Acnr_Manual_Attr_V2_s 215 { 216 RK_CNR_Params_V2_Select_t stSelect; 217 218 RK_CNR_Fix_V2_t stFix; 219 220 } Acnr_Manual_Attr_V2_t; 221 222 typedef struct Acnr_Auto_Attr_V2_s 223 { 224 //all ISO params and select param 225 226 RK_CNR_Params_V2_t stParams; 227 RK_CNR_Params_V2_Select_t stSelect; 228 229 } Acnr_Auto_Attr_V2_t; 230 231 typedef struct Acnr_ProcResult_V2_s { 232 233 //for sw simultaion 234 //RK_CNR_Params_V2_Select_t stSelect; 235 236 //for hw register 237 RK_CNR_Fix_V2_t* stFix; 238 239 } Acnr_ProcResult_V2_t; 240 241 242 typedef struct Acnr_Config_V2_s { 243 AcnrV2_State_t eState; 244 AcnrV2_OPMode_t eMode; 245 int rawHeight; 246 int rawWidth; 247 } Acnr_Config_V2_t; 248 249 250 typedef struct rk_aiq_cnr_attrib_v2_s { 251 rk_aiq_uapi_sync_t sync; 252 AcnrV2_OPMode_t eMode; 253 Acnr_Auto_Attr_V2_t stAuto; 254 Acnr_Manual_Attr_V2_t stManual; 255 } rk_aiq_cnr_attrib_v2_t; 256 257 258 typedef struct rk_aiq_cnr_strength_v2_s { 259 rk_aiq_uapi_sync_t sync; 260 float percent; 261 bool strength_enable; 262 } rk_aiq_cnr_strength_v2_t; 263 264 265 //calibdb 266 267 268 //RKAIQ_END_DECLARE 269 270 #endif 271 272