1 #include "rk_aiq_acnr_algo_cnr_v30.h"
2
3
4 RKAIQ_BEGIN_DECLARE
5
6 #define Math_LOG2(x) (log((double)x) / log((double)2))
7 #define interp_cnr_v30(value_low, value_high, ratio) (ratio * ((value_high) - (value_low)) + value_low)
8
9
10
cnr_select_params_by_ISO_V30(RK_CNR_Params_V30_t * pParams,RK_CNR_Params_V30_Select_t * pSelect,AcnrV30_ExpInfo_t * pExpInfo)11 AcnrV30_result_t cnr_select_params_by_ISO_V30(RK_CNR_Params_V30_t *pParams, RK_CNR_Params_V30_Select_t *pSelect, AcnrV30_ExpInfo_t *pExpInfo)
12 {
13 AcnrV30_result_t res = ACNRV30_RET_SUCCESS;
14 int iso = 50;
15 if(pParams == NULL) {
16 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
17 return ACNRV30_RET_NULL_POINTER;
18 }
19
20 if(pSelect == NULL) {
21 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
22 return ACNRV30_RET_NULL_POINTER;
23 }
24
25 if(pExpInfo == NULL) {
26 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
27 return ACNRV30_RET_NULL_POINTER;
28 }
29
30 iso = pExpInfo->arIso[pExpInfo->hdr_mode];
31
32 //ȷ��iso�ȼ�
33 //rkuvnriso@50 100 200 400 800 1600 3200 6400 12800
34 // isogain: 1 2 4 8 16 32 64 128 256
35 // isoindex: 0 1 2 3 4 5 6 7 8
36
37 int isoIndex = 0;
38 int isoGainLow = 0;
39 int isoGainHigh = 0;
40 int isoIndexLow = 0;
41 int isoIndexHigh = 0;
42 int iso_div = 50;
43 int max_iso_step = RK_CNR_V30_MAX_ISO_NUM;
44
45 #ifndef RK_SIMULATOR_HW
46 for (int i = 0; i < max_iso_step - 1 ; i++) {
47 if (iso >= pParams->iso[i] && iso <= pParams->iso[i + 1]) {
48 isoGainLow = pParams->iso[i] ;
49 isoGainHigh = pParams->iso[i + 1];
50 isoIndexLow = i;
51 isoIndexHigh = i + 1;
52 isoIndex = isoIndexLow;
53 }
54 }
55
56 if(iso < pParams->iso[0] ) {
57 isoGainLow = pParams->iso[0];
58 isoGainHigh = pParams->iso[1];
59 isoIndexLow = 0;
60 isoIndexHigh = 1;
61 isoIndex = 0;
62 }
63
64 if(iso > pParams->iso[max_iso_step - 1] ) {
65 isoGainLow = pParams->iso[max_iso_step - 2] ;
66 isoGainHigh = pParams->iso[max_iso_step - 1];
67 isoIndexLow = max_iso_step - 2;
68 isoIndexHigh = max_iso_step - 1;
69 isoIndex = max_iso_step - 1;
70 }
71 #else
72 isoIndex = int(log(float(iso / iso_div)) / log(2.0f));
73
74 for (int i = max_iso_step - 1; i >= 0; i--) {
75 if (iso < iso_div * (2 << i)) {
76 isoGainLow = iso_div * (2 << (i)) / 2;
77 isoGainHigh = iso_div * (2 << i);
78 }
79 }
80
81 isoGainLow = MIN(isoGainLow, iso_div * (2 << max_iso_step));
82 isoGainHigh = MIN(isoGainHigh, iso_div * (2 << max_iso_step));
83
84 isoIndexHigh = (int)(log((float)isoGainHigh / iso_div) / log((float)2));
85 isoIndexLow = (int)(log((float)isoGainLow / iso_div) / log((float)2));
86
87 isoIndexLow = MIN(MAX(isoIndexLow, 0), max_iso_step - 1);
88 isoIndexHigh = MIN(MAX(isoIndexHigh, 0), max_iso_step - 1);
89 #endif
90
91 pSelect->enable = pParams->enable;
92
93 LOGD_ANR("%s:%d iso:%d high:%d low:%d \n",
94 __FUNCTION__, __LINE__,
95 iso, isoGainHigh, isoGainLow);
96
97 pExpInfo->isoLevelLow = isoIndexLow;
98 pExpInfo->isoLevelHig = isoIndexHigh;
99 RK_CNR_Params_V30_Select_t *pLowISO = &pParams->CnrParamsISO[isoIndexLow];
100 RK_CNR_Params_V30_Select_t *pHighISO = &pParams->CnrParamsISO[isoIndexHigh];
101
102 if ((isoGainHigh - iso) < (iso - isoGainLow)) {
103 pSelect->down_scale_x = pHighISO->down_scale_x;
104 pSelect->down_scale_y = pHighISO->down_scale_y;
105 pSelect->bf_wgt0_sel = pHighISO->bf_wgt0_sel;
106
107 for(int i = 0; i < 4; i++) {
108 pSelect->thumb_filter_wgt_coeff[i] = pHighISO->thumb_filter_wgt_coeff[i];
109 }
110
111 for(int i = 0; i < 6; i++) {
112 pSelect->gaus_coeff[i] = pHighISO->gaus_coeff[i];
113 }
114 }
115 else {
116 pSelect->down_scale_x = pLowISO->down_scale_x;
117 pSelect->down_scale_y = pLowISO->down_scale_y;
118 pSelect->bf_wgt0_sel = pLowISO->bf_wgt0_sel;
119
120 for(int i = 0; i < 4; i++) {
121 pSelect->thumb_filter_wgt_coeff[i] = pLowISO->thumb_filter_wgt_coeff[i];
122 }
123
124 for(int i = 0; i < 6; i++) {
125 pSelect->gaus_coeff[i] = pLowISO->gaus_coeff[i];
126 }
127 }
128
129 float ratio = float(iso - isoGainLow) / float(isoGainHigh - isoGainLow);
130
131 pSelect->thumb_sigma = interp_cnr_v30( pLowISO->thumb_sigma, pHighISO->thumb_sigma, ratio);
132 pSelect->thumb_bf_ratio = interp_cnr_v30(pLowISO->thumb_bf_ratio, pHighISO->thumb_bf_ratio, ratio);
133
134 pSelect->chroma_filter_strength = interp_cnr_v30(pLowISO->chroma_filter_strength, pHighISO->chroma_filter_strength, ratio);
135 pSelect->chroma_filter_wgt_clip = interp_cnr_v30(pLowISO->chroma_filter_wgt_clip, pHighISO->chroma_filter_wgt_clip, ratio);
136 pSelect->anti_chroma_ghost = interp_cnr_v30(pLowISO->anti_chroma_ghost, pHighISO->anti_chroma_ghost, ratio);
137 pSelect->chroma_filter_uv_gain = interp_cnr_v30(pLowISO->chroma_filter_uv_gain, pHighISO->chroma_filter_uv_gain, ratio);
138 pSelect->wgt_slope = interp_cnr_v30(pLowISO->wgt_slope, pHighISO->wgt_slope, ratio);
139
140 pSelect->gaus_ratio = interp_cnr_v30(pLowISO->gaus_ratio, pHighISO->gaus_ratio, ratio);
141
142 pSelect->bf_sigmaR = interp_cnr_v30(pLowISO->bf_sigmaR, pHighISO->bf_sigmaR, ratio);
143 pSelect->bf_uvgain = interp_cnr_v30(pLowISO->bf_uvgain, pHighISO->bf_uvgain, ratio);
144 pSelect->bf_ratio = interp_cnr_v30(pLowISO->bf_ratio, pHighISO->bf_ratio, ratio);
145 pSelect->hbf_wgt_clip = interp_cnr_v30(pLowISO->hbf_wgt_clip, pHighISO->hbf_wgt_clip, ratio);
146 pSelect->global_alpha = interp_cnr_v30(pLowISO->global_alpha, pHighISO->global_alpha, ratio);
147
148 pSelect->saturation_adj_offset = interp_cnr_v30(pLowISO->saturation_adj_offset, pHighISO->saturation_adj_offset, ratio);
149 pSelect->saturation_adj_ratio = interp_cnr_v30(pLowISO->saturation_adj_ratio, pHighISO->saturation_adj_ratio, ratio);
150
151 pSelect->global_gain = interp_cnr_v30(pLowISO->global_gain, pHighISO->global_gain, ratio);
152 pSelect->global_gain_alpha = interp_cnr_v30(pLowISO->global_gain_alpha, pHighISO->global_gain_alpha, ratio);
153 pSelect->local_gain_scale = interp_cnr_v30(pLowISO->local_gain_scale, pHighISO->local_gain_scale, ratio);
154 pSelect->global_gain_thumb = interp_cnr_v30(pLowISO->global_gain_thumb, pHighISO->global_gain_thumb, ratio);
155 pSelect->global_gain_alpha_thumb = interp_cnr_v30(pLowISO->global_gain_alpha_thumb, pHighISO->global_gain_alpha_thumb, ratio);
156
157 for (int i = 0; i < 13; i++)
158 {
159 pSelect->gain_adj_strength_ratio[i] = interp_cnr_v30(pLowISO->gain_adj_strength_ratio[i], pHighISO->gain_adj_strength_ratio[i], ratio);
160 }
161
162 return ACNRV30_RET_SUCCESS;
163
164 }
165
166
cnr_fix_transfer_V30(RK_CNR_Params_V30_Select_t * pSelect,RK_CNR_Fix_V30_t * pFix,AcnrV30_ExpInfo_t * pExpInfo,rk_aiq_cnr_strength_v30_t * pStrength)167 AcnrV30_result_t cnr_fix_transfer_V30(RK_CNR_Params_V30_Select_t *pSelect, RK_CNR_Fix_V30_t *pFix, AcnrV30_ExpInfo_t *pExpInfo, rk_aiq_cnr_strength_v30_t* pStrength)
168 {
169 LOGI_ANR("%s:(%d) enter \n", __FUNCTION__, __LINE__);
170
171 int i = 0;
172 AcnrV30_result_t res = ACNRV30_RET_SUCCESS;
173 int tmp = 0;
174
175 if(pSelect == NULL) {
176 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
177 return ACNRV30_RET_NULL_POINTER;
178 }
179
180 if(pFix == NULL) {
181 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
182 return ACNRV30_RET_NULL_POINTER;
183 }
184
185 if(pExpInfo == NULL) {
186 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
187 return ACNRV30_RET_NULL_POINTER;
188 }
189
190 if(pStrength == NULL) {
191 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
192 return ACNRV30_RET_NULL_POINTER;
193 }
194
195 float fStrength = 1.0;
196
197 if(pStrength->strength_enable) {
198 fStrength = pStrength->percent;
199 }
200 if(fStrength <= 0.0) {
201 fStrength = 0.000001;
202 }
203
204 LOGD_ANR("strength_enable:%d fStrength: %f \n", pStrength->strength_enable, fStrength);
205
206 // CNR_CTRL
207 pFix->bf3x3_wgt0_sel = pSelect->bf_wgt0_sel;
208 #if RKAIQ_HAVE_CNR_V30
209 if(pSelect->down_scale_x == 2 && pSelect->down_scale_y == 2) {
210 pFix->thumb_mode = 0;
211 } else if(pSelect->down_scale_x == 4 && pSelect->down_scale_y == 4) {
212 pFix->thumb_mode = 1;
213 } else if(pSelect->down_scale_x == 8 && pSelect->down_scale_y == 6) {
214 pFix->thumb_mode = 2;
215 } else {
216 pFix->thumb_mode = 2;
217 }
218 #else
219 if (pSelect->down_scale_x == 4 && pSelect->down_scale_y == 4) {
220 pFix->thumb_mode = 1;
221 } else if (pSelect->down_scale_x == 8 && pSelect->down_scale_y == 4) {
222 pFix->thumb_mode = 3;
223 } else {
224 pFix->thumb_mode = 1;
225 }
226 #endif
227 pFix->yuv422_mode = 0;
228 pFix->exgain_bypass = 0;
229 pFix->cnr_en = pSelect->enable;
230
231
232 // CNR_EXGAIN
233 tmp = pSelect->local_gain_scale * (1 << RKCNR_V30_GAIN_ISO_FIX_BITS);
234 pFix->gain_iso = CLIP(tmp, 0, 0xff);
235 tmp = pSelect->global_gain_alpha * (1 << RKCNR_V30_G_GAIN_ALPHA_FIX_BITS);
236 pFix->global_gain_alpha = CLIP(tmp, 0, 0x8);
237 tmp = pSelect->global_gain * (1 << RKCNR_V30_G_GAIN_FIX_BITS);
238 pFix->global_gain = CLIP(tmp, 0, 0x3ff);
239
240
241 /* CNR_THUMB1 */
242 int yuvBit = 10;
243 int scale = (1 << yuvBit) - 1;
244 int log2e = (int)(0.8493f * (1 << (RKCNR_V30_log2e + RKCNR_V30_SIGMA_FIX_BIT)));
245 int rkcnr_chroma_filter_uv_gain =
246 ROUND_F((1 << RKCNR_V30_uvgain) * pSelect->chroma_filter_uv_gain);
247 int thumbBFilterSigma = ROUND_F(pSelect->thumb_sigma * scale * fStrength);
248 LOGD_ANR("scale:%d thumbBFilterSigma:%d\n", log2e, thumbBFilterSigma);
249 thumbBFilterSigma = (int)(0.8493f * (1 << RKCNR_V30_FIX_BIT_INV_SIGMA) / thumbBFilterSigma);
250 tmp = thumbBFilterSigma * ((1 << RKCNR_V30_uvgain) - rkcnr_chroma_filter_uv_gain * 2);
251 LOGD_ANR("thumbBFilterSigma:%d sigmaY:%d\n", thumbBFilterSigma, tmp);
252 tmp = ROUND_INT(tmp, 6);
253 pFix->thumb_sigma_y = CLIP(tmp, 0, 0x3fff);
254 tmp = thumbBFilterSigma * rkcnr_chroma_filter_uv_gain;
255 tmp = ROUND_INT(tmp, 6); // (diff * sigma) >> tmp = (diff * (sigma >> 6))
256 pFix->thumb_sigma_c = CLIP(tmp, 0, 0x3fff);
257
258
259 /* CNR_THUMB_BF_RATIO */
260 uint16_t thumb_bf_ratio;
261 tmp = ROUND_F((1 << RKCNR_V30_FIX_BIT_BF_RATIO) * pSelect->thumb_bf_ratio * fStrength);
262 pFix->thumb_bf_ratio = CLIP(tmp, 0, 0x7ff);
263
264 /* CNR_LBF_WEITD */
265 for(int i = 0; i < RKCNR_V30_THUMB_BF_RADIUS + 1; i++) {
266 tmp = ROUND_F(pSelect->thumb_filter_wgt_coeff[i] * (1 << RKCNR_V30_exp2_lut_y));
267 pFix->lbf1x7_weit_d[i] = CLIP(tmp, 0, 0xff);
268 }
269
270 /* CNR_IIR_PARA1 */
271 tmp = ROUND_F((1 << RKCNR_V30_FIX_BIT_SLOPE) * pSelect->wgt_slope);
272 pFix->wgt_slope = CLIP(tmp, 0, 0x3ff);
273
274 tmp = ROUND_F(1.2011 * (1 << RKCNR_V30_FIX_BIT_INV_SIGMA) / (pSelect->chroma_filter_strength * scale * fStrength));
275 int tmptmp = tmp * pFix->wgt_slope;
276 int shiftBit = Math_LOG2(tmptmp) - RKCNR_V30_FIX_BIT_INT_TO_FLOAT;
277 LOGD_ANR("tmp:%d tmptmp:%d shiftBit:%d\n", tmp, tmptmp, shiftBit);
278 shiftBit = MAX(shiftBit, 0);
279
280 tmp = RKCNR_V30_FIX_BIT_INV_SIGMA - shiftBit;
281 if (tmp < 0) {
282 tmp = ABS(tmp) + (1 << 5);
283 }
284 pFix->exp_shift = CLIP(tmp, 0, 0x3f);
285
286 tmp = ROUND_F((float)tmptmp / (1 << shiftBit));
287 pFix->iir_strength = CLIP(tmp, 0, 0xff);
288
289 tmp = ROUND_F((1 << RKCNR_V30_uvgain) * pSelect->chroma_filter_uv_gain);
290 pFix->iir_uvgain = CLIP(tmp, 0, 0xf);
291
292 /* CNR_IIR_PARA2 */
293 tmp = ROUND_F((1 << RKCNR_V30_FIX_BIT_IIR_WGT) * pSelect->anti_chroma_ghost);
294 pFix->chroma_ghost = CLIP(tmp, 0, 0x3f);
295 tmp = ROUND_F((1 << 3) * pSelect->chroma_filter_wgt_clip);
296 pFix->iir_uv_clip = CLIP(tmp, 0, 0x7f);
297
298 /* CNR_GAUS_COE */
299 for(int i = 0; i < 6; i++) {
300 tmp = pSelect->gaus_coeff[5 - i];
301 pFix->gaus_coe[i] = CLIP(tmp, 0, 0x7f);
302 }
303
304 /* CNR_GAUS_RATIO */
305 tmp = ROUND_F((1 << RKCNR_V30_FIX_BIT_GAUS_RATIO) * pSelect->gaus_ratio);
306 pFix->gaus_ratio = CLIP(tmp, 0, 0x7ff);
307 tmp = ROUND_F((1 << RKCNR_V30_exp2_lut_y) * pSelect->hbf_wgt_clip);
308 pFix->bf_wgt_clip = CLIP(tmp, 0, 0xff);
309 tmp = ROUND_F((1 << RKCNR_V30_FIX_BIT_GLOBAL_ALPHA) * pSelect->global_alpha);
310 pFix->global_alpha = CLIP(tmp, 0, 0x7ff);
311
312 /* CNR_BF_PARA1 */
313 tmp = ROUND_F((1 << RKCNR_V30_uvgain) * pSelect->bf_uvgain);
314 pFix->uv_gain = CLIP(tmp, 0, 0x7f);
315 tmp = (int)(log2e / (pSelect->bf_sigmaR * scale * fStrength));
316 pFix->sigma_r = CLIP(tmp, 0, 0x3ff);
317 tmp = ROUND_F((1 << RKCNR_V30_bfRatio) * pSelect->bf_ratio / fStrength);
318 pFix->bf_ratio = CLIP(tmp, 0, 0xff);
319
320 /* CNR_BF_PARA2 */
321 tmp = pSelect->saturation_adj_offset;
322 pFix->adj_offset = CLIP(tmp, 0, 0x1ff);
323 tmp = ROUND_F((1 << RKCNR_V30_FIX_BIT_SATURATION) * pSelect->saturation_adj_ratio);
324 pFix->adj_ratio = CLIP(tmp, 0, 0x7fff);
325
326 /* CNR_SIGMA */
327 uint8_t sigma_y[13];
328 for(int i = 0; i < 13; i++) {
329 tmp = ROUND_F(pSelect->gain_adj_strength_ratio[i] * (1 << RKCNR_V30_sgmRatio));
330 pFix->sigma_y[i] = CLIP(tmp, 0, 0xff);
331 }
332
333 /* CNR_IIR_GLOBAL_GAIN */
334 //tmp = pSelect->global_gain_alpha_thumb * (1 << RKCNR_V30_G_GAIN_ALPHA_FIX_BITS);
335 pFix->iir_gain_alpha = 8; //ic suggest must be 8 // CLIP(tmp, 0, 0xf);
336 tmp = pSelect->global_gain_thumb * (1 << RKCNR_V30_sgmRatio);//(1 << RKCNR_V30_G_GAIN_FIX_BITS);
337 pFix->iir_global_gain = CLIP(tmp, 0, 0xff);
338
339 cnr_fix_printf_V30(pFix);
340
341 LOGI_ANR("%s:(%d) exit \n", __FUNCTION__, __LINE__);
342
343 return ACNRV30_RET_SUCCESS;
344 }
345
346
cnr_fix_printf_V30(RK_CNR_Fix_V30_t * pFix)347 AcnrV30_result_t cnr_fix_printf_V30(RK_CNR_Fix_V30_t * pFix)
348 {
349 int i = 0;
350 LOGI_ANR("%s:(%d) enter \n", __FUNCTION__, __LINE__);
351
352 AcnrV30_result_t res = ACNRV30_RET_SUCCESS;
353
354 if(pFix == NULL) {
355 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
356 return ACNRV30_RET_NULL_POINTER;
357 }
358
359
360 //CNR_CTRL (0x0000)
361 LOGD_ANR("(0x0000) bf3x3_wgt0_sel:0x%x thumb_mode:0x%x yuv422_mode:0x%x exgain_bypass:0x%x cnr_en:0x%x\n",
362 pFix->bf3x3_wgt0_sel,
363 pFix->thumb_mode,
364 pFix->yuv422_mode,
365 pFix->exgain_bypass,
366 pFix->cnr_en);
367
368 // CNR_EXGAIN (0x0004)
369 LOGD_ANR("(0x0004) global_gain:0x%x global_gain_alpha:0x%x gain_iso:0x%x \n",
370 pFix->global_gain,
371 pFix->global_gain_alpha,
372 pFix->gain_iso);
373
374 // CNR_THUMB1 (0x0008)
375 LOGD_ANR("(0x0008) thumb_sigma_c:0x%x thumb_sigma_y:0x%x \n",
376 pFix->thumb_sigma_c,
377 pFix->thumb_sigma_y);
378
379 // CNR_THUMB_BF_RATIO (0x000c)
380 LOGD_ANR("(0x000c) thumb_bf_ratio:0x%x \n",
381 pFix->thumb_bf_ratio);
382
383 // CNR_LBF_WEITD (0x0010)
384 LOGD_ANR("(0x0010) lbf1x7_weit_d:0x%x 0x%x 0x%x 0x%x \n",
385 pFix->lbf1x7_weit_d[0],
386 pFix->lbf1x7_weit_d[1],
387 pFix->lbf1x7_weit_d[2],
388 pFix->lbf1x7_weit_d[3]);
389
390 // CNR_IIR_PARA1 (0x0014)
391 LOGD_ANR("(0x0014) iir_uvgain:0x%x iir_strength:0x%x exp_shift:0x%x wgt_slope:0x%x \n",
392 pFix->iir_uvgain,
393 pFix->iir_strength,
394 pFix->exp_shift,
395 pFix->wgt_slope);
396
397
398 // CNR_IIR_PARA2 (0x0018)
399 LOGD_ANR("(0x0018) chroma_ghost:0x%x iir_uv_clip:0x%x \n",
400 pFix->chroma_ghost,
401 pFix->iir_uv_clip);
402
403 // CNR_GAUS_COE (0x001c - 0x0020)
404 for(int i = 0; i < 6; i++) {
405 LOGD_ANR("(0x001c - 0x0020) gaus_coe[%d]:0x%x \n",
406 i, pFix->gaus_coe[i]);
407 }
408
409 // CNR_GAUS_RATIO (0x0024)
410 LOGD_ANR("(0x0024) gaus_ratio:0x%x bf_wgt_clip:0x%x global_alpha:0x%x \n",
411 pFix->gaus_ratio,
412 pFix->bf_wgt_clip,
413 pFix->global_alpha);
414
415 // CNR_BF_PARA1 (0x0028)
416 LOGD_ANR("(0x0028) uv_gain:0x%x sigma_r:0x%x bf_ratio:0x%x \n",
417 pFix->uv_gain,
418 pFix->sigma_r,
419 pFix->bf_ratio);
420
421 // CNR_BF_PARA2 (0x002c)
422 LOGD_ANR("(0x002c) adj_offset:0x%x adj_ratio:0x%x \n",
423 pFix->adj_offset,
424 pFix->adj_ratio);
425
426 // CNR_SIGMA (0x0030 - 0x003c)
427 for(int i = 0; i < 13; i++) {
428 LOGD_ANR("(0x0030 - 0x003c) sigma_y[%d]:0x%x \n", i, pFix->sigma_y[i]);
429 }
430
431 // CNR_IIR_GLOBAL_GAIN (0x0040)
432 LOGD_ANR("(0x0040) iir_gain_alpha:0x%x iir_global_gain:0x%x \n",
433 pFix->iir_gain_alpha,
434 pFix->iir_global_gain);
435
436
437 return res;
438 }
439
cnr_get_setting_by_name_json_V30(CalibDbV2_CNRV30_t * pCalibdbV2,char * name,int * tuning_idx)440 AcnrV30_result_t cnr_get_setting_by_name_json_V30(CalibDbV2_CNRV30_t* pCalibdbV2, char* name,
441 int* tuning_idx) {
442 int i = 0;
443 AcnrV30_result_t res = ACNRV30_RET_SUCCESS;
444
445 if (pCalibdbV2 == NULL || name == NULL || tuning_idx == NULL) {
446 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
447 return ACNRV30_RET_NULL_POINTER;
448 }
449
450 for (i = 0; i < pCalibdbV2->TuningPara.Setting_len; i++) {
451 if (strncmp(name, pCalibdbV2->TuningPara.Setting[i].SNR_Mode,
452 strlen(name) * sizeof(char)) == 0) {
453 break;
454 }
455 }
456
457 if (i < pCalibdbV2->TuningPara.Setting_len) {
458 *tuning_idx = i;
459 } else {
460 *tuning_idx = 0;
461 }
462
463 LOGD_ANR("%s:%d snr_name:%s snr_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *tuning_idx, i);
464
465 return res;
466 }
467
cnr_init_params_json_V30(RK_CNR_Params_V30_t * pParams,CalibDbV2_CNRV30_t * pCalibdbV2,int tuning_idx)468 AcnrV30_result_t cnr_init_params_json_V30(RK_CNR_Params_V30_t *pParams, CalibDbV2_CNRV30_t *pCalibdbV2, int tuning_idx)
469 {
470 AcnrV30_result_t res = ACNRV30_RET_SUCCESS;
471 CalibDbV2_CNRV30_T_ISO_t *pTuningISO = NULL;
472
473 if(pParams == NULL || pCalibdbV2 == NULL) {
474 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
475 return ACNRV30_RET_NULL_POINTER;
476 }
477
478 pParams->enable = pCalibdbV2->TuningPara.enable;
479
480 for(int i = 0; i < pCalibdbV2->TuningPara.Setting[tuning_idx].Tuning_ISO_len && i < RK_CNR_V30_MAX_ISO_NUM; i++ ) {
481 pTuningISO = &pCalibdbV2->TuningPara.Setting[tuning_idx].Tuning_ISO[i];
482
483 pParams->iso[i] = pTuningISO->iso;
484 pParams->CnrParamsISO[i].enable = pCalibdbV2->TuningPara.enable;
485 pParams->CnrParamsISO[i].down_scale_x = pTuningISO->down_scale_x;
486 pParams->CnrParamsISO[i].down_scale_y = pTuningISO->down_scale_y;
487
488 pParams->CnrParamsISO[i].thumb_sigma = pTuningISO->thumb_sigma;
489 pParams->CnrParamsISO[i].thumb_bf_ratio = pTuningISO->thumb_bf_ratio;
490
491 pParams->CnrParamsISO[i].chroma_filter_strength = pTuningISO->chroma_filter_strength;
492 pParams->CnrParamsISO[i].chroma_filter_wgt_clip = pTuningISO->chroma_filter_wgt_clip;
493 pParams->CnrParamsISO[i].anti_chroma_ghost = pTuningISO->anti_chroma_ghost;
494 pParams->CnrParamsISO[i].chroma_filter_uv_gain = pTuningISO->chroma_filter_uv_gain;
495 pParams->CnrParamsISO[i].wgt_slope = pTuningISO->wgt_slope;
496
497 pParams->CnrParamsISO[i].gaus_ratio = pTuningISO->gaus_ratio;
498
499 pParams->CnrParamsISO[i].bf_sigmaR = pTuningISO->bf_sigmaR;
500 pParams->CnrParamsISO[i].bf_uvgain = pTuningISO->bf_uvgain;
501 pParams->CnrParamsISO[i].bf_ratio = pTuningISO->bf_ratio;
502 pParams->CnrParamsISO[i].hbf_wgt_clip = pTuningISO->hbf_wgt_clip;
503 pParams->CnrParamsISO[i].bf_wgt0_sel = pTuningISO->bf_wgt0_sel;
504 pParams->CnrParamsISO[i].global_alpha = pTuningISO->global_alpha;
505
506 pParams->CnrParamsISO[i].saturation_adj_offset = pTuningISO->saturation_adj_offset;
507 pParams->CnrParamsISO[i].saturation_adj_ratio = pTuningISO->saturation_adj_ratio;
508
509 pParams->CnrParamsISO[i].global_gain = pTuningISO->global_gain;
510 pParams->CnrParamsISO[i].global_gain_alpha = pTuningISO->global_gain_alpha;
511 pParams->CnrParamsISO[i].local_gain_scale = pTuningISO->local_gain_scale;
512 pParams->CnrParamsISO[i].global_gain_thumb = pTuningISO->global_gain_thumb;
513 pParams->CnrParamsISO[i].global_gain_alpha_thumb = pTuningISO->global_gain_alpha_thumb;
514
515 for(int j = 0; j < RKCNR_V30_SGM_ADJ_TABLE_LEN; j++) {
516 pParams->CnrParamsISO[i].gain_adj_strength_ratio[j] = pTuningISO->gain_adj_strength_ratio[j];
517 }
518
519 for(int j = 0; j < 4; j++) {
520 pParams->CnrParamsISO[i].thumb_filter_wgt_coeff[j] = pTuningISO->thumb_filter_wgt_coeff[j];
521 }
522
523 for(int j = 0; j < 6; j++) {
524 pParams->CnrParamsISO[i].gaus_coeff[j] = pTuningISO->gaus_coeff[j];
525 }
526 }
527
528 return ACNRV30_RET_SUCCESS;
529
530 }
531
cnr_config_setting_param_json_V30(RK_CNR_Params_V30_t * pParams,CalibDbV2_CNRV30_t * pCalibdbV2,char * param_mode,char * snr_name)532 AcnrV30_result_t cnr_config_setting_param_json_V30(RK_CNR_Params_V30_t *pParams, CalibDbV2_CNRV30_t *pCalibdbV2, char* param_mode, char * snr_name)
533 {
534 AcnrV30_result_t res = ACNRV30_RET_SUCCESS;
535 int tuning_idx;
536
537 if(pParams == NULL || pCalibdbV2 == NULL || param_mode == NULL || snr_name == NULL) {
538 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
539 return ACNRV30_RET_NULL_POINTER;
540 }
541
542 res = cnr_get_setting_by_name_json_V30(pCalibdbV2, snr_name, &tuning_idx);
543 if(res != ACNRV30_RET_SUCCESS) {
544 LOGW_ANR("%s(%d): error!!! can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
545 }
546
547 res = cnr_init_params_json_V30(pParams, pCalibdbV2, tuning_idx);
548 pParams->enable = pCalibdbV2->TuningPara.enable;
549 return res;
550
551 }
552
553
554 RKAIQ_END_DECLARE
555
556
557
558
559