1
2 #include "rk_aiq_abayertnr_algo_v2.h"
3 #include "rk_aiq_abayertnr_algo_itf_v2.h"
4
5 RKAIQ_BEGIN_DECLARE
6
Abayertnr_Start_V2(Abayertnr_Context_V2_t * pAbayertnrCtx)7 Abayertnr_result_V2_t Abayertnr_Start_V2(Abayertnr_Context_V2_t *pAbayertnrCtx)
8 {
9 LOGI_ANR( "%s:enter!\n", __FUNCTION__);
10
11 // initial checks
12 if (pAbayertnrCtx == NULL) {
13 return (ABAYERTNRV2_RET_NULL_POINTER);
14 }
15
16 if ((ABAYERTNRV2_STATE_RUNNING == pAbayertnrCtx->eState)
17 || (ABAYERTNRV2_STATE_LOCKED == pAbayertnrCtx->eState)) {
18 return (ABAYERTNRV2_RET_FAILURE);
19 }
20
21 pAbayertnrCtx->eState = ABAYERTNRV2_STATE_RUNNING;
22
23 LOGI_ANR( "%s:exit!\n", __FUNCTION__);
24 return (ABAYERTNRV2_RET_SUCCESS);
25 }
26
27
Abayertnr_Stop_V2(Abayertnr_Context_V2_t * pAbayertnrCtx)28 Abayertnr_result_V2_t Abayertnr_Stop_V2(Abayertnr_Context_V2_t *pAbayertnrCtx)
29 {
30 LOGI_ANR( "%s:enter!\n", __FUNCTION__);
31
32 // initial checks
33 if (pAbayertnrCtx == NULL) {
34 return (ABAYERTNRV2_RET_NULL_POINTER);
35 }
36
37 if (ABAYERTNRV2_STATE_LOCKED == pAbayertnrCtx->eState) {
38 return (ABAYERTNRV2_RET_FAILURE);
39 }
40
41 pAbayertnrCtx->eState = ABAYERTNRV2_STATE_STOPPED;
42
43 LOGI_ANR( "%s:exit!\n", __FUNCTION__);
44 return (ABAYERTNRV2_RET_SUCCESS);
45 }
46
47
48 //anr inint
Abayertnr_Init_V2(Abayertnr_Context_V2_t ** ppAbayertnrCtx,void * pCalibDb)49 Abayertnr_result_V2_t Abayertnr_Init_V2(Abayertnr_Context_V2_t **ppAbayertnrCtx, void *pCalibDb)
50 {
51 Abayertnr_Context_V2_t * pAbayertnrCtx;
52
53 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
54
55 pAbayertnrCtx = (Abayertnr_Context_V2_t *)malloc(sizeof(Abayertnr_Context_V2_t));
56 if(pAbayertnrCtx == NULL) {
57 LOGE_ANR("%s(%d): malloc fail\n", __FUNCTION__, __LINE__);
58 return ABAYERTNRV2_RET_NULL_POINTER;
59 }
60
61 memset(pAbayertnrCtx, 0x00, sizeof(Abayertnr_Context_V2_t));
62
63 //gain state init
64 pAbayertnrCtx->stStrength.strength_enable = false;
65 pAbayertnrCtx->stStrength.percent = 1.0;
66
67 pAbayertnrCtx->eState = ABAYERTNRV2_STATE_INITIALIZED;
68 *ppAbayertnrCtx = pAbayertnrCtx;
69
70 pAbayertnrCtx->eMode = ABAYERTNRV2_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_V2)
77 CalibDbV2_BayerTnrV2_t * pcalibdbV2_bayertnr_v2 =
78 (CalibDbV2_BayerTnrV2_t *)(CALIBDBV2_GET_MODULE_PTR((CamCalibDbV2Context_t*)pCalibDb, bayertnr_v2));
79 pAbayertnrCtx->bayertnr_v2 = *pcalibdbV2_bayertnr_v2;
80 #endif
81
82
83 #if RK_SIMULATOR_HW
84 //just for v2 params from html
85
86 #endif
87
88 #if 1
89 pAbayertnrCtx->stExpInfo.snr_mode = 1;
90 pAbayertnrCtx->eParamMode = ABAYERTNRV2_PARAM_MODE_NORMAL;
91 Abayertnr_ConfigSettingParam_V2(pAbayertnrCtx, pAbayertnrCtx->eParamMode, pAbayertnrCtx->stExpInfo.snr_mode);
92 #endif
93
94 LOGD_ANR("%s(%d):", __FUNCTION__, __LINE__);
95
96
97 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
98 return ABAYERTNRV2_RET_SUCCESS;
99 }
100
101 //anr release
Abayertnr_Release_V2(Abayertnr_Context_V2_t * pAbayertnrCtx)102 Abayertnr_result_V2_t Abayertnr_Release_V2(Abayertnr_Context_V2_t *pAbayertnrCtx)
103 {
104 Abayertnr_result_V2_t result = ABAYERTNRV2_RET_SUCCESS;
105 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
106 if(pAbayertnrCtx == NULL) {
107 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
108 return ABAYERTNRV2_RET_NULL_POINTER;
109 }
110
111 result = Abayertnr_Stop_V2(pAbayertnrCtx);
112 if (result != ABAYERTNRV2_RET_SUCCESS) {
113 LOGE_ANR( "%s: ANRStop() failed!\n", __FUNCTION__);
114 return (result);
115 }
116
117 // check state
118 if ((ABAYERTNRV2_STATE_RUNNING == pAbayertnrCtx->eState)
119 || (ABAYERTNRV2_STATE_LOCKED == pAbayertnrCtx->eState)) {
120 return (ABAYERTNRV2_RET_BUSY);
121 }
122
123 memset(pAbayertnrCtx, 0x00, sizeof(Abayertnr_Context_V2_t));
124 free(pAbayertnrCtx);
125
126 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
127 return ABAYERTNRV2_RET_SUCCESS;
128 }
129
130 //anr config
Abayertnr_Prepare_V2(Abayertnr_Context_V2_t * pAbayertnrCtx,Abayertnr_Config_V2_t * pAbayertnrConfig)131 Abayertnr_result_V2_t Abayertnr_Prepare_V2(Abayertnr_Context_V2_t *pAbayertnrCtx, Abayertnr_Config_V2_t* pAbayertnrConfig)
132 {
133 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
134
135 if(pAbayertnrCtx == NULL || pAbayertnrConfig == NULL) {
136 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
137 return ABAYERTNRV2_RET_INVALID_PARM;
138 }
139
140 if(!!(pAbayertnrCtx->prepare_type & RK_AIQ_ALGO_CONFTYPE_UPDATECALIB)) {
141 Abayertnr_IQParaUpdate_V2(pAbayertnrCtx);
142 }
143
144 Abayertnr_Start_V2(pAbayertnrCtx);
145
146 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
147 return ABAYERTNRV2_RET_SUCCESS;
148 }
149
150 //anr reconfig
Abayertnr_ReConfig_V2(Abayertnr_Context_V2_t * pAbayertnrCtx,Abayertnr_Config_V2_t * pAbayertnrConfig)151 Abayertnr_result_V2_t Abayertnr_ReConfig_V2(Abayertnr_Context_V2_t *pAbayertnrCtx, Abayertnr_Config_V2_t* pAbayertnrConfig)
152 {
153 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
154 //need todo what?
155
156 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
157 return ABAYERTNRV2_RET_SUCCESS;
158 }
159
160 //anr reconfig
Abayertnr_IQParaUpdate_V2(Abayertnr_Context_V2_t * pAbayertnrCtx)161 Abayertnr_result_V2_t Abayertnr_IQParaUpdate_V2(Abayertnr_Context_V2_t *pAbayertnrCtx)
162 {
163 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
164 //need todo what?
165
166 if(pAbayertnrCtx->isIQParaUpdate) {
167 LOGD_ANR("IQ data reconfig\n");
168 Abayertnr_ConfigSettingParam_V2(pAbayertnrCtx, pAbayertnrCtx->eParamMode, pAbayertnrCtx->stExpInfo.snr_mode);
169 pAbayertnrCtx->isIQParaUpdate = false;
170 }
171
172 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
173 return ABAYERTNRV2_RET_SUCCESS;
174 }
175
176
177 //anr preprocess
Abayertnr_PreProcess_V2(Abayertnr_Context_V2_t * pAbayertnrCtx)178 Abayertnr_result_V2_t Abayertnr_PreProcess_V2(Abayertnr_Context_V2_t *pAbayertnrCtx)
179 {
180 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
181 //need todo what?
182
183 Abayertnr_IQParaUpdate_V2(pAbayertnrCtx);
184
185 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
186 return ABAYERTNRV2_RET_SUCCESS;
187 }
188
189 //anr process
Abayertnr_Process_V2(Abayertnr_Context_V2_t * pAbayertnrCtx,Abayertnr_ExpInfo_V2_t * pExpInfo)190 Abayertnr_result_V2_t Abayertnr_Process_V2(Abayertnr_Context_V2_t *pAbayertnrCtx, Abayertnr_ExpInfo_V2_t *pExpInfo)
191 {
192 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
193 Abayertnr_ParamMode_V2_t mode = ABAYERTNRV2_PARAM_MODE_INVALID;
194
195 if(pAbayertnrCtx == NULL || pExpInfo == NULL) {
196 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
197 return ABAYERTNRV2_RET_INVALID_PARM;
198 }
199
200 if(pAbayertnrCtx->eState != ABAYERTNRV2_STATE_RUNNING) {
201 return ABAYERTNRV2_RET_SUCCESS;
202 }
203
204 Abayertnr_ParamModeProcess_V2(pAbayertnrCtx, pExpInfo, &mode);
205
206 if(pAbayertnrCtx->eMode == ABAYERTNRV2_OP_MODE_AUTO) {
207
208 LOGD_ANR("%s(%d): \n", __FUNCTION__, __LINE__);
209
210 #if ABAYERTNR_USE_XML_FILE_V2
211 if(pExpInfo->snr_mode != pAbayertnrCtx->stExpInfo.snr_mode || pAbayertnrCtx->eParamMode != mode) {
212 LOGD_ANR("param mode:%d snr_mode:%d\n", mode, pExpInfo->snr_mode);
213 pAbayertnrCtx->eParamMode = mode;
214 Abayertnr_ConfigSettingParam_V2(pAbayertnrCtx, pAbayertnrCtx->eParamMode, pExpInfo->snr_mode);
215 }
216 #endif
217
218 //select param
219 bayertnr_select_params_by_ISO_V2(&pAbayertnrCtx->stAuto.st3DParams, &pAbayertnrCtx->stAuto.st3DSelect, pExpInfo);
220
221 } else if(pAbayertnrCtx->eMode == ABAYERTNRV2_OP_MODE_MANUAL) {
222 //TODO
223 }
224
225 memcpy(&pAbayertnrCtx->stExpInfo, pExpInfo, sizeof(Abayertnr_ExpInfo_V2_t));
226
227 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
228 return ABAYERTNRV2_RET_SUCCESS;
229
230 }
231
232
233
234 //anr get result
Abayertnr_GetProcResult_V2(Abayertnr_Context_V2_t * pAbayertnrCtx,Abayertnr_ProcResult_V2_t * pAbayertnrResult)235 Abayertnr_result_V2_t Abayertnr_GetProcResult_V2(Abayertnr_Context_V2_t *pAbayertnrCtx, Abayertnr_ProcResult_V2_t* pAbayertnrResult)
236 {
237 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
238
239 if(pAbayertnrCtx == NULL || pAbayertnrResult == NULL) {
240 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
241 return ABAYERTNRV2_RET_INVALID_PARM;
242 }
243
244 RK_Bayertnr_Params_V2_Select_t* st3DSelect = NULL;
245 if(pAbayertnrCtx->eMode == ABAYERTNRV2_OP_MODE_AUTO) {
246 st3DSelect = &pAbayertnrCtx->stAuto.st3DSelect;
247
248 } else if(pAbayertnrCtx->eMode == ABAYERTNRV2_OP_MODE_MANUAL) {
249 //TODO
250 st3DSelect = &pAbayertnrCtx->stManual.st3DSelect;
251 }
252
253 //transfer to reg value
254 bayertnr_fix_transfer_V2(st3DSelect, pAbayertnrResult->st3DFix, &pAbayertnrCtx->stStrength, &pAbayertnrCtx->stExpInfo);
255
256 if(pAbayertnrCtx->eMode == ABAYERTNRV2_OP_MODE_REG_MANUAL) {
257 *pAbayertnrResult->st3DFix = pAbayertnrCtx->stManual.st3DFix;
258 pAbayertnrCtx->stStrength.strength_enable = false;
259 pAbayertnrCtx->stStrength.percent = 1.0;
260 }
261
262
263 LOGD_ANR("%s:%d abayertnr eMode:%d bypass:%d iso:%d fstrength:%f\n",
264 __FUNCTION__, __LINE__,
265 pAbayertnrCtx->eMode,
266 pAbayertnrResult->st3DFix->bay3d_bypass_en,
267 pAbayertnrCtx->stExpInfo.arIso[pAbayertnrCtx->stExpInfo.hdr_mode],
268 pAbayertnrCtx->stStrength.percent);
269
270 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
271 return ABAYERTNRV2_RET_SUCCESS;
272 }
273
Abayertnr_ConfigSettingParam_V2(Abayertnr_Context_V2_t * pAbayertnrCtx,Abayertnr_ParamMode_V2_t eParamMode,int snr_mode)274 Abayertnr_result_V2_t Abayertnr_ConfigSettingParam_V2(Abayertnr_Context_V2_t *pAbayertnrCtx, Abayertnr_ParamMode_V2_t eParamMode, int snr_mode)
275 {
276 char snr_name[CALIBDB_NR_SHARP_NAME_LENGTH];
277 char param_mode_name[CALIBDB_MAX_MODE_NAME_LENGTH];
278 memset(param_mode_name, 0x00, sizeof(param_mode_name));
279 memset(snr_name, 0x00, sizeof(snr_name));
280
281 LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
282 if(pAbayertnrCtx == NULL) {
283 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
284 return ABAYERTNRV2_RET_INVALID_PARM;
285 }
286
287 //select param mode first
288 if(eParamMode == ABAYERTNRV2_PARAM_MODE_NORMAL) {
289 sprintf(param_mode_name, "%s", "normal");
290 } else if(eParamMode == ABAYERTNRV2_PARAM_MODE_HDR) {
291 sprintf(param_mode_name, "%s", "hdr");
292 } else if(eParamMode == ABAYERTNRV2_PARAM_MODE_GRAY) {
293 sprintf(param_mode_name, "%s", "gray");
294 } else {
295 LOGE_ANR("%s(%d): not support param mode!\n", __FUNCTION__, __LINE__);
296 sprintf(param_mode_name, "%s", "normal");
297 }
298
299 //then select snr mode next
300 if(snr_mode == 1) {
301 sprintf(snr_name, "%s", "HSNR");
302 } else if(snr_mode == 0) {
303 sprintf(snr_name, "%s", "LSNR");
304 } else {
305 LOGE_ANR("%s(%d): not support snr mode:%d!\n", __FUNCTION__, __LINE__, snr_mode);
306 sprintf(snr_name, "%s", "LSNR");
307 }
308
309 #if (ABAYERTNR_USE_JSON_FILE_V2)
310 bayertnr_config_setting_param_json_V2(&pAbayertnrCtx->stAuto.st3DParams, &pAbayertnrCtx->bayertnr_v2, param_mode_name, snr_name);
311 #endif
312 LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
313 return ABAYERTNRV2_RET_SUCCESS;
314 }
315
Abayertnr_ParamModeProcess_V2(Abayertnr_Context_V2_t * pAbayertnrCtx,Abayertnr_ExpInfo_V2_t * pExpInfo,Abayertnr_ParamMode_V2_t * mode)316 Abayertnr_result_V2_t Abayertnr_ParamModeProcess_V2(Abayertnr_Context_V2_t *pAbayertnrCtx, Abayertnr_ExpInfo_V2_t *pExpInfo, Abayertnr_ParamMode_V2_t *mode) {
317 Abayertnr_result_V2_t res = ABAYERTNRV2_RET_SUCCESS;
318 *mode = pAbayertnrCtx->eParamMode;
319
320 if(pAbayertnrCtx == NULL) {
321 LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
322 return ABAYERTNRV2_RET_INVALID_PARM;
323 }
324
325 if(pAbayertnrCtx->isGrayMode) {
326 *mode = ABAYERTNRV2_PARAM_MODE_GRAY;
327 } else if(pExpInfo->hdr_mode == 0) {
328 *mode = ABAYERTNRV2_PARAM_MODE_NORMAL;
329 } else if(pExpInfo->hdr_mode >= 1) {
330 *mode = ABAYERTNRV2_PARAM_MODE_HDR;
331 } else {
332 *mode = ABAYERTNRV2_PARAM_MODE_NORMAL;
333 }
334
335 return res;
336 }
337
338
339 RKAIQ_END_DECLARE
340
341
342