#include "sharp_xml2json_v1.h" #define SHARPV1_SETTING_NUM (2) #define SHARPV1_ISO_NUM (13) int sharpV1_calibdb_to_calibdbV2(const CalibDb_Sharp_2_t *pCalibdb, CalibDbV2_SharpV1_t *pCalibdbV2, int mode_idx) { CalibDbV2_SharpV1_TuningPara_t *pTuningParaV2 = NULL; CalibDbV2_SharpV1_TuningPara_Setting_ISO_t *pTuningISOV2 = NULL; CalibDbV2_SharpV1_TuningPara_Setting_ISO_Luma_t *pLumaParaV2 = NULL; CalibDbV2_SharpV1_TuningPara_Kernel_t *pKernelCoeffV2 = NULL; CalibDb_Sharp_Setting_t *pSetting = NULL; struct CalibDb_Sharp_ISO_s *pISO = NULL; if(pCalibdb == NULL || pCalibdbV2 == NULL) { printf(" pCalibdb 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_SharpV1_TuningPara_Setting_t *)malloc(SHARPV1_SETTING_NUM * sizeof(CalibDbV2_SharpV1_TuningPara_Setting_t)); memset(pTuningParaV2->Setting, 0x00, SHARPV1_SETTING_NUM * sizeof(CalibDbV2_SharpV1_TuningPara_Setting_t)); pTuningParaV2->Setting_len = SHARPV1_SETTING_NUM; //malloc iso size for(int i = 0; i < SHARPV1_SETTING_NUM; i++) { pTuningParaV2->Setting[i].Tuning_ISO = (CalibDbV2_SharpV1_TuningPara_Setting_ISO_t *)malloc(SHARPV1_ISO_NUM * sizeof(CalibDbV2_SharpV1_TuningPara_Setting_ISO_t)); memset(pTuningParaV2->Setting[i].Tuning_ISO, 0x00, SHARPV1_ISO_NUM * sizeof(CalibDbV2_SharpV1_TuningPara_Setting_ISO_t)); pTuningParaV2->Setting[i].Tuning_ISO_len = SHARPV1_ISO_NUM; } //assign the value pCalibdbV2->Version = strdup(pCalibdb->version); pTuningParaV2->enable = pCalibdb->enable; for(int i = 0; i < SHARPV1_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 < SHARPV1_ISO_NUM; j++) { pSetting = &pCalibdb->mode_cell[mode_idx].setting[i]; pTuningISOV2 = &pTuningParaV2->Setting[i].Tuning_ISO[j]; pISO = &pSetting->sharp_iso[j]; pTuningISOV2->iso = pISO->iso; pTuningISOV2->hratio = pISO->hratio; pTuningISOV2->lratio = pISO->lratio; pTuningISOV2->mf_sharp_ratio = pISO->mf_sharp_ratio; pTuningISOV2->hf_sharp_ratio = pISO->hf_sharp_ratio; pTuningISOV2->pbf_gain = pISO->pbf_gain; pTuningISOV2->pbf_ratio = pISO->pbf_ratio; pTuningISOV2->pbf_add = pISO->pbf_add; pTuningISOV2->mbf_gain = pISO->mbf_gain; pTuningISOV2->mbf_add = pISO->mbf_add; pTuningISOV2->hbf_gain = pISO->hbf_gain; pTuningISOV2->hbf_ratio = pISO->hbf_ratio; pTuningISOV2->hbf_add = pISO->hbf_add; pTuningISOV2->local_sharp_strength = pISO->local_sharp_strength; pTuningISOV2->pbf_coeff_percent = pISO->pbf_coeff_percent; pTuningISOV2->rf_m_coeff_percent = pISO->rf_m_coeff_percent; pTuningISOV2->rf_h_coeff_percent = pISO->rf_h_coeff_percent; pTuningISOV2->hbf_coeff_percent = pISO->hbf_coeff_percent; pLumaParaV2 = &pTuningISOV2->luma_para; for(int k = 0; k < 8; k++) { pLumaParaV2->luma_point[k] = pCalibdb->luma_point[k]; pLumaParaV2->luma_sigma[k] = pISO->luma_sigma[k]; pLumaParaV2->mf_clip_pos[k] = pISO->mf_clip_pos[k]; pLumaParaV2->mf_clip_neg[k] = pISO->mf_clip_neg[k]; pLumaParaV2->hf_clip[k] = pISO->hf_clip[k]; } } } pKernelCoeffV2 = &pTuningParaV2->kernel_coeff; memcpy(pKernelCoeffV2->gauss_luma_coeff, pCalibdb->mode_cell[mode_idx].gauss_luma_coeff, sizeof(pKernelCoeffV2->gauss_luma_coeff)); memcpy(pKernelCoeffV2->pbf_coeff_l, pCalibdb->mode_cell[mode_idx].pbf_coeff_l, sizeof(pKernelCoeffV2->pbf_coeff_l)); memcpy(pKernelCoeffV2->pbf_coeff_h, pCalibdb->mode_cell[mode_idx].pbf_coeff_h, sizeof(pKernelCoeffV2->pbf_coeff_h)); memcpy(pKernelCoeffV2->rf_m_coeff_l, pCalibdb->mode_cell[mode_idx].rf_m_coeff_l, sizeof(pKernelCoeffV2->rf_m_coeff_l)); memcpy(pKernelCoeffV2->rf_m_coeff_h, pCalibdb->mode_cell[mode_idx].rf_m_coeff_h, sizeof(pKernelCoeffV2->rf_m_coeff_h)); memcpy(pKernelCoeffV2->rf_h_coeff_l, pCalibdb->mode_cell[mode_idx].rf_h_coeff_l, sizeof(pKernelCoeffV2->rf_h_coeff_l)); memcpy(pKernelCoeffV2->rf_h_coeff_h, pCalibdb->mode_cell[mode_idx].rf_h_coeff_h, sizeof(pKernelCoeffV2->rf_h_coeff_h)); memcpy(pKernelCoeffV2->hbf_coeff_l, pCalibdb->mode_cell[mode_idx].hbf_coeff_l, sizeof(pKernelCoeffV2->hbf_coeff_l)); memcpy(pKernelCoeffV2->hbf_coeff_h, pCalibdb->mode_cell[mode_idx].hbf_coeff_h, sizeof(pKernelCoeffV2->hbf_coeff_h)); memcpy(pKernelCoeffV2->mbf_coeff, pCalibdb->mode_cell[mode_idx].mbf_coeff, sizeof(pKernelCoeffV2->mbf_coeff)); return 0; } int sharpV1_calibdbV2_to_calibdb(CalibDbV2_SharpV1_t *pCalibdbV2, CalibDb_Sharp_2_t *pCalibdb, int mode_idx) { CalibDbV2_SharpV1_TuningPara_t *pTuningParaV2 = NULL; CalibDbV2_SharpV1_TuningPara_Setting_ISO_t *pTuningISOV2 = NULL; CalibDbV2_SharpV1_TuningPara_Setting_ISO_Luma_t *pLumaParaV2 = NULL; CalibDbV2_SharpV1_TuningPara_Kernel_t *pKernelCoeffV2 = NULL; CalibDb_Sharp_Setting_t *pSetting = NULL; struct CalibDb_Sharp_ISO_s *pISO = NULL; if(pCalibdb == NULL || pCalibdbV2 == NULL) { printf(" pCalibdb 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 strcpy(pCalibdb->version, pCalibdbV2->Version); pCalibdb->enable = pTuningParaV2->enable; for(int i = 0; i < SHARPV1_SETTING_NUM; 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 < SHARPV1_ISO_NUM; j++) { pSetting = &pCalibdb->mode_cell[mode_idx].setting[i]; pTuningISOV2 = &pTuningParaV2->Setting[i].Tuning_ISO[j]; pISO = &pSetting->sharp_iso[j]; pISO->iso = pTuningISOV2->iso; pISO->hratio = pTuningISOV2->hratio; pISO->lratio = pTuningISOV2->lratio; pISO->mf_sharp_ratio = pTuningISOV2->mf_sharp_ratio; pISO->hf_sharp_ratio = pTuningISOV2->hf_sharp_ratio; pISO->pbf_gain = pTuningISOV2->pbf_gain; pISO->pbf_ratio = pTuningISOV2->pbf_ratio; pISO->pbf_add = pTuningISOV2->pbf_add; pISO->mbf_gain = pTuningISOV2->mbf_gain; pISO->mbf_add = pTuningISOV2->mbf_add; pISO->hbf_gain = pTuningISOV2->hbf_gain; pISO->hbf_ratio = pTuningISOV2->hbf_ratio; pISO->hbf_add = pTuningISOV2->hbf_add; pISO->local_sharp_strength = pTuningISOV2->local_sharp_strength; pISO->pbf_coeff_percent = pTuningISOV2->pbf_coeff_percent; pISO->rf_m_coeff_percent = pTuningISOV2->rf_m_coeff_percent; pISO->rf_h_coeff_percent = pTuningISOV2->rf_h_coeff_percent; pISO->hbf_coeff_percent = pTuningISOV2->hbf_coeff_percent; pLumaParaV2 = &pTuningISOV2->luma_para; for(int k = 0; k < 8; k++) { pCalibdb->luma_point[k] = pLumaParaV2->luma_point[k]; pISO->luma_sigma[k] = pLumaParaV2->luma_sigma[k]; pISO->mf_clip_pos[k] = pLumaParaV2->mf_clip_pos[k]; pISO->mf_clip_neg[k] = pLumaParaV2->mf_clip_neg[k]; pISO->hf_clip[k] = pLumaParaV2->hf_clip[k]; } } } pKernelCoeffV2 = &pTuningParaV2->kernel_coeff; memcpy(pCalibdb->mode_cell[mode_idx].gauss_luma_coeff, pKernelCoeffV2->gauss_luma_coeff, sizeof(pKernelCoeffV2->gauss_luma_coeff)); memcpy(pCalibdb->mode_cell[mode_idx].pbf_coeff_l, pKernelCoeffV2->pbf_coeff_l, sizeof(pKernelCoeffV2->pbf_coeff_l)); memcpy(pCalibdb->mode_cell[mode_idx].pbf_coeff_h, pKernelCoeffV2->pbf_coeff_h, sizeof(pKernelCoeffV2->pbf_coeff_h)); memcpy(pCalibdb->mode_cell[mode_idx].rf_m_coeff_l, pKernelCoeffV2->rf_m_coeff_l, sizeof(pKernelCoeffV2->rf_m_coeff_l)); memcpy(pCalibdb->mode_cell[mode_idx].rf_m_coeff_h, pKernelCoeffV2->rf_m_coeff_h, sizeof(pKernelCoeffV2->rf_m_coeff_h)); memcpy(pCalibdb->mode_cell[mode_idx].rf_h_coeff_l, pKernelCoeffV2->rf_h_coeff_l, sizeof(pKernelCoeffV2->rf_h_coeff_l)); memcpy(pCalibdb->mode_cell[mode_idx].rf_h_coeff_h, pKernelCoeffV2->rf_h_coeff_h, sizeof(pKernelCoeffV2->rf_h_coeff_h)); memcpy(pCalibdb->mode_cell[mode_idx].hbf_coeff_l, pKernelCoeffV2->hbf_coeff_l, sizeof(pKernelCoeffV2->hbf_coeff_l)); memcpy(pCalibdb->mode_cell[mode_idx].hbf_coeff_h, pKernelCoeffV2->hbf_coeff_h, sizeof(pKernelCoeffV2->hbf_coeff_h)); memcpy(pCalibdb->mode_cell[mode_idx].mbf_coeff, pKernelCoeffV2->mbf_coeff, sizeof(pKernelCoeffV2->mbf_coeff)); return 0; } void sharpV1_calibdbV2_free(CalibDbV2_SharpV1_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); } }