1 #ifndef __RK_AIQ_TYPES_AF_ALGO_H__ 2 #define __RK_AIQ_TYPES_AF_ALGO_H__ 3 4 #include <sys/time.h> 5 6 #include "rk_aiq_comm.h" 7 8 RKAIQ_BEGIN_DECLARE 9 10 #define RKAIQ_RAWAF_WIN_NUM 2 11 #define RKAIQ_RAWAF_LINE_NUM 5 12 #define RKAIQ_RAWAF_GAMMA_NUM 17 13 #define RKAIQ_RAWAF_SUMDATA_ROW 15 14 #define RKAIQ_RAWAF_SUMDATA_COLUMN 15 15 #define RKAIQ_RAWAF_SUMDATA_NUM 225 16 #define RKAIQ_RAWAF_NEXT_ZOOMFOCUS_NUM 300 17 #define RKAIQ_RAWAF_ROI_SUBWINS_VCNT 15 18 #define RKAIQ_RAWAF_ROI_SUBWINS_HCNT 15 19 #define RKAIQ_RAWAF_ROI_SUBWINS_NUM (RKAIQ_RAWAF_ROI_SUBWINS_VCNT * RKAIQ_RAWAF_ROI_SUBWINS_HCNT) 20 #define RKAIQ_PDAF_BLK_DATA_HEIGHT_MAX 64 21 #define RKAIQ_PDAF_FINE_SEARCH_RANGE_MAX 10 22 #define RKAIQ_PDAF_ISOPARA_NUM 16 23 #define RKAIQ_PDAF_STEPRATIO_NUM 7 24 #define RKAIQ_PDAF_RESOLUTION_NUM 10 25 26 typedef enum { 27 PDAF_DATA_INVAL = 0, 28 PDAF_DATA_HSPD = 1, 29 PDAF_DATA_MLPD = 2, 30 PDAF_DATA_DPD = 3, 31 PDAF_DATA_QPD = 4 32 } PdafDataType_t; 33 34 typedef enum { 35 PDAF_DIR_INVAL = 0, 36 PDAF_DIR_LEFT = 1, 37 PDAF_DIR_RIGHT = 2, 38 PDAF_DIR_TOP = 3, 39 PDAF_DIR_DOWN = 4 40 } PdafDataDir_t; 41 42 typedef enum { 43 PDAF_TRANS_LR_BYTURNS = 0, 44 PDAF_TRANS_IN_PKT = 1, 45 } PdafTransType_t; 46 47 typedef struct { 48 unsigned long long roia_sharpness; 49 unsigned int roia_luminance; 50 unsigned int roib_sharpness; 51 unsigned int roib_luminance; 52 unsigned int global_sharpness[RKAIQ_RAWAF_SUMDATA_NUM]; 53 int lowpass_fv4_4[RKAIQ_RAWAF_SUMDATA_NUM]; 54 int lowpass_fv8_8[RKAIQ_RAWAF_SUMDATA_NUM]; 55 int lowpass_highlht[RKAIQ_RAWAF_SUMDATA_NUM]; 56 int lowpass_highlht2[RKAIQ_RAWAF_SUMDATA_NUM]; 57 int lowpass_id; 58 59 struct timeval focus_starttim; 60 struct timeval focus_endtim; 61 struct timeval zoom_starttim; 62 struct timeval zoom_endtim; 63 int64_t sof_tim; 64 int focusCode; 65 int zoomCode; 66 bool focusCorrection; 67 bool zoomCorrection; 68 float angleZ; 69 } rk_aiq_af_algo_stat_v20_t; 70 71 typedef struct { 72 bool enable; 73 int ldg_xl; 74 int ldg_yl; 75 int ldg_kl; 76 int ldg_xh; 77 int ldg_yh; 78 int ldg_kh; 79 int highlight_th; 80 int highlight2_th; 81 } rk_aiq_af_algo_sp_meas_t; 82 83 typedef struct { 84 unsigned char contrast_af_en; 85 unsigned char rawaf_sel; 86 87 unsigned char window_num; 88 unsigned short wina_h_offs; 89 unsigned short wina_v_offs; 90 unsigned short wina_h_size; 91 unsigned short wina_v_size; 92 93 unsigned short winb_h_offs; 94 unsigned short winb_v_offs; 95 unsigned short winb_h_size; 96 unsigned short winb_v_size; 97 98 unsigned char gamma_flt_en; 99 unsigned short gamma_y[RKAIQ_RAWAF_GAMMA_NUM]; 100 101 unsigned char gaus_flt_en; 102 unsigned char gaus_h0; 103 unsigned char gaus_h1; 104 unsigned char gaus_h2; 105 106 unsigned char line_en[RKAIQ_RAWAF_LINE_NUM]; 107 unsigned char line_num[RKAIQ_RAWAF_LINE_NUM]; 108 109 unsigned short afm_thres; 110 111 unsigned char lum_var_shift[RKAIQ_RAWAF_WIN_NUM]; 112 unsigned char afm_var_shift[RKAIQ_RAWAF_WIN_NUM]; 113 114 rk_aiq_af_algo_sp_meas_t sp_meas; 115 } rk_aiq_af_algo_meas_v20_t; 116 117 typedef struct { 118 unsigned int wndb_luma; 119 unsigned int wndb_sharpness; 120 unsigned int winb_highlit_cnt; 121 unsigned int wnda_luma[RKAIQ_RAWAF_SUMDATA_NUM]; 122 unsigned int wnda_fv_v1[RKAIQ_RAWAF_SUMDATA_NUM]; 123 unsigned int wnda_fv_v2[RKAIQ_RAWAF_SUMDATA_NUM]; 124 unsigned int wnda_fv_h1[RKAIQ_RAWAF_SUMDATA_NUM]; 125 unsigned int wnda_fv_h2[RKAIQ_RAWAF_SUMDATA_NUM]; 126 unsigned int wina_highlit_cnt[RKAIQ_RAWAF_SUMDATA_NUM]; 127 int comp_bls; 128 129 struct timeval focus_starttim; 130 struct timeval focus_endtim; 131 struct timeval zoom_starttim; 132 struct timeval zoom_endtim; 133 int64_t sof_tim; 134 int focusCode; 135 int zoomCode; 136 bool focusCorrection; 137 bool zoomCorrection; 138 float angleZ; 139 } rk_aiq_af_algo_stat_v30_t; 140 141 typedef struct { 142 unsigned char af_en; 143 unsigned char rawaf_sel; 144 unsigned char gamma_en; 145 unsigned char gaus_en; 146 unsigned char v1_fir_sel; 147 unsigned char hiir_en; 148 unsigned char viir_en; 149 unsigned char v1_fv_outmode; // 0 square, 1 absolute 150 unsigned char v2_fv_outmode; // 0 square, 1 absolute 151 unsigned char h1_fv_outmode; // 0 square, 1 absolute 152 unsigned char h2_fv_outmode; // 0 square, 1 absolute 153 unsigned char ldg_en; 154 unsigned char accu_8bit_mode; 155 unsigned char ae_mode; 156 unsigned char y_mode; 157 unsigned char line_en[RKAIQ_RAWAF_LINE_NUM]; 158 unsigned char line_num[RKAIQ_RAWAF_LINE_NUM]; 159 160 unsigned char window_num; 161 unsigned short wina_h_offs; 162 unsigned short wina_v_offs; 163 unsigned short wina_h_size; 164 unsigned short wina_v_size; 165 unsigned short winb_h_offs; 166 unsigned short winb_v_offs; 167 unsigned short winb_h_size; 168 unsigned short winb_v_size; 169 170 unsigned short gamma_y[RKAIQ_RAWAF_GAMMA_NUM]; 171 172 // [old version param] 173 unsigned short thres; 174 unsigned char shift_sum_a; 175 unsigned char shift_sum_b; 176 unsigned char shift_y_a; 177 unsigned char shift_y_b; 178 179 /**********[Vertical IIR (v1 & v2)]************/ 180 short v1_iir_coe[9]; 181 short v1_fir_coe[3]; 182 short v2_iir_coe[3]; 183 short v2_fir_coe[3]; 184 185 /**********[Horizontal IIR (h1 & h2)]************/ 186 short h1_iir1_coe[6]; 187 short h2_iir1_coe[6]; 188 short h1_iir2_coe[6]; 189 short h2_iir2_coe[6]; 190 191 /**********[Focus value statistic param]**********/ 192 // level depended gain 193 // input8 lumi, output8bit gain 194 unsigned char h_ldg_lumth[2]; //luminance thresh 195 unsigned char h_ldg_gain[2]; //gain for [minLum,maxLum] 196 unsigned short h_ldg_gslp[2]; //[slope_low,-slope_high] 197 unsigned char v_ldg_lumth[2]; 198 unsigned char v_ldg_gain[2]; 199 unsigned short v_ldg_gslp[2]; 200 201 // coring 202 unsigned short v_fv_thresh; 203 unsigned short h_fv_thresh; 204 205 // left shift, more needed if outmode=square 206 unsigned char v1_fv_shift; //only for sel1 207 unsigned char v2_fv_shift; 208 unsigned char h1_fv_shift; 209 unsigned char h2_fv_shift; 210 211 /**********[High light]**********/ 212 unsigned short highlit_thresh; 213 } rk_aiq_af_algo_meas_v30_t; 214 215 typedef struct { 216 unsigned char af_en; 217 unsigned char rawaf_sel; 218 unsigned char gamma_en; 219 unsigned char gaus_en; 220 unsigned char v1_fir_sel; 221 unsigned char hiir_en; 222 unsigned char viir_en; 223 unsigned char v1_fv_outmode; // 0 square, 1 absolute 224 unsigned char v2_fv_outmode; // 0 square, 1 absolute 225 unsigned char h1_fv_outmode; // 0 square, 1 absolute 226 unsigned char h2_fv_outmode; // 0 square, 1 absolute 227 unsigned char ldg_en; 228 unsigned char accu_8bit_mode; 229 unsigned char ae_mode; 230 unsigned char y_mode; 231 unsigned char vldg_sel; 232 unsigned char sobel_sel; 233 unsigned char v_dnscl_mode; 234 unsigned char from_awb; 235 unsigned char from_ynr; 236 unsigned char ae_config_use; 237 unsigned char line_en[RKAIQ_RAWAF_LINE_NUM]; 238 unsigned char line_num[RKAIQ_RAWAF_LINE_NUM]; 239 240 unsigned char window_num; 241 unsigned short wina_h_offs; 242 unsigned short wina_v_offs; 243 unsigned short wina_h_size; 244 unsigned short wina_v_size; 245 unsigned short winb_h_offs; 246 unsigned short winb_v_offs; 247 unsigned short winb_h_size; 248 unsigned short winb_v_size; 249 250 unsigned short gamma_y[RKAIQ_RAWAF_GAMMA_NUM]; 251 252 // [old version param] 253 unsigned short thres; 254 unsigned char shift_sum_a; 255 unsigned char shift_sum_b; 256 unsigned char shift_y_a; 257 unsigned char shift_y_b; 258 259 char gaus_coe[9]; 260 261 /**********[Vertical IIR (v1 & v2)]************/ 262 short v1_iir_coe[3]; 263 short v1_fir_coe[3]; 264 short v2_iir_coe[3]; 265 short v2_fir_coe[3]; 266 267 /**********[Horizontal IIR (h1 & h2)]************/ 268 short h1_iir1_coe[6]; 269 short h2_iir1_coe[6]; 270 short h1_iir2_coe[6]; 271 short h2_iir2_coe[6]; 272 273 /**********[Focus value statistic param]**********/ 274 // level depended gain 275 // input8 lumi, output8bit gain 276 unsigned char h_ldg_lumth[2]; //luminance thresh 277 unsigned char h_ldg_gain[2]; //gain for [minLum,maxLum] 278 unsigned short h_ldg_gslp[2]; //[slope_low,-slope_high] 279 unsigned char v_ldg_lumth[2]; 280 unsigned char v_ldg_gain[2]; 281 unsigned short v_ldg_gslp[2]; 282 283 // coring 284 unsigned short v_fv_thresh; 285 unsigned short h_fv_thresh; 286 287 // left shift, more needed if outmode=square 288 unsigned char v1_fv_shift; //only for sel1 289 unsigned char v2_fv_shift; 290 unsigned char h1_fv_shift; 291 unsigned char h2_fv_shift; 292 293 /**********[High light]**********/ 294 unsigned short highlit_thresh; 295 } rk_aiq_af_algo_meas_v31_t; 296 297 typedef struct { 298 unsigned char af_en; 299 unsigned char rawaf_sel; 300 unsigned char gamma_en; 301 unsigned char gaus_en; 302 unsigned char v1_fir_sel; 303 unsigned char hiir_en; 304 unsigned char viir_en; 305 unsigned char v1_fv_outmode; // 0 square, 1 absolute 306 unsigned char v2_fv_outmode; // 0 square, 1 absolute 307 unsigned char h1_fv_outmode; // 0 square, 1 absolute 308 unsigned char h2_fv_outmode; // 0 square, 1 absolute 309 unsigned char ldg_en; 310 unsigned char accu_8bit_mode; 311 unsigned char ae_mode; 312 unsigned char y_mode; 313 unsigned char vldg_sel; 314 unsigned char sobel_sel; 315 unsigned char v_dnscl_mode; 316 unsigned char from_awb; 317 unsigned char from_ynr; 318 unsigned char ae_config_use; 319 unsigned char ae_sel; 320 unsigned char from_bnr; 321 unsigned char bnrin_shift; 322 unsigned char hiir_left_border_mode; 323 unsigned char avg_ds_en; 324 unsigned char avg_ds_mode; 325 326 unsigned char line_en[RKAIQ_RAWAF_LINE_NUM]; 327 unsigned char line_num[RKAIQ_RAWAF_LINE_NUM]; 328 329 unsigned char window_num; 330 unsigned short wina_h_offs; 331 unsigned short wina_v_offs; 332 unsigned short wina_h_size; 333 unsigned short wina_v_size; 334 unsigned short winb_h_offs; 335 unsigned short winb_v_offs; 336 unsigned short winb_h_size; 337 unsigned short winb_v_size; 338 339 unsigned short gamma_y[RKAIQ_RAWAF_GAMMA_NUM]; 340 341 // [old version param] 342 unsigned short thres; 343 unsigned char shift_sum_a; 344 unsigned char shift_sum_b; 345 unsigned char shift_y_a; 346 unsigned char shift_y_b; 347 348 char gaus_coe[9]; 349 350 /**********[Vertical IIR (v1 & v2)]************/ 351 short v1_iir_coe[3]; 352 short v1_fir_coe[3]; 353 short v2_iir_coe[3]; 354 short v2_fir_coe[3]; 355 356 /**********[Horizontal IIR (h1 & h2)]************/ 357 short h1_iir1_coe[6]; 358 short h2_iir1_coe[6]; 359 short h1_iir2_coe[6]; 360 short h2_iir2_coe[6]; 361 362 /**********[Focus value statistic param]**********/ 363 // level depended gain 364 // input8 lumi, output8bit gain 365 unsigned char h_ldg_lumth[2]; //luminance thresh 366 unsigned char h_ldg_gain[2]; //gain for [minLum,maxLum] 367 unsigned short h_ldg_gslp[2]; //[slope_low,-slope_high] 368 unsigned char v_ldg_lumth[2]; 369 unsigned char v_ldg_gain[2]; 370 unsigned short v_ldg_gslp[2]; 371 unsigned char hldg_dilate_num; 372 373 // coring 374 unsigned short v_fv_thresh; 375 unsigned short h_fv_thresh; 376 unsigned short v_fv_limit; 377 unsigned short v_fv_slope; 378 unsigned short h_fv_limit; 379 unsigned short h_fv_slope; 380 381 // left shift, more needed if outmode=square 382 unsigned char v1_fv_shift; //only for sel1 383 unsigned char v2_fv_shift; 384 unsigned char h1_fv_shift; 385 unsigned char h2_fv_shift; 386 387 // acc mode 388 unsigned char v1_acc_mode; 389 unsigned char v2_acc_mode; 390 unsigned char h1_acc_mode; 391 unsigned char h2_acc_mode; 392 393 /**********[High light]**********/ 394 unsigned short highlit_thresh; 395 396 // bls for af 397 unsigned char bls_en; 398 short bls_offset; 399 } rk_aiq_af_algo_meas_v32_t; 400 401 typedef rk_aiq_af_algo_meas_v20_t rk_aiq_af_algo_meas_t; 402 typedef rk_aiq_af_algo_stat_v20_t rk_aiq_af_algo_stat_t; 403 404 typedef struct { 405 bool vcm_config_valid; 406 bool zoomfocus_modifypos; 407 bool focus_correction; 408 bool zoom_correction; 409 bool lens_pos_valid; 410 bool zoom_pos_valid; 411 bool send_zoom_reback; 412 bool send_focus_reback; 413 bool end_zoom_chg; 414 bool focus_noreback; 415 int next_pos_num; 416 int next_lens_pos[RKAIQ_RAWAF_NEXT_ZOOMFOCUS_NUM]; 417 int next_zoom_pos[RKAIQ_RAWAF_NEXT_ZOOMFOCUS_NUM]; 418 int use_manual; 419 int auto_focpos; 420 int auto_zoompos; 421 int manual_focpos; 422 int manual_zoompos; 423 int vcm_start_ma; 424 int vcm_end_ma; 425 } rk_aiq_af_algo_focus_pos_t; 426 427 typedef struct { 428 bool pdMirror; 429 unsigned int pdMean; 430 unsigned short pdWidth; 431 unsigned short pdHeight; 432 unsigned short *pdLData; 433 unsigned short *pdRData; 434 } rk_aiq_pdaf_algo_stat_t; 435 436 typedef struct { 437 unsigned char pdMirrorInCalib; 438 unsigned char pdChangeLeftRight; 439 unsigned char pdLRInDiffLine; 440 unsigned short pdWidth; 441 unsigned short pdHeight; 442 struct rkmodule_pdaf_inf *otp_pdaf; 443 } rk_aiq_pdaf_algo_meas_t; 444 445 typedef struct { 446 int iso; 447 float pdConfdRatio0; 448 float pdConfdRatio1; 449 float pdConfdRatio2; 450 float pdConfdRatio3; 451 float pdConfdThresh; 452 float stablePdRatio; 453 float stableCntRatio; 454 unsigned short convergedInfPdThresh; 455 unsigned short convergedMacPdThresh; 456 unsigned short defocusInfPdThresh; 457 unsigned short defocusMacPdThresh; 458 unsigned short stablePdOffset; 459 unsigned short noconfCntThresh; 460 unsigned char blkCntW; 461 unsigned char blkCntH; 462 463 unsigned int fineSearchConfidence[RKAIQ_PDAF_FINE_SEARCH_RANGE_MAX]; 464 int fineSearchRange[RKAIQ_PDAF_FINE_SEARCH_RANGE_MAX]; 465 int fineSearchStepPos[RKAIQ_PDAF_FINE_SEARCH_RANGE_MAX]; 466 int fineSearchTblCnt; 467 } rk_aiq_pdaf_algo_isopara_t; 468 469 typedef struct rk_aiq_pdaf_resolution_s { 470 unsigned short pdOutWidth; 471 unsigned short pdOutHeight; 472 unsigned short pdCropX; 473 unsigned short pdCropY; 474 unsigned short pdBaseWidth; 475 unsigned short pdBaseHeight; 476 } rk_aiq_pdaf_resolution_t; 477 478 typedef struct { 479 unsigned char pdVsImgoutMirror; 480 unsigned char pdVsCdDebug; 481 unsigned char pdDumpDebug; 482 unsigned char pdVerBinning; 483 unsigned char pdFrmInValid; 484 unsigned char pdDgainValid; 485 unsigned char pdGainMapNormEn; 486 unsigned char pdConfdMode; 487 unsigned char pdDiscardRegionEn; 488 unsigned short pdDumpMaxFrm; 489 unsigned short pdDataBit; 490 unsigned short pdBlkLevel; 491 unsigned short pdSearchRadius; 492 unsigned short pdConfdMwinFactor; 493 unsigned short pdGainMapW; 494 unsigned short pdGainMapH; 495 unsigned short pdDccMapW; 496 unsigned short pdDccMapH; 497 float pdStepRatio[RKAIQ_PDAF_STEPRATIO_NUM]; 498 unsigned short pdStepDefocus[RKAIQ_PDAF_STEPRATIO_NUM]; 499 rk_aiq_pdaf_algo_isopara_t pdIsoPara[RKAIQ_PDAF_ISOPARA_NUM]; 500 int pdIsoParaCnt; 501 unsigned int pdCenterMinFv; 502 float pdCenterMinRatio; 503 float pdHighlightRatio; 504 float pdNoiseSn; 505 float pdNoiseRn[2]; 506 float pdNoisePn; 507 float pdSatValRatio; 508 float pdSatCntRatio; 509 float pdLessTextureRatio; 510 short pdTargetOffset; 511 rk_aiq_pdaf_resolution_t pdResoInf; 512 } rk_aiq_pdaf_algo_config_t; 513 514 int get_lpfv(uint32_t sequence, uint8_t *image_buf, int32_t _img_width, int32_t _img_height, 515 int32_t _img_width_align, int32_t _img_height_align, uint8_t *pAfTmp, uint32_t sub_shp4_4[225], 516 uint32_t sub_shp8_8[225], uint32_t high_light[225], uint32_t high_light2[225], rk_aiq_af_algo_meas_v20_t *param); 517 518 RKAIQ_END_DECLARE 519 520 #endif 521