1
2 #include "rk_aiq_abayertnr_algo_v23.h"
3 #include "rk_aiq_abayertnr_algo_itf_v23.h"
4
5 RKAIQ_BEGIN_DECLARE
6
Abayertnr_Start_V23(Abayertnr_Context_V23_t * pAbayertnrCtx)7 Abayertnr_result_V23_t Abayertnr_Start_V23(Abayertnr_Context_V23_t *pAbayertnrCtx)
8 {
9 LOGI_ANR( "%s:enter!\n", __FUNCTION__);
10
11 // initial checks
12 if (pAbayertnrCtx == NULL) {
13 return (ABAYERTNRV23_RET_NULL_POINTER);
14 }
15
16 if ((ABAYERTNRV23_STATE_RUNNING == pAbayertnrCtx->eState)
17 || (ABAYERTNRV23_STATE_LOCKED == pAbayertnrCtx->eState)) {
18 return (ABAYERTNRV23_RET_FAILURE);
19 }
20
21 pAbayertnrCtx->eState = ABAYERTNRV23_STATE_RUNNING;
22
23 LOGI_ANR( "%s:exit!\n", __FUNCTION__);
24 return (ABAYERTNRV23_RET_SUCCESS);
25 }
26
27
Abayertnr_Stop_V23(Abayertnr_Context_V23_t * pAbayertnrCtx)28 Abayertnr_result_V23_t Abayertnr_Stop_V23(Abayertnr_Context_V23_t *pAbayertnrCtx)
29 {
30 LOGI_ANR( "%s:enter!\n", __FUNCTION__);
31
32 // initial checks
33 if (pAbayertnrCtx == NULL) {
34 return (ABAYERTNRV23_RET_NULL_POINTER);
35 }
36
37 if (ABAYERTNRV23_STATE_LOCKED == pAbayertnrCtx->eState) {
38 return (ABAYERTNRV23_RET_FAILURE);
39 }
40
41 pAbayertnrCtx->eState = ABAYERTNRV23_STATE_STOPPED;
42
43 LOGI_ANR( "%s:exit!\n", __FUNCTION__);
44 return (ABAYERTNRV23_RET_SUCCESS);
45 }
46
47
48 //anr inint
Abayertnr_Init_V23(Abayertnr_Context_V23_t ** ppAbayertnrCtx,void * pCalibDb)49 Abayertnr_result_V23_t Abayertnr_Init_V23(Abayertnr_Context_V23_t **ppAbayertnrCtx, void *pCalibDb)
50 {
51 Abayertnr_Context_V23_t * pAbayertnrCtx;
52
53 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
54
55 pAbayertnrCtx = (Abayertnr_Context_V23_t *)malloc(sizeof(Abayertnr_Context_V23_t));
56 if(pAbayertnrCtx == NULL) {
57 LOGE_ANR("%s(%d): malloc fail\n", __FUNCTION__, __LINE__);
58 return ABAYERTNRV23_RET_NULL_POINTER;
59 }
60
61 memset(pAbayertnrCtx, 0x00, sizeof(Abayertnr_Context_V23_t));
62
63 //gain state init
64 pAbayertnrCtx->stStrength.strength_enable = true;
65 pAbayertnrCtx->stStrength.percent = 1.0;
66
67 pAbayertnrCtx->eState = ABAYERTNRV23_STATE_INITIALIZED;
68 *ppAbayertnrCtx = pAbayertnrCtx;
69
70 pAbayertnrCtx->eMode = ABAYERTNRV23_OP_MODE_AUTO;
71 pAbayertnrCtx->isIQParaUpdate = false;
72 pAbayertnrCtx->isGrayMode = false;
73 pAbayertnrCtx->isReCalculate = 1;
74
75 //read v1 params from xml
76 #if (ABAYERTNR_USE_JSON_FILE_V23)
77 #if (RKAIQ_HAVE_BAYERTNR_V23)
78 CalibDbV2_BayerTnrV23_t * pcalibdbV23_bayertnr_v23 =
79 (CalibDbV2_BayerTnrV23_t *)(CALIBDBV2_GET_MODULE_PTR((CamCalibDbV2Context_t*)pCalibDb, bayertnr_v23));
80 #else
81 CalibDbV2_BayerTnrV23Lite_t* pcalibdbV23_bayertnr_v23 =
82 (CalibDbV2_BayerTnrV23Lite_t*)(CALIBDBV2_GET_MODULE_PTR((CamCalibDbV2Context_t*)pCalibDb,
83 bayertnr_v23));
84 #endif
85 pAbayertnrCtx->bayertnr_v23 = *pcalibdbV23_bayertnr_v23;
86 #endif
87
88
89 #if RK_SIMULATOR_HW
90 //just for v23 params from html
91
92 #endif
93
94 #if 1
95 pAbayertnrCtx->stExpInfo.snr_mode = 1;
96 pAbayertnrCtx->eParamMode = ABAYERTNRV23_PARAM_MODE_NORMAL;
97 Abayertnr_ConfigSettingParam_V23(pAbayertnrCtx, pAbayertnrCtx->eParamMode, pAbayertnrCtx->stExpInfo.snr_mode);
98 #endif
99
100 LOGD_ANR("%s(%d):", __FUNCTION__, __LINE__);
101
102
103 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
104 return ABAYERTNRV23_RET_SUCCESS;
105 }
106
107 //anr release
Abayertnr_Release_V23(Abayertnr_Context_V23_t * pAbayertnrCtx)108 Abayertnr_result_V23_t Abayertnr_Release_V23(Abayertnr_Context_V23_t *pAbayertnrCtx)
109 {
110 Abayertnr_result_V23_t result = ABAYERTNRV23_RET_SUCCESS;
111 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
112 if(pAbayertnrCtx == NULL) {
113 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
114 return ABAYERTNRV23_RET_NULL_POINTER;
115 }
116
117 result = Abayertnr_Stop_V23(pAbayertnrCtx);
118 if (result != ABAYERTNRV23_RET_SUCCESS) {
119 LOGE_ANR( "%s: ANRStop() failed!\n", __FUNCTION__);
120 return (result);
121 }
122
123 // check state
124 if ((ABAYERTNRV23_STATE_RUNNING == pAbayertnrCtx->eState)
125 || (ABAYERTNRV23_STATE_LOCKED == pAbayertnrCtx->eState)) {
126 return (ABAYERTNRV23_RET_BUSY);
127 }
128
129 memset(pAbayertnrCtx, 0x00, sizeof(Abayertnr_Context_V23_t));
130 free(pAbayertnrCtx);
131
132 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
133 return ABAYERTNRV23_RET_SUCCESS;
134 }
135
136 //anr config
Abayertnr_Prepare_V23(Abayertnr_Context_V23_t * pAbayertnrCtx,Abayertnr_Config_V23_t * pAbayertnrConfig)137 Abayertnr_result_V23_t Abayertnr_Prepare_V23(Abayertnr_Context_V23_t *pAbayertnrCtx, Abayertnr_Config_V23_t* pAbayertnrConfig)
138 {
139 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
140
141 if(pAbayertnrCtx == NULL || pAbayertnrConfig == NULL) {
142 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
143 return ABAYERTNRV23_RET_INVALID_PARM;
144 }
145
146 if(!!(pAbayertnrCtx->prepare_type & RK_AIQ_ALGO_CONFTYPE_UPDATECALIB)) {
147 Abayertnr_IQParaUpdate_V23(pAbayertnrCtx);
148 }
149
150 Abayertnr_Start_V23(pAbayertnrCtx);
151
152 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
153 return ABAYERTNRV23_RET_SUCCESS;
154 }
155
156 //anr reconfig
Abayertnr_ReConfig_V23(Abayertnr_Context_V23_t * pAbayertnrCtx,Abayertnr_Config_V23_t * pAbayertnrConfig)157 Abayertnr_result_V23_t Abayertnr_ReConfig_V23(Abayertnr_Context_V23_t *pAbayertnrCtx, Abayertnr_Config_V23_t* pAbayertnrConfig)
158 {
159 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
160 //need todo what?
161
162 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
163 return ABAYERTNRV23_RET_SUCCESS;
164 }
165
166 //anr reconfig
Abayertnr_IQParaUpdate_V23(Abayertnr_Context_V23_t * pAbayertnrCtx)167 Abayertnr_result_V23_t Abayertnr_IQParaUpdate_V23(Abayertnr_Context_V23_t *pAbayertnrCtx)
168 {
169 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
170 //need todo what?
171
172 if(pAbayertnrCtx->isIQParaUpdate) {
173 LOGD_ANR("IQ data reconfig\n");
174 Abayertnr_ConfigSettingParam_V23(pAbayertnrCtx, pAbayertnrCtx->eParamMode, pAbayertnrCtx->stExpInfo.snr_mode);
175 pAbayertnrCtx->isIQParaUpdate = false;
176 }
177
178 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
179 return ABAYERTNRV23_RET_SUCCESS;
180 }
181
182
183 //anr preprocess
Abayertnr_PreProcess_V23(Abayertnr_Context_V23_t * pAbayertnrCtx)184 Abayertnr_result_V23_t Abayertnr_PreProcess_V23(Abayertnr_Context_V23_t *pAbayertnrCtx)
185 {
186 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
187 //need todo what?
188
189 Abayertnr_IQParaUpdate_V23(pAbayertnrCtx);
190
191 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
192 return ABAYERTNRV23_RET_SUCCESS;
193 }
194
195 //anr process
Abayertnr_Process_V23(Abayertnr_Context_V23_t * pAbayertnrCtx,Abayertnr_ExpInfo_V23_t * pExpInfo)196 Abayertnr_result_V23_t Abayertnr_Process_V23(Abayertnr_Context_V23_t *pAbayertnrCtx, Abayertnr_ExpInfo_V23_t *pExpInfo)
197 {
198 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
199 Abayertnr_ParamMode_V23_t mode = ABAYERTNRV23_PARAM_MODE_INVALID;
200
201 if(pAbayertnrCtx == NULL || pExpInfo == NULL) {
202 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
203 return ABAYERTNRV23_RET_INVALID_PARM;
204 }
205
206 if(pAbayertnrCtx->eState != ABAYERTNRV23_STATE_RUNNING) {
207 return ABAYERTNRV23_RET_SUCCESS;
208 }
209
210 Abayertnr_ParamModeProcess_V23(pAbayertnrCtx, pExpInfo, &mode);
211
212 if(pAbayertnrCtx->eMode == ABAYERTNRV23_OP_MODE_AUTO) {
213
214 LOGD_ANR("%s(%d): \n", __FUNCTION__, __LINE__);
215
216 #if ABAYERTNR_USE_XML_FILE_V23
217 if(pExpInfo->snr_mode != pAbayertnrCtx->stExpInfo.snr_mode || pAbayertnrCtx->eParamMode != mode) {
218 LOGD_ANR("param mode:%d snr_mode:%d\n", mode, pExpInfo->snr_mode);
219 pAbayertnrCtx->eParamMode = mode;
220 Abayertnr_ConfigSettingParam_V23(pAbayertnrCtx, pAbayertnrCtx->eParamMode, pExpInfo->snr_mode);
221 }
222 #endif
223
224 //select param
225 bayertnr_select_params_by_ISO_V23(&pAbayertnrCtx->stAuto.st3DParams, &pAbayertnrCtx->stAuto.st3DSelect, pExpInfo);
226
227 } else if(pAbayertnrCtx->eMode == ABAYERTNRV23_OP_MODE_MANUAL) {
228 //TODO
229 }
230
231 memcpy(&pAbayertnrCtx->stExpInfo, pExpInfo, sizeof(Abayertnr_ExpInfo_V23_t));
232
233 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
234 return ABAYERTNRV23_RET_SUCCESS;
235
236 }
237
238
239
240 //anr get result
Abayertnr_GetProcResult_V23(Abayertnr_Context_V23_t * pAbayertnrCtx,Abayertnr_ProcResult_V23_t * pAbayertnrResult)241 Abayertnr_result_V23_t Abayertnr_GetProcResult_V23(Abayertnr_Context_V23_t *pAbayertnrCtx, Abayertnr_ProcResult_V23_t* pAbayertnrResult)
242 {
243 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
244
245 if(pAbayertnrCtx == NULL || pAbayertnrResult == NULL) {
246 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
247 return ABAYERTNRV23_RET_INVALID_PARM;
248 }
249
250
251 #if (RKAIQ_HAVE_BAYERTNR_V23)
252 RK_Bayertnr_Params_V23_Select_t* st3DSelect = NULL;
253 #else
254 RK_Bayertnr_Param_V23L_Select_t* st3DSelect = NULL;
255 #endif
256 if(pAbayertnrCtx->eMode == ABAYERTNRV23_OP_MODE_AUTO) {
257 st3DSelect = &pAbayertnrCtx->stAuto.st3DSelect;
258
259 } else if(pAbayertnrCtx->eMode == ABAYERTNRV23_OP_MODE_MANUAL) {
260 //TODO
261 st3DSelect = &pAbayertnrCtx->stManual.st3DSelect;
262 }
263
264 //transfer to reg value
265 bayertnr_fix_transfer_V23(st3DSelect, pAbayertnrResult->st3DFix, &pAbayertnrCtx->stStrength, &pAbayertnrCtx->stExpInfo);
266
267 if(pAbayertnrCtx->eMode == ABAYERTNRV23_OP_MODE_REG_MANUAL) {
268 *pAbayertnrResult->st3DFix = pAbayertnrCtx->stManual.st3DFix;
269 pAbayertnrCtx->stStrength.percent = 1.0;
270 }
271
272 LOGD_ANR("%s:%d abayertnr eMode:%d bypass:%d iso:%d fstrength:%f\n",
273 __FUNCTION__, __LINE__,
274 pAbayertnrCtx->eMode,
275 pAbayertnrResult->st3DFix->bypass_en,
276 pAbayertnrCtx->stExpInfo.arIso[pAbayertnrCtx->stExpInfo.hdr_mode],
277 pAbayertnrCtx->stStrength.percent);
278
279 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
280 return ABAYERTNRV23_RET_SUCCESS;
281 }
282
Abayertnr_ConfigSettingParam_V23(Abayertnr_Context_V23_t * pAbayertnrCtx,Abayertnr_ParamMode_V23_t eParamMode,int snr_mode)283 Abayertnr_result_V23_t Abayertnr_ConfigSettingParam_V23(Abayertnr_Context_V23_t *pAbayertnrCtx, Abayertnr_ParamMode_V23_t eParamMode, int snr_mode)
284 {
285 char snr_name[CALIBDB_NR_SHARP_NAME_LENGTH];
286 char param_mode_name[CALIBDB_MAX_MODE_NAME_LENGTH];
287 memset(param_mode_name, 0x00, sizeof(param_mode_name));
288 memset(snr_name, 0x00, sizeof(snr_name));
289
290 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
291 if(pAbayertnrCtx == NULL) {
292 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
293 return ABAYERTNRV23_RET_INVALID_PARM;
294 }
295
296 //select param mode first
297 if(eParamMode == ABAYERTNRV23_PARAM_MODE_NORMAL) {
298 sprintf(param_mode_name, "%s", "normal");
299 } else if(eParamMode == ABAYERTNRV23_PARAM_MODE_HDR) {
300 sprintf(param_mode_name, "%s", "hdr");
301 } else if(eParamMode == ABAYERTNRV23_PARAM_MODE_GRAY) {
302 sprintf(param_mode_name, "%s", "gray");
303 } else {
304 LOGE_ANR("%s(%d): not support param mode!\n", __FUNCTION__, __LINE__);
305 sprintf(param_mode_name, "%s", "normal");
306 }
307
308 //then select snr mode next
309 if(snr_mode == 1) {
310 sprintf(snr_name, "%s", "HSNR");
311 } else if(snr_mode == 0) {
312 sprintf(snr_name, "%s", "LSNR");
313 } else {
314 LOGE_ANR("%s(%d): not support snr mode:%d!\n", __FUNCTION__, __LINE__, snr_mode);
315 sprintf(snr_name, "%s", "LSNR");
316 }
317
318 #if (ABAYERTNR_USE_JSON_FILE_V23)
319 bayertnr_config_setting_param_json_V23(&pAbayertnrCtx->stAuto.st3DParams, &pAbayertnrCtx->bayertnr_v23, param_mode_name, snr_name);
320 #endif
321 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
322 return ABAYERTNRV23_RET_SUCCESS;
323 }
324
Abayertnr_ParamModeProcess_V23(Abayertnr_Context_V23_t * pAbayertnrCtx,Abayertnr_ExpInfo_V23_t * pExpInfo,Abayertnr_ParamMode_V23_t * mode)325 Abayertnr_result_V23_t Abayertnr_ParamModeProcess_V23(Abayertnr_Context_V23_t *pAbayertnrCtx, Abayertnr_ExpInfo_V23_t *pExpInfo, Abayertnr_ParamMode_V23_t *mode) {
326 Abayertnr_result_V23_t res = ABAYERTNRV23_RET_SUCCESS;
327 *mode = pAbayertnrCtx->eParamMode;
328
329 if(pAbayertnrCtx == NULL) {
330 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
331 return ABAYERTNRV23_RET_INVALID_PARM;
332 }
333
334 if(pAbayertnrCtx->isGrayMode) {
335 *mode = ABAYERTNRV23_PARAM_MODE_GRAY;
336 } else if(pExpInfo->hdr_mode == 0) {
337 *mode = ABAYERTNRV23_PARAM_MODE_NORMAL;
338 } else if(pExpInfo->hdr_mode >= 1) {
339 *mode = ABAYERTNRV23_PARAM_MODE_HDR;
340 } else {
341 *mode = ABAYERTNRV23_PARAM_MODE_NORMAL;
342 }
343
344 return res;
345 }
346
347
348 RKAIQ_END_DECLARE
349
350
351