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_V1_H_ 21 #define _RK_AIQ_TYPE_ACNR_ALGO_INT_V1_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 "acnr/rk_aiq_types_acnr_algo_v1.h" 29 #include "cnr_head_v1.h" 30 31 32 //RKAIQ_BEGIN_DECLARE 33 34 #define ACNRV1_RECALCULATE_DELTA_ISO (10) 35 // fix bit 36 #define RK_CNR_V1_sgmGain 4 37 #define RK_CNR_V1_sgmRatio 4 38 #define RK_CNR_V1_log2e 6 39 #define RK_CNR_V1_gainRatio 7 40 41 #define RK_CNR_V1_ratio 0 42 #define RK_CNR_V1_offset 4 43 44 #define RK_CNR_V1_uvgain_local 4 45 #define RK_CNR_V1_kernels 7 46 47 #define RK_CNR_V1_medRatio 4 48 #define RK_CNR_V1_sigmaR 0 49 #define RK_CNR_V1_sigmaD 0 50 #define RK_CNR_V1_uvgain 4 51 52 //exp(-x) 53 #define RK_CNR_V1_exp2_lut_num 15 54 #define RK_CNR_V1_exp2_lut_x 7 55 #define RK_CNR_V1_exp2_lut_y 7 56 57 #define RK_CNR_V1_bfRatio RK_CNR_V1_exp2_lut_y 58 59 #define RK_CNR_V1_SIGMA_FIX_BIT 8 60 61 62 typedef enum Acnr_result_e { 63 ACNR_RET_SUCCESS = 0, // this has to be 0, if clauses rely on it 64 ACNR_RET_FAILURE = 1, // process failure 65 ACNR_RET_INVALID_PARM = 2, // invalid parameter 66 ACNR_RET_WRONG_CONFIG = 3, // feature not supported 67 ACNR_RET_BUSY = 4, // there's already something going on... 68 ACNR_RET_CANCELED = 5, // operation canceled 69 ACNR_RET_OUTOFMEM = 6, // out of memory 70 ACNR_RET_OUTOFRANGE = 7, // parameter/value out of range 71 ACNR_RET_NULL_POINTER = 8, // the/one/all parameter(s) is a(are) NULL pointer(s) 72 ACNR_RET_DIVISION_BY_ZERO = 9, // a divisor equals ZERO 73 ACNR_RET_NO_INPUTIMAGE = 10 // no input image 74 } Acnr_result_t; 75 76 typedef enum Acnr_State_e { 77 ACNR_STATE_INVALID = 0, /**< initialization value */ 78 ACNR_STATE_INITIALIZED = 1, /**< instance is created, but not initialized */ 79 ACNR_STATE_STOPPED = 2, /**< instance is confiured (ready to start) or stopped */ 80 ACNR_STATE_RUNNING = 3, /**< instance is running (processes frames) */ 81 ACNR_STATE_LOCKED = 4, /**< instance is locked (for taking snapshots) */ 82 ACNR_STATE_MAX /**< max */ 83 } Acnr_State_t; 84 85 typedef enum Acnr_OPMode_e { 86 ACNR_OP_MODE_INVALID = 0, /**< initialization value */ 87 ACNR_OP_MODE_AUTO = 1, /**< instance is created, but not initialized */ 88 ACNR_OP_MODE_MANUAL = 2, /**< instance is confiured (ready to start) or stopped */ 89 ACNR_OP_MODE_MAX /**< max */ 90 } Acnr_OPMode_t; 91 92 typedef enum Acnr_ParamMode_e { 93 ACNR_PARAM_MODE_INVALID = 0, 94 ACNR_PARAM_MODE_NORMAL = 1, /**< initialization value */ 95 ACNR_PARAM_MODE_HDR = 2, /**< instance is created, but not initialized */ 96 ACNR_PARAM_MODE_GRAY = 3, /**< instance is confiured (ready to start) or stopped */ 97 ACNR_PARAM_MODE_MAX /**< max */ 98 } Acnr_ParamMode_t; 99 100 typedef struct Acnr_ExpInfo_s { 101 int hdr_mode; 102 float arTime[3]; 103 float arAGain[3]; 104 float arDGain[3]; 105 int arIso[3]; 106 int snr_mode; 107 int rawWidth; 108 int rawHeight; 109 } Acnr_ExpInfo_t; 110 111 typedef struct RK_CNR_Params_V1_s 112 { 113 int enable; 114 float iso[RK_CNR_V1_MAX_ISO_NUM]; 115 int rkcnr_hq_bila_bypass[RK_CNR_V1_MAX_ISO_NUM]; 116 int rkcnr_lq_bila_bypass[RK_CNR_V1_MAX_ISO_NUM]; 117 118 // gain 119 float rkcnr_exgain[RK_CNR_V1_MAX_ISO_NUM]; 120 float rkcnr_g_gain[RK_CNR_V1_MAX_ISO_NUM]; 121 122 // 123 float ratio[RK_CNR_V1_MAX_ISO_NUM]; 124 float offset[RK_CNR_V1_MAX_ISO_NUM]; 125 126 // step1 127 // median filter 128 float medRatio1[RK_CNR_V1_MAX_ISO_NUM]; 129 130 // bilateral filter 131 float sigmaR1[RK_CNR_V1_MAX_ISO_NUM]; 132 float uvgain1[RK_CNR_V1_MAX_ISO_NUM]; 133 float bfRatio1[RK_CNR_V1_MAX_ISO_NUM]; 134 int hbf_wgt_clip[RK_CNR_V1_MAX_ISO_NUM]; 135 136 137 // step2 138 // median filter 139 float medRatio2[RK_CNR_V1_MAX_ISO_NUM]; 140 141 // bilateral filter 142 float sigmaR2[RK_CNR_V1_MAX_ISO_NUM]; 143 float uvgain2[RK_CNR_V1_MAX_ISO_NUM]; 144 145 // step3 146 // bilateral filter 147 float sigmaR3[RK_CNR_V1_MAX_ISO_NUM]; 148 float uvgain3[RK_CNR_V1_MAX_ISO_NUM]; 149 float bfRatio3[RK_CNR_V1_MAX_ISO_NUM]; 150 151 // bilateral filter kernels 152 float kernel_5x5_table[5]; 153 } RK_CNR_Params_V1_t; 154 155 typedef struct RK_CNR_Params_V1_Select_s 156 { 157 int enable; 158 159 // bypass 160 int rkcnr_hq_bila_bypass; 161 int rkcnr_lq_bila_bypass; 162 163 // gain 164 float rkcnr_exgain; 165 float rkcnr_g_gain; 166 167 // 168 float ratio; 169 float offset; 170 171 // step1 172 // median filter 173 float medRatio1; 174 175 // bilateral filter 176 float sigmaR1; 177 float uvgain1; 178 float bfRatio1; 179 int hbf_wgt_clip; 180 181 // step2 182 183 // median filter 184 float medRatio2; 185 186 // bilateral filter 187 float sigmaR2; 188 float uvgain2; 189 190 // step3 191 // bilateral filter 192 float sigmaR3; 193 float uvgain3; 194 float bfRatio3; 195 196 // bilateral filter kernels 197 float kernel_5x5_table[5]; 198 199 } RK_CNR_Params_V1_Select_t; 200 201 202 typedef struct Acnr_Manual_Attr_V1_s 203 { 204 int cnrEn; 205 RK_CNR_Params_V1_Select_t stSelect; 206 207 } Acnr_Manual_Attr_V1_t; 208 209 typedef struct Acnr_Auto_Attr_V1_s 210 { 211 //all ISO params and select param 212 int cnrEn; 213 214 RK_CNR_Params_V1_t stParams; 215 RK_CNR_Params_V1_Select_t stSelect; 216 217 } Acnr_Auto_Attr_V1_t; 218 219 typedef struct Acnr_ProcResult_V1_s { 220 int cnrEn; 221 222 //for sw simultaion 223 //RK_CNR_Params_V1_Select_t stSelect; 224 225 //for hw register 226 RK_CNR_Fix_V1_t* stFix; 227 } Acnr_ProcResult_V1_t; 228 229 230 typedef struct Acnr_Config_V1_s { 231 Acnr_State_t eState; 232 Acnr_OPMode_t eMode; 233 int rawHeight; 234 int rawWidth; 235 } Acnr_Config_V1_t; 236 237 238 typedef struct rk_aiq_cnr_attrib_v1_s { 239 Acnr_OPMode_t eMode; 240 Acnr_Auto_Attr_V1_t stAuto; 241 Acnr_Manual_Attr_V1_t stManual; 242 } rk_aiq_cnr_attrib_v1_t; 243 244 245 typedef struct rk_aiq_cnr_IQPara_V1_s { 246 struct list_head* listHead; 247 } rk_aiq_cnr_IQPara_V1_t; 248 249 250 //calibdb 251 252 253 //RKAIQ_END_DECLARE 254 255 #endif 256 257