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_ASHARP_ALGO_INT_V3_H_ 21 #define _RK_AIQ_TYPE_ASHARP_ALGO_INT_V3_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 "asharp3/rk_aiq_types_asharp_algo_v3.h" 29 #include "sharp_head_v3.h" 30 31 32 RKAIQ_BEGIN_DECLARE 33 #define ASHARPV3_RECALCULATE_DELTA_ISO (10) 34 #define RK_SHARP_V3_PBF_DIAM 3 35 #define RK_SHARP_V3_RF_DIAM 3 36 #define RK_SHARP_V3_BF_DIAM 3 37 #define RK_SHARP_V3_AVG_DIAM 3 38 39 #define RK_SHARP_V3_HF_DIAM 3 40 #define RK_SHARP_V3_MF_DIAM 5 41 #define RK_SHARP_V3_LF_DIAM 9 42 #define RK_SHARP_V3_WGT_FILTER_DIAM 5 43 44 #define rk_sharp_V3_sharp_ratio_fix_bits 2 45 #define rk_sharp_V3_gaus_ratio_fix_bits 7 46 #define rk_sharp_V3_bf_ratio_fix_bits 7 47 #define rk_sharp_V3_pbfCoeff_fix_bits 7 48 #define rk_sharp_V3_rfCoeff_fix_bits 7 49 #define rk_sharp_V3_hbfCoeff_fix_bits 7 50 51 #define INTERP_V3(x0, x1, ratio) ((ratio) * ((x1) - (x0)) + x0) 52 #define CLIP(a, min_v, max_v) (((a) < (min_v)) ? (min_v) : (((a) > (max_v)) ? (max_v) : (a))) 53 54 55 #if 1 56 typedef enum Asharp3_result_e { 57 ASHARP3_RET_SUCCESS = 0, // this has to be 0, if clauses rely on it 58 ASHARP3_RET_FAILURE = 1, // process failure 59 ASHARP3_RET_INVALID_PARM = 2, // invalid parameter 60 ASHARP3_RET_WRONG_CONFIG = 3, // feature not supported 61 ASHARP3_RET_BUSY = 4, // there's already something going on... 62 ASHARP3_RET_CANCELED = 5, // operation canceled 63 ASHARP3_RET_OUTOFMEM = 6, // out of memory 64 ASHARP3_RET_OUTOFRANGE = 7, // parameter/value out of range 65 ASHARP3_RET_NULL_POINTER = 8, // the/one/all parameter(s) is a(are) NULL pointer(s) 66 ASHARP3_RET_DIVISION_BY_ZERO = 9, // a divisor equals ZERO 67 ASHARP3_RET_NO_INPUTIMAGE = 10 // no input image 68 } Asharp3_result_t; 69 70 typedef enum Asharp3_State_e { 71 ASHARP3_STATE_INVALID = 0, /**< initialization value */ 72 ASHARP3_STATE_INITIALIZED = 1, /**< instance is created, but not initialized */ 73 ASHARP3_STATE_STOPPED = 2, /**< instance is confiured (ready to start) or stopped */ 74 ASHARP3_STATE_RUNNING = 3, /**< instance is running (processes frames) */ 75 ASHARP3_STATE_LOCKED = 4, /**< instance is locked (for taking snapshots) */ 76 ASHARP3_STATE_MAX /**< max */ 77 } Asharp3_State_t; 78 79 typedef enum Asharp3_OPMode_e { 80 ASHARP3_OP_MODE_INVALID = 0, /**< initialization value */ 81 ASHARP3_OP_MODE_AUTO = 1, /**< instance is created, but not initialized */ 82 ASHARP3_OP_MODE_MANUAL = 2, /**< instance is confiured (ready to start) or stopped */ 83 ASHARP3_OP_MODE_MAX /**< max */ 84 } Asharp3_OPMode_t; 85 86 typedef enum Asharp3_ParamMode_e { 87 ASHARP3_PARAM_MODE_INVALID = 0, 88 ASHARP3_PARAM_MODE_NORMAL = 1, /**< initialization value */ 89 ASHARP3_PARAM_MODE_HDR = 2, /**< instance is created, but not initialized */ 90 ASHARP3_PARAM_MODE_GRAY = 3, /**< instance is confiured (ready to start) or stopped */ 91 ASHARP3_PARAM_MODE_MAX /**< max */ 92 } Asharp3_ParamMode_t; 93 94 #endif 95 96 typedef struct Asharp3_ExpInfo_s { 97 int hdr_mode; 98 float arTime[3]; 99 float arAGain[3]; 100 float arDGain[3]; 101 int arIso[3]; 102 int snr_mode; 103 int rawWidth; 104 int rawHeight; 105 } Asharp3_ExpInfo_t; 106 107 108 typedef struct RK_SHARP_Params_V3_s 109 { 110 int enable; 111 112 int iso[RK_SHARP_V3_MAX_ISO_NUM]; 113 short luma_point [RK_SHARP_V3_LUMA_POINT_NUM]; 114 short luma_sigma [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM]; 115 float pbf_gain [RK_SHARP_V3_MAX_ISO_NUM]; 116 float pbf_add [RK_SHARP_V3_MAX_ISO_NUM]; 117 float pbf_ratio [RK_SHARP_V3_MAX_ISO_NUM]; 118 float gaus_ratio [RK_SHARP_V3_MAX_ISO_NUM]; 119 float sharp_ratio [RK_SHARP_V3_MAX_ISO_NUM]; 120 short lum_clip_h [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM]; 121 float bf_gain [RK_SHARP_V3_MAX_ISO_NUM]; 122 float bf_add [RK_SHARP_V3_MAX_ISO_NUM]; 123 float bf_ratio [RK_SHARP_V3_MAX_ISO_NUM]; 124 short ehf_th [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM]; 125 126 float kernel_pre_bila_filter[RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_PBF_DIAM * RK_SHARP_V3_PBF_DIAM]; 127 float kernel_range_filter [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_RF_DIAM * RK_SHARP_V3_RF_DIAM]; 128 float kernel_bila_filter [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_BF_DIAM * RK_SHARP_V3_BF_DIAM]; 129 130 #if 1 131 ////////////////////////////////////////////////////////////////////////// 132 // test params 133 float sharp_ratio_h [RK_SHARP_V3_MAX_ISO_NUM]; 134 float sharp_ratio_m [RK_SHARP_V3_MAX_ISO_NUM]; 135 float sharp_ratio_l [RK_SHARP_V3_MAX_ISO_NUM]; 136 short clip_hf [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM]; 137 short clip_mf [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM]; 138 short clip_lf [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM]; 139 short local_wgt [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LUMA_POINT_NUM]; 140 141 short kernel_hf_filter [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_HF_DIAM * RK_SHARP_V3_HF_DIAM]; 142 short kernel_mf_filter [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_MF_DIAM * RK_SHARP_V3_MF_DIAM]; 143 short kernel_lf_filter [RK_SHARP_V3_MAX_ISO_NUM][RK_SHARP_V3_LF_DIAM * RK_SHARP_V3_LF_DIAM]; 144 #endif 145 146 } RK_SHARP_Params_V3_t; 147 148 typedef struct RK_SHARP_Params_V3_Select_s 149 { 150 int enable; 151 152 short luma_point [RK_SHARP_V3_LUMA_POINT_NUM]; 153 short luma_sigma [RK_SHARP_V3_LUMA_POINT_NUM]; 154 float pbf_gain ; 155 float pbf_add ; 156 float pbf_ratio ; 157 float gaus_ratio ; 158 float sharp_ratio ; 159 short lum_clip_h [RK_SHARP_V3_LUMA_POINT_NUM]; 160 float bf_gain ; 161 float bf_add ; 162 float bf_ratio ; 163 short ehf_th [RK_SHARP_V3_LUMA_POINT_NUM]; 164 165 float kernel_pre_bila_filter[RK_SHARP_V3_PBF_DIAM * RK_SHARP_V3_PBF_DIAM]; 166 float kernel_range_filter [RK_SHARP_V3_RF_DIAM * RK_SHARP_V3_RF_DIAM]; 167 float kernel_bila_filter [RK_SHARP_V3_BF_DIAM * RK_SHARP_V3_BF_DIAM]; 168 169 #if 1 170 ////////////////////////////////////////////////////////////////////////// 171 // test params 172 float sharp_ratio_h ; 173 float sharp_ratio_m ; 174 float sharp_ratio_l ; 175 short clip_hf [RK_SHARP_V3_LUMA_POINT_NUM]; 176 short clip_mf [RK_SHARP_V3_LUMA_POINT_NUM]; 177 short clip_lf [RK_SHARP_V3_LUMA_POINT_NUM]; 178 short local_wgt [RK_SHARP_V3_LUMA_POINT_NUM]; 179 180 short kernel_hf_filter [RK_SHARP_V3_HF_DIAM * RK_SHARP_V3_HF_DIAM]; 181 short kernel_mf_filter [RK_SHARP_V3_MF_DIAM * RK_SHARP_V3_MF_DIAM]; 182 short kernel_lf_filter [RK_SHARP_V3_LF_DIAM * RK_SHARP_V3_LF_DIAM]; 183 #endif 184 185 } RK_SHARP_Params_V3_Select_t; 186 187 188 typedef struct Asharp_Manual_Attr_V3_s 189 { 190 RK_SHARP_Params_V3_Select_t stSelect; 191 192 } Asharp_Manual_Attr_V3_t; 193 194 typedef struct Asharp_Auto_Attr_V3_s 195 { 196 //all ISO params and select param 197 198 RK_SHARP_Params_V3_t stParams; 199 RK_SHARP_Params_V3_Select_t stSelect; 200 201 } Asharp_Auto_Attr_V3_t; 202 203 typedef struct Asharp_ProcResult_V3_s { 204 int sharpEn; 205 206 //for sw simultaion 207 //RK_SHARP_Params_V3_Select_t stSelect; 208 209 //for hw register 210 RK_SHARP_Fix_V3_t* stFix; 211 } Asharp_ProcResult_V3_t; 212 213 214 typedef struct Asharp_Config_V3_s { 215 Asharp3_State_t eState; 216 Asharp3_OPMode_t eMode; 217 int rawHeight; 218 int rawWidth; 219 } Asharp_Config_V3_t; 220 221 222 typedef struct rk_aiq_sharp_attrib_v3_s { 223 Asharp3_OPMode_t eMode; 224 Asharp_Auto_Attr_V3_t stAuto; 225 Asharp_Manual_Attr_V3_t stManual; 226 } rk_aiq_sharp_attrib_v3_t; 227 228 229 typedef struct rk_aiq_sharp_IQPara_V3_s { 230 struct list_head* listHead; 231 } rk_aiq_sharp_IQPara_V3_t; 232 233 234 //calibdb 235 236 237 RKAIQ_END_DECLARE 238 239 #endif 240 241