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