#include "awb_xml2json.h" #include "RkAiqCalibApi.h" void CalibV2AwbV21Free(CamCalibDbV2Context_t *calibV2) { CalibDbV2_Wb_Para_V21_t* wb_v21 = (CalibDbV2_Wb_Para_V21_t*)(CALIBDBV2_GET_MODULE_PTR(calibV2, wb_v21)); if(wb_v21 == NULL){ return; } CalibDbV2_Wb_Awb_Ext_Com_Para_t *commV21 = &wb_v21->autoExtPara; CalibDbV2_Wb_Awb_Para_V21_t* autoParaV21 = &wb_v21->autoPara; free(commV21->lightSourceForFirstFrame); free(commV21->wbGainClip.cct); free(commV21->wbGainClip.cri_bound_up); free(commV21->wbGainClip.cri_bound_low); free(commV21->singleColorProces.colorBlock); for(int i=0;isingleColorProces.lsUsedForEstimation_len;i++){ free(commV21->singleColorProces.lsUsedForEstimation[i].name); } free(commV21->singleColorProces.lsUsedForEstimation); free(commV21->tolerance.toleranceValue); free(commV21->tolerance.lumaValue); free(commV21->runInterval.intervalValue); free(commV21->runInterval.lumaValue); for(int i=0;iwbGainAdjust.lutAll_len;i++){ free(commV21->wbGainAdjust.lutAll[i].ct_lut_out); free(commV21->wbGainAdjust.lutAll[i].cri_lut_out); } free(commV21->wbGainAdjust.lutAll); free(commV21->weightForNightGainCalc); free(commV21->division.wpNumTh.high); free(commV21->division.wpNumTh.low); free(commV21->division.wpNumTh.lumaValue); free(commV21->xyRegionStableSelection.wpNumTh.lumaValue); free(commV21->xyRegionStableSelection.wpNumTh.forBigType); free(commV21->xyRegionStableSelection.wpNumTh.forExtraType); for(int i=0;ilsUsedForYuvDet_len;i++){ free(autoParaV21->lsUsedForYuvDet[i]); } free(autoParaV21->lsUsedForYuvDet); for(int i=0;ilightSources_len;i++){ free(autoParaV21->lightSources[i].name); } free(autoParaV21->lightSources); free(autoParaV21->limitRange.lumaValue); free(autoParaV21->limitRange.maxB); free(autoParaV21->limitRange.maxR); free(autoParaV21->limitRange.maxG); free(autoParaV21->limitRange.maxY); free(autoParaV21->limitRange.minB); free(autoParaV21->limitRange.minR); free(autoParaV21->limitRange.minG); free(autoParaV21->limitRange.minY); } void convertCalib2calibV21(const CamCalibDbContext_t *calib,CamCalibDbV2Context_t *calibV2) { const CalibDb_Awb_Calib_Para_V201_t *awb_calib_v21 = NULL; list_head *awb_calib_para_list = (list_head*)CALIBDB_GET_MODULE_PTR((void*)calib, awb_calib_para_v201); if (awb_calib_para_list) GetAwbProfileFromAwbCalibV201ListByIdx(awb_calib_para_list, 0, &awb_calib_v21); else return; const CalibDb_Awb_Adjust_Para_t *awb_adjust = NULL; list_head *awb_adjust_list = (list_head*)CALIBDB_GET_MODULE_PTR((void*)calib, awb_adjust_para); if (awb_adjust_list) GetAwbProfileFromAwbAdjustListByIdx(awb_adjust_list, 0, &awb_adjust); else return; CalibDbV2_Wb_Para_V21_t* wb_v21 = (CalibDbV2_Wb_Para_V21_t*)(CALIBDBV2_GET_MODULE_PTR(calibV2, wb_v21)); memset(wb_v21, 0, sizeof(CalibDbV2_Wb_Para_V21_t)); CalibDbV2_Wb_Awb_Ext_Com_Para_t *commV21 = &wb_v21->autoExtPara; CalibDbV2_Wb_Awb_Para_V21_t* autoParaV21 = &wb_v21->autoPara; commV21->lightSourceForFirstFrame= (char*)malloc(sizeof(char)*CALD_AWB_ILLUMINATION_NAME); commV21->wbGainClip.cct_len = awb_calib_v21->cct_clip_cfg.grid_num; commV21->wbGainClip.cri_bound_up_len = awb_calib_v21->cct_clip_cfg.grid_num; commV21->wbGainClip.cri_bound_low_len = awb_calib_v21->cct_clip_cfg.grid_num; commV21->wbGainClip.cct = (float*)malloc(sizeof(float) * commV21->wbGainClip.cct_len); commV21->wbGainClip.cri_bound_up = (float*)malloc(sizeof(float) * commV21->wbGainClip.cct_len); commV21->wbGainClip.cri_bound_low = (float*)malloc(sizeof(float) * commV21->wbGainClip.cct_len); commV21->singleColorProces.colorBlock_len = awb_calib_v21->sSelColorNUM; commV21->singleColorProces.lsUsedForEstimation_len = awb_calib_v21->sIllEstNum; commV21->singleColorProces.colorBlock = (CalibDbV2_Awb_Sgc_Cblk_t*)malloc(sizeof(CalibDbV2_Awb_Sgc_Cblk_t)*commV21->singleColorProces.colorBlock_len); commV21->singleColorProces.lsUsedForEstimation = (CalibDbV2_Awb_Sgc_Ls_t*)malloc(sizeof(CalibDbV2_Awb_Sgc_Ls_t)*commV21->singleColorProces.lsUsedForEstimation_len); for(int i=0;isingleColorProces.lsUsedForEstimation_len;i++){ commV21->singleColorProces.lsUsedForEstimation[i].name = (char*)malloc(sizeof(char)*CALD_AWB_ILLUMINATION_NAME); } commV21->tolerance.lumaValue_len = awb_adjust->tolerance.num; commV21->tolerance.toleranceValue_len = awb_adjust->tolerance.num; commV21->tolerance.toleranceValue = (float*)malloc(sizeof(float)*commV21->tolerance.toleranceValue_len); commV21->tolerance.lumaValue= (float*)malloc(sizeof(float)*commV21->tolerance.lumaValue_len); commV21->runInterval.lumaValue_len = awb_adjust->runInterval.num; commV21->runInterval.intervalValue_len= awb_adjust->runInterval.num; commV21->runInterval.intervalValue = (float*)malloc(sizeof(float)*commV21->runInterval.intervalValue_len); commV21->runInterval.lumaValue= (float*)malloc(sizeof(float)*commV21->runInterval.lumaValue_len); commV21->wbGainAdjust.lutAll_len = awb_adjust->cct_lut_cfg_num; commV21->wbGainAdjust.lutAll = (CalibDbV2_Awb_Cct_Lut_Cfg_Lv_t*)malloc(sizeof(CalibDbV2_Awb_Cct_Lut_Cfg_Lv_t)*commV21->wbGainAdjust.lutAll_len); for(int i=0;iwbGainAdjust.lutAll_len;i++){ commV21->wbGainAdjust.lutAll[i].ct_lut_out_len = awb_adjust->cct_lut_cfg[0].ct_grid_num * awb_adjust->cct_lut_cfg[0].cri_grid_num; commV21->wbGainAdjust.lutAll[i].ct_lut_out = (float*)malloc(sizeof(float)*commV21->wbGainAdjust.lutAll[i].ct_lut_out_len); commV21->wbGainAdjust.lutAll[i].cri_lut_out_len = awb_adjust->cct_lut_cfg[0].ct_grid_num * awb_adjust->cct_lut_cfg[0].cri_grid_num; commV21->wbGainAdjust.lutAll[i].cri_lut_out = (float*)malloc(sizeof(float)*commV21->wbGainAdjust.lutAll[i].cri_lut_out_len); } commV21->weightForNightGainCalc_len = 4; commV21->weightForNightGainCalc = (unsigned char*)malloc(sizeof(unsigned char)*commV21->weightForNightGainCalc_len); autoParaV21->lsUsedForYuvDet_len = 7; autoParaV21->lsUsedForYuvDet = (char**)malloc(sizeof(char*)*autoParaV21->lsUsedForYuvDet_len); for(int i=0;ilsUsedForYuvDet_len;i++){ autoParaV21->lsUsedForYuvDet[i] = (char*)malloc(sizeof(char)*CALD_AWB_ILLUMINATION_NAME); } autoParaV21->lightSources_len = 7; autoParaV21->lightSources = (CalibDbV2_Awb_Light_V21_t*)malloc(sizeof(CalibDbV2_Awb_Light_V21_t)*autoParaV21->lightSources_len); for(int i=0;ilightSources_len;i++){ autoParaV21->lightSources[i].name = (char*)malloc(sizeof(char)*CALD_AWB_ILLUMINATION_NAME); } autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet_len = 2; autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet = (CalibDbV2_Awb_Luma_Weight_Lv_t*)malloc(sizeof(CalibDbV2_Awb_Luma_Weight_Lv_t)*autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet_len); for(int i=0;iwpDiffLumaWeight.wpDiffWeightLvSet_len;i++){ autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet[i].ratioSet_len = 3; autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet[i].ratioSet = (CalibDbV2_Awb_Lum_Wgt_Lv_Rto_t*)malloc(sizeof(CalibDbV2_Awb_Lum_Wgt_Lv_Rto_t)*autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet[i].ratioSet_len); } autoParaV21->limitRange.lumaValue = (float*)malloc(awb_calib_v21->limitRange.lumaNum *sizeof(float)); autoParaV21->limitRange.maxB= (unsigned short*)malloc(awb_calib_v21->limitRange.lumaNum *sizeof(unsigned short)); autoParaV21->limitRange.maxR= (unsigned short*)malloc(awb_calib_v21->limitRange.lumaNum *sizeof(unsigned short)); autoParaV21->limitRange.maxG= (unsigned short*)malloc(awb_calib_v21->limitRange.lumaNum *sizeof(unsigned short)); autoParaV21->limitRange.maxY= (unsigned short*)malloc(awb_calib_v21->limitRange.lumaNum *sizeof(unsigned short)); autoParaV21->limitRange.minB= (unsigned short*)malloc(awb_calib_v21->limitRange.lumaNum *sizeof(unsigned short)); autoParaV21->limitRange.minR= (unsigned short*)malloc(awb_calib_v21->limitRange.lumaNum *sizeof(unsigned short)); autoParaV21->limitRange.minG= (unsigned short*)malloc(awb_calib_v21->limitRange.lumaNum *sizeof(unsigned short)); autoParaV21->limitRange.minY= (unsigned short*)malloc(awb_calib_v21->limitRange.lumaNum *sizeof(unsigned short)); commV21->division.wpNumTh.high = (float *)malloc(awb_adjust->WP_TH.num*sizeof(float)); commV21->division.wpNumTh.low= (float *)malloc(awb_adjust->WP_TH.num*sizeof(float)); commV21->division.wpNumTh.lumaValue= (float *)malloc(awb_adjust->WP_TH.num*sizeof(float)); commV21->xyRegionStableSelection.wpNumTh.lumaValue = (float *)malloc(awb_adjust->wpNumTh.num*sizeof(float)); commV21->xyRegionStableSelection.wpNumTh.forBigType= (float *)malloc(awb_adjust->wpNumTh.num*sizeof(float)); commV21->xyRegionStableSelection.wpNumTh.forExtraType= (float *)malloc(awb_adjust->wpNumTh.num*sizeof(float)); //coppy value CalibDbV2_Wb_Para_t *control = &wb_v21->control; control->byPass = 0; control->mode = CALIB_WB_MODE_AUTO; CalibDbV2_Wb_Mwb_Para_t *manualPara = &wb_v21->manualPara; manualPara->mode = CALIB_MWB_MODE_SCENE; manualPara->cfg.scene = CALIB_WB_SCENE_CLOUDY_DAYLIGHT; manualPara->cfg.cct.CCT = 5000; manualPara->cfg.cct.CCRI = 0; memcpy(manualPara->cfg.mwbGain, awb_calib_v21->standardGainValue[0],sizeof(manualPara->cfg.mwbGain)); autoParaV21->hdrPara.frameChoose = awb_calib_v21->hdrFrameChoose; autoParaV21->hdrPara.frameChooseMode= (CalibDbV2_Awb_Hdr_Fr_Ch_Mode_t)awb_calib_v21->hdrFrameChooseMode; autoParaV21->lscBypassEnable = awb_calib_v21->lscBypEnable; autoParaV21->uvDetectionEnable = awb_calib_v21->uvDetectionEnable; autoParaV21->xyDetectionEnable= awb_calib_v21->xyDetectionEnable; autoParaV21->yuvDetectionEnable = awb_calib_v21->yuvDetectionEnable; for(int i=0;ilsUsedForYuvDet_len;i++){ strcpy(autoParaV21->lsUsedForYuvDet[i],awb_calib_v21->lsUsedForYuvDet[i]); } autoParaV21->blkStatisticsEnable = awb_calib_v21->blkStatisticsEnable; autoParaV21->downScaleMode = (CalibDbV2_Awb_Down_Scale_Mode_t)awb_calib_v21->dsMode; autoParaV21->blkMeasureMode = (CalibDbV2_Awb_Blk_Stat_V21_t)awb_calib_v21->blkMeasureMode; autoParaV21->mainWindow.mode = (CalibDb_Window_Mode_t)awb_calib_v21->measeureWindow.mode; float window[4] ={0,0,1,1}; bool flag = false; if(autoParaV21->mainWindow.mode != CALIB_AWB_WINDOW_CFG_AUTO){ char resName[CALD_AWB_RES_NAME]; for(int i=0;imeaseureWindow.resNum;i++){ char* p; float width = 0; float height =0; strcpy(resName,awb_calib_v21->measeureWindow.resName[i]); p = strtok(resName, "x"); if(p==NULL){ printf("parse resName %s error0,\n",awb_calib_v21->measeureWindow.resName[i]); continue; } width = atoi(p); p = strtok(NULL, " "); if(p==NULL){ printf("parse resName %s error1,\n",awb_calib_v21->measeureWindow.resName[i]); continue; } height = atoi(p); if (height*width>0.001){ if((float)awb_calib_v21->measeureWindow.window[i][0]/width > window[0]){ window[0] = awb_calib_v21->measeureWindow.window[i][0]/width; flag = true; } if((float)awb_calib_v21->measeureWindow.window[i][1]/height > window[1]){ window[1] = awb_calib_v21->measeureWindow.window[i][1]/height; flag = true; } if((float)awb_calib_v21->measeureWindow.window[i][2]/width < window[2]){ window[2] = awb_calib_v21->measeureWindow.window[i][2]/width; flag = true; } if((float)awb_calib_v21->measeureWindow.window[i][3]/height < window[3]){ window[3] = awb_calib_v21->measeureWindow.window[i][3]/height; flag = true; } }else{ printf("parse resName %s error2,\n",awb_calib_v21->measeureWindow.resName[i]); } } } if (flag){ printf("please check parse mainWindow.window (ratio) is %f,%f,%f,%f\n",window[0],window[1],window[2],window[3]); } memcpy(autoParaV21->mainWindow.window, window,sizeof(window)); autoParaV21->limitRange.lumaValue_len= awb_calib_v21->limitRange.lumaNum; memcpy(autoParaV21->limitRange.lumaValue,awb_calib_v21->limitRange.lumaValue,autoParaV21->limitRange.lumaValue_len*sizeof(float)); autoParaV21->limitRange.maxB_len= awb_calib_v21->limitRange.lumaNum; memcpy(autoParaV21->limitRange.maxB,awb_calib_v21->limitRange.maxB,autoParaV21->limitRange.maxB_len*sizeof(unsigned short)); autoParaV21->limitRange.maxR_len= awb_calib_v21->limitRange.lumaNum; memcpy(autoParaV21->limitRange.maxR,awb_calib_v21->limitRange.maxR,autoParaV21->limitRange.maxR_len*sizeof(unsigned short)); autoParaV21->limitRange.maxG_len= awb_calib_v21->limitRange.lumaNum; memcpy(autoParaV21->limitRange.maxG,awb_calib_v21->limitRange.maxG,autoParaV21->limitRange.maxG_len*sizeof(unsigned short)); autoParaV21->limitRange.maxY_len= awb_calib_v21->limitRange.lumaNum; memcpy(autoParaV21->limitRange.maxY,awb_calib_v21->limitRange.maxY,autoParaV21->limitRange.maxY_len*sizeof(unsigned short)); autoParaV21->limitRange.minB_len= awb_calib_v21->limitRange.lumaNum; memcpy(autoParaV21->limitRange.minB,awb_calib_v21->limitRange.minB,autoParaV21->limitRange.minB_len*sizeof(unsigned short)); autoParaV21->limitRange.minR_len= awb_calib_v21->limitRange.lumaNum; memcpy(autoParaV21->limitRange.minR,awb_calib_v21->limitRange.minR,autoParaV21->limitRange.minR_len*sizeof(unsigned short)); autoParaV21->limitRange.minG_len= awb_calib_v21->limitRange.lumaNum; memcpy(autoParaV21->limitRange.minG,awb_calib_v21->limitRange.minG,autoParaV21->limitRange.minG_len*sizeof(unsigned short)); autoParaV21->limitRange.minY_len= awb_calib_v21->limitRange.lumaNum; memcpy(autoParaV21->limitRange.minY,awb_calib_v21->limitRange.minY,autoParaV21->limitRange.minY_len*sizeof(unsigned short)); memcpy(autoParaV21->rgb2TcsPara.rotationMat, awb_calib_v21->rgb2tcs_param.rotationMat, sizeof(autoParaV21->rgb2TcsPara.rotationMat)); memcpy(autoParaV21->rgb2TcsPara.pseudoLuminanceWeight, awb_calib_v21->rgb2tcs_param.pseudoLuminanceWeight, sizeof(autoParaV21->rgb2TcsPara.pseudoLuminanceWeight)); memcpy(autoParaV21->rgb2RotationYuvMat, awb_calib_v21->rgb2RYuv_matrix,sizeof(autoParaV21->rgb2RotationYuvMat)); for(int i=0;iextraWpRange[i].domain = (CalibDbV2_Awb_Ext_Range_Dom_t)awb_calib_v21->excludeWpRange[i].domain; if(awb_calib_v21->excludeWpRange[i].mode != CALIB_AWB_EXCLUDE_WP_MODE && awb_calib_v21->excludeWpRange[i].mode != CALIB_AWB_ETR_LIGHT_SOUR_MODE ){ autoParaV21->extraWpRange[i].mode = CALIB_AWB_EXCLUDE_WP_MODE; }else{ autoParaV21->extraWpRange[i].mode = (CalibDbV2_Awb_Ext_Range_Mode_t)awb_calib_v21->excludeWpRange[i].mode; } autoParaV21->extraWpRange[i].region[0] = awb_calib_v21->excludeWpRange[i].xu[0]; autoParaV21->extraWpRange[i].region[1] = awb_calib_v21->excludeWpRange[i].xu[1]; autoParaV21->extraWpRange[i].region[2] = awb_calib_v21->excludeWpRange[i].yv[0]; autoParaV21->extraWpRange[i].region[3] = awb_calib_v21->excludeWpRange[i].yv[1]; } autoParaV21->wpDiffBlkWeiEnable = awb_calib_v21->blkWeightEnable; for(int i=0;iwpDiffBlkWeight[i] = (awb_calib_v21->blkWeight[i] * 2) > 63 ? 63 : awb_calib_v21->blkWeight[i] * 2; } autoParaV21->wpDiffLumaWeight.enable = awb_calib_v21->wpDiffWeiEnable; memcpy(autoParaV21->wpDiffLumaWeight.wpDiffwei_y, awb_calib_v21->wpDiffwei_y, sizeof(autoParaV21->wpDiffLumaWeight.wpDiffwei_y)); memcpy(autoParaV21->wpDiffLumaWeight.perfectBin, awb_calib_v21->perfectBin, sizeof(autoParaV21->wpDiffLumaWeight.perfectBin)); autoParaV21->wpDiffLumaWeight.wpDiffWeiEnableTh.wpDiffWeiNoTh= awb_calib_v21->wpDiffNoTh; autoParaV21->wpDiffLumaWeight.wpDiffWeiEnableTh.wpDiffWeiLvValueTh= awb_calib_v21->wpDiffLvValueTh; for(int i=0;i < autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet_len; i++){ autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet[i].LvValue = awb_calib_v21->wpDiffweiSet_w_LvValueTh[i]; for(int j=0;jwpDiffLumaWeight.wpDiffWeightLvSet[i].ratioSet_len;j++){ autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet[i].ratioSet[j].ratioValue = awb_calib_v21->wpDiffWeiRatioTh[j]; if(i==1){ memcpy(autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet[i].ratioSet[j].weight, awb_calib_v21->wpDiffweiSet_w_HigLV[j], sizeof(autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet[i].ratioSet[j].weight)); }else{ memcpy(autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet[i].ratioSet[j].weight, awb_calib_v21->wpDiffweiSet_w_LowLV[j], sizeof(autoParaV21->wpDiffLumaWeight.wpDiffWeightLvSet[i].ratioSet[j].weight)); } } } for(int i=0;ilightSources_len;i++){ strcpy(autoParaV21->lightSources[i].name, awb_calib_v21->lightName[i]); autoParaV21->lightSources[i].doorType = (CalibDbV2_Awb_DoorType_t)awb_calib_v21->doorType[i]; memcpy(autoParaV21->lightSources[i].standardGainValue, awb_calib_v21->standardGainValue[i],sizeof(autoParaV21->lightSources[i].standardGainValue)); memcpy(autoParaV21->lightSources[i].uvRegion.u, awb_calib_v21->uvRange_param[i].pu_region,sizeof(autoParaV21->lightSources[i].uvRegion.u)); memcpy(autoParaV21->lightSources[i].uvRegion.v, awb_calib_v21->uvRange_param[i].pv_region,sizeof(autoParaV21->lightSources[i].uvRegion.v)); autoParaV21->lightSources[i].xyRegion.normal[0] = awb_calib_v21->xyRangeLight[i].NorrangeX[0]; autoParaV21->lightSources[i].xyRegion.normal[1] = awb_calib_v21->xyRangeLight[i].NorrangeX[1]; autoParaV21->lightSources[i].xyRegion.normal[2] = awb_calib_v21->xyRangeLight[i].NorrangeY[0]; autoParaV21->lightSources[i].xyRegion.normal[3] = awb_calib_v21->xyRangeLight[i].NorrangeY[1]; autoParaV21->lightSources[i].xyRegion.big[0] = awb_calib_v21->xyRangeLight[i].SperangeX[0]; autoParaV21->lightSources[i].xyRegion.big[1] = awb_calib_v21->xyRangeLight[i].SperangeX[1]; autoParaV21->lightSources[i].xyRegion.big[2] = awb_calib_v21->xyRangeLight[i].SperangeY[0]; autoParaV21->lightSources[i].xyRegion.big[3] = awb_calib_v21->xyRangeLight[i].SperangeY[1]; memcpy(autoParaV21->lightSources[i].rtYuvRegion.thcurve_u, awb_calib_v21->yuv3D2Range_param[i].thcurve_u, sizeof(awb_calib_v21->yuv3D2Range_param[i].thcurve_u)); memcpy(autoParaV21->lightSources[i].rtYuvRegion.thcure_th, awb_calib_v21->yuv3D2Range_param[i].thcure_th, sizeof(awb_calib_v21->yuv3D2Range_param[i].thcure_th)); memcpy(autoParaV21->lightSources[i].rtYuvRegion.lineVector, awb_calib_v21->yuv3D2Range_param[i].line, sizeof(awb_calib_v21->yuv3D2Range_param[i].line)); autoParaV21->lightSources[i].rtYuvRegion.disP1P2 = 15; memcpy(autoParaV21->lightSources[i].staWeight, awb_adjust->awb_light_info[i].staWeight, sizeof(autoParaV21->lightSources[i].staWeight)); autoParaV21->lightSources[i].dayGainLvThSet[0] = awb_adjust->awb_light_info[i].spatialGain_LV_THL; autoParaV21->lightSources[i].dayGainLvThSet[1] = awb_adjust->awb_light_info[i].spatialGain_LV_THH; memcpy(autoParaV21->lightSources[i].defaultDayGainLow,awb_calib_v21->spatialGain_L, sizeof(awb_calib_v21->spatialGain_L)); memcpy(autoParaV21->lightSources[i].defaultDayGainHigh,awb_calib_v21->spatialGain_H, sizeof(awb_calib_v21->spatialGain_H)); autoParaV21->lightSources[i].xyType2Enable = awb_adjust->awb_light_info[i].xyType2Enable; } strcpy(commV21->lightSourceForFirstFrame, awb_adjust->lsForFirstFrame); memcpy(commV21->tolerance.lumaValue, awb_adjust->tolerance.LV,sizeof(float)*commV21->tolerance.lumaValue_len); memcpy(commV21->tolerance.toleranceValue, awb_adjust->tolerance.value,sizeof(float)*commV21->tolerance.toleranceValue_len); memcpy(commV21->runInterval.lumaValue, awb_adjust->runInterval.LV,sizeof(float)*commV21->runInterval.lumaValue_len); memcpy(commV21->runInterval.intervalValue, awb_adjust->runInterval.value,sizeof(float)*commV21->runInterval.intervalValue_len); commV21->dampFactor.dFStep = awb_adjust->dFStep; commV21->dampFactor.dFMin = awb_adjust->dFMin; commV21->dampFactor.dFMax = awb_adjust->dFMax; commV21->dampFactor.lvIIRsize = awb_adjust->LvIIRsize; commV21->dampFactor.lvVarTh = awb_adjust->LvVarTh; commV21->wbGainAdjust.enable = awb_adjust->wbGainAdjustEn; for(int i=0; iwbGainAdjust.lutAll_len;i++){ commV21->wbGainAdjust.lutAll[i].lumaValue = awb_adjust->cct_lut_cfg[i].lv; commV21->wbGainAdjust.lutAll[i].ct_grid_num = awb_adjust->cct_lut_cfg[0].ct_grid_num; commV21->wbGainAdjust.lutAll[i].cri_grid_num = awb_adjust->cct_lut_cfg[0].cri_grid_num; memcpy(commV21->wbGainAdjust.lutAll[i].ct_in_range, awb_adjust->cct_lut_cfg[0].ct_range,sizeof(commV21->wbGainAdjust.lutAll[i].ct_in_range)); memcpy(commV21->wbGainAdjust.lutAll[i].cri_in_range, awb_adjust->cct_lut_cfg[0].cri_range,sizeof(commV21->wbGainAdjust.lutAll[i].cri_in_range)); memcpy(commV21->wbGainAdjust.lutAll[i].ct_lut_out,awb_adjust->cct_lut_cfg[i].ct_lut_out,sizeof(float)*commV21->wbGainAdjust.lutAll[i].ct_lut_out_len); memcpy(commV21->wbGainAdjust.lutAll[i].cri_lut_out,awb_adjust->cct_lut_cfg[i].cri_lut_out,sizeof(float)*commV21->wbGainAdjust.lutAll[i].cri_lut_out_len); } commV21->wbGainDaylightClip.enable= awb_calib_v21->wbGainDaylightClipEn; commV21->wbGainDaylightClip.outdoor_cct_min = awb_calib_v21->cct_clip_cfg.outdoor_cct_min; commV21->wbGainClip.enable= awb_calib_v21->wbGainClipEn; memcpy(commV21->wbGainClip.cct, awb_calib_v21->cct_clip_cfg.cct,sizeof(float)*commV21->wbGainClip.cct_len); memcpy(commV21->wbGainClip.cri_bound_low, awb_calib_v21->cct_clip_cfg.cri_bound_low,sizeof(float)*commV21->wbGainClip.cri_bound_low_len); memcpy(commV21->wbGainClip.cri_bound_up, awb_calib_v21->cct_clip_cfg.cri_bound_up,sizeof(float)*commV21->wbGainClip.cri_bound_up_len); commV21->division.lumaValThLow= awb_adjust->LV_THL; commV21->division.lumaValThLow2= awb_adjust->LV_THL2; commV21->division.lumaValThHigh= awb_adjust->LV_THH; commV21->division.lumaValThHigh2= awb_adjust->LV_THH2; commV21->division.wpNumTh.lumaValue_len = awb_adjust->WP_TH.num; memcpy(commV21->division.wpNumTh.lumaValue, awb_adjust->WP_TH.lumaValue,sizeof(float)*commV21->division.wpNumTh.lumaValue_len); commV21->division.wpNumTh.high_len = awb_adjust->WP_TH.num; memcpy(commV21->division.wpNumTh.high, awb_adjust->WP_TH.WP_THH,sizeof(float)*commV21->division.wpNumTh.lumaValue_len); commV21->division.wpNumTh.low_len = awb_adjust->WP_TH.num; memcpy(commV21->division.wpNumTh.low, awb_adjust->WP_TH.WP_THL,sizeof(float)*commV21->division.wpNumTh.lumaValue_len); memcpy(commV21->defaultNightGain,awb_calib_v21->temporalDefaultGain, sizeof(commV21->defaultNightGain)); memcpy(commV21->lumaValueMatrix,awb_adjust->LVMatrix, sizeof(commV21->lumaValueMatrix)); memcpy(commV21->defaultNightGainWeight,awb_adjust->tempWeight, sizeof(commV21->defaultNightGainWeight)); commV21->probCalcDis.proDis_THH = awb_adjust->proDis_THH; commV21->probCalcDis.proDis_THL = awb_adjust->proDis_THL; commV21->probCalcLv.outdoorLumaValThHigh = awb_adjust->proLV_Outdoor_THH; commV21->probCalcLv.outdoorLumaValThLow = awb_adjust->proLV_Outdoor_THL; commV21->probCalcWp.wpNumPercTh= awb_adjust->wpNumPercTh; commV21->probCalcWp.wpNumPercTh2= 0.2; commV21->converged.varThforDamp = awb_adjust->convergedVarTh; commV21->converged.varThforUnDamp= awb_adjust->convergedVarTh; commV21->xyRegionStableSelection.enable = true; commV21->xyRegionStableSelection.wpNumTh.lumaValue_len= awb_adjust->wpNumTh.num; memcpy(commV21->xyRegionStableSelection.wpNumTh.lumaValue,awb_adjust->wpNumTh.lumaValue,sizeof(float)*awb_adjust->wpNumTh.num); commV21->xyRegionStableSelection.wpNumTh.forBigType_len= awb_adjust->wpNumTh.num; memcpy(commV21->xyRegionStableSelection.wpNumTh.forBigType,awb_adjust->wpNumTh.wpNumThForBigType,sizeof(float)*awb_adjust->wpNumTh.num); commV21->xyRegionStableSelection.wpNumTh.forExtraType_len= awb_adjust->wpNumTh.num; memcpy(commV21->xyRegionStableSelection.wpNumTh.forExtraType,awb_adjust->wpNumTh.wpNumThForExtraType,sizeof(float)*awb_adjust->wpNumTh.num); commV21->xyRegionStableSelection.xyTypeListSize = awb_adjust->xyTypeListSize; commV21->xyRegionStableSelection.varianceLumaTh = awb_adjust->varianceLumaTh; memcpy(commV21->weightForNightGainCalc, awb_adjust->temporalGainSetWeight, commV21->weightForNightGainCalc_len*sizeof(unsigned char)); commV21->singleColorProces.enable = true; for(int i=0; isingleColorProces.colorBlock_len; i++){ commV21->singleColorProces.colorBlock[i].index = awb_calib_v21->sIndSelColor[i]; commV21->singleColorProces.colorBlock[i].meanC= awb_calib_v21->sMeanCh[0][i]; commV21->singleColorProces.colorBlock[i].meanH= awb_calib_v21->sMeanCh[1][i]; } for(int i=0; isingleColorProces.lsUsedForEstimation_len; i++){ strcpy(commV21->singleColorProces.lsUsedForEstimation[i].name, awb_calib_v21->sNameIllEst[i]); commV21->singleColorProces.lsUsedForEstimation[i].RGain= awb_calib_v21->srGain[i]; commV21->singleColorProces.lsUsedForEstimation[i].BGain= awb_calib_v21->sbGain[i]; } commV21->singleColorProces.alpha= awb_calib_v21->sAlpha; memcpy(commV21->lineRgBg,awb_calib_v21->lineRgBg,sizeof(commV21->lineRgBg)); memcpy(commV21->lineRgProjCCT,awb_calib_v21->lineRgProjCCT,sizeof(commV21->lineRgProjCCT)); commV21->chrAdpttAdj.enable = awb_adjust->ca_enable; commV21->chrAdpttAdj.laCalcFactor = awb_adjust->ca_LACalcFactor; memcpy(commV21->chrAdpttAdj.targetGain, awb_calib_v21->ca_targetGain, sizeof(commV21->chrAdpttAdj.targetGain)); commV21->remosaicCfg.enable = awb_adjust->remosaic_cfg.enable; commV21->remosaicCfg.applyInvWbGainEnable= true; memcpy(commV21->remosaicCfg.sensorWbGain, awb_adjust->remosaic_cfg.sensor_awb_gain, sizeof(commV21->remosaicCfg.sensorWbGain)); memcpy(&commV21->wbGainOffset, &awb_adjust->wbGainOffset, sizeof(commV21->wbGainOffset)); } void CalibV2AwbV20Free(CamCalibDbV2Context_t *calibV2) { CalibDbV2_Wb_Para_V20_t* wb_v20 = (CalibDbV2_Wb_Para_V20_t*)(CALIBDBV2_GET_MODULE_PTR(calibV2, wb_v20)); if(wb_v20 == NULL) return; CalibDbV2_Wb_Awb_Ext_Com_Para_t *commV20 = &wb_v20->autoExtPara; CalibDbV2_Wb_Awb_Para_V20_t* autoParaV20 = &wb_v20->autoPara; free(commV20->lightSourceForFirstFrame); free(commV20->wbGainClip.cct); free(commV20->wbGainClip.cri_bound_up); free(commV20->wbGainClip.cri_bound_low); free(commV20->singleColorProces.colorBlock); for(int i=0;isingleColorProces.lsUsedForEstimation_len;i++){ free(commV20->singleColorProces.lsUsedForEstimation[i].name); } free(commV20->singleColorProces.lsUsedForEstimation); free(commV20->tolerance.toleranceValue); free(commV20->tolerance.lumaValue); free(commV20->runInterval.intervalValue); free(commV20->runInterval.lumaValue); for(int i=0;iwbGainAdjust.lutAll_len;i++){ free(commV20->wbGainAdjust.lutAll[i].ct_lut_out); free(commV20->wbGainAdjust.lutAll[i].cri_lut_out); } free(commV20->wbGainAdjust.lutAll); free(commV20->weightForNightGainCalc); free(commV20->division.wpNumTh.high); free(commV20->division.wpNumTh.low); free(commV20->division.wpNumTh.lumaValue); free(commV20->xyRegionStableSelection.wpNumTh.lumaValue); free(commV20->xyRegionStableSelection.wpNumTh.forBigType); free(commV20->xyRegionStableSelection.wpNumTh.forExtraType); for(int i=0;ilsUsedForYuvDet_len;i++){ free(autoParaV20->lsUsedForYuvDet[i]); } free(autoParaV20->lsUsedForYuvDet); for(int i=0;ilightSources_len;i++){ free(autoParaV20->lightSources[i].name); } free(autoParaV20->lightSources); free(autoParaV20->limitRange.lumaValue); free(autoParaV20->limitRange.maxB); free(autoParaV20->limitRange.maxR); free(autoParaV20->limitRange.maxG); free(autoParaV20->limitRange.maxY); free(autoParaV20->limitRange.minB); free(autoParaV20->limitRange.minR); free(autoParaV20->limitRange.minG); free(autoParaV20->limitRange.minY); } void convertCalib2calibV20(const CamCalibDbContext_t *calib,CamCalibDbV2Context_t *calibV2) { //malloc const CalibDb_Awb_Calib_Para_V200_t *awb_calib_v20 = NULL; list_head *awb_calib_para_list = (list_head*)CALIBDB_GET_MODULE_PTR((void*)calib, awb_calib_para_v200); #ifdef RKAIQ_ENABLE_PARSER_V1 if (awb_calib_para_list) GetAwbProfileFromAwbCalibV200ListByIdx(awb_calib_para_list, 0, &awb_calib_v20); #else return; #endif const CalibDb_Awb_Adjust_Para_t *awb_adjust = NULL; list_head *awb_adjust_list = (list_head*)CALIBDB_GET_MODULE_PTR((void*)calib, awb_adjust_para); if (awb_adjust_list) GetAwbProfileFromAwbAdjustListByIdx(awb_adjust_list, 0, &awb_adjust); else return; CalibDbV2_Wb_Para_V20_t* wb_v20 = (CalibDbV2_Wb_Para_V20_t*)(CALIBDBV2_GET_MODULE_PTR(calibV2, wb_v20)); memset(wb_v20, 0, sizeof(CalibDbV2_Wb_Para_V20_t)); CalibDbV2_Wb_Awb_Ext_Com_Para_t *commV20 = &wb_v20->autoExtPara; CalibDbV2_Wb_Awb_Para_V20_t* autoParaV20 = &wb_v20->autoPara; commV20->lightSourceForFirstFrame= (char*)malloc(sizeof(char)*CALD_AWB_ILLUMINATION_NAME); commV20->wbGainClip.cct_len = awb_calib_v20->cct_clip_cfg.grid_num; commV20->wbGainClip.cri_bound_up_len = awb_calib_v20->cct_clip_cfg.grid_num; commV20->wbGainClip.cri_bound_low_len = awb_calib_v20->cct_clip_cfg.grid_num; commV20->wbGainClip.cct = (float*)malloc(sizeof(float) * commV20->wbGainClip.cct_len); commV20->wbGainClip.cri_bound_up = (float*)malloc(sizeof(float) * commV20->wbGainClip.cct_len); commV20->wbGainClip.cri_bound_low = (float*)malloc(sizeof(float) * commV20->wbGainClip.cct_len); commV20->singleColorProces.colorBlock_len = awb_calib_v20->sSelColorNUM; commV20->singleColorProces.lsUsedForEstimation_len = awb_calib_v20->sIllEstNum; commV20->singleColorProces.colorBlock = (CalibDbV2_Awb_Sgc_Cblk_t*)malloc(sizeof(CalibDbV2_Awb_Sgc_Cblk_t)*commV20->singleColorProces.colorBlock_len); commV20->singleColorProces.lsUsedForEstimation = (CalibDbV2_Awb_Sgc_Ls_t*)malloc(sizeof(CalibDbV2_Awb_Sgc_Ls_t)*commV20->singleColorProces.lsUsedForEstimation_len); for(int i=0;isingleColorProces.lsUsedForEstimation_len;i++){ commV20->singleColorProces.lsUsedForEstimation[i].name = (char*)malloc(sizeof(char)*CALD_AWB_ILLUMINATION_NAME); } commV20->tolerance.lumaValue_len = awb_adjust->tolerance.num; commV20->tolerance.toleranceValue_len = awb_adjust->tolerance.num; commV20->tolerance.toleranceValue = (float*)malloc(sizeof(float)*commV20->tolerance.toleranceValue_len); commV20->tolerance.lumaValue= (float*)malloc(sizeof(float)*commV20->tolerance.lumaValue_len); commV20->runInterval.lumaValue_len = awb_adjust->runInterval.num; commV20->runInterval.intervalValue_len= awb_adjust->runInterval.num; commV20->runInterval.intervalValue = (float*)malloc(sizeof(float)*commV20->runInterval.intervalValue_len); commV20->runInterval.lumaValue= (float*)malloc(sizeof(float)*commV20->runInterval.lumaValue_len); commV20->wbGainAdjust.lutAll_len = awb_adjust->cct_lut_cfg_num; commV20->wbGainAdjust.lutAll = (CalibDbV2_Awb_Cct_Lut_Cfg_Lv_t*)malloc(sizeof(CalibDbV2_Awb_Cct_Lut_Cfg_Lv_t)*commV20->wbGainAdjust.lutAll_len); for(int i=0;iwbGainAdjust.lutAll_len;i++){ commV20->wbGainAdjust.lutAll[i].ct_lut_out_len = awb_adjust->cct_lut_cfg[0].ct_grid_num * awb_adjust->cct_lut_cfg[0].cri_grid_num; commV20->wbGainAdjust.lutAll[i].ct_lut_out = (float*)malloc(sizeof(float)*commV20->wbGainAdjust.lutAll[i].ct_lut_out_len); commV20->wbGainAdjust.lutAll[i].cri_lut_out_len = awb_adjust->cct_lut_cfg[0].ct_grid_num * awb_adjust->cct_lut_cfg[0].cri_grid_num; commV20->wbGainAdjust.lutAll[i].cri_lut_out = (float*)malloc(sizeof(float)*commV20->wbGainAdjust.lutAll[i].cri_lut_out_len); } commV20->weightForNightGainCalc_len = 4; commV20->weightForNightGainCalc = (unsigned char*)malloc(sizeof(unsigned char)*commV20->weightForNightGainCalc_len); autoParaV20->lsUsedForYuvDet_len = 7; autoParaV20->lsUsedForYuvDet = (char**)malloc(sizeof(char*)*autoParaV20->lsUsedForYuvDet_len); for(int i=0;ilsUsedForYuvDet_len;i++){ autoParaV20->lsUsedForYuvDet[i] = (char*)malloc(sizeof(char)*CALD_AWB_ILLUMINATION_NAME); } autoParaV20->lightSources_len = 7; autoParaV20->lightSources = (CalibDbV2_Awb_Light_V20_t*)malloc(sizeof(CalibDbV2_Awb_Light_V20_t)*autoParaV20->lightSources_len); for(int i=0;ilightSources_len;i++){ autoParaV20->lightSources[i].name = (char*)malloc(sizeof(char)*CALD_AWB_ILLUMINATION_NAME); } autoParaV20->limitRange.lumaValue = (float*)malloc(awb_calib_v20->limitRange.lumaNum *sizeof(float)); autoParaV20->limitRange.maxB= (unsigned short*)malloc(awb_calib_v20->limitRange.lumaNum *sizeof(unsigned short)); autoParaV20->limitRange.maxR= (unsigned short*)malloc(awb_calib_v20->limitRange.lumaNum *sizeof(unsigned short)); autoParaV20->limitRange.maxG= (unsigned short*)malloc(awb_calib_v20->limitRange.lumaNum *sizeof(unsigned short)); autoParaV20->limitRange.maxY= (unsigned short*)malloc(awb_calib_v20->limitRange.lumaNum *sizeof(unsigned short)); autoParaV20->limitRange.minB= (unsigned short*)malloc(awb_calib_v20->limitRange.lumaNum *sizeof(unsigned short)); autoParaV20->limitRange.minR= (unsigned short*)malloc(awb_calib_v20->limitRange.lumaNum *sizeof(unsigned short)); autoParaV20->limitRange.minG= (unsigned short*)malloc(awb_calib_v20->limitRange.lumaNum *sizeof(unsigned short)); autoParaV20->limitRange.minY= (unsigned short*)malloc(awb_calib_v20->limitRange.lumaNum *sizeof(unsigned short)); commV20->division.wpNumTh.high = (float *)malloc(awb_adjust->WP_TH.num*sizeof(float)); commV20->division.wpNumTh.low= (float *)malloc(awb_adjust->WP_TH.num*sizeof(float)); commV20->division.wpNumTh.lumaValue= (float *)malloc(awb_adjust->WP_TH.num*sizeof(float)); commV20->xyRegionStableSelection.wpNumTh.lumaValue = (float *)malloc(awb_adjust->wpNumTh.num*sizeof(float)); commV20->xyRegionStableSelection.wpNumTh.forBigType= (float *)malloc(awb_adjust->wpNumTh.num*sizeof(float)); commV20->xyRegionStableSelection.wpNumTh.forExtraType= (float *)malloc(awb_adjust->wpNumTh.num*sizeof(float)); //coppy value CalibDbV2_Wb_Para_t *control = &wb_v20->control; control->byPass = 0; control->mode = CALIB_WB_MODE_AUTO; CalibDbV2_Wb_Mwb_Para_t *manualPara = &wb_v20->manualPara; manualPara->mode = CALIB_MWB_MODE_SCENE; manualPara->cfg.scene = CALIB_WB_SCENE_CLOUDY_DAYLIGHT; manualPara->cfg.cct.CCT = 5000; manualPara->cfg.cct.CCRI = 0; memcpy(manualPara->cfg.mwbGain, awb_calib_v20->standardGainValue[0],sizeof(manualPara->cfg.mwbGain)); autoParaV20->hdrPara.frameChoose = awb_calib_v20->hdrFrameChoose; autoParaV20->hdrPara.frameChooseMode= (CalibDbV2_Awb_Hdr_Fr_Ch_Mode_t)awb_calib_v20->hdrFrameChooseMode; autoParaV20->lscBypassEnable = awb_calib_v20->lscBypEnable; autoParaV20->uvDetectionEnable = awb_calib_v20->uvDetectionEnable; autoParaV20->xyDetectionEnable= awb_calib_v20->xyDetectionEnable; autoParaV20->yuvDetectionEnable = awb_calib_v20->yuvDetectionEnable; for(int i=0;ilsUsedForYuvDet_len;i++){ strcpy(autoParaV20->lsUsedForYuvDet[i],awb_calib_v20->lsUsedForYuvDet[i]); } autoParaV20->yuvDetRef_u = awb_calib_v20->yuv3DRange_param[0].ref_u; autoParaV20->downScaleMode = (CalibDbV2_Awb_Down_Scale_Mode_t)awb_calib_v20->dsMode; autoParaV20->blkMeasureMode = (CalibDbV2_Awb_Blk_Stat_V20_t)awb_calib_v20->blkMeasureMode; autoParaV20->mainWindow.mode = (CalibDb_Window_Mode_t)awb_calib_v20->measeureWindow.mode; float window[4] ={0,0,1,1}; memcpy(autoParaV20->mainWindow.window, window,sizeof(window)); bool flag = false; if(autoParaV20->mainWindow.mode != CALIB_AWB_WINDOW_CFG_AUTO){ char resName[CALD_AWB_RES_NAME]; for(int i=0;imeaseureWindow.resNum;i++){ char* p; float width = 0; float height =0; strcpy(resName,awb_calib_v20->measeureWindow.resName[i]); p = strtok(resName, "x"); if(p==NULL){ printf("parse resName %s error0,\n",awb_calib_v20->measeureWindow.resName[i]); continue; } width = atoi(p); p = strtok(NULL, " "); if(p==NULL){ printf("parse resName %s error1,\n",awb_calib_v20->measeureWindow.resName[i]); continue; } height = atoi(p); if (height*width>0.001){ if((float)awb_calib_v20->measeureWindow.window[i][0]/width > window[0]){ window[0] = awb_calib_v20->measeureWindow.window[i][0]/width; flag = true; } if((float)awb_calib_v20->measeureWindow.window[i][1]/height > window[1]){ window[1] = awb_calib_v20->measeureWindow.window[i][1]/height; flag = true; } if((float)awb_calib_v20->measeureWindow.window[i][2]/width < window[2]){ window[2] = awb_calib_v20->measeureWindow.window[i][2]/width; flag = true; } if((float)awb_calib_v20->measeureWindow.window[i][3]/height < window[3]){ window[3] = awb_calib_v20->measeureWindow.window[i][3]/height; flag = true; } }else{ printf("parse resName %s error2,\n",awb_calib_v20->measeureWindow.resName[i]); } } } if (flag){ printf("please check parse mainWindow.window (ratio) is %f,%f,%f,%f\n",window[0],window[1],window[2],window[3]); } autoParaV20->limitRange.lumaValue_len= awb_calib_v20->limitRange.lumaNum; memcpy(autoParaV20->limitRange.lumaValue,awb_calib_v20->limitRange.lumaValue,autoParaV20->limitRange.lumaValue_len*sizeof(float)); autoParaV20->limitRange.maxB_len= awb_calib_v20->limitRange.lumaNum; memcpy(autoParaV20->limitRange.maxB,awb_calib_v20->limitRange.maxB,autoParaV20->limitRange.maxB_len*sizeof(unsigned short)); autoParaV20->limitRange.maxR_len= awb_calib_v20->limitRange.lumaNum; memcpy(autoParaV20->limitRange.maxR,awb_calib_v20->limitRange.maxR,autoParaV20->limitRange.maxR_len*sizeof(unsigned short)); autoParaV20->limitRange.maxG_len= awb_calib_v20->limitRange.lumaNum; memcpy(autoParaV20->limitRange.maxG,awb_calib_v20->limitRange.maxG,autoParaV20->limitRange.maxG_len*sizeof(unsigned short)); autoParaV20->limitRange.maxY_len= awb_calib_v20->limitRange.lumaNum; memcpy(autoParaV20->limitRange.maxY,awb_calib_v20->limitRange.maxY,autoParaV20->limitRange.maxY_len*sizeof(unsigned short)); autoParaV20->limitRange.minB_len= awb_calib_v20->limitRange.lumaNum; memcpy(autoParaV20->limitRange.minB,awb_calib_v20->limitRange.minB,autoParaV20->limitRange.minB_len*sizeof(unsigned short)); autoParaV20->limitRange.minR_len= awb_calib_v20->limitRange.lumaNum; memcpy(autoParaV20->limitRange.minR,awb_calib_v20->limitRange.minR,autoParaV20->limitRange.minR_len*sizeof(unsigned short)); autoParaV20->limitRange.minG_len= awb_calib_v20->limitRange.lumaNum; memcpy(autoParaV20->limitRange.minG,awb_calib_v20->limitRange.minG,autoParaV20->limitRange.minG_len*sizeof(unsigned short)); autoParaV20->limitRange.minY_len= awb_calib_v20->limitRange.lumaNum; memcpy(autoParaV20->limitRange.minY,awb_calib_v20->limitRange.minY,autoParaV20->limitRange.minY_len*sizeof(unsigned short)); memcpy(autoParaV20->rgb2TcsPara.rotationMat, awb_calib_v20->rgb2tcs_param.rotationMat, sizeof(autoParaV20->rgb2TcsPara.rotationMat)); memcpy(autoParaV20->rgb2TcsPara.pseudoLuminanceWeight, awb_calib_v20->rgb2tcs_param.pseudoLuminanceWeight, sizeof(autoParaV20->rgb2TcsPara.pseudoLuminanceWeight)); autoParaV20->multiWindow.enable = awb_calib_v20->multiwindow_en; autoParaV20->multiWindow.multiwindowMode = (CalibDbV2_Awb_Mul_Win_Mode_t)awb_adjust->multiwindowMode; for(int i=0;imultiWindow.window[i][j]= awb_calib_v20->multiwindow[i][j]; } } for(int i=0;iextraWpRange[i].domain = (CalibDbV2_Awb_Ext_Range_Dom_t)awb_calib_v20->excludeWpRange[i].domain; if(awb_calib_v20->excludeWpRange[i].mode != CALIB_AWB_EXCLUDE_WP_MODE && awb_calib_v20->excludeWpRange[i].mode != CALIB_AWB_ETR_LIGHT_SOUR_MODE ){ autoParaV20->extraWpRange[i].mode = CALIB_AWB_EXCLUDE_WP_MODE; }else{ autoParaV20->extraWpRange[i].mode = (CalibDbV2_Awb_Ext_Range_Mode_t)awb_calib_v20->excludeWpRange[i].mode; } autoParaV20->extraWpRange[i].region[0] = awb_calib_v20->excludeWpRange[i].xu[0]; autoParaV20->extraWpRange[i].region[1] = awb_calib_v20->excludeWpRange[i].xu[1]; autoParaV20->extraWpRange[i].region[2] = awb_calib_v20->excludeWpRange[i].yv[0]; autoParaV20->extraWpRange[i].region[3] = awb_calib_v20->excludeWpRange[i].yv[1]; } for(int i=0;ilightSources_len;i++){ strcpy(autoParaV20->lightSources[i].name, awb_calib_v20->lightName[i]); autoParaV20->lightSources[i].doorType = (CalibDbV2_Awb_DoorType_t)awb_calib_v20->doorType[i]; memcpy(autoParaV20->lightSources[i].standardGainValue, awb_calib_v20->standardGainValue[i],sizeof(autoParaV20->lightSources[i].standardGainValue)); memcpy(autoParaV20->lightSources[i].uvRegion.u, awb_calib_v20->uvRange_param[i].pu_region,sizeof(autoParaV20->lightSources[i].uvRegion.u)); memcpy(autoParaV20->lightSources[i].uvRegion.v, awb_calib_v20->uvRange_param[i].pv_region,sizeof(autoParaV20->lightSources[i].uvRegion.v)); autoParaV20->lightSources[i].xyRegion.normal[0] = awb_calib_v20->xyRangeLight[i].NorrangeX[0]; autoParaV20->lightSources[i].xyRegion.normal[1] = awb_calib_v20->xyRangeLight[i].NorrangeX[1]; autoParaV20->lightSources[i].xyRegion.normal[2] = awb_calib_v20->xyRangeLight[i].NorrangeY[0]; autoParaV20->lightSources[i].xyRegion.normal[3] = awb_calib_v20->xyRangeLight[i].NorrangeY[1]; autoParaV20->lightSources[i].xyRegion.big[0] = awb_calib_v20->xyRangeLight[i].SperangeX[0]; autoParaV20->lightSources[i].xyRegion.big[1] = awb_calib_v20->xyRangeLight[i].SperangeX[1]; autoParaV20->lightSources[i].xyRegion.big[2] = awb_calib_v20->xyRangeLight[i].SperangeY[0]; autoParaV20->lightSources[i].xyRegion.big[3] = awb_calib_v20->xyRangeLight[i].SperangeY[1]; autoParaV20->lightSources[i].xyRegion.small[0] = awb_calib_v20->xyRangeLight[i].SmalrangeX[0]; autoParaV20->lightSources[i].xyRegion.small[1] = awb_calib_v20->xyRangeLight[i].SmalrangeX[1]; autoParaV20->lightSources[i].xyRegion.small[2] = awb_calib_v20->xyRangeLight[i].SmalrangeY[0]; autoParaV20->lightSources[i].xyRegion.small[3] = awb_calib_v20->xyRangeLight[i].SmalrangeY[1]; autoParaV20->lightSources[i].yuvRegion.b_uv = awb_calib_v20->yuv3DRange_param[i].b_uv; autoParaV20->lightSources[i].yuvRegion.slope_inv_neg_uv= awb_calib_v20->yuv3DRange_param[i].slope_inv_neg_uv; autoParaV20->lightSources[i].yuvRegion.slope_factor_uv= awb_calib_v20->yuv3DRange_param[i].slope_factor_uv; autoParaV20->lightSources[i].yuvRegion.slope_ydis= awb_calib_v20->yuv3DRange_param[i].slope_ydis; autoParaV20->lightSources[i].yuvRegion.b_ydis= awb_calib_v20->yuv3DRange_param[i].b_ydis; autoParaV20->lightSources[i].yuvRegion.ref_v= awb_calib_v20->yuv3DRange_param[i].ref_v; memcpy(autoParaV20->lightSources[i].yuvRegion.dis, awb_calib_v20->yuv3DRange_param[i].dis, sizeof(autoParaV20->lightSources[i].yuvRegion.dis)); memcpy(autoParaV20->lightSources[i].yuvRegion.th, awb_calib_v20->yuv3DRange_param[i].th, sizeof(autoParaV20->lightSources[i].yuvRegion.th)); memcpy(autoParaV20->lightSources[i].staWeight, awb_adjust->awb_light_info[i].staWeight, sizeof(autoParaV20->lightSources[i].staWeight)); autoParaV20->lightSources[i].dayGainLvThSet[0] = awb_adjust->awb_light_info[i].spatialGain_LV_THL; autoParaV20->lightSources[i].dayGainLvThSet[1] = awb_adjust->awb_light_info[i].spatialGain_LV_THH; memcpy(autoParaV20->lightSources[i].defaultDayGainLow,awb_calib_v20->spatialGain_L, sizeof(awb_calib_v20->spatialGain_L)); memcpy(autoParaV20->lightSources[i].defaultDayGainHigh,awb_calib_v20->spatialGain_H, sizeof(awb_calib_v20->spatialGain_H)); autoParaV20->lightSources[i].xyType2Enable = awb_adjust->awb_light_info[i].xyType2Enable; } strcpy(commV20->lightSourceForFirstFrame, awb_adjust->lsForFirstFrame); memcpy(commV20->tolerance.lumaValue, awb_adjust->tolerance.LV,sizeof(float)*commV20->tolerance.lumaValue_len); memcpy(commV20->tolerance.toleranceValue, awb_adjust->tolerance.value,sizeof(float)*commV20->tolerance.toleranceValue_len); memcpy(commV20->runInterval.lumaValue, awb_adjust->runInterval.LV,sizeof(float)*commV20->runInterval.lumaValue_len); memcpy(commV20->runInterval.intervalValue, awb_adjust->runInterval.value,sizeof(float)*commV20->runInterval.intervalValue_len); commV20->dampFactor.dFStep = awb_adjust->dFStep; commV20->dampFactor.dFMin = awb_adjust->dFMin; commV20->dampFactor.dFMax = awb_adjust->dFMax; commV20->dampFactor.lvIIRsize = awb_adjust->LvIIRsize; commV20->dampFactor.lvVarTh = awb_adjust->LvVarTh; commV20->wbGainAdjust.enable = awb_adjust->wbGainAdjustEn; for(int i=0; iwbGainAdjust.lutAll_len;i++){ commV20->wbGainAdjust.lutAll[i].lumaValue = awb_adjust->cct_lut_cfg[i].lv; commV20->wbGainAdjust.lutAll[i].ct_grid_num = awb_adjust->cct_lut_cfg[0].ct_grid_num; commV20->wbGainAdjust.lutAll[i].cri_grid_num = awb_adjust->cct_lut_cfg[0].cri_grid_num; memcpy(commV20->wbGainAdjust.lutAll[i].ct_in_range, awb_adjust->cct_lut_cfg[0].ct_range,sizeof(commV20->wbGainAdjust.lutAll[i].ct_in_range)); memcpy(commV20->wbGainAdjust.lutAll[i].cri_in_range, awb_adjust->cct_lut_cfg[0].cri_range,sizeof(commV20->wbGainAdjust.lutAll[i].cri_in_range)); memcpy(commV20->wbGainAdjust.lutAll[i].ct_lut_out,awb_adjust->cct_lut_cfg[i].ct_lut_out,sizeof(float)*commV20->wbGainAdjust.lutAll[i].ct_lut_out_len); memcpy(commV20->wbGainAdjust.lutAll[i].cri_lut_out,awb_adjust->cct_lut_cfg[i].cri_lut_out,sizeof(float)*commV20->wbGainAdjust.lutAll[i].cri_lut_out_len); } commV20->wbGainDaylightClip.enable= awb_calib_v20->wbGainDaylightClipEn; commV20->wbGainDaylightClip.outdoor_cct_min = awb_calib_v20->cct_clip_cfg.outdoor_cct_min; commV20->wbGainClip.enable= awb_calib_v20->wbGainClipEn; memcpy(commV20->wbGainClip.cct, awb_calib_v20->cct_clip_cfg.cct,sizeof(float)*commV20->wbGainClip.cct_len); memcpy(commV20->wbGainClip.cri_bound_low, awb_calib_v20->cct_clip_cfg.cri_bound_low,sizeof(float)*commV20->wbGainClip.cri_bound_low_len); memcpy(commV20->wbGainClip.cri_bound_up, awb_calib_v20->cct_clip_cfg.cri_bound_up,sizeof(float)*commV20->wbGainClip.cri_bound_up_len); commV20->division.lumaValThLow= awb_adjust->LV_THL; commV20->division.lumaValThLow2= awb_adjust->LV_THL2; commV20->division.lumaValThHigh= awb_adjust->LV_THH; commV20->division.lumaValThHigh2= awb_adjust->LV_THH2; commV20->division.wpNumTh.lumaValue_len = awb_adjust->WP_TH.num; memcpy(commV20->division.wpNumTh.lumaValue, awb_adjust->WP_TH.lumaValue,sizeof(float)*commV20->division.wpNumTh.lumaValue_len); commV20->division.wpNumTh.high_len = awb_adjust->WP_TH.num; memcpy(commV20->division.wpNumTh.high, awb_adjust->WP_TH.WP_THH,sizeof(float)*commV20->division.wpNumTh.lumaValue_len); commV20->division.wpNumTh.low_len = awb_adjust->WP_TH.num; memcpy(commV20->division.wpNumTh.low, awb_adjust->WP_TH.WP_THL,sizeof(float)*commV20->division.wpNumTh.lumaValue_len); memcpy(commV20->defaultNightGain,awb_calib_v20->temporalDefaultGain, sizeof(commV20->defaultNightGain)); memcpy(commV20->lumaValueMatrix,awb_adjust->LVMatrix, sizeof(commV20->lumaValueMatrix)); memcpy(commV20->defaultNightGainWeight,awb_adjust->tempWeight, sizeof(commV20->defaultNightGainWeight)); commV20->probCalcDis.proDis_THH = awb_adjust->proDis_THH; commV20->probCalcDis.proDis_THL = awb_adjust->proDis_THL; commV20->probCalcLv.outdoorLumaValThHigh = awb_adjust->proLV_Outdoor_THH; commV20->probCalcLv.outdoorLumaValThLow = awb_adjust->proLV_Outdoor_THL; commV20->probCalcWp.wpNumPercTh= awb_adjust->wpNumPercTh; commV20->probCalcWp.wpNumPercTh2= 0.2; commV20->converged.varThforDamp = awb_adjust->convergedVarTh; commV20->converged.varThforUnDamp= awb_adjust->convergedVarTh; commV20->xyRegionStableSelection.enable = true; commV20->xyRegionStableSelection.wpNumTh.lumaValue_len= awb_adjust->wpNumTh.num; memcpy(commV20->xyRegionStableSelection.wpNumTh.lumaValue,awb_adjust->wpNumTh.lumaValue,sizeof(float)*awb_adjust->wpNumTh.num); commV20->xyRegionStableSelection.wpNumTh.forBigType_len= awb_adjust->wpNumTh.num; memcpy(commV20->xyRegionStableSelection.wpNumTh.forBigType,awb_adjust->wpNumTh.wpNumThForBigType,sizeof(float)*awb_adjust->wpNumTh.num); commV20->xyRegionStableSelection.wpNumTh.forExtraType_len= awb_adjust->wpNumTh.num; memcpy(commV20->xyRegionStableSelection.wpNumTh.forExtraType,awb_adjust->wpNumTh.wpNumThForExtraType,sizeof(float)*awb_adjust->wpNumTh.num); commV20->xyRegionStableSelection.xyTypeListSize = awb_adjust->xyTypeListSize; commV20->xyRegionStableSelection.varianceLumaTh = awb_adjust->varianceLumaTh; memcpy(commV20->weightForNightGainCalc, awb_adjust->temporalGainSetWeight, commV20->weightForNightGainCalc_len*sizeof(unsigned char)); commV20->singleColorProces.enable = true; for(int i=0; isingleColorProces.colorBlock_len; i++){ commV20->singleColorProces.colorBlock[i].index = awb_calib_v20->sIndSelColor[i]; commV20->singleColorProces.colorBlock[i].meanC= awb_calib_v20->sMeanCh[0][i]; commV20->singleColorProces.colorBlock[i].meanH= awb_calib_v20->sMeanCh[1][i]; } for(int i=0; isingleColorProces.lsUsedForEstimation_len; i++){ strcpy(commV20->singleColorProces.lsUsedForEstimation[i].name, awb_calib_v20->sNameIllEst[i]); commV20->singleColorProces.lsUsedForEstimation[i].RGain= awb_calib_v20->srGain[i]; commV20->singleColorProces.lsUsedForEstimation[i].BGain= awb_calib_v20->sbGain[i]; } commV20->singleColorProces.alpha= awb_calib_v20->sAlpha; memcpy(commV20->lineRgBg,awb_calib_v20->lineRgBg,sizeof(commV20->lineRgBg)); memcpy(commV20->lineRgProjCCT,awb_calib_v20->lineRgProjCCT,sizeof(commV20->lineRgProjCCT)); commV20->chrAdpttAdj.enable = awb_adjust->ca_enable; commV20->chrAdpttAdj.laCalcFactor = awb_adjust->ca_LACalcFactor; memcpy(commV20->chrAdpttAdj.targetGain, awb_calib_v20->ca_targetGain, sizeof(commV20->chrAdpttAdj.targetGain)); commV20->remosaicCfg.enable = awb_adjust->remosaic_cfg.enable; commV20->remosaicCfg.applyInvWbGainEnable= false; memcpy(commV20->remosaicCfg.sensorWbGain, awb_adjust->remosaic_cfg.sensor_awb_gain, sizeof(commV20->remosaicCfg.sensorWbGain)); memcpy(&commV20->wbGainOffset, &awb_adjust->wbGainOffset, sizeof(commV20->wbGainOffset)); } void convertCalib2calibV2(const CamCalibDbContext_t *calib,CamCalibDbV2Context_t *calibV2) { convertCalib2calibV20(calib, calibV2); convertCalib2calibV21(calib, calibV2); }