xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/abayertnr2/rk_aiq_abayertnr_algo_v2.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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