1
2 #include "rk_aiq_aynr_algo_v2.h"
3 #include "rk_aiq_aynr_algo_itf_v2.h"
4 #include "RkAiqCalibDbV2Helper.h"
5
6 RKAIQ_BEGIN_DECLARE
7
Aynr_Start_V2(Aynr_Context_V2_t * pAynrCtx)8 Aynr_result_t Aynr_Start_V2(Aynr_Context_V2_t *pAynrCtx)
9 {
10 LOGI_ANR( "%s:enter!\n", __FUNCTION__);
11
12 // initial checks
13 if (pAynrCtx == NULL) {
14 return (AYNR_RET_NULL_POINTER);
15 }
16
17 if ((AYNR_STATE_RUNNING == pAynrCtx->eState)
18 || (AYNR_STATE_LOCKED == pAynrCtx->eState)) {
19 return (AYNR_RET_FAILURE);
20 }
21
22 pAynrCtx->eState = AYNR_STATE_RUNNING;
23
24 LOGI_ANR( "%s:exit!\n", __FUNCTION__);
25 return (AYNR_RET_SUCCESS);
26 }
27
28
Aynr_Stop_V2(Aynr_Context_V2_t * pAynrCtx)29 Aynr_result_t Aynr_Stop_V2(Aynr_Context_V2_t *pAynrCtx)
30 {
31 LOGI_ANR( "%s:enter!\n", __FUNCTION__);
32
33 // initial checks
34 if (pAynrCtx == NULL) {
35 return (AYNR_RET_NULL_POINTER);
36 }
37
38 if (AYNR_STATE_LOCKED == pAynrCtx->eState) {
39 return (AYNR_RET_FAILURE);
40 }
41
42 pAynrCtx->eState = AYNR_STATE_STOPPED;
43
44 LOGI_ANR( "%s:exit!\n", __FUNCTION__);
45 return (AYNR_RET_SUCCESS);
46 }
47
48
49 //anr inint
Aynr_Init_V2(Aynr_Context_V2_t ** ppAynrCtx,void * pCalibDb)50 Aynr_result_t Aynr_Init_V2(Aynr_Context_V2_t **ppAynrCtx, void *pCalibDb)
51 {
52 Aynr_Context_V2_t * pAynrCtx;
53
54 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
55
56 pAynrCtx = (Aynr_Context_V2_t *)malloc(sizeof(Aynr_Context_V2_t));
57 if(pAynrCtx == NULL) {
58 LOGE_ANR("%s(%d): malloc fail\n", __FUNCTION__, __LINE__);
59 return AYNR_RET_NULL_POINTER;
60 }
61
62 memset(pAynrCtx, 0x00, sizeof(Aynr_Context_V2_t));
63
64 //gain state init
65 pAynrCtx->fYnr_SF_Strength = 1.0;
66
67 pAynrCtx->eState = AYNR_STATE_INITIALIZED;
68 *ppAynrCtx = pAynrCtx;
69
70 pAynrCtx->eMode = AYNR_OP_MODE_AUTO;
71 pAynrCtx->isIQParaUpdate = false;
72 pAynrCtx->isGrayMode = false;
73 pAynrCtx->isReCalculate = 1;
74
75 #if AYNR_USE_XML_FILE_V2
76 //read v1 params from xml
77 #if AYNR_USE_JSON_FILE_V2
78 pAynrCtx->ynr_v2 =
79 *(CalibDbV2_YnrV2_t *)(CALIBDBV2_GET_MODULE_PTR(pCalibDb, ynr_v2));
80 #else
81 pAynrCtx->list_ynr_v2 =
82 (struct list_head*)(CALIBDB_GET_MODULE_PTR(pCalibDb, list_ynr_v2));
83 printf("%s(%d): bayernr list: %p\n", __FUNCTION__, __LINE__,
84 pAynrCtx->list_ynr_v2);
85 #endif
86 #endif
87
88
89 #if AYNR_USE_XML_FILE_V2
90 pAynrCtx->stExpInfo.snr_mode = 1;
91 pAynrCtx->eParamMode = AYNR_PARAM_MODE_NORMAL;
92 Aynr_ConfigSettingParam_V2(pAynrCtx, pAynrCtx->eParamMode, pAynrCtx->stExpInfo.snr_mode);
93 #endif
94
95 LOGD_ANR("%s(%d):", __FUNCTION__, __LINE__);
96
97
98 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
99 return AYNR_RET_SUCCESS;
100 }
101
102 //anr release
Aynr_Release_V2(Aynr_Context_V2_t * pAynrCtx)103 Aynr_result_t Aynr_Release_V2(Aynr_Context_V2_t *pAynrCtx)
104 {
105 Aynr_result_t result = AYNR_RET_SUCCESS;
106 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
107 if(pAynrCtx == NULL) {
108 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
109 return AYNR_RET_NULL_POINTER;
110 }
111
112 result = Aynr_Stop_V2(pAynrCtx);
113 if (result != AYNR_RET_SUCCESS) {
114 LOGE_ANR( "%s: ANRStop() failed!\n", __FUNCTION__);
115 return (result);
116 }
117
118 // check state
119 if ((AYNR_STATE_RUNNING == pAynrCtx->eState)
120 || (AYNR_STATE_LOCKED == pAynrCtx->eState)) {
121 return (AYNR_RET_BUSY);
122 }
123
124 memset(pAynrCtx, 0x00, sizeof(Aynr_Context_V2_t));
125 free(pAynrCtx);
126
127 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
128 return AYNR_RET_SUCCESS;
129 }
130
131 //anr config
Aynr_Prepare_V2(Aynr_Context_V2_t * pAynrCtx,Aynr_Config_V2_t * pAynrConfig)132 Aynr_result_t Aynr_Prepare_V2(Aynr_Context_V2_t *pAynrCtx, Aynr_Config_V2_t* pAynrConfig)
133 {
134 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
135
136 if(pAynrCtx == NULL) {
137 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
138 return AYNR_RET_INVALID_PARM;
139 }
140
141 if(pAynrConfig == NULL) {
142 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
143 return AYNR_RET_INVALID_PARM;
144 }
145
146 if(!!(pAynrCtx->prepare_type & RK_AIQ_ALGO_CONFTYPE_UPDATECALIB)) {
147 Aynr_IQParaUpdate_V2(pAynrCtx);
148 }
149
150 pAynrCtx->rawWidth = pAynrConfig->rawWidth;
151 pAynrCtx->rawHeight = pAynrConfig->rawHeight;
152 Aynr_Start_V2(pAynrCtx);
153
154 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
155 return AYNR_RET_SUCCESS;
156 }
157
158 //anr reconfig
Aynr_ReConfig_V2(Aynr_Context_V2_t * pAynrCtx,Aynr_Config_V2_t * pAynrConfig)159 Aynr_result_t Aynr_ReConfig_V2(Aynr_Context_V2_t *pAynrCtx, Aynr_Config_V2_t* pAynrConfig)
160 {
161 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
162 //need todo what?
163
164 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
165 return AYNR_RET_SUCCESS;
166 }
167
168 //anr reconfig
Aynr_IQParaUpdate_V2(Aynr_Context_V2_t * pAynrCtx)169 Aynr_result_t Aynr_IQParaUpdate_V2(Aynr_Context_V2_t *pAynrCtx)
170 {
171 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
172 //need todo what?
173
174 if(pAynrCtx->isIQParaUpdate) {
175 LOGD_ANR("IQ data reconfig\n");
176 Aynr_ConfigSettingParam_V2(pAynrCtx, pAynrCtx->eParamMode, pAynrCtx->stExpInfo.snr_mode);
177 pAynrCtx->isIQParaUpdate = false;
178 }
179
180 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
181 return AYNR_RET_SUCCESS;
182 }
183
184
185 //anr preprocess
Aynr_PreProcess_V2(Aynr_Context_V2_t * pAynrCtx)186 Aynr_result_t Aynr_PreProcess_V2(Aynr_Context_V2_t *pAynrCtx)
187 {
188 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
189 //need todo what?
190
191 Aynr_IQParaUpdate_V2(pAynrCtx);
192
193 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
194 return AYNR_RET_SUCCESS;
195 }
196
197 //anr process
Aynr_Process_V2(Aynr_Context_V2_t * pAynrCtx,Aynr_ExpInfo_t * pExpInfo)198 Aynr_result_t Aynr_Process_V2(Aynr_Context_V2_t *pAynrCtx, Aynr_ExpInfo_t *pExpInfo)
199 {
200 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
201 Aynr_ParamMode_t mode = AYNR_PARAM_MODE_INVALID;
202
203 if(pAynrCtx == NULL) {
204 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
205 return AYNR_RET_INVALID_PARM;
206 }
207
208 if(pExpInfo == NULL) {
209 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
210 return AYNR_RET_INVALID_PARM;
211 }
212
213 if(pAynrCtx->eState != AYNR_STATE_RUNNING) {
214 return AYNR_RET_SUCCESS;
215 }
216
217
218 Aynr_ParamModeProcess_V2(pAynrCtx, pExpInfo, &mode);
219
220 if(pAynrCtx->eMode == AYNR_OP_MODE_AUTO) {
221
222 LOGD_ANR("%s(%d): \n", __FUNCTION__, __LINE__);
223
224 #if AYNR_USE_XML_FILE_V2
225 if(pExpInfo->snr_mode != pAynrCtx->stExpInfo.snr_mode || pAynrCtx->eParamMode != mode) {
226 LOGD_ANR("param mode:%d snr_mode:%d\n", mode, pExpInfo->snr_mode);
227 pAynrCtx->eParamMode = mode;
228 Aynr_ConfigSettingParam_V2(pAynrCtx, pAynrCtx->eParamMode, pExpInfo->snr_mode);
229 }
230 #endif
231
232 //select param
233 ynr_select_params_by_ISO_V2(&pAynrCtx->stAuto.stParams, &pAynrCtx->stAuto.stSelect, pExpInfo);
234
235 } else if(pAynrCtx->eMode == AYNR_OP_MODE_MANUAL) {
236 //TODO
237 }
238
239 memcpy(&pAynrCtx->stExpInfo, pExpInfo, sizeof(Aynr_ExpInfo_t));
240 pAynrCtx->stExpInfo.rawHeight = pAynrCtx->rawHeight;
241 pAynrCtx->stExpInfo.rawWidth = pAynrCtx->rawWidth;
242
243 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
244 return AYNR_RET_SUCCESS;
245
246 }
247
248
249
250 //anr get result
Aynr_GetProcResult_V2(Aynr_Context_V2_t * pAynrCtx,Aynr_ProcResult_V2_t * pAynrResult)251 Aynr_result_t Aynr_GetProcResult_V2(Aynr_Context_V2_t *pAynrCtx, Aynr_ProcResult_V2_t* pAynrResult)
252 {
253 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
254
255 if(pAynrCtx == NULL) {
256 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
257 return AYNR_RET_INVALID_PARM;
258 }
259
260 if(pAynrResult == NULL) {
261 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
262 return AYNR_RET_INVALID_PARM;
263 }
264
265 RK_YNR_Params_V2_Select_t* stSelect = NULL;
266 if(pAynrCtx->eMode == AYNR_OP_MODE_AUTO) {
267 stSelect = &pAynrCtx->stAuto.stSelect;
268 } else if(pAynrCtx->eMode == AYNR_OP_MODE_MANUAL) {
269 //TODO
270 stSelect = &pAynrCtx->stManual.stSelect;
271 pAynrCtx->fYnr_SF_Strength = 1.0;
272 }
273
274 //transfer to reg value
275 ynr_fix_transfer_V2(stSelect, pAynrResult->stFix, pAynrCtx->fYnr_SF_Strength, &pAynrCtx->stExpInfo);
276
277
278 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
279 return AYNR_RET_SUCCESS;
280 }
281
Aynr_ConfigSettingParam_V2(Aynr_Context_V2_t * pAynrCtx,Aynr_ParamMode_t eParamMode,int snr_mode)282 Aynr_result_t Aynr_ConfigSettingParam_V2(Aynr_Context_V2_t *pAynrCtx, Aynr_ParamMode_t eParamMode, int snr_mode)
283 {
284 char snr_name[CALIBDB_NR_SHARP_NAME_LENGTH];
285 char param_mode_name[CALIBDB_MAX_MODE_NAME_LENGTH];
286 memset(param_mode_name, 0x00, sizeof(param_mode_name));
287 memset(snr_name, 0x00, sizeof(snr_name));
288
289 if(pAynrCtx == NULL) {
290 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
291 return AYNR_RET_INVALID_PARM;
292 }
293
294 //select param mode first
295 if(eParamMode == AYNR_PARAM_MODE_NORMAL) {
296 sprintf(param_mode_name, "%s", "normal");
297 } else if(eParamMode == AYNR_PARAM_MODE_HDR) {
298 sprintf(param_mode_name, "%s", "hdr");
299 } else if(eParamMode == AYNR_PARAM_MODE_GRAY) {
300 sprintf(param_mode_name, "%s", "gray");
301 } else {
302 LOGE_ANR("%s(%d): not support param mode!\n", __FUNCTION__, __LINE__);
303 sprintf(param_mode_name, "%s", "normal");
304 }
305
306
307 //then select snr mode next
308 if(snr_mode == 1) {
309 sprintf(snr_name, "%s", "HSNR");
310 } else if(snr_mode == 0) {
311 sprintf(snr_name, "%s", "LSNR");
312 } else {
313 LOGE_ANR("%s(%d): not support snr mode:%d!\n", __FUNCTION__, __LINE__, snr_mode);
314 sprintf(snr_name, "%s", "LSNR");
315 }
316
317 #if AYNR_USE_JSON_FILE_V2
318 ynr_config_setting_param_json_V2(&pAynrCtx->stAuto.stParams, &pAynrCtx->ynr_v2, param_mode_name, snr_name);
319 #else
320 ynr_config_setting_param_V2(&pAynrCtx->stAuto.stParams, pAynrCtx->list_ynr_v2, param_mode_name, snr_name);
321 #endif
322
323 return AYNR_RET_SUCCESS;
324 }
325
Aynr_ParamModeProcess_V2(Aynr_Context_V2_t * pAynrCtx,Aynr_ExpInfo_t * pExpInfo,Aynr_ParamMode_t * mode)326 Aynr_result_t Aynr_ParamModeProcess_V2(Aynr_Context_V2_t *pAynrCtx, Aynr_ExpInfo_t *pExpInfo, Aynr_ParamMode_t *mode) {
327 Aynr_result_t res = AYNR_RET_SUCCESS;
328 *mode = pAynrCtx->eParamMode;
329
330 if(pAynrCtx == NULL) {
331 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
332 return AYNR_RET_INVALID_PARM;
333 }
334
335 if(pAynrCtx->isGrayMode) {
336 *mode = AYNR_PARAM_MODE_GRAY;
337 } else if(pExpInfo->hdr_mode == 0) {
338 *mode = AYNR_PARAM_MODE_NORMAL;
339 } else if(pExpInfo->hdr_mode >= 1) {
340 *mode = AYNR_PARAM_MODE_HDR;
341 } else {
342 *mode = AYNR_PARAM_MODE_NORMAL;
343 }
344
345 return res;
346 }
347
348
349 RKAIQ_END_DECLARE
350
351
352