#include "uvnr_xml2json_v1.h" #define UVNRV1_SETTING_NUM (2) #define UVNRV1_ISO_NUM (13) int uvnrV1_calibdb_to_calibdbV2(const CalibDb_UVNR_2_t *pCalibdb, CalibDbV2_UVNR_t *pCalibdbV2, int mode_idx) { CalibDbV2_UVNR_TuningPara_t *pTuningParaV2 = NULL; CalibDbV2_UVNR_TuningPara_Setting_ISO_t *pTuningISOV2 = NULL; CalibDbV2_UVNR_TuningPara_Kernel_t *pKernel_Coeff; CalibDb_UVNR_Params_t *pSetting = NULL; if(pCalibdb == NULL) { printf(" pCalibdb is NULL pointer\n"); return -1; } if(pCalibdbV2 == NULL) { printf(" pCalibdbV2 is NULL pointer\n"); return -1; } if(pCalibdb->mode_num < mode_idx) { printf(" old xml file have no %d mode cell \n", mode_idx); return -1; } pTuningParaV2 = &pCalibdbV2->TuningPara; //malloc settting size pTuningParaV2->Setting = (CalibDbV2_UVNR_TuningPara_Setting_t *)malloc(UVNRV1_SETTING_NUM * sizeof(CalibDbV2_UVNR_TuningPara_Setting_t)); memset(pTuningParaV2->Setting, 0x00, UVNRV1_SETTING_NUM * sizeof(CalibDbV2_UVNR_TuningPara_Setting_t)); pTuningParaV2->Setting_len = UVNRV1_SETTING_NUM; //malloc iso size for(int i = 0; i < UVNRV1_SETTING_NUM; i++) { pTuningParaV2->Setting[i].Tuning_ISO = (CalibDbV2_UVNR_TuningPara_Setting_ISO_t *)malloc(UVNRV1_ISO_NUM * sizeof(CalibDbV2_UVNR_TuningPara_Setting_ISO_t)); memset(pTuningParaV2->Setting[i].Tuning_ISO, 0x00, UVNRV1_ISO_NUM * sizeof(CalibDbV2_UVNR_TuningPara_Setting_ISO_t)); pTuningParaV2->Setting[i].Tuning_ISO_len = UVNRV1_ISO_NUM; } //assign the value pTuningParaV2->enable = pCalibdb->enable; pCalibdbV2->Version = strdup(pCalibdb->version); //tuning for(int i = 0; i < UVNRV1_SETTING_NUM; i++) { pSetting = &pCalibdb->mode_cell[mode_idx].setting[i]; pTuningParaV2->Setting[i].SNR_Mode = strdup(pSetting->snr_mode); pTuningParaV2->Setting[i].Sensor_Mode = strdup(pSetting->sensor_mode); for(int j = 0; j < UVNRV1_ISO_NUM; j++) { pTuningISOV2 = &pTuningParaV2->Setting[i].Tuning_ISO[j]; pTuningISOV2->iso = pSetting->ISO[j]; pTuningISOV2->step0_uvgrad_ratio = pSetting->step0_uvgrad_ratio[j]; pTuningISOV2->step0_uvgrad_offset = pSetting->step0_uvgrad_offset[j]; pTuningISOV2->step1_median_ratio = pSetting->step1_median_ratio[j]; pTuningISOV2->step1_bf_sigmaR = pSetting->step1_bf_sigmaR[j]; pTuningISOV2->step1_bf_uvgain = pSetting->step1_bf_uvgain[j]; pTuningISOV2->step1_bf_ratio = pSetting->step1_bf_ratio[j]; pTuningISOV2->step2_median_ratio = pSetting->step2_median_ratio[j]; pTuningISOV2->step2_bf_sigmaR = pSetting->step2_bf_sigmaR[j]; pTuningISOV2->step2_bf_uvgain = pSetting->step2_bf_uvgain[j]; pTuningISOV2->step2_bf_ratio = pSetting->step2_bf_ratio[j]; pTuningISOV2->step3_bf_sigmaR = pSetting->step3_bf_sigmaR[j]; pTuningISOV2->step3_bf_uvgain = pSetting->step3_bf_uvgain[j]; pTuningISOV2->step3_bf_ratio = pSetting->step3_bf_ratio[j]; } } pKernel_Coeff = &pTuningParaV2->Kernel_Coeff; memcpy(pKernel_Coeff->kernel_3x3, pCalibdb->mode_cell[mode_idx].setting[0].kernel_3x3, sizeof(pKernel_Coeff->kernel_3x3)); memcpy(pKernel_Coeff->kernel_5x5, pCalibdb->mode_cell[mode_idx].setting[0].kernel_5x5, sizeof(pKernel_Coeff->kernel_5x5)); memcpy(pKernel_Coeff->kernel_9x9, pCalibdb->mode_cell[mode_idx].setting[0].kernel_9x9, sizeof(pKernel_Coeff->kernel_9x9)); pKernel_Coeff->kernel_9x9_num = pCalibdb->mode_cell[mode_idx].setting[0].kernel_9x9_num; return 0; } int uvnrV1_calibdbV2_to_calibdb(CalibDbV2_UVNR_t *pCalibdbV2, CalibDb_UVNR_2_t *pCalibdb, int mode_idx) { CalibDbV2_UVNR_TuningPara_t *pTuningParaV2 = NULL; CalibDbV2_UVNR_TuningPara_Setting_ISO_t *pTuningISOV2 = NULL; CalibDbV2_UVNR_TuningPara_Kernel_t *pKernel_Coeff; CalibDb_UVNR_Params_t *pSetting = NULL; if(pCalibdb == NULL) { printf(" pCalibdb is NULL pointer\n"); return -1; } if(pCalibdbV2 == NULL) { printf(" pCalibdbV2 is NULL pointer\n"); return -1; } if(pCalibdb->mode_num < mode_idx) { printf(" old xml file have no %d mode cell \n", mode_idx); return -1; } pTuningParaV2 = &pCalibdbV2->TuningPara; //assign the value pCalibdb->enable = pTuningParaV2->enable; strcpy(pCalibdb->version, pCalibdbV2->Version); //tuning for(int i = 0; i < pTuningParaV2->Setting_len; i++) { pSetting = &pCalibdb->mode_cell[mode_idx].setting[i]; strcpy(pSetting->snr_mode, pTuningParaV2->Setting[i].SNR_Mode); strcpy(pSetting->sensor_mode, pTuningParaV2->Setting[i].Sensor_Mode); for(int j = 0; j < UVNRV1_ISO_NUM; j++) { pTuningISOV2 = &pTuningParaV2->Setting[i].Tuning_ISO[j]; pSetting->ISO[j] = pTuningISOV2->iso; pSetting->step0_uvgrad_ratio[j] = pTuningISOV2->step0_uvgrad_ratio; pSetting->step0_uvgrad_offset[j] = pTuningISOV2->step0_uvgrad_offset; pSetting->step1_median_ratio[j] = pTuningISOV2->step1_median_ratio; pSetting->step1_bf_sigmaR[j] = pTuningISOV2->step1_bf_sigmaR; pSetting->step1_bf_uvgain[j] = pTuningISOV2->step1_bf_uvgain; pSetting->step1_bf_ratio[j] = pTuningISOV2->step1_bf_ratio; pSetting->step2_median_ratio[j] = pTuningISOV2->step2_median_ratio; pSetting->step2_bf_sigmaR[j] = pTuningISOV2->step2_bf_sigmaR; pSetting->step2_bf_uvgain[j] = pTuningISOV2->step2_bf_uvgain; pSetting->step2_bf_ratio[j] = pTuningISOV2->step2_bf_ratio; pSetting->step3_bf_sigmaR[j] = pTuningISOV2->step3_bf_sigmaR; pSetting->step3_bf_uvgain[j] = pTuningISOV2->step3_bf_uvgain; pSetting->step3_bf_ratio[j] = pTuningISOV2->step3_bf_ratio; } } pKernel_Coeff = &pTuningParaV2->Kernel_Coeff; memcpy(pCalibdb->mode_cell[mode_idx].setting[0].kernel_3x3, pKernel_Coeff->kernel_3x3, sizeof(pKernel_Coeff->kernel_3x3)); memcpy(pCalibdb->mode_cell[mode_idx].setting[0].kernel_5x5, pKernel_Coeff->kernel_5x5, sizeof(pKernel_Coeff->kernel_5x5)); memcpy(pCalibdb->mode_cell[mode_idx].setting[0].kernel_9x9, pKernel_Coeff->kernel_9x9, sizeof(pKernel_Coeff->kernel_9x9)); pCalibdb->mode_cell[mode_idx].setting[0].kernel_9x9_num = pKernel_Coeff->kernel_9x9_num; return 0; } void uvnrV1_calibdbV2_free(CalibDbV2_UVNR_t *pCalibdbV2) { if(pCalibdbV2) { if(pCalibdbV2->Version) { free(pCalibdbV2->Version); } if(pCalibdbV2->TuningPara.Setting) { for(int i = 0; i < pCalibdbV2->TuningPara.Setting_len; i++) { if(pCalibdbV2->TuningPara.Setting[i].SNR_Mode) { free(pCalibdbV2->TuningPara.Setting[i].SNR_Mode); } if(pCalibdbV2->TuningPara.Setting[i].Sensor_Mode) { free(pCalibdbV2->TuningPara.Setting[i].Sensor_Mode); } if(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO) { free(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO); } } free(pCalibdbV2->TuningPara.Setting); } free(pCalibdbV2); } }