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