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