#include "cnr_xml2json_v1.h" #include "RkAiqCalibApi.h" #define CNRV1_SETTING_NUM (2) #define CNRV1_ISO_NUM (13) int cnrV1_calibdb_to_calibdbV2(struct list_head *pCnrList, CalibDbV2_CNR_t *pCalibdbV2, int mode_idx) { CalibDbV2_CNR_TuningPara_t *pTuningParaV2 = NULL; CalibDbV2_CNR_TuningPara_Setting_ISO_t *pISOV2 = NULL; if(pCnrList == NULL || pCalibdbV2 == NULL) { printf(" pCalibdb is NULL pointer\n"); return -1; } Calibdb_Cnr_V1_t* pCnrProfile = NULL; CamCalibdbGetCnrV1ProfileByIdx(pCnrList, mode_idx, &pCnrProfile); if(pCnrProfile == NULL) { printf(" %s:%d cnr can't get mode:%d para from xml calibdb\n", __FUNCTION__, __LINE__, mode_idx); return -1; } pTuningParaV2 = &pCalibdbV2->TuningPara; //malloc settting size pTuningParaV2->Setting = (CalibDbV2_CNR_TuningPara_Setting_t *)malloc(CNRV1_SETTING_NUM * sizeof(CalibDbV2_CNR_TuningPara_Setting_t)); memset(pTuningParaV2->Setting, 0x00, CNRV1_SETTING_NUM * sizeof(CalibDbV2_CNR_TuningPara_Setting_t)); pTuningParaV2->Setting_len = CNRV1_SETTING_NUM; //malloc iso size for(int i = 0; i < CNRV1_SETTING_NUM; i++) { pTuningParaV2->Setting[i].Tuning_ISO = (CalibDbV2_CNR_TuningPara_Setting_ISO_t *)malloc(CNRV1_ISO_NUM * sizeof(CalibDbV2_CNR_TuningPara_Setting_ISO_t)); memset(pTuningParaV2->Setting[i].Tuning_ISO, 0x00, CNRV1_ISO_NUM * sizeof(CalibDbV2_CNR_TuningPara_Setting_ISO_t)); pTuningParaV2->Setting[i].Tuning_ISO_len = CNRV1_ISO_NUM; } //assign the value pTuningParaV2->enable = pCnrProfile->enable; //tuning for(int i = 0; i < CNRV1_SETTING_NUM; i++) { Calibdb_Cnr_params_V1_t *pCnrParamsV1 = NULL; CamCalibdbGetCnrV1SettingByIdx(&pCnrProfile->listHead, i, &pCnrParamsV1); if(pCnrParamsV1 == NULL) { printf("cnr can't get setting:%d from xml calibdb! \n", i); break; } pTuningParaV2->Setting[i].SNR_Mode = strdup(pCnrParamsV1->snr_mode); pTuningParaV2->Setting[i].Sensor_Mode = strdup(pCnrParamsV1->sensor_mode); for(int j = 0; j < CNRV1_ISO_NUM; j++) { pISOV2 = &pTuningParaV2->Setting[i].Tuning_ISO[j]; pISOV2->iso = pCnrParamsV1->iso[j]; pISOV2->hf_bypass = pCnrParamsV1->rkcnr_hq_bila_bypass[j]; pISOV2->lf_bypass = pCnrParamsV1->rkcnr_lq_bila_bypass[j]; pISOV2->cnr_exgain = pCnrParamsV1->rkcnr_exgain[j]; pISOV2->cnr_g_gain = pCnrParamsV1->rkcnr_g_gain[j]; pISOV2->color_sat_adj = pCnrParamsV1->ratio[j]; pISOV2->color_sat_adj_alpha = pCnrParamsV1->offset[j]; pISOV2->hf_spikes_reducion_strength = pCnrParamsV1->medRatio1[j]; pISOV2->hf_denoise_strength = pCnrParamsV1->sigmaR1[j]; pISOV2->hf_color_sat = pCnrParamsV1->uvgain1[j]; pISOV2->hf_denoise_alpha = pCnrParamsV1->bfRatio1[j]; pISOV2->hf_bf_wgt_clip = pCnrParamsV1->hbf_wgt_clip[j]; pISOV2->thumb_spikes_reducion_strength = pCnrParamsV1->medRatio2[j]; pISOV2->thumb_denoise_strength = pCnrParamsV1->sigmaR2[j]; pISOV2->thumb_color_sat = pCnrParamsV1->uvgain2[j]; pISOV2->lf_denoise_strength = pCnrParamsV1->sigmaR3[j]; pISOV2->lf_color_sat = pCnrParamsV1->uvgain3[j]; pISOV2->lf_denoise_alpha = pCnrParamsV1->bfRatio3[j]; } memcpy(pCalibdbV2->TuningPara.Kernel_Coeff.kernel_5x5, pCnrParamsV1->kernel_5x5_table, sizeof(pCnrParamsV1->kernel_5x5_table)); } return 0; } int cnrV1_calibdbV2_to_calibdb(CalibDbV2_CNR_t *pCalibdbV2, struct list_head *pCnrList, int mode_idx) { CalibDbV2_CNR_TuningPara_t *pTuningParaV2 = NULL; CalibDbV2_CNR_TuningPara_Setting_ISO_t *pISOV2 = NULL; if(pCalibdbV2 == NULL || pCnrList == NULL) { printf(" pCalibdb is NULL pointer\n"); return -1; } Calibdb_Cnr_V1_t* pCnrProfile = NULL; CamCalibdbGetCnrV1ProfileByIdx(pCnrList, mode_idx, &pCnrProfile); if(pCnrProfile == NULL) { printf(" %s:%d cnr can't get mode:%d para from xml calibdb\n", __FUNCTION__, __LINE__, mode_idx); return -1; } pTuningParaV2 = &pCalibdbV2->TuningPara; //assign the value pCnrProfile->enable = pTuningParaV2->enable; //tuning for(int i = 0; i < pTuningParaV2->Setting_len; i++) { Calibdb_Cnr_params_V1_t *pCnrParamsV1 = NULL; CamCalibdbGetCnrV1SettingByIdx(&pCnrProfile->listHead, i, &pCnrParamsV1); if(pCnrParamsV1 == NULL) { printf("cnr can't get setting:%d from xml calibdb! \n", i); break; } strcpy(pCnrParamsV1->snr_mode, pTuningParaV2->Setting[i].SNR_Mode); strcpy(pCnrParamsV1->sensor_mode, pTuningParaV2->Setting[i].Sensor_Mode); for(int j = 0; j < CNRV1_ISO_NUM; j++) { pISOV2 = &pTuningParaV2->Setting[i].Tuning_ISO[j]; pCnrParamsV1->iso[j] = pISOV2->iso; pCnrParamsV1->rkcnr_hq_bila_bypass[j] = pISOV2->hf_bypass; pCnrParamsV1->rkcnr_lq_bila_bypass[j] = pISOV2->lf_bypass; pCnrParamsV1->rkcnr_exgain[j] = pISOV2->cnr_exgain; pCnrParamsV1->rkcnr_g_gain[j] = pISOV2->cnr_g_gain; pCnrParamsV1->ratio[j] = pISOV2->color_sat_adj; pCnrParamsV1->offset[j] = pISOV2->color_sat_adj_alpha; pCnrParamsV1->medRatio1[j] = pISOV2->hf_spikes_reducion_strength; pCnrParamsV1->sigmaR1[j] = pISOV2->hf_denoise_strength; pCnrParamsV1->uvgain1[j] = pISOV2->hf_color_sat; pCnrParamsV1->bfRatio1[j] = pISOV2->hf_denoise_alpha; pCnrParamsV1->hbf_wgt_clip[j] = pISOV2->hf_bf_wgt_clip; pCnrParamsV1->medRatio2[j] = pISOV2->thumb_spikes_reducion_strength; pCnrParamsV1->sigmaR2[j] = pISOV2->thumb_denoise_strength; pCnrParamsV1->uvgain2[j] = pISOV2->thumb_color_sat; pCnrParamsV1->sigmaR3[j] = pISOV2->lf_denoise_strength; pCnrParamsV1->uvgain3[j] = pISOV2->lf_color_sat; pCnrParamsV1->bfRatio3[j] = pISOV2->lf_denoise_alpha; } memcpy(pCnrParamsV1->kernel_5x5_table, pCalibdbV2->TuningPara.Kernel_Coeff.kernel_5x5, sizeof(pCnrParamsV1->kernel_5x5_table)); } return 0; } void cnrV1_calibdbV2_free(CalibDbV2_CNR_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); } }