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