hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
#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);
    }
}