xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/auvnr/rk_aiq_auvnr_algo_v1.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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