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_AUVNR_ALGO_INT_V1_H_ 21 #define _RK_AIQ_TYPE_AUVNR_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 "auvnr/rk_aiq_types_auvnr_algo_v1.h" 29 #include "uvnr_head_v1.h" 30 31 32 //RKAIQ_BEGIN_DECLARE 33 34 #define UVNR_MAX_ISO_STEP (CALIBDB_NR_SHARP_MAX_ISO_LEVEL) 35 36 typedef enum Auvnr_result_e { 37 AUVNR_RET_SUCCESS = 0, // this has to be 0, if clauses rely on it 38 AUVNR_RET_FAILURE = 1, // process failure 39 AUVNR_RET_INVALID_PARM = 2, // invalid parameter 40 AUVNR_RET_WRONG_CONFIG = 3, // feature not supported 41 AUVNR_RET_BUSY = 4, // there's already something going on... 42 AUVNR_RET_CANCELED = 5, // operation canceled 43 AUVNR_RET_OUTOFMEM = 6, // out of memory 44 AUVNR_RET_OUTOFRANGE = 7, // parameter/value out of range 45 AUVNR_RET_NULL_POINTER = 8, // the/one/all parameter(s) is a(are) NULL pointer(s) 46 AUVNR_RET_DIVISION_BY_ZERO = 9, // a divisor equals ZERO 47 AUVNR_RET_NO_INPUTIMAGE = 10 // no input image 48 } Auvnr_result_t; 49 50 typedef enum Auvnr_State_e { 51 AUVNR_STATE_INVALID = 0, /**< initialization value */ 52 AUVNR_STATE_INITIALIZED = 1, /**< instance is created, but not initialized */ 53 AUVNR_STATE_STOPPED = 2, /**< instance is confiured (ready to start) or stopped */ 54 AUVNR_STATE_RUNNING = 3, /**< instance is running (processes frames) */ 55 AUVNR_STATE_LOCKED = 4, /**< instance is locked (for taking snapshots) */ 56 AUVNR_STATE_MAX /**< max */ 57 } Auvnr_State_t; 58 59 typedef enum Auvnr_OPMode_e { 60 AUVNR_OP_MODE_INVALID = 0, /**< initialization value */ 61 AUVNR_OP_MODE_AUTO = 1, /**< instance is created, but not initialized */ 62 AUVNR_OP_MODE_MANUAL = 2, /**< instance is confiured (ready to start) or stopped */ 63 AUVNR_OP_MODE_MAX /**< max */ 64 } Auvnr_OPMode_t; 65 66 typedef enum Auvnr_ParamMode_e { 67 AUVNR_PARAM_MODE_INVALID = 0, 68 AUVNR_PARAM_MODE_NORMAL = 1, /**< initialization value */ 69 AUVNR_PARAM_MODE_HDR = 2, /**< instance is created, but not initialized */ 70 AUVNR_PARAM_MODE_GRAY = 3, /**< instance is confiured (ready to start) or stopped */ 71 AUVNR_PARAM_MODE_MAX /**< max */ 72 } Auvnr_ParamMode_t; 73 74 typedef struct Auvnr_ExpInfo_s { 75 int hdr_mode; 76 float arTime[3]; 77 float arAGain[3]; 78 float arDGain[3]; 79 int arIso[3]; 80 int arDcgMode[3]; 81 int cur_snr_mode; 82 int snr_mode; 83 84 float preTime[3]; 85 float preAGain[3]; 86 float preDGain[3]; 87 int preIso[3]; 88 int preDcgMode[3]; 89 int pre_snr_mode; 90 91 int mfnr_mode_3to1; 92 } Auvnr_ExpInfo_t; 93 94 typedef struct RK_UVNR_Params_V1_s 95 { 96 #ifndef RK_SIMULATOR_HW 97 float iso[UVNR_MAX_ISO_STEP]; 98 #endif 99 100 char rkuvnrISO[256]; 101 102 //step0: 103 float ratio[UVNR_MAX_ISO_STEP]; 104 float offset[UVNR_MAX_ISO_STEP]; 105 106 //step1 107 int wStep1[UVNR_MAX_ISO_STEP]; 108 int hStep1[UVNR_MAX_ISO_STEP]; 109 int meanSize1[UVNR_MAX_ISO_STEP]; 110 111 int nonMed1[4]; 112 int medSize1[UVNR_MAX_ISO_STEP]; 113 float medRatio1[UVNR_MAX_ISO_STEP]; 114 int isMedIIR1[UVNR_MAX_ISO_STEP]; 115 116 int nonBf1[4]; 117 int bfSize1[UVNR_MAX_ISO_STEP]; 118 float sigmaR1[UVNR_MAX_ISO_STEP]; 119 float sigmaD1[UVNR_MAX_ISO_STEP]; 120 float uvgain1[UVNR_MAX_ISO_STEP]; 121 float bfRatio1[UVNR_MAX_ISO_STEP]; 122 int isRowIIR1[UVNR_MAX_ISO_STEP]; 123 int isYcopy1[UVNR_MAX_ISO_STEP]; 124 125 //step2 126 int block2_ext[4]; 127 128 int wStep2[UVNR_MAX_ISO_STEP]; 129 int hStep2[UVNR_MAX_ISO_STEP]; 130 int meanSize2[UVNR_MAX_ISO_STEP]; 131 132 int nonMed2[4]; 133 int medSize2[UVNR_MAX_ISO_STEP]; 134 float medRatio2[UVNR_MAX_ISO_STEP]; 135 int isMedIIR2[UVNR_MAX_ISO_STEP]; 136 137 int nonBf2[4]; 138 int bfSize2[UVNR_MAX_ISO_STEP]; 139 float sigmaR2[UVNR_MAX_ISO_STEP]; 140 float sigmaD2[UVNR_MAX_ISO_STEP]; 141 float uvgain2[UVNR_MAX_ISO_STEP]; 142 float bfRatio2[UVNR_MAX_ISO_STEP]; 143 int isRowIIR2[UVNR_MAX_ISO_STEP]; 144 int isYcopy2[UVNR_MAX_ISO_STEP]; 145 146 //step3 147 int nonBf3[4]; 148 int bfSize3[UVNR_MAX_ISO_STEP]; 149 float sigmaR3[UVNR_MAX_ISO_STEP]; 150 float sigmaD3[UVNR_MAX_ISO_STEP]; 151 float uvgain3[UVNR_MAX_ISO_STEP]; 152 float bfRatio3[UVNR_MAX_ISO_STEP]; 153 int isRowIIR3[UVNR_MAX_ISO_STEP]; 154 int isYcopy3[UVNR_MAX_ISO_STEP]; 155 156 //kernels 157 float kernel_3x3_table[3]; 158 float kernel_5x5_talbe[5]; 159 float kernel_9x9_table[8]; 160 int kernel_9x9_num; 161 162 //curves 163 int sigmaAdj_x[9]; 164 float sigamAdj_y[9]; 165 166 int threAdj_x[9]; 167 int threAjd_y[9]; 168 }RK_UVNR_Params_V1_t; 169 170 typedef struct RK_UVNR_Params_V1_Select_s 171 { 172 char select_iso[256]; 173 174 //step0 175 float ratio; 176 float offset; 177 178 //step1 179 int wStep1; 180 int hStep1; 181 int meanSize1; 182 183 int nonMed1[4]; 184 int medSize1; 185 float medRatio1; 186 int isMedIIR1; 187 188 int nonBf1[4]; 189 int bfSize1; 190 float sigmaR1; 191 float sigmaD1; 192 float uvgain1; 193 float bfRatio1; 194 int isRowIIR1; 195 int isYcopy1; 196 197 //step2 198 int block2_ext[4]; 199 int wStep2; 200 int hStep2; 201 int meanSize2; 202 203 int nonMed2[4]; 204 int medSize2; 205 float medRatio2; 206 int isMedIIR2; 207 208 int nonBf2[4]; 209 int bfSize2; 210 float sigmaR2; 211 float sigmaD2; 212 float uvgain2; 213 float bfRatio2; 214 int isRowIIR2; 215 int isYcopy2; 216 217 //step3 218 int nonBf3[4]; 219 int bfSize3; 220 float sigmaR3; 221 float sigmaD3; 222 float uvgain3; 223 float bfRatio3; 224 int isRowIIR3; 225 int isYcopy3; 226 227 //kernels 228 float kernel_3x3_table[3]; 229 float kernel_5x5_table[5]; 230 float kernel_9x9_table[8]; 231 int kernel_9x9_num; 232 233 //curves 234 int sigmaAdj_x[9]; 235 float sigmaAdj_y[9]; 236 237 int threAdj_x[9]; 238 int threAdj_y[9]; 239 }RK_UVNR_Params_V1_Select_t; 240 241 242 typedef struct Auvnr_Manual_Attr_V1_s 243 { 244 int uvnrEn; 245 RK_UVNR_Params_V1_Select_t stSelect; 246 247 } Auvnr_Manual_Attr_V1_t; 248 249 typedef struct Auvnr_Auto_Attr_V1_s 250 { 251 //all ISO params and select param 252 int uvnrEn; 253 254 RK_UVNR_Params_V1_t stParams; 255 RK_UVNR_Params_V1_Select_t stSelect; 256 257 } Auvnr_Auto_Attr_V1_t; 258 259 typedef struct Auvnr_ProcResult_V1_s { 260 int uvnrEn; 261 262 //for sw simultaion 263 //RK_UVNR_Params_V1_Select_t stSelect; 264 265 //for hw register 266 RK_UVNR_Fix_V1_t* stFix; 267 268 } Auvnr_ProcResult_V1_t; 269 270 271 typedef struct Auvnr_Config_V1_s { 272 Auvnr_State_t eState; 273 Auvnr_OPMode_t eMode; 274 int rawHeight; 275 int rawWidth; 276 } Auvnr_Config_V1_t; 277 278 279 typedef struct rk_aiq_uvnr_attrib_v1_s { 280 Auvnr_OPMode_t eMode; 281 Auvnr_Auto_Attr_V1_t stAuto; 282 Auvnr_Manual_Attr_V1_t stManual; 283 } rk_aiq_uvnr_attrib_v1_t; 284 285 286 typedef struct rk_aiq_uvnr_IQPara_v1_s { 287 CalibDb_UVNR_t stUvnrPara; 288 } rk_aiq_uvnr_IQPara_v1_t; 289 290 typedef struct rk_aiq_uvnr_JsonPara_v1_s { 291 CalibDbV2_UVNR_t uvnr_v1; 292 } rk_aiq_uvnr_JsonPara_v1_t; 293 294 295 //calibdb 296 297 298 //RKAIQ_END_DECLARE 299 300 #endif 301 302