1
2 #include "rk_aiq_aynr_algo_v3.h"
3 #include "rk_aiq_aynr_algo_itf_v3.h"
4
5 RKAIQ_BEGIN_DECLARE
6
Aynr_Start_V3(Aynr_Context_V3_t * pAynrCtx)7 Aynr_result_V3_t Aynr_Start_V3(Aynr_Context_V3_t *pAynrCtx)
8 {
9 LOGI_ANR( "%s:enter!\n", __FUNCTION__);
10
11 // initial checks
12 if (pAynrCtx == NULL) {
13 return (AYNRV3_RET_NULL_POINTER);
14 }
15
16 if ((AYNRV3_STATE_RUNNING == pAynrCtx->eState)
17 || (AYNRV3_STATE_LOCKED == pAynrCtx->eState)) {
18 return (AYNRV3_RET_FAILURE);
19 }
20
21 pAynrCtx->eState = AYNRV3_STATE_RUNNING;
22
23 LOGI_ANR( "%s:exit!\n", __FUNCTION__);
24 return (AYNRV3_RET_SUCCESS);
25 }
26
27
Aynr_Stop_V3(Aynr_Context_V3_t * pAynrCtx)28 Aynr_result_V3_t Aynr_Stop_V3(Aynr_Context_V3_t *pAynrCtx)
29 {
30 LOGI_ANR( "%s:enter!\n", __FUNCTION__);
31
32 // initial checks
33 if (pAynrCtx == NULL) {
34 return (AYNRV3_RET_NULL_POINTER);
35 }
36
37 if (AYNRV3_STATE_LOCKED == pAynrCtx->eState) {
38 return (AYNRV3_RET_FAILURE);
39 }
40
41 pAynrCtx->eState = AYNRV3_STATE_STOPPED;
42
43 LOGI_ANR( "%s:exit!\n", __FUNCTION__);
44 return (AYNRV3_RET_SUCCESS);
45 }
46
47
48 //anr inint
Aynr_Init_V3(Aynr_Context_V3_t ** ppAynrCtx,void * pCalibDb)49 Aynr_result_V3_t Aynr_Init_V3(Aynr_Context_V3_t **ppAynrCtx, void *pCalibDb)
50 {
51 Aynr_Context_V3_t * pAynrCtx;
52
53 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
54
55 pAynrCtx = (Aynr_Context_V3_t *)malloc(sizeof(Aynr_Context_V3_t));
56 if(pAynrCtx == NULL) {
57 LOGE_ANR("%s(%d): malloc fail\n", __FUNCTION__, __LINE__);
58 return AYNRV3_RET_NULL_POINTER;
59 }
60
61 memset(pAynrCtx, 0x00, sizeof(Aynr_Context_V3_t));
62
63 //gain state init
64 pAynrCtx->stStrength.strength_enable = false;
65 pAynrCtx->stStrength.percent = 1.0;
66
67 pAynrCtx->eState = AYNRV3_STATE_INITIALIZED;
68 *ppAynrCtx = pAynrCtx;
69
70 pAynrCtx->eMode = AYNRV3_OP_MODE_AUTO;
71 pAynrCtx->isIQParaUpdate = false;
72 pAynrCtx->isGrayMode = false;
73 pAynrCtx->isReCalculate = 1;
74
75 #if AYNR_USE_XML_FILE_V3
76 //read v1 params from xml
77 #if AYNR_USE_JSON_FILE_V3
78 pAynrCtx->ynr_v3 =
79 *(CalibDbV2_YnrV3_t *)(CALIBDBV2_GET_MODULE_PTR(pCalibDb, ynr_v3));
80 #endif
81 #endif
82
83
84 #if AYNR_USE_XML_FILE_V3
85 pAynrCtx->stExpInfo.snr_mode = 1;
86 pAynrCtx->eParamMode = AYNRV3_PARAM_MODE_NORMAL;
87 Aynr_ConfigSettingParam_V3(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 AYNRV3_RET_SUCCESS;
95 }
96
97 //anr release
Aynr_Release_V3(Aynr_Context_V3_t * pAynrCtx)98 Aynr_result_V3_t Aynr_Release_V3(Aynr_Context_V3_t *pAynrCtx)
99 {
100 Aynr_result_V3_t result = AYNRV3_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 AYNRV3_RET_NULL_POINTER;
105 }
106
107 result = Aynr_Stop_V3(pAynrCtx);
108 if (result != AYNRV3_RET_SUCCESS) {
109 LOGE_ANR( "%s: ANRStop() failed!\n", __FUNCTION__);
110 return (result);
111 }
112
113 // check state
114 if ((AYNRV3_STATE_RUNNING == pAynrCtx->eState)
115 || (AYNRV3_STATE_LOCKED == pAynrCtx->eState)) {
116 return (AYNRV3_RET_BUSY);
117 }
118
119 memset(pAynrCtx, 0x00, sizeof(Aynr_Context_V3_t));
120 free(pAynrCtx);
121
122 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
123 return AYNRV3_RET_SUCCESS;
124 }
125
126 //anr config
Aynr_Prepare_V3(Aynr_Context_V3_t * pAynrCtx,Aynr_Config_V3_t * pAynrConfig)127 Aynr_result_V3_t Aynr_Prepare_V3(Aynr_Context_V3_t *pAynrCtx, Aynr_Config_V3_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 AYNRV3_RET_INVALID_PARM;
134 }
135
136 if(pAynrConfig == NULL) {
137 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
138 return AYNRV3_RET_INVALID_PARM;
139 }
140
141 if(!!(pAynrCtx->prepare_type & RK_AIQ_ALGO_CONFTYPE_UPDATECALIB)) {
142 Aynr_IQParaUpdate_V3(pAynrCtx);
143 }
144
145 pAynrCtx->rawWidth = pAynrConfig->rawWidth;
146 pAynrCtx->rawHeight = pAynrConfig->rawHeight;
147 Aynr_Start_V3(pAynrCtx);
148
149 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
150 return AYNRV3_RET_SUCCESS;
151 }
152
153 //anr reconfig
Aynr_ReConfig_V3(Aynr_Context_V3_t * pAynrCtx,Aynr_Config_V3_t * pAynrConfig)154 Aynr_result_V3_t Aynr_ReConfig_V3(Aynr_Context_V3_t *pAynrCtx, Aynr_Config_V3_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 AYNRV3_RET_SUCCESS;
161 }
162
163 //anr reconfig
Aynr_IQParaUpdate_V3(Aynr_Context_V3_t * pAynrCtx)164 Aynr_result_V3_t Aynr_IQParaUpdate_V3(Aynr_Context_V3_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_V3(pAynrCtx, pAynrCtx->eParamMode, pAynrCtx->stExpInfo.snr_mode);
172 pAynrCtx->isIQParaUpdate = false;
173 }
174
175 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
176 return AYNRV3_RET_SUCCESS;
177 }
178
179
180 //anr preprocess
Aynr_PreProcess_V3(Aynr_Context_V3_t * pAynrCtx)181 Aynr_result_V3_t Aynr_PreProcess_V3(Aynr_Context_V3_t *pAynrCtx)
182 {
183 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
184 //need todo what?
185
186 Aynr_IQParaUpdate_V3(pAynrCtx);
187
188 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
189 return AYNRV3_RET_SUCCESS;
190 }
191
192 //anr process
Aynr_Process_V3(Aynr_Context_V3_t * pAynrCtx,Aynr_ExpInfo_V3_t * pExpInfo)193 Aynr_result_V3_t Aynr_Process_V3(Aynr_Context_V3_t *pAynrCtx, Aynr_ExpInfo_V3_t *pExpInfo)
194 {
195 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
196 Aynr_ParamMode_V3_t mode = AYNRV3_PARAM_MODE_INVALID;
197
198 if(pAynrCtx == NULL) {
199 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
200 return AYNRV3_RET_INVALID_PARM;
201 }
202
203 if(pExpInfo == NULL) {
204 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
205 return AYNRV3_RET_INVALID_PARM;
206 }
207
208 if(pAynrCtx->eState != AYNRV3_STATE_RUNNING) {
209 return AYNRV3_RET_SUCCESS;
210 }
211
212
213 Aynr_ParamModeProcess_V3(pAynrCtx, pExpInfo, &mode);
214
215 if(pAynrCtx->eMode == AYNRV3_OP_MODE_AUTO) {
216
217 LOGD_ANR("%s(%d): \n", __FUNCTION__, __LINE__);
218
219 #if AYNR_USE_XML_FILE_V3
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_V3(pAynrCtx, pAynrCtx->eParamMode, pExpInfo->snr_mode);
224 }
225 #endif
226
227 //select param
228 ynr_select_params_by_ISO_V3(&pAynrCtx->stAuto.stParams, &pAynrCtx->stAuto.stSelect, pExpInfo);
229
230 } else if(pAynrCtx->eMode == AYNRV3_OP_MODE_MANUAL) {
231 //TODO
232 }
233
234 memcpy(&pAynrCtx->stExpInfo, pExpInfo, sizeof(Aynr_ExpInfo_V3_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 AYNRV3_RET_SUCCESS;
240
241 }
242
243
244
245 //anr get result
Aynr_GetProcResult_V3(Aynr_Context_V3_t * pAynrCtx,Aynr_ProcResult_V3_t * pAynrResult)246 Aynr_result_V3_t Aynr_GetProcResult_V3(Aynr_Context_V3_t *pAynrCtx, Aynr_ProcResult_V3_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 AYNRV3_RET_INVALID_PARM;
253 }
254
255 if(pAynrResult == NULL) {
256 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
257 return AYNRV3_RET_INVALID_PARM;
258 }
259
260 if(pAynrCtx->eMode == AYNRV3_OP_MODE_AUTO) {
261 pAynrResult->stSelect = &pAynrCtx->stAuto.stSelect;
262 } else if(pAynrCtx->eMode == AYNRV3_OP_MODE_MANUAL) {
263 //TODO
264 pAynrResult->stSelect = &pAynrCtx->stManual.stSelect;
265 }
266
267 //transfer to reg value
268 ynr_fix_transfer_V3(pAynrResult->stSelect, pAynrResult->stFix, &pAynrCtx->stStrength, &pAynrCtx->stExpInfo);
269
270 if(pAynrCtx->eMode == AYNRV3_OP_MODE_REG_MANUAL) {
271 *pAynrResult->stFix = pAynrCtx->stManual.stFix;
272 pAynrCtx->stStrength.strength_enable = false;
273 pAynrCtx->stStrength.percent = 1.0;
274 }
275
276 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
277 return AYNRV3_RET_SUCCESS;
278 }
279
Aynr_ConfigSettingParam_V3(Aynr_Context_V3_t * pAynrCtx,Aynr_ParamMode_V3_t eParamMode,int snr_mode)280 Aynr_result_V3_t Aynr_ConfigSettingParam_V3(Aynr_Context_V3_t *pAynrCtx, Aynr_ParamMode_V3_t eParamMode, int snr_mode)
281 {
282 char snr_name[CALIBDB_NR_SHARP_NAME_LENGTH];
283 char param_mode_name[CALIBDB_MAX_MODE_NAME_LENGTH];
284 memset(param_mode_name, 0x00, sizeof(param_mode_name));
285 memset(snr_name, 0x00, sizeof(snr_name));
286
287 if(pAynrCtx == NULL) {
288 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
289 return AYNRV3_RET_INVALID_PARM;
290 }
291
292 //select param mode first
293 if(eParamMode == AYNRV3_PARAM_MODE_NORMAL) {
294 sprintf(param_mode_name, "%s", "normal");
295 } else if(eParamMode == AYNRV3_PARAM_MODE_HDR) {
296 sprintf(param_mode_name, "%s", "hdr");
297 } else if(eParamMode == AYNRV3_PARAM_MODE_GRAY) {
298 sprintf(param_mode_name, "%s", "gray");
299 } else {
300 LOGE_ANR("%s(%d): not support param mode!\n", __FUNCTION__, __LINE__);
301 sprintf(param_mode_name, "%s", "normal");
302 }
303
304
305 //then select snr mode next
306 if(snr_mode == 1) {
307 sprintf(snr_name, "%s", "HSNR");
308 } else if(snr_mode == 0) {
309 sprintf(snr_name, "%s", "LSNR");
310 } else {
311 LOGE_ANR("%s(%d): not support snr mode:%d!\n", __FUNCTION__, __LINE__, snr_mode);
312 sprintf(snr_name, "%s", "LSNR");
313 }
314
315 #if AYNR_USE_JSON_FILE_V3
316 ynr_config_setting_param_json_V3(&pAynrCtx->stAuto.stParams, &pAynrCtx->ynr_v3, param_mode_name, snr_name);
317 #endif
318
319 return AYNRV3_RET_SUCCESS;
320 }
321
Aynr_ParamModeProcess_V3(Aynr_Context_V3_t * pAynrCtx,Aynr_ExpInfo_V3_t * pExpInfo,Aynr_ParamMode_V3_t * mode)322 Aynr_result_V3_t Aynr_ParamModeProcess_V3(Aynr_Context_V3_t *pAynrCtx, Aynr_ExpInfo_V3_t *pExpInfo, Aynr_ParamMode_V3_t *mode) {
323 Aynr_result_V3_t res = AYNRV3_RET_SUCCESS;
324 *mode = pAynrCtx->eParamMode;
325
326 if(pAynrCtx == NULL) {
327 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
328 return AYNRV3_RET_INVALID_PARM;
329 }
330
331 if(pAynrCtx->isGrayMode) {
332 *mode = AYNRV3_PARAM_MODE_GRAY;
333 } else if(pExpInfo->hdr_mode == 0) {
334 *mode = AYNRV3_PARAM_MODE_NORMAL;
335 } else if(pExpInfo->hdr_mode >= 1) {
336 *mode = AYNRV3_PARAM_MODE_HDR;
337 } else {
338 *mode = AYNRV3_PARAM_MODE_NORMAL;
339 }
340
341 return res;
342 }
343
344
345 RKAIQ_END_DECLARE
346
347
348