xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/acnr2/rk_aiq_acnr_algo_cnr_v2.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "rk_aiq_acnr_algo_cnr_v2.h"
2 
3 
4 RKAIQ_BEGIN_DECLARE
5 
6 
interp_cnr_v2(int ISO_low,int ISO_high,float value_low,float value_high,int ISO,float value)7 float interp_cnr_v2(int ISO_low, int ISO_high, float value_low, float value_high, int ISO, float value)
8 {
9     if (ISO <= ISO_low) {
10         value = value_low;
11     }
12     else if (ISO >= ISO_high) {
13         value = value_high;
14     }
15     else {
16         value = float(ISO - ISO_low) / float(ISO_high - ISO_low) * (value_high - value_low) + value_low;
17     }
18 
19     return value;
20 }
21 
22 
cnr_select_params_by_ISO_V2(RK_CNR_Params_V2_t * pParams,RK_CNR_Params_V2_Select_t * pSelect,AcnrV2_ExpInfo_t * pExpInfo)23 AcnrV2_result_t cnr_select_params_by_ISO_V2(RK_CNR_Params_V2_t *pParams, RK_CNR_Params_V2_Select_t *pSelect, AcnrV2_ExpInfo_t *pExpInfo)
24 {
25     AcnrV2_result_t res = ACNRV2_RET_SUCCESS;
26     int iso = 50;
27     if(pParams == NULL) {
28         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
29         return ACNRV2_RET_NULL_POINTER;
30     }
31 
32     if(pSelect == NULL) {
33         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
34         return ACNRV2_RET_NULL_POINTER;
35     }
36 
37     if(pExpInfo == NULL) {
38         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
39         return ACNRV2_RET_NULL_POINTER;
40     }
41 
42     iso = pExpInfo->arIso[pExpInfo->hdr_mode];
43 
44     //ȷ��iso�ȼ�
45     //rkuvnriso@50 100 200 400 800 1600 3200  6400 12800
46     //      isogain: 1  2   4   8   16  32   64    128  256
47     //     isoindex: 0  1   2   3   4   5    6     7    8
48 
49     int isoIndex = 0;
50     int isoGainLow = 0;
51     int isoGainHigh = 0;
52     int isoIndexLow = 0;
53     int isoIndexHigh = 0;
54     int iso_div = 50;
55     int max_iso_step = RK_CNR_V2_MAX_ISO_NUM;
56 
57 #ifndef RK_SIMULATOR_HW
58     for (int i = 0; i < max_iso_step - 1 ; i++) {
59         if (iso >= pParams->iso[i]  &&  iso <= pParams->iso[i + 1]) {
60             isoGainLow = pParams->iso[i] ;
61             isoGainHigh = pParams->iso[i + 1];
62             isoIndexLow = i;
63             isoIndexHigh = i + 1;
64             //isoIndex = isoIndexLow;
65             isoIndex = (iso - pParams->iso[i]) < (pParams->iso[i + 1] - iso) ? isoIndexLow : isoIndexHigh;
66         }
67     }
68 
69     if(iso < pParams->iso[0] ) {
70         isoGainLow = pParams->iso[0];
71         isoGainHigh = pParams->iso[1];
72         isoIndexLow = 0;
73         isoIndexHigh = 1;
74         isoIndex = 0;
75     }
76 
77     if(iso > pParams->iso[max_iso_step - 1] ) {
78         isoGainLow = pParams->iso[max_iso_step - 2] ;
79         isoGainHigh = pParams->iso[max_iso_step - 1];
80         isoIndexLow = max_iso_step - 2;
81         isoIndexHigh = max_iso_step - 1;
82         isoIndex = max_iso_step - 1;
83     }
84 #else
85     isoIndex = int(log(float(iso / iso_div)) / log(2.0f));
86 
87     for (int i = max_iso_step - 1; i >= 0; i--) {
88         if (iso < iso_div * (2 << i)) {
89             isoGainLow = iso_div * (2 << (i)) / 2;
90             isoGainHigh = iso_div * (2 << i);
91         }
92     }
93 
94     isoGainLow = MIN(isoGainLow, iso_div * (2 << max_iso_step));
95     isoGainHigh = MIN(isoGainHigh, iso_div * (2 << max_iso_step));
96 
97     isoIndexHigh = (int)(log((float)isoGainHigh / iso_div) / log((float)2));
98     isoIndexLow = (int)(log((float)isoGainLow / iso_div) / log((float)2));
99 
100     isoIndexLow = MIN(MAX(isoIndexLow, 0), max_iso_step - 1);
101     isoIndexHigh = MIN(MAX(isoIndexHigh, 0), max_iso_step - 1);
102 #endif
103 
104     pExpInfo->isoHigh = pParams->iso[isoIndexHigh];
105     pExpInfo->isoLow = pParams->iso[isoIndexLow];
106 
107     LOGD_ANR("%s:%d iso:%d high:%d low:%d \n",
108              __FUNCTION__, __LINE__,
109              iso, isoGainHigh, isoGainLow);
110 
111     pSelect->enable = pParams->enable;
112     // bypass
113     pSelect->hf_bypass = pParams->hf_bypass[isoIndex];
114     pSelect->lf_bypass = pParams->lf_bypass[isoIndex];
115 
116     // gain
117     pSelect->global_gain = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->global_gain[isoIndexLow], pParams->global_gain[isoIndexHigh], iso, pSelect->global_gain);
118     pSelect->global_gain_alpha = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->global_gain_alpha[isoIndexLow], pParams->global_gain_alpha[isoIndexHigh], iso, pSelect->global_gain_alpha);
119     pSelect->local_gain_scale = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->local_gain_scale[isoIndexLow], pParams->local_gain_scale[isoIndexHigh], iso, pSelect->local_gain_scale);
120 
121     for (int i = 0; i < 13; i++)
122     {
123         pSelect->gain_adj_strength_ratio[i] = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->gain_adj_strength_ratio[isoIndexLow][i], pParams->gain_adj_strength_ratio[isoIndexHigh][i], iso, pSelect->gain_adj_strength_ratio[i]);
124     }
125     //
126     pSelect->color_sat_adj = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->color_sat_adj[isoIndexLow], pParams->color_sat_adj[isoIndexHigh], iso, pSelect->color_sat_adj);
127     pSelect->color_sat_adj_alpha = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->color_sat_adj_alpha[isoIndexLow], pParams->color_sat_adj_alpha[isoIndexHigh], iso, pSelect->color_sat_adj_alpha);
128 
129     // step1
130     // median filter
131     pSelect->hf_spikes_reducion_strength = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->hf_spikes_reducion_strength[isoIndexLow], pParams->hf_spikes_reducion_strength[isoIndexHigh], iso, pSelect->hf_spikes_reducion_strength);
132 
133     // bilateral filter
134     pSelect->hf_denoise_strength = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->hf_denoise_strength[isoIndexLow], pParams->hf_denoise_strength[isoIndexHigh], iso, pSelect->hf_denoise_strength);
135     pSelect->hf_color_sat = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->hf_color_sat[isoIndexLow], pParams->hf_color_sat[isoIndexHigh], iso, pSelect->hf_color_sat);
136     pSelect->hf_denoise_alpha = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->hf_denoise_alpha[isoIndexLow], pParams->hf_denoise_alpha[isoIndexHigh], iso, pSelect->hf_denoise_alpha);
137     pSelect->hf_bf_wgt_clip = pParams->hf_bf_wgt_clip[isoIndex];
138 
139     // step2
140     // median filter
141     pSelect->thumb_spikes_reducion_strength = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->thumb_spikes_reducion_strength[isoIndexLow], pParams->thumb_spikes_reducion_strength[isoIndexHigh], iso, pSelect->thumb_spikes_reducion_strength);
142 
143     // bilateral filter
144     pSelect->thumb_denoise_strength = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->thumb_denoise_strength[isoIndexLow], pParams->thumb_denoise_strength[isoIndexHigh], iso, pSelect->thumb_denoise_strength);
145     pSelect->thumb_color_sat = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->thumb_color_sat[isoIndexLow], pParams->thumb_color_sat[isoIndexHigh], iso, pSelect->thumb_color_sat);
146 
147     // step3
148     // bilateral filter
149     pSelect->lf_denoise_strength = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->lf_denoise_strength[isoIndexLow], pParams->lf_denoise_strength[isoIndexHigh], iso, pSelect->lf_denoise_strength);
150     pSelect->lf_color_sat = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->lf_color_sat[isoIndexLow], pParams->lf_color_sat[isoIndexHigh], iso, pSelect->lf_color_sat);
151     pSelect->lf_denoise_alpha = interp_cnr_v2(isoGainLow, isoGainHigh, pParams->lf_denoise_alpha[isoIndexLow], pParams->lf_denoise_alpha[isoIndexHigh], iso, pSelect->lf_denoise_alpha);
152 
153     // bilateral filter kernels
154     memcpy(pSelect->kernel_5x5, pParams->kernel_5x5, sizeof(float) * 5);
155 
156     return ACNRV2_RET_SUCCESS;
157 
158 }
159 
160 
cnr_fix_transfer_V2(RK_CNR_Params_V2_Select_t * pSelect,RK_CNR_Fix_V2_t * pFix,AcnrV2_ExpInfo_t * pExpInfo,rk_aiq_cnr_strength_v2_t * pStrength)161 AcnrV2_result_t cnr_fix_transfer_V2(RK_CNR_Params_V2_Select_t *pSelect, RK_CNR_Fix_V2_t *pFix, AcnrV2_ExpInfo_t *pExpInfo, rk_aiq_cnr_strength_v2_t *pStrength)
162 {
163     LOGI_ANR("%s:(%d) enter \n", __FUNCTION__, __LINE__);
164 
165     int i = 0;
166     AcnrV2_result_t res = ACNRV2_RET_SUCCESS;
167     int tmp = 0;
168 
169     if(pSelect == NULL) {
170         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
171         return ACNRV2_RET_NULL_POINTER;
172     }
173 
174     if(pFix == NULL) {
175         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
176         return ACNRV2_RET_NULL_POINTER;
177     }
178 
179     if(pExpInfo == NULL) {
180         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
181         return ACNRV2_RET_NULL_POINTER;
182     }
183 
184     if(pStrength == NULL) {
185         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
186         return ACNRV2_RET_NULL_POINTER;
187     }
188 
189     float fStrength = 1.0;
190 
191     if(pStrength->strength_enable) {
192         fStrength = pStrength->percent;
193     }
194 
195     if(fStrength <= 0.0) {
196         fStrength = 0.000001;
197     }
198 
199     LOGD_ANR("strength_enable:%d percent:%f fStrength:%f\n",
200              pStrength->strength_enable,
201              pStrength->percent,
202              fStrength);
203     // fix bit : RK_CNR_V2_log2e + RK_CNR_V2_SIGMA_FIX_BIT, msigma = (1 / sigma) * (1 << RK_CNR_V2_SIGMA_FIX_BIT) * log2e * (1 << RK_CNR_V2_log2e);
204     int log2e = (int)(0.8493f * (1 << (RK_CNR_V2_log2e + RK_CNR_V2_SIGMA_FIX_BIT)));
205 
206     //ISP_CNR_2800_CTRL
207     pFix->cnr_thumb_mix_cur_en = 0;
208     pFix->cnr_exgain_bypass = 0;
209     pFix->cnr_hq_bila_bypass = pSelect->hf_bypass;
210     pFix->cnr_lq_bila_bypass = pSelect->lf_bypass;
211     pFix->cnr_en_i = pSelect->enable;
212 
213     // ISP_CNR_2800_EXGAIN
214     tmp = pSelect->global_gain * (1 << RKCNR_V2_G_GAIN_FIX_BITS);
215     pFix->cnr_global_gain = CLIP(tmp, 0, 1023);
216     tmp = pSelect->global_gain_alpha * (1 << RKCNR_V2_G_GAIN_ALPHA_FIX_BITS);
217     if (pFix->cnr_exgain_bypass == 1)
218     {
219         tmp = pSelect->global_gain_alpha  = 1.0 * (1 << RKCNR_V2_G_GAIN_ALPHA_FIX_BITS);
220     }
221     pFix->cnr_global_gain_alpha = CLIP(tmp, 0, 8);
222 
223 
224     // ISP_CNR_2800_GAIN_PARA
225     tmp = pSelect->local_gain_scale * (1 << RKCNR_V2_GAIN_ISO_FIX_BITS);
226     pFix->cnr_gain_iso = CLIP(tmp, 0, 128);
227     tmp = (int)(pSelect->color_sat_adj_alpha * (1 << RK_CNR_V2_offset));
228     pFix->cnr_gain_offset = CLIP(tmp, 0, 16);
229     tmp = (int)(pSelect->color_sat_adj * (1 << RK_CNR_V2_ratio));
230     pFix->cnr_gain_1sigma = CLIP(tmp, 0, 255);
231 
232     // ISP_CNR_2800_GAIN_UV_PARA
233     tmp = (int)(pSelect->hf_color_sat / fStrength * (1 << RK_CNR_V2_uvgain));
234     pFix->cnr_gain_uvgain0 = CLIP(tmp, 0, (1 << 7) - 1);
235     tmp = (int)(pSelect->lf_color_sat / fStrength * (1 << RK_CNR_V2_uvgain));
236     pFix->cnr_gain_uvgain1 = CLIP(tmp, 0, (1 << 7) - 1);
237 
238     // ISP_CNR_2800_LMED3
239     tmp = (int)(pSelect->thumb_spikes_reducion_strength * (1 << RK_CNR_V2_medRatio));
240     pFix->cnr_lmed3_alpha = CLIP(tmp, 0, 16);
241 
242     // ISP_CNR_2800_LBF5_GAIN
243     int rkcnr_thumb_denoise_strength   = (int)(log2e / pSelect->thumb_denoise_strength / fStrength);
244     int rkcnr_thumb_color_sat   = (int)(pSelect->thumb_color_sat / fStrength * (1 << RK_CNR_V2_uvgain));
245     int tmpBit = 10 + RK_CNR_V2_log2e + RK_CNR_V2_uvgain - 6;
246     int sgmRatio = 1 << RK_CNR_V2_sgmRatio;
247     int ky = sgmRatio * (1 << RK_CNR_V2_uvgain) >> RK_CNR_V2_sgmRatio;
248     int kuv = sgmRatio * rkcnr_thumb_color_sat >> RK_CNR_V2_sgmRatio;
249     ky = MIN2(ky, (1 << (4 + RK_CNR_V2_uvgain)) - 1);
250     kuv = MIN2(kuv, (1 << (4 + RK_CNR_V2_uvgain)) - 1);
251     tmp = ((rkcnr_thumb_denoise_strength * ky + (1 << (tmpBit - 1))) >> tmpBit);
252     pFix->cnr_lbf5_gain_y = CLIP(tmp, 0, 15);
253     tmp = ((rkcnr_thumb_denoise_strength * kuv + (1 << (tmpBit - 1))) >> tmpBit);
254     pFix->cnr_lbf5_gain_c = CLIP(tmp, 0, 63);
255 
256     // ISP_CNR_2800_LBF5_WEITD0_3
257     // bilateral filter kernels
258     for (int i = 0; i < 5; i++) {
259         tmp = (int)(pSelect->kernel_5x5[i] * (1 << RK_CNR_V2_kernels));
260         pFix->cnr_lbf5_weit_d[i] = CLIP(tmp, 0, 128);
261     }
262 
263     // ISP_CNR_2800_HMED3
264     tmp = (int)(pSelect->hf_spikes_reducion_strength * (1 << RK_CNR_V2_medRatio));
265     pFix->cnr_hmed3_alpha = CLIP(tmp, 0, 16);
266 
267     // ISP_CNR_2800_HBF5
268     tmp = (int)(log2e / pSelect->hf_denoise_strength / fStrength);
269     pFix->cnr_hbf5_sigma    = CLIP(tmp, 0, (1 << 13) - 1);
270     tmp = pSelect->hf_bf_wgt_clip;
271     pFix->cnr_hbf5_min_wgt = CLIP(tmp, 0, (1 << 8) - 1);
272     tmp = (int)(pSelect->hf_denoise_alpha / fStrength  * (1 << RK_CNR_V2_bfRatio));
273     pFix->cnr_hbf5_weit_src = CLIP(tmp, 0, 128);
274 
275     // ISP_CNR_2800_LBF3
276     // step3
277     // bilateral filter
278     tmp = (int)(log2e / pSelect->lf_denoise_strength / fStrength);
279     pFix->cnr_lbf3_sigma = CLIP(tmp, 0, (1 << 13) - 1);
280     tmp = (int)(pSelect->lf_denoise_alpha / fStrength * (1 << RK_CNR_V2_bfRatio));
281     pFix->cnr_lbf5_weit_src = CLIP(tmp, 0, 128);
282 
283 
284     //sigma
285     for(int i = 0; i < 13; i++) {
286         tmp = pSelect->gain_adj_strength_ratio[i];
287         pFix->cnr_sigma_y[i] = CLIP(tmp, 0, (1 << 8) - 1);
288     }
289 
290     cnr_fix_printf_V2(pFix);
291 
292     LOGI_ANR("%s:(%d) exit \n", __FUNCTION__, __LINE__);
293 
294     return ACNRV2_RET_SUCCESS;
295 }
296 
297 
cnr_fix_printf_V2(RK_CNR_Fix_V2_t * pFix)298 AcnrV2_result_t cnr_fix_printf_V2(RK_CNR_Fix_V2_t  * pFix)
299 {
300     int i = 0;
301     LOGI_ANR("%s:(%d) enter \n", __FUNCTION__, __LINE__);
302 
303     AcnrV2_result_t res = ACNRV2_RET_SUCCESS;
304 
305     if(pFix == NULL) {
306         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
307         return ACNRV2_RET_NULL_POINTER;
308     }
309 
310     //ISP_CNR_2800_CTRL (0x0000)
311     LOGD_ANR("(0x0000) thumb_mix_cur_en:0x%x lq_bila_bypass:0x%x hq_bila_bypass:0x%x exgain_bypass:0x%x cnr_en_i:0x%x\n",
312              pFix->cnr_thumb_mix_cur_en,
313              pFix->cnr_lq_bila_bypass,
314              pFix->cnr_hq_bila_bypass,
315              pFix->cnr_exgain_bypass,
316              pFix->cnr_en_i);
317 
318     // ISP_CNR_2800_EXGAIN  (0x0004)
319     LOGD_ANR("(0x0004) cnr_global_gain_alpha:0x%x  cnr_global_gain:0x%x \n",
320              pFix->cnr_global_gain_alpha,
321              pFix->cnr_global_gain);
322 
323     // ISP_CNR_2800_GAIN_PARA  (0x0008)
324     LOGD_ANR("(0x0008) gain_iso:0x%x cnr_gain_offset:0x%x gain_1sigma:0x%x \n",
325              pFix->cnr_gain_iso,
326              pFix->cnr_gain_offset,
327              pFix->cnr_gain_1sigma);
328 
329     // ISP_CNR_2800_GAIN_UV_PARA (0x000c)
330     LOGD_ANR("(0x000c) cnr_gain_uvgain1:0x%x gain_uvgain0:0x%x \n",
331              pFix->cnr_gain_uvgain1,
332              pFix->cnr_gain_uvgain0);
333 
334     // ISP_CNR_2800_LMED3 (0x0010)
335     LOGD_ANR("(0x0010) lmed3_alpha:0x%x \n",
336              pFix->cnr_lmed3_alpha);
337 
338     // ISP_CNR_2800_LBF5_GAIN (0x0014)
339     LOGD_ANR("(0x0014) lbf5_gain_y:0x%x lbf5_gain_c:0x%x \n",
340              pFix->cnr_lbf5_gain_y,
341              pFix->cnr_lbf5_gain_c);
342 
343     // ISP_CNR_2800_LBF5_WEITD0_4 (0x0018 - 0x001c)
344     for(int i = 0; i < 5; i++) {
345         LOGD_ANR("(0x0018 - 0x001c) lbf5_weit_d[%d]:0x%x \n",
346                  i, pFix->cnr_lbf5_weit_d[i]);
347     }
348 
349     // ISP_CNR_2800_HMED3 (0x0020)
350     LOGD_ANR("(0x0020) hmed3_alpha:0x%x \n",
351              pFix->cnr_hmed3_alpha);
352 
353     // ISP_CNR_2800_HBF5  (0x0024)
354     LOGD_ANR("(0x0024) hbf5_weit_src:0x%x hbf5_min_wgt:0x%x hbf5_sigma:0x%x \n",
355              pFix->cnr_hbf5_weit_src,
356              pFix->cnr_hbf5_min_wgt,
357              pFix->cnr_hbf5_sigma);
358 
359     // ISP_CNR_2800_LBF3  (0x0028)
360     LOGD_ANR("(0x0028) lbf5_weit_src:0x%x lbf3_sigma:0x%x \n",
361              pFix->cnr_lbf5_weit_src,
362              pFix->cnr_lbf3_sigma);
363 
364     // ISP_CNR_2800_LBF5_WEITD0_4 (0x002c - 0x0038)
365     for(int i = 0; i < 13; i++) {
366         LOGD_ANR("(0x002c - 0x0038) cnr_sigma_y[%d]:0x%x \n",
367                  i, pFix->cnr_sigma_y[i]);
368     }
369 
370     LOGD_ANR("%s:(%d) exit \n", __FUNCTION__, __LINE__);
371 
372     return ACNRV2_RET_SUCCESS;
373 }
374 
375 
376 
377 
cnr_get_setting_by_name_json_V2(CalibDbV2_CNRV2_t * pCalibdbV2,char * name,int * tuning_idx)378 AcnrV2_result_t cnr_get_setting_by_name_json_V2(CalibDbV2_CNRV2_t *pCalibdbV2, char *name, int *tuning_idx)
379 {
380     int i = 0;
381     AcnrV2_result_t res = ACNRV2_RET_SUCCESS;
382 
383     if(pCalibdbV2 == NULL || name == NULL || tuning_idx == NULL) {
384         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
385         return ACNRV2_RET_NULL_POINTER;
386     }
387 
388     for(i = 0; i < pCalibdbV2->TuningPara.Setting_len; i++) {
389         if(strncmp(name, pCalibdbV2->TuningPara.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) {
390             break;
391         }
392     }
393 
394     if(i < pCalibdbV2->TuningPara.Setting_len) {
395         *tuning_idx = i;
396     } else {
397         *tuning_idx = 0;
398     }
399 
400     LOGD_ANR("%s:%d snr_name:%s  snr_idx:%d i:%d \n",
401              __FUNCTION__, __LINE__,
402              name, *tuning_idx, i);
403 
404     return res;
405 }
406 
407 
408 
cnr_init_params_json_V2(RK_CNR_Params_V2_t * pParams,CalibDbV2_CNRV2_t * pCalibdbV2,int tuning_idx)409 AcnrV2_result_t cnr_init_params_json_V2(RK_CNR_Params_V2_t *pParams, CalibDbV2_CNRV2_t *pCalibdbV2, int tuning_idx)
410 {
411     AcnrV2_result_t res = ACNRV2_RET_SUCCESS;
412     CalibDbV2_CNRV2_T_Set_ISO_t *pTuningISO = NULL;
413 
414     if(pParams == NULL || pCalibdbV2 == NULL) {
415         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
416         return ACNRV2_RET_NULL_POINTER;
417     }
418 
419     pParams->enable = pCalibdbV2->TuningPara.enable;
420 
421     for(int i = 0; i < pCalibdbV2->TuningPara.Setting[tuning_idx].Tuning_ISO_len && i < RK_CNR_V2_MAX_ISO_NUM; i++ ) {
422         pTuningISO = &pCalibdbV2->TuningPara.Setting[tuning_idx].Tuning_ISO[i];
423 
424         pParams->iso[i] = pTuningISO->iso;
425         pParams->hf_bypass[i] = pTuningISO->hf_bypass;
426         pParams->lf_bypass[i] = pTuningISO->lf_bypass;
427         pParams->global_gain[i] = pTuningISO->global_gain;
428         pParams->global_gain_alpha[i] = pTuningISO->global_gain_alpha;
429         pParams->local_gain_scale[i] = pTuningISO->local_gain_scale;
430         pParams->color_sat_adj[i] = pTuningISO->color_sat_adj;
431         for(int j = 0; j < RKCNR_V2_SGM_ADJ_TABLE_LEN; j++) {
432             pParams->gain_adj_strength_ratio[i][j] = pTuningISO->gain_adj_strength_ratio[j];
433         }
434         pParams->color_sat_adj_alpha[i] = pTuningISO->color_sat_adj_alpha;
435         pParams->hf_spikes_reducion_strength[i] = pTuningISO->hf_spikes_reducion_strength;
436         pParams->hf_denoise_strength[i] = pTuningISO->hf_denoise_strength;
437         pParams->hf_color_sat[i] = pTuningISO->hf_color_sat;
438         pParams->hf_denoise_alpha[i] = pTuningISO->hf_denoise_alpha;
439         pParams->hf_bf_wgt_clip[i] = pTuningISO->hf_bf_wgt_clip;
440         pParams->thumb_spikes_reducion_strength[i] = pTuningISO->thumb_spikes_reducion_strength;
441         pParams->thumb_denoise_strength[i] = pTuningISO->thumb_denoise_strength;
442         pParams->thumb_color_sat[i] = pTuningISO->thumb_color_sat;
443         pParams->lf_denoise_strength[i] = pTuningISO->lf_denoise_strength;
444         pParams->lf_color_sat[i] = pTuningISO->lf_color_sat;
445         pParams->lf_denoise_alpha[i] = pTuningISO->lf_denoise_alpha;
446     }
447 
448 
449     memcpy(pParams->kernel_5x5, pCalibdbV2->TuningPara.Kernel_Coeff.kernel_5x5, sizeof(float) * 5);
450 
451     return ACNRV2_RET_SUCCESS;
452 
453 }
454 
cnr_config_setting_param_json_V2(RK_CNR_Params_V2_t * pParams,CalibDbV2_CNRV2_t * pCalibdbV2,char * param_mode,char * snr_name)455 AcnrV2_result_t cnr_config_setting_param_json_V2(RK_CNR_Params_V2_t *pParams, CalibDbV2_CNRV2_t *pCalibdbV2, char* param_mode, char * snr_name)
456 {
457     AcnrV2_result_t res = ACNRV2_RET_SUCCESS;
458     int tuning_idx;
459 
460     if(pParams == NULL || pCalibdbV2 == NULL || param_mode == NULL || snr_name == NULL) {
461         LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
462         return ACNRV2_RET_NULL_POINTER;
463     }
464 
465     res = cnr_get_setting_by_name_json_V2(pCalibdbV2, snr_name, &tuning_idx);
466     if(res != ACNRV2_RET_SUCCESS) {
467         LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
468     }
469 
470     res = cnr_init_params_json_V2(pParams, pCalibdbV2, tuning_idx);
471     pParams->enable = pCalibdbV2->TuningPara.enable;
472     return res;
473 
474 }
475 
476 
477 RKAIQ_END_DECLARE
478 
479 
480 
481 
482