1
2 #include "rk_aiq_auvnr_algo_v1.h"
3 #include "rk_aiq_auvnr_algo_itf_v1.h"
4
5 RKAIQ_BEGIN_DECLARE
6
Auvnr_Start_V1(Auvnr_Context_V1_t * pAuvnrCtx)7 Auvnr_result_t Auvnr_Start_V1(Auvnr_Context_V1_t *pAuvnrCtx)
8 {
9 LOGI_ANR( "%s:enter!\n", __FUNCTION__);
10
11 // initial checks
12 if (pAuvnrCtx == NULL) {
13 return (AUVNR_RET_NULL_POINTER);
14 }
15
16 if ((AUVNR_STATE_RUNNING == pAuvnrCtx->eState)
17 || (AUVNR_STATE_LOCKED == pAuvnrCtx->eState)) {
18 return (AUVNR_RET_FAILURE);
19 }
20
21 pAuvnrCtx->eState = AUVNR_STATE_RUNNING;
22
23 LOGI_ANR( "%s:exit!\n", __FUNCTION__);
24 return (AUVNR_RET_SUCCESS);
25 }
26
27
Auvnr_Stop_V1(Auvnr_Context_V1_t * pAuvnrCtx)28 Auvnr_result_t Auvnr_Stop_V1(Auvnr_Context_V1_t *pAuvnrCtx)
29 {
30 LOGI_ANR( "%s:enter!\n", __FUNCTION__);
31
32 // initial checks
33 if (pAuvnrCtx == NULL) {
34 return (AUVNR_RET_NULL_POINTER);
35 }
36
37 if (AUVNR_STATE_LOCKED == pAuvnrCtx->eState) {
38 return (AUVNR_RET_FAILURE);
39 }
40
41 pAuvnrCtx->eState = AUVNR_STATE_STOPPED;
42
43 LOGI_ANR( "%s:exit!\n", __FUNCTION__);
44 return (AUVNR_RET_SUCCESS);
45 }
46
47
48 //anr inint
Auvnr_Init_V1(Auvnr_Context_V1_t ** ppAuvnrCtx,CamCalibDbContext_t * pCalibDb)49 Auvnr_result_t Auvnr_Init_V1(Auvnr_Context_V1_t **ppAuvnrCtx, CamCalibDbContext_t *pCalibDb)
50 {
51 Auvnr_Context_V1_t * pAuvnrCtx;
52
53 LOGE_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
54
55 pAuvnrCtx = (Auvnr_Context_V1_t *)malloc(sizeof(Auvnr_Context_V1_t));
56 if(pAuvnrCtx == NULL) {
57 LOGE_ANR("%s(%d): malloc fail\n", __FUNCTION__, __LINE__);
58 return AUVNR_RET_NULL_POINTER;
59 }
60
61 memset(pAuvnrCtx, 0x00, sizeof(Auvnr_Context_V1_t));
62
63 //gain state init
64 pAuvnrCtx->stGainState.gain_stat_full_last = -1;
65 pAuvnrCtx->stGainState.gainState = -1;
66 pAuvnrCtx->stGainState.gainState_last = -1;
67 pAuvnrCtx->stGainState.gain_th0[0] = 2.0;
68 pAuvnrCtx->stGainState.gain_th1[0] = 4.0;
69 pAuvnrCtx->stGainState.gain_th0[1] = 32.0;
70 pAuvnrCtx->stGainState.gain_th1[1] = 64.0;
71
72 pAuvnrCtx->fChrom_SF_Strength = 1.0;
73
74 pAuvnrCtx->eState = AUVNR_STATE_INITIALIZED;
75 *ppAuvnrCtx = pAuvnrCtx;
76
77 pAuvnrCtx->eMode = AUVNR_OP_MODE_AUTO;
78 pAuvnrCtx->isIQParaUpdate = false;
79 pAuvnrCtx->isGrayMode = false;
80
81
82 #if AUVNR_USE_XML_FILE_V1
83 //read v1 params from xml
84 pAuvnrCtx->stUvnrCalib =
85 *(CalibDb_UVNR_2_t*)(CALIBDB_GET_MODULE_PTR((void*)pCalibDb, uvnr));
86
87
88 CalibDb_MFNR_2_t *pMfnrCalib =
89 (CalibDb_MFNR_2_t*)(CALIBDB_GET_MODULE_PTR((void*)pCalibDb, mfnr));
90 pAuvnrCtx->mfnr_mode_3to1 = pMfnrCalib->mode_3to1;
91 pAuvnrCtx->mfnr_local_gain_en = pMfnrCalib->local_gain_en;
92
93
94 LOGE_ANR("%s(%d): uvnr version:%s mode_3to1:%d\n",
95 __FUNCTION__, __LINE__,
96 pAuvnrCtx->stUvnrCalib.version,
97 pAuvnrCtx->mfnr_mode_3to1);
98 #endif
99
100 #if RK_SIMULATOR_HW
101 //just for v2 params from html
102
103 #endif
104
105 #if AUVNR_USE_XML_FILE_V1
106 pAuvnrCtx->stExpInfo.snr_mode = 1;
107 pAuvnrCtx->eParamMode = AUVNR_PARAM_MODE_NORMAL;
108 Auvnr_ConfigSettingParam_V1(pAuvnrCtx, pAuvnrCtx->eParamMode, pAuvnrCtx->stExpInfo.snr_mode);
109 #endif
110
111 LOGD_ANR("%s(%d):", __FUNCTION__, __LINE__);
112
113
114 LOGE_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
115 return AUVNR_RET_SUCCESS;
116 }
117
118
119
120 //anr inint
Auvnr_Init_Json_V1(Auvnr_Context_V1_t ** ppAuvnrCtx,CamCalibDbV2Context_t * pCalibDbV2)121 Auvnr_result_t Auvnr_Init_Json_V1(Auvnr_Context_V1_t **ppAuvnrCtx, CamCalibDbV2Context_t *pCalibDbV2)
122 {
123 Auvnr_Context_V1_t * pAuvnrCtx;
124
125 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
126
127 pAuvnrCtx = (Auvnr_Context_V1_t *)malloc(sizeof(Auvnr_Context_V1_t));
128 if(pAuvnrCtx == NULL) {
129 LOGE_ANR("%s(%d): malloc fail\n", __FUNCTION__, __LINE__);
130 return AUVNR_RET_NULL_POINTER;
131 }
132
133 memset(pAuvnrCtx, 0x00, sizeof(Auvnr_Context_V1_t));
134
135 //gain state init
136 pAuvnrCtx->stGainState.gain_stat_full_last = -1;
137 pAuvnrCtx->stGainState.gainState = -1;
138 pAuvnrCtx->stGainState.gainState_last = -1;
139 pAuvnrCtx->stGainState.gain_th0[0] = 2.0;
140 pAuvnrCtx->stGainState.gain_th1[0] = 4.0;
141 pAuvnrCtx->stGainState.gain_th0[1] = 32.0;
142 pAuvnrCtx->stGainState.gain_th1[1] = 64.0;
143
144 pAuvnrCtx->fChrom_SF_Strength = 1.0;
145
146 pAuvnrCtx->eState = AUVNR_STATE_INITIALIZED;
147 *ppAuvnrCtx = pAuvnrCtx;
148
149 pAuvnrCtx->eMode = AUVNR_OP_MODE_AUTO;
150 pAuvnrCtx->isIQParaUpdate = false;
151 pAuvnrCtx->isGrayMode = false;
152
153 #if AUVNR_USE_JSON_FILE_V1
154 //read v1 params from xml
155 CalibDbV2_UVNR_t* calibv2_uvnr_v1 =
156 (CalibDbV2_UVNR_t*)(CALIBDBV2_GET_MODULE_PTR(pCalibDbV2, uvnr_v1));
157 uvnr_calibdbV2_assign_v1(&pAuvnrCtx->uvnr_v1, calibv2_uvnr_v1);
158
159 CalibDbV2_MFNR_t* pCalibv2_mfnr_v1 =
160 (CalibDbV2_MFNR_t*)(CALIBDBV2_GET_MODULE_PTR(pCalibDbV2, mfnr_v1));
161 pAuvnrCtx->mfnr_mode_3to1 = pCalibv2_mfnr_v1->TuningPara.mode_3to1;
162 pAuvnrCtx->mfnr_local_gain_en = pCalibv2_mfnr_v1->TuningPara.local_gain_en;
163
164 LOGD_ANR("%s(%d): uvnr version:%s mode_3to1:%d\n",
165 __FUNCTION__, __LINE__,
166 pAuvnrCtx->stUvnrCalib.version,
167 pAuvnrCtx->mfnr_mode_3to1);
168 #endif
169
170 #if RK_SIMULATOR_HW
171 //just for v2 params from html
172
173 #endif
174
175 #if AUVNR_USE_JSON_FILE_V1
176 pAuvnrCtx->stExpInfo.snr_mode = 1;
177 pAuvnrCtx->eParamMode = AUVNR_PARAM_MODE_NORMAL;
178 Auvnr_ConfigSettingParam_V1(pAuvnrCtx, pAuvnrCtx->eParamMode, pAuvnrCtx->stExpInfo.snr_mode);
179 #endif
180
181
182 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
183 return AUVNR_RET_SUCCESS;
184 }
185
186
187 //anr release
Auvnr_Release_V1(Auvnr_Context_V1_t * pAuvnrCtx)188 Auvnr_result_t Auvnr_Release_V1(Auvnr_Context_V1_t *pAuvnrCtx)
189 {
190 Auvnr_result_t result = AUVNR_RET_SUCCESS;
191 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
192 if(pAuvnrCtx == NULL) {
193 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
194 return AUVNR_RET_NULL_POINTER;
195 }
196
197 result = Auvnr_Stop_V1(pAuvnrCtx);
198 if (result != AUVNR_RET_SUCCESS) {
199 LOGE_ANR( "%s: ANRStop() failed!\n", __FUNCTION__);
200 return (result);
201 }
202
203 // check state
204 if ((AUVNR_STATE_RUNNING == pAuvnrCtx->eState)
205 || (AUVNR_STATE_LOCKED == pAuvnrCtx->eState)) {
206 return (AUVNR_RET_BUSY);
207 }
208
209 #if AUVNR_USE_JSON_FILE_V1
210 uvnr_calibdbV2_free_v1(&pAuvnrCtx->uvnr_v1);
211 #endif
212
213 memset(pAuvnrCtx, 0x00, sizeof(Auvnr_Context_V1_t));
214 free(pAuvnrCtx);
215
216 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
217 return AUVNR_RET_SUCCESS;
218 }
219
220 //anr config
Auvnr_Prepare_V1(Auvnr_Context_V1_t * pAuvnrCtx,Auvnr_Config_V1_t * pAuvnrConfig)221 Auvnr_result_t Auvnr_Prepare_V1(Auvnr_Context_V1_t *pAuvnrCtx, Auvnr_Config_V1_t* pAuvnrConfig)
222 {
223 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
224
225 if(pAuvnrCtx == NULL) {
226 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
227 return AUVNR_RET_INVALID_PARM;
228 }
229
230 if(pAuvnrConfig == NULL) {
231 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
232 return AUVNR_RET_INVALID_PARM;
233 }
234
235 if(!!(pAuvnrCtx->prepare_type & RK_AIQ_ALGO_CONFTYPE_UPDATECALIB)) {
236 Auvnr_IQParaUpdate_V1(pAuvnrCtx);
237 }
238
239 pAuvnrCtx->rawWidth = pAuvnrConfig->rawWidth;
240 pAuvnrCtx->rawHeight = pAuvnrConfig->rawHeight;
241 Auvnr_Start_V1(pAuvnrCtx);
242
243 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
244 return AUVNR_RET_SUCCESS;
245 }
246
247 //anr reconfig
Auvnr_ReConfig_V1(Auvnr_Context_V1_t * pAuvnrCtx,Auvnr_Config_V1_t * pAuvnrConfig)248 Auvnr_result_t Auvnr_ReConfig_V1(Auvnr_Context_V1_t *pAuvnrCtx, Auvnr_Config_V1_t* pAuvnrConfig)
249 {
250 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
251 //need todo what?
252
253 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
254 return AUVNR_RET_SUCCESS;
255 }
256
257 //anr reconfig
Auvnr_IQParaUpdate_V1(Auvnr_Context_V1_t * pAuvnrCtx)258 Auvnr_result_t Auvnr_IQParaUpdate_V1(Auvnr_Context_V1_t *pAuvnrCtx)
259 {
260 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
261 //need todo what?
262
263 if(pAuvnrCtx->isIQParaUpdate) {
264 LOGD_ANR("IQ data reconfig\n");
265 Auvnr_ConfigSettingParam_V1(pAuvnrCtx, pAuvnrCtx->eParamMode, pAuvnrCtx->stExpInfo.snr_mode);
266 pAuvnrCtx->isIQParaUpdate = false;
267 }
268
269 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
270 return AUVNR_RET_SUCCESS;
271 }
272
273
274 //anr preprocess
Auvnr_PreProcess_V1(Auvnr_Context_V1_t * pAuvnrCtx)275 Auvnr_result_t Auvnr_PreProcess_V1(Auvnr_Context_V1_t *pAuvnrCtx)
276 {
277 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
278 //need todo what?
279
280 Auvnr_IQParaUpdate_V1(pAuvnrCtx);
281
282 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
283 return AUVNR_RET_SUCCESS;
284 }
285
Auvnr_GainRatioProcess_V1(Auvnr_GainState_t * pGainState,Auvnr_ExpInfo_t * pExpInfo)286 Auvnr_result_t Auvnr_GainRatioProcess_V1(Auvnr_GainState_t *pGainState, Auvnr_ExpInfo_t *pExpInfo)
287 {
288 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
289
290 if(pGainState == NULL) {
291 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
292 return AUVNR_RET_INVALID_PARM;
293 }
294
295 if(pExpInfo == NULL) {
296 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
297 return AUVNR_RET_INVALID_PARM;
298 }
299
300 float gain_cur = pExpInfo->arAGain[pExpInfo->hdr_mode] * pExpInfo->arDGain[pExpInfo->hdr_mode];
301 float th[2];
302 float gain_th0[2];
303 float gain_th1[2];
304 for(int i = 0; i < 2; i++) {
305 gain_th0[i] = pGainState->gain_th0[i];
306 gain_th1[i] = pGainState->gain_th1[i];
307 th[i] = pow(2.0, (log2(gain_th0[i]) + log2(gain_th1[i])) / 2);
308 }
309
310 pGainState->gain_cur = gain_cur;
311
312 int gain_stat_full = -1;
313 int gain_stat_full_last = pGainState->gain_stat_full_last;
314 int gain_stat_last = pGainState->gainState_last;
315 int gain_stat_cur = -1;
316 int gain_stat = -1;
317
318 if(gain_cur <= gain_th0[0])
319 {
320 gain_stat_full = 0;
321 gain_stat_cur = 0;
322 }
323 else if(gain_cur <= gain_th1[0] && gain_cur >= gain_th0[0])
324 {
325 gain_stat_full = 1;
326 }
327 else if(gain_cur <= gain_th0[1] && gain_cur >= gain_th1[0])
328 {
329 gain_stat_full = 2;
330 gain_stat_cur = 1;
331 }
332 else if(gain_cur <= gain_th1[1] && gain_cur >= gain_th0[1])
333 {
334 gain_stat_full = 3;
335 }
336 else if(gain_cur >= gain_th1[1])
337 {
338 gain_stat_full = 4;
339 gain_stat_cur = 2;
340 }
341 if(gain_stat_last == -1 || (abs(gain_stat_full - gain_stat_full_last) >= 2 && gain_stat_cur == -1)) {
342 if(gain_cur <= th[0])
343 gain_stat_cur = 0;
344 else if(gain_cur <= th[1])
345 gain_stat_cur = 1;
346 else
347 gain_stat_cur = 2;
348 }
349 if (gain_stat_cur != -1) {
350 gain_stat_last = gain_stat_cur;
351 gain_stat_full_last = gain_stat_full;
352 gain_stat = gain_stat_cur;
353 } else {
354 gain_stat = gain_stat_last;
355 }
356 if (gain_stat == 0)
357 pGainState->ratio = 16;
358 else if (gain_stat == 1)
359 pGainState->ratio = 1;
360 else
361 pGainState->ratio = 1.0 / 16.0;
362
363 pGainState->gain_stat_full_last = gain_stat_full_last;
364 pGainState->gainState = gain_stat;
365 pGainState->gainState_last = gain_stat_last;
366
367 LOGD_ANR("%s:%d gain_cur:%f gain th %f %fd %f %f ratio:%f gain_state:%d %d full %d %d\n",
368 __FUNCTION__, __LINE__,
369 gain_cur,
370 gain_th0[0], gain_th0[1],
371 gain_th1[0], gain_th1[1],
372 pGainState->ratio,
373 pGainState->gainState_last,
374 pGainState->gainState,
375 pGainState->gain_stat_full_last,
376 gain_stat_full);
377
378
379 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
380
381 return AUVNR_RET_SUCCESS;
382 }
383
384
385 //anr process
Auvnr_Process_V1(Auvnr_Context_V1_t * pAuvnrCtx,Auvnr_ExpInfo_t * pExpInfo)386 Auvnr_result_t Auvnr_Process_V1(Auvnr_Context_V1_t *pAuvnrCtx, Auvnr_ExpInfo_t *pExpInfo)
387 {
388 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
389 Auvnr_ParamMode_t mode = AUVNR_PARAM_MODE_INVALID;
390
391 if(pAuvnrCtx == NULL) {
392 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
393 return AUVNR_RET_INVALID_PARM;
394 }
395
396 if(pExpInfo == NULL) {
397 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
398 return AUVNR_RET_INVALID_PARM;
399 }
400
401 if(pAuvnrCtx->eState != AUVNR_STATE_RUNNING) {
402 return AUVNR_RET_SUCCESS;
403 }
404
405
406 Auvnr_ParamModeProcess_V1(pAuvnrCtx, pExpInfo, &mode);
407 Auvnr_GainRatioProcess_V1(&pAuvnrCtx->stGainState, pExpInfo);
408 pExpInfo->mfnr_mode_3to1 = pAuvnrCtx->mfnr_mode_3to1;
409 if(pExpInfo->mfnr_mode_3to1 ) {
410 pExpInfo->snr_mode = pExpInfo->pre_snr_mode;
411 } else {
412 pExpInfo->snr_mode = pExpInfo->cur_snr_mode;
413 }
414
415 if(pAuvnrCtx->eMode == AUVNR_OP_MODE_AUTO) {
416
417 LOGD_ANR("%s(%d): \n", __FUNCTION__, __LINE__);
418
419 #if AUVNR_USE_XML_FILE_V1
420 if(pExpInfo->snr_mode != pAuvnrCtx->stExpInfo.snr_mode || pAuvnrCtx->eParamMode != mode) {
421 LOGD_ANR("param mode:%d snr_mode:%d\n", mode, pExpInfo->snr_mode);
422 pAuvnrCtx->eParamMode = mode;
423 Auvnr_ConfigSettingParam_V1(pAuvnrCtx, pAuvnrCtx->eParamMode, pExpInfo->snr_mode);
424 }
425 #endif
426
427 //select param
428 select_uvnr_params_by_ISO_v1(&pAuvnrCtx->stAuto.stParams, &pAuvnrCtx->stAuto.stSelect, pExpInfo);
429
430 } else if(pAuvnrCtx->eMode == AUVNR_OP_MODE_MANUAL) {
431 //TODO
432 }
433
434 memcpy(&pAuvnrCtx->stExpInfo, pExpInfo, sizeof(Auvnr_ExpInfo_t));
435
436 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
437 return AUVNR_RET_SUCCESS;
438
439 }
440
441
442 //anr get result
Auvnr_GetProcResult_V1(Auvnr_Context_V1_t * pAuvnrCtx,Auvnr_ProcResult_V1_t * pAuvnrResult)443 Auvnr_result_t Auvnr_GetProcResult_V1(Auvnr_Context_V1_t *pAuvnrCtx, Auvnr_ProcResult_V1_t* pAuvnrResult)
444 {
445 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
446
447 if(pAuvnrCtx == NULL) {
448 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
449 return AUVNR_RET_INVALID_PARM;
450 }
451
452 if(pAuvnrResult == NULL) {
453 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
454 return AUVNR_RET_INVALID_PARM;
455 }
456
457 if(pAuvnrCtx->eMode == AUVNR_OP_MODE_AUTO) {
458 pAuvnrResult->stSelect = pAuvnrCtx->stAuto.stSelect;
459 pAuvnrResult->uvnrEn = pAuvnrCtx->stAuto.uvnrEn;
460 } else if(pAuvnrCtx->eMode == AUVNR_OP_MODE_MANUAL) {
461 //TODO
462 pAuvnrResult->stSelect = pAuvnrCtx->stManual.stSelect;
463 pAuvnrResult->uvnrEn = pAuvnrCtx->stManual.uvnrEn;
464 pAuvnrCtx->fChrom_SF_Strength = 1.0;
465 }
466
467 //transfer to reg value
468 uvnr_fix_transfer_v1(&pAuvnrResult->stSelect, &pAuvnrResult->stFix, &pAuvnrCtx->stExpInfo, pAuvnrCtx->stGainState.ratio, pAuvnrCtx->fChrom_SF_Strength);
469 pAuvnrResult->stFix.uvnr_en = pAuvnrResult->uvnrEn;
470
471 if(pAuvnrCtx->isGrayMode) {
472 //uvnr disable
473 pAuvnrResult->stFix.uvnr_step1_en = 0;
474 pAuvnrResult->stFix.uvnr_step2_en = 0;
475 }
476
477 if(pAuvnrCtx->mfnr_local_gain_en) {
478 pAuvnrResult->stFix.nr_gain_en = 0;
479 } else {
480 pAuvnrResult->stFix.nr_gain_en = 1;
481 }
482
483 LOGD_ANR("%s:%d xml:local:%d mode:%d reg: local gain:%d mfnr gain:%d mode:%d\n",
484 __FUNCTION__, __LINE__);
485
486 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
487 return AUVNR_RET_SUCCESS;
488 }
489
Auvnr_ConfigSettingParam_V1(Auvnr_Context_V1_t * pAuvnrCtx,Auvnr_ParamMode_t eParamMode,int snr_mode)490 Auvnr_result_t Auvnr_ConfigSettingParam_V1(Auvnr_Context_V1_t *pAuvnrCtx, Auvnr_ParamMode_t eParamMode, int snr_mode)
491 {
492 char snr_name[CALIBDB_NR_SHARP_NAME_LENGTH];
493 char param_mode_name[CALIBDB_MAX_MODE_NAME_LENGTH];
494 memset(param_mode_name, 0x00, sizeof(param_mode_name));
495 memset(snr_name, 0x00, sizeof(snr_name));
496
497 if(pAuvnrCtx == NULL) {
498 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
499 return AUVNR_RET_INVALID_PARM;
500 }
501
502 //select param mode first
503 if(eParamMode == AUVNR_PARAM_MODE_NORMAL) {
504 sprintf(param_mode_name, "%s", "normal");
505 } else if(eParamMode == AUVNR_PARAM_MODE_HDR) {
506 sprintf(param_mode_name, "%s", "hdr");
507 } else if(eParamMode == AUVNR_PARAM_MODE_GRAY) {
508 sprintf(param_mode_name, "%s", "gray");
509 } else {
510 LOGE_ANR("%s(%d): not support param mode!\n", __FUNCTION__, __LINE__);
511 sprintf(param_mode_name, "%s", "normal");
512 }
513
514
515 //then select snr mode next
516 if(snr_mode == 1) {
517 sprintf(snr_name, "%s", "HSNR");
518 } else if(snr_mode == 0) {
519 sprintf(snr_name, "%s", "LSNR");
520 } else {
521 LOGE_ANR("%s(%d): not support snr mode!\n", __FUNCTION__, __LINE__);
522 sprintf(snr_name, "%s", "LSNR");
523 }
524
525 #if (AUVNR_USE_JSON_FILE_V1)
526 pAuvnrCtx->stAuto.uvnrEn = pAuvnrCtx->uvnr_v1.TuningPara.enable;
527 uvnr_config_setting_param_json_v1(&pAuvnrCtx->stAuto.stParams, &pAuvnrCtx->uvnr_v1, param_mode_name, snr_name);
528 #else
529 pAuvnrCtx->stAuto.uvnrEn = pAuvnrCtx->stUvnrCalib.enable;
530 uvnr_config_setting_param_v1(&pAuvnrCtx->stAuto.stParams, &pAuvnrCtx->stUvnrCalib, param_mode_name, snr_name);
531 #endif
532
533 return AUVNR_RET_SUCCESS;
534 }
535
Auvnr_ParamModeProcess_V1(Auvnr_Context_V1_t * pAuvnrCtx,Auvnr_ExpInfo_t * pExpInfo,Auvnr_ParamMode_t * mode)536 Auvnr_result_t Auvnr_ParamModeProcess_V1(Auvnr_Context_V1_t *pAuvnrCtx, Auvnr_ExpInfo_t *pExpInfo, Auvnr_ParamMode_t *mode) {
537 Auvnr_result_t res = AUVNR_RET_SUCCESS;
538 *mode = pAuvnrCtx->eParamMode;
539
540 if(pAuvnrCtx == NULL) {
541 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
542 return AUVNR_RET_INVALID_PARM;
543 }
544
545 if(pAuvnrCtx->isGrayMode) {
546 *mode = AUVNR_PARAM_MODE_GRAY;
547 } else if(pExpInfo->hdr_mode == 0) {
548 *mode = AUVNR_PARAM_MODE_NORMAL;
549 } else if(pExpInfo->hdr_mode >= 1) {
550 *mode = AUVNR_PARAM_MODE_HDR;
551 } else {
552 *mode = AUVNR_PARAM_MODE_NORMAL;
553 }
554
555 return res;
556 }
557
558
559 RKAIQ_END_DECLARE
560
561
562