xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/asharp/rk_aiq_asharp_algo.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 
2 #include "rk_aiq_asharp_algo.h"
3 #include "rk_aiq_algo_asharp_itf.h"
4 
5 RKAIQ_BEGIN_DECLARE
6 
AsharpStart(AsharpContext_t * pAsharpCtx)7 AsharpResult_t AsharpStart(AsharpContext_t *pAsharpCtx)
8 {
9     LOGI_ANR( "%s:enter!\n", __FUNCTION__);
10 
11     // initial checks
12     if (pAsharpCtx == NULL) {
13         return (ASHARP_RET_NULL_POINTER);
14     }
15 
16     if ((ASHARP_STATE_RUNNING == pAsharpCtx->eState)
17             || (ASHARP_STATE_LOCKED == pAsharpCtx->eState)) {
18         return (ASHARP_RET_FAILURE);
19     }
20 
21     pAsharpCtx->eState = ASHARP_STATE_RUNNING;
22 
23     LOGI_ANR( "%s:exit!\n", __FUNCTION__);
24     return (ASHARP_RET_SUCCESS);
25 }
26 
27 
AsharpStop(AsharpContext_t * pAsharpCtx)28 AsharpResult_t AsharpStop(AsharpContext_t *pAsharpCtx)
29 {
30     LOGI_ANR( "%s:enter!\n", __FUNCTION__);
31 
32     // initial checks
33     if (pAsharpCtx == NULL) {
34         return (ASHARP_RET_NULL_POINTER);
35     }
36 
37     if (ASHARP_STATE_LOCKED == pAsharpCtx->eState) {
38         return (ASHARP_RET_FAILURE);
39     }
40 
41     pAsharpCtx->eState = ASHARP_STATE_STOPPED;
42 
43     LOGI_ANR( "%s:exit!\n", __FUNCTION__);
44     return (ASHARP_RET_SUCCESS);
45 }
46 
47 //anr reconfig
AsharpIQParaUpdate(AsharpContext_t * pAsharpCtx)48 AsharpResult_t AsharpIQParaUpdate(AsharpContext_t *pAsharpCtx)
49 {
50     LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
51     //need todo what?
52 
53 	if(pAsharpCtx->isIQParaUpdate){
54 		LOGD_ASHARP(" update iq para\n");
55 		#if(ASHARP_USE_JSON_PARA)
56 		ASharpConfigSettingParam_json(pAsharpCtx, pAsharpCtx->eParamMode, pAsharpCtx->stExpInfo.snr_mode);
57 		#else
58 		ASharpConfigSettingParam(pAsharpCtx, pAsharpCtx->eParamMode, pAsharpCtx->stExpInfo.snr_mode);
59 		#endif
60 		pAsharpCtx->isIQParaUpdate = false;
61 	}
62 
63     LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
64     return ASHARP_RET_SUCCESS;
65 }
66 
67 
AsharpInit(AsharpContext_t ** ppAsharpCtx,CamCalibDbContext_t * pCalibDb)68 AsharpResult_t AsharpInit(AsharpContext_t **ppAsharpCtx, CamCalibDbContext_t *pCalibDb)
69 {
70     AsharpContext_t * pAsharpCtx;
71 
72     LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
73 
74     pAsharpCtx = (AsharpContext_t *)malloc(sizeof(AsharpContext_t));
75     if(pAsharpCtx == NULL) {
76         LOGE_ASHARP("%s(%d): malloc fail\n", __FUNCTION__, __LINE__);
77         return ASHARP_RET_NULL_POINTER;
78     }
79 
80     memset(pAsharpCtx, 0x00, sizeof(AsharpContext_t));
81     pAsharpCtx->eState = ASHARP_STATE_INITIALIZED;
82     *ppAsharpCtx = pAsharpCtx;
83     pAsharpCtx->fStrength = 1.0;
84 
85     //init params config
86     pAsharpCtx->eMode = ASHARP_OP_MODE_AUTO;
87 
88 #if ASHARP_USE_XML_FILE
89     //get v1 params from xml file
90     pAsharpCtx->stSharpCalib =
91         *(CalibDb_Sharp_2_t*)(CALIBDB_GET_MODULE_PTR((void*)pCalibDb, sharp));
92     pAsharpCtx->stEdgeFltCalib =
93         *(CalibDb_EdgeFilter_2_t*)(CALIBDB_GET_MODULE_PTR((void*)pCalibDb, edgeFilter));
94 	pAsharpCtx->mfnr_mode_3to1 =
95         ((CalibDb_MFNR_2_t*)(CALIBDB_GET_MODULE_PTR((void*)pCalibDb, mfnr)))->mode_3to1;;
96 #endif
97 
98 #ifdef RK_SIMULATOR_HW
99     //get v2 params from html file
100     FILE *fp2 = fopen("rkaiq_asharp_html_params.bin", "rb");
101     if(fp2 != NULL) {
102         memset(&pAsharpCtx->stAuto.stSharpParam, 0, sizeof(RKAsharp_Sharp_Params_t));
103         fread(&pAsharpCtx->stAuto.stSharpParam, 1, sizeof(RKAsharp_Sharp_Params_t), fp2);
104         memset(&pAsharpCtx->stAuto.stEdgefilterParams, 0, sizeof(RKAsharp_EdgeFilter_Params_t));
105         fread(&pAsharpCtx->stAuto.stEdgefilterParams, 1, sizeof(RKAsharp_EdgeFilter_Params_t), fp2);
106         fclose(fp2);
107         LOGD_ASHARP("oyyf: %s:(%d) read sharp html param file sucess! \n", __FUNCTION__, __LINE__);
108     } else {
109         LOGE_ASHARP("oyyf: %s:(%d) read sharp html param file failed! \n", __FUNCTION__, __LINE__);
110         return ASHARP_RET_FAILURE;
111     }
112 #endif
113 
114 
115 #if ASHARP_USE_XML_FILE
116 	pAsharpCtx->stExpInfo.snr_mode = 0;
117 	pAsharpCtx->eParamMode = ASHARP_PARAM_MODE_NORMAL;
118 	ASharpConfigSettingParam(pAsharpCtx, pAsharpCtx->eParamMode, pAsharpCtx->stExpInfo.snr_mode);
119 #endif
120 
121     LOGD_ASHARP("%s(%d): sharp %f %f %f %f %f %f", __FUNCTION__, __LINE__,
122                 pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.hratio[0],
123                 pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.lratio[0],
124                 pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.H_ratio[0],
125                 pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.M_ratio[0],
126                 pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.hbf_gain[0],
127                 pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.hbf_ratio[0]);
128 
129     LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
130     return ASHARP_RET_SUCCESS;
131 }
132 
133 
134 
AsharpInit_json(AsharpContext_t ** ppAsharpCtx,CamCalibDbV2Context_t * pCalibDbV2)135 AsharpResult_t AsharpInit_json(AsharpContext_t **ppAsharpCtx, CamCalibDbV2Context_t *pCalibDbV2)
136 {
137     AsharpContext_t * pAsharpCtx;
138 
139     LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
140 
141     pAsharpCtx = (AsharpContext_t *)malloc(sizeof(AsharpContext_t));
142     if(pAsharpCtx == NULL) {
143         LOGE_ASHARP("%s(%d): malloc fail\n", __FUNCTION__, __LINE__);
144         return ASHARP_RET_NULL_POINTER;
145     }
146 
147     memset(pAsharpCtx, 0x00, sizeof(AsharpContext_t));
148     pAsharpCtx->eState = ASHARP_STATE_INITIALIZED;
149     *ppAsharpCtx = pAsharpCtx;
150     pAsharpCtx->fStrength = 1.0;
151 
152     //init params config
153     pAsharpCtx->eMode = ASHARP_OP_MODE_AUTO;
154 
155 #if ASHARP_USE_JSON_PARA
156     //get v1 params from xml file
157 
158 	CalibDbV2_SharpV1_t* calibv2_sharp_v1 =
159             (CalibDbV2_SharpV1_t*)(CALIBDBV2_GET_MODULE_PTR(pCalibDbV2, sharp_v1));
160 	sharp_calibdbV2_assign(&pAsharpCtx->sharp_v1, calibv2_sharp_v1);
161 
162 	CalibDbV2_Edgefilter_t* calibv2_edgefilter_v1 =
163             (CalibDbV2_Edgefilter_t*)(CALIBDBV2_GET_MODULE_PTR(pCalibDbV2, edgefilter_v1));
164 	edgefilter_calibdbV2_assign(&pAsharpCtx->edgefilter_v1, calibv2_edgefilter_v1);
165 
166 	CalibDbV2_MFNR_t* calibv2_mfnr_v1 =
167             (CalibDbV2_MFNR_t*)(CALIBDBV2_GET_MODULE_PTR(pCalibDbV2, mfnr_v1));
168     pAsharpCtx->mfnr_mode_3to1 = calibv2_mfnr_v1->TuningPara.mode_3to1;
169 #endif
170 
171 #ifdef RK_SIMULATOR_HW
172     //get v2 params from html file
173     FILE *fp2 = fopen("rkaiq_asharp_html_params.bin", "rb");
174     if(fp2 != NULL) {
175         memset(&pAsharpCtx->stAuto.stSharpParam, 0, sizeof(RKAsharp_Sharp_Params_t));
176         fread(&pAsharpCtx->stAuto.stSharpParam, 1, sizeof(RKAsharp_Sharp_Params_t), fp2);
177         memset(&pAsharpCtx->stAuto.stEdgefilterParams, 0, sizeof(RKAsharp_EdgeFilter_Params_t));
178         fread(&pAsharpCtx->stAuto.stEdgefilterParams, 1, sizeof(RKAsharp_EdgeFilter_Params_t), fp2);
179         fclose(fp2);
180         LOGD_ASHARP("oyyf: %s:(%d) read sharp html param file sucess! \n", __FUNCTION__, __LINE__);
181     } else {
182         LOGE_ASHARP("oyyf: %s:(%d) read sharp html param file failed! \n", __FUNCTION__, __LINE__);
183         return ASHARP_RET_FAILURE;
184     }
185 #endif
186 
187 
188 #if ASHARP_USE_JSON_PARA
189 	pAsharpCtx->stExpInfo.snr_mode = 0;
190 	pAsharpCtx->eParamMode = ASHARP_PARAM_MODE_NORMAL;
191 	ASharpConfigSettingParam_json(pAsharpCtx, pAsharpCtx->eParamMode, pAsharpCtx->stExpInfo.snr_mode);
192 #endif
193 
194     LOGD_ASHARP("%s(%d): sharp %f %f %f %f %f %f", __FUNCTION__, __LINE__,
195                 pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.hratio[0],
196                 pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.lratio[0],
197                 pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.H_ratio[0],
198                 pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.M_ratio[0],
199                 pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.hbf_gain[0],
200                 pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.hbf_ratio[0]);
201 
202     LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
203     return ASHARP_RET_SUCCESS;
204 }
205 
206 
207 //anr release
AsharpRelease(AsharpContext_t * pAsharpCtx)208 AsharpResult_t AsharpRelease(AsharpContext_t *pAsharpCtx)
209 {
210     LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
211 	AsharpResult_t result = ASHARP_RET_SUCCESS;
212 
213     if(pAsharpCtx == NULL) {
214         LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
215         return ASHARP_RET_NULL_POINTER;
216     }
217 
218 	result = AsharpStop(pAsharpCtx);
219     if (result != ASHARP_RET_SUCCESS) {
220         LOGE_ASHARP( "%s: AsharpStop() failed!\n", __FUNCTION__);
221         return (result);
222     }
223 
224     // check state
225     if ((ASHARP_STATE_RUNNING == pAsharpCtx->eState)
226             || (ASHARP_STATE_LOCKED == pAsharpCtx->eState)) {
227         return (ASHARP_RET_BUSY);
228     }
229 
230 	sharp_calibdbV2_free(&pAsharpCtx->sharp_v1);
231 	edgefilter_calibdbV2_free(&pAsharpCtx->edgefilter_v1);
232 
233     memset(pAsharpCtx, 0x00, sizeof(AsharpContext_t));
234     free(pAsharpCtx);
235 
236     LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
237     return ASHARP_RET_SUCCESS;
238 }
239 
240 //anr config
AsharpPrepare(AsharpContext_t * pAsharpCtx,AsharpConfig_t * pAsharpConfig)241 AsharpResult_t AsharpPrepare(AsharpContext_t *pAsharpCtx, AsharpConfig_t* pAsharpConfig)
242 {
243     LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
244 
245     if(pAsharpCtx == NULL) {
246         LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
247         return ASHARP_RET_INVALID_PARM;
248     }
249 
250     if(pAsharpConfig == NULL) {
251         LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
252         return ASHARP_RET_INVALID_PARM;
253     }
254 
255     //pAsharpCtx->eMode = pAsharpConfig->eMode;
256     //pAsharpCtx->eState = pAsharpConfig->eState;
257 	if(!!(pAsharpCtx->prepare_type & RK_AIQ_ALGO_CONFTYPE_UPDATECALIB)){
258 		AsharpIQParaUpdate(pAsharpCtx);
259 	}
260 
261 	AsharpStart(pAsharpCtx);
262 
263     LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
264     return ASHARP_RET_SUCCESS;
265 }
266 
267 //anr reconfig
AsharpReConfig(AsharpContext_t * pAsharpCtx,AsharpConfig_t * pAsharpConfig)268 AsharpResult_t AsharpReConfig(AsharpContext_t *pAsharpCtx, AsharpConfig_t* pAsharpConfig)
269 {
270     LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
271     //need todo what?
272 
273     LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
274     return ASHARP_RET_SUCCESS;
275 }
276 
277 
278 //anr preprocess
AsharpPreProcess(AsharpContext_t * pAsharpCtx)279 AsharpResult_t AsharpPreProcess(AsharpContext_t *pAsharpCtx)
280 {
281     LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
282     //need todo what?
283 
284 	AsharpIQParaUpdate(pAsharpCtx);
285 
286     LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
287     return ASHARP_RET_SUCCESS;
288 }
289 
290 //anr process
AsharpProcess(AsharpContext_t * pAsharpCtx,AsharpExpInfo_t * pExpInfo)291 AsharpResult_t AsharpProcess(AsharpContext_t *pAsharpCtx, AsharpExpInfo_t *pExpInfo)
292 {
293     LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
294 	AsharpParamMode_t mode = ASHARP_PARAM_MODE_INVALID;
295 
296     if(pAsharpCtx == NULL) {
297         LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
298         return ASHARP_RET_INVALID_PARM;
299     }
300 
301     if(pExpInfo == NULL) {
302         LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
303         return ASHARP_RET_INVALID_PARM;
304     }
305 
306 	if(pAsharpCtx->eState != ASHARP_STATE_RUNNING){
307         return ASHARP_RET_SUCCESS;
308 	}
309 
310 	AsharpParamModeProcess(pAsharpCtx, pExpInfo, &mode);
311 	pExpInfo->mfnr_mode_3to1 = pAsharpCtx->mfnr_mode_3to1;
312     if(pExpInfo->mfnr_mode_3to1){
313         pExpInfo->snr_mode = pExpInfo->pre_snr_mode;
314     }else{
315         pExpInfo->snr_mode = pExpInfo->cur_snr_mode;
316     }
317 
318 	#if ASHARP_USE_XML_FILE
319 	if(pExpInfo->snr_mode != pAsharpCtx->stExpInfo.snr_mode || pAsharpCtx->eParamMode != mode){
320 		LOGD_ASHARP(" sharp mode:%d snr_mode:%d\n", mode, pExpInfo->snr_mode);
321 		pAsharpCtx->eParamMode = mode;
322 		#if(ASHARP_USE_JSON_PARA)
323 		ASharpConfigSettingParam_json(pAsharpCtx, pAsharpCtx->eParamMode, pExpInfo->snr_mode);
324 		#else
325 		ASharpConfigSettingParam(pAsharpCtx, pAsharpCtx->eParamMode, pExpInfo->snr_mode);
326 		#endif
327 	}
328 	#endif
329     memcpy(&pAsharpCtx->stExpInfo, pExpInfo, sizeof(AsharpExpInfo_t));
330 
331     if(pAsharpCtx->eMode == ASHARP_OP_MODE_AUTO) {
332         //select param
333         select_sharpen_params_by_ISO(&pAsharpCtx->stAuto.stSharpParam, &pAsharpCtx->stAuto.stSharpParamSelect, pExpInfo);
334         select_edgefilter_params_by_ISO(&pAsharpCtx->stAuto.stEdgefilterParams, &pAsharpCtx->stAuto.stEdgefilterParamSelect, pExpInfo);
335     } else if(pAsharpCtx->eMode == ASHARP_OP_MODE_MANUAL) {
336         //TODO
337     }
338 
339     LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
340     return ASHARP_RET_SUCCESS;
341 
342 }
343 
344 //anr get result
AsharpGetProcResult(AsharpContext_t * pAsharpCtx,AsharpProcResult_t * pAsharpResult)345 AsharpResult_t AsharpGetProcResult(AsharpContext_t *pAsharpCtx, AsharpProcResult_t* pAsharpResult)
346 {
347     LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
348 
349     if(pAsharpCtx == NULL) {
350         LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
351         return ASHARP_RET_INVALID_PARM;
352     }
353 
354     if(pAsharpResult == NULL) {
355         LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
356         return ASHARP_RET_INVALID_PARM;
357     }
358 
359     if(pAsharpCtx->eMode == ASHARP_OP_MODE_AUTO) {
360         pAsharpResult->sharpEn = pAsharpCtx->stAuto.sharpEn;
361         pAsharpResult->edgeFltEn = pAsharpCtx->stAuto.edgeFltEn;
362         pAsharpResult->stSharpParamSelect = pAsharpCtx->stAuto.stSharpParamSelect;
363         pAsharpResult->stEdgefilterParamSelect = pAsharpCtx->stAuto.stEdgefilterParamSelect;
364 
365     } else if(pAsharpCtx->eMode == ASHARP_OP_MODE_MANUAL) {
366         //TODO
367         pAsharpResult->sharpEn = pAsharpCtx->stManual.sharpEn;
368         pAsharpResult->stSharpParamSelect = pAsharpCtx->stManual.stSharpParamSelect;
369         pAsharpResult->edgeFltEn = pAsharpCtx->stManual.edgeFltEn;
370         pAsharpResult->stEdgefilterParamSelect = pAsharpCtx->stManual.stEdgefilterParamSelect;
371 	  pAsharpCtx->fStrength = 1.0;
372     }
373 
374     rk_Sharp_fix_transfer(&pAsharpResult->stSharpParamSelect, &pAsharpResult->stSharpFix, pAsharpCtx->fStrength);
375     edgefilter_fix_transfer(&pAsharpResult->stEdgefilterParamSelect, &pAsharpResult->stEdgefltFix,  pAsharpCtx->fStrength);
376     pAsharpResult->stSharpFix.stSharpFixV1.sharp_en = pAsharpResult->sharpEn ;
377     pAsharpResult->stEdgefltFix.edgeflt_en = pAsharpResult->edgeFltEn;
378 #if ASHARP_FIX_VALUE_PRINTF
379     Asharp_fix_Printf(&pAsharpResult->stSharpFix.stSharpFixV1, &pAsharpResult->stEdgefltFix);
380 #endif
381 
382     LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
383     return ASHARP_RET_SUCCESS;
384 }
385 
Asharp_fix_Printf(RKAsharp_Sharp_HW_Fix_t * pSharpCfg,RKAsharp_Edgefilter_Fix_t * pEdgefltCfg)386 AsharpResult_t Asharp_fix_Printf(RKAsharp_Sharp_HW_Fix_t  * pSharpCfg, RKAsharp_Edgefilter_Fix_t *pEdgefltCfg)
387 {
388     LOGD_ASHARP("%s:(%d) enter \n", __FUNCTION__, __LINE__);
389     int i = 0;
390     AsharpResult_t res = ASHARP_RET_SUCCESS;
391 
392     if(pSharpCfg == NULL) {
393         LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
394         return ASHARP_RET_INVALID_PARM;
395     }
396 
397     if(pEdgefltCfg == NULL) {
398         LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
399         return ASHARP_RET_INVALID_PARM;
400     }
401 
402     //0x0080
403     LOGD_ASHARP("(0x0080) alpha_adp_en:%d yin_flt_en:%d edge_avg_en:%d\n",
404                 pEdgefltCfg->alpha_adp_en,
405                 pSharpCfg->yin_flt_en,
406                 pSharpCfg->edge_avg_en);
407 
408 
409     //0x0084
410     LOGD_ASHARP("(0x0084) hbf_ratio:%d ehf_th:%d pbf_ratio:%d\n",
411                 pSharpCfg->hbf_ratio,
412                 pSharpCfg->ehf_th,
413                 pSharpCfg->pbf_ratio);
414 
415     //0x0088
416     LOGD_ASHARP("(0x0088) edge_thed:%d dir_min:%d smoth_th4:%d\n",
417                 pEdgefltCfg->edge_thed,
418                 pEdgefltCfg->dir_min,
419                 pEdgefltCfg->smoth_th4);
420 
421     //0x008c
422     LOGD_ASHARP("(0x008c) l_alpha:%d g_alpha:%d \n",
423                 pEdgefltCfg->l_alpha,
424                 pEdgefltCfg->g_alpha);
425 
426 
427     //0x0090
428     for(i = 0; i < 3; i++) {
429         LOGD_ASHARP("(0x0090) pbf_k[%d]:%d  \n",
430                     i, pSharpCfg->pbf_k[i]);
431     }
432 
433 
434 
435     //0x0094 - 0x0098
436     for(i = 0; i < 6; i++) {
437         LOGD_ASHARP("(0x0094 - 0x0098) mrf_k[%d]:%d  \n",
438                     i, pSharpCfg->mrf_k[i]);
439     }
440 
441 
442     //0x009c -0x00a4
443     for(i = 0; i < 12; i++) {
444         LOGD_ASHARP("(0x009c -0x00a4) mbf_k[%d]:%d  \n",
445                     i, pSharpCfg->mbf_k[i]);
446     }
447 
448 
449     //0x00a8 -0x00ac
450     for(i = 0; i < 6; i++) {
451         LOGD_ASHARP("(0x00a8 -0x00ac) hrf_k[%d]:%d  \n",
452                     i, pSharpCfg->hrf_k[i]);
453     }
454 
455 
456     //0x00b0
457     for(i = 0; i < 3; i++) {
458         LOGD_ASHARP("(0x00b0) hbf_k[%d]:%d  \n",
459                     i, pSharpCfg->hbf_k[i]);
460     }
461 
462 
463     //0x00b4
464     for(i = 0; i < 3; i++) {
465         LOGD_ASHARP("(0x00b4) eg_coef[%d]:%d  \n",
466                     i, pEdgefltCfg->eg_coef[i]);
467     }
468 
469     //0x00b8
470     for(i = 0; i < 3; i++) {
471         LOGD_ASHARP("(0x00b8) eg_smoth[%d]:%d  \n",
472                     i, pEdgefltCfg->eg_smoth[i]);
473     }
474 
475 
476     //0x00bc - 0x00c0
477     for(i = 0; i < 6; i++) {
478         LOGD_ASHARP("(0x00bc - 0x00c0) eg_gaus[%d]:%d  \n",
479                     i, pEdgefltCfg->eg_gaus[i]);
480     }
481 
482 
483     //0x00c4 - 0x00c8
484     for(i = 0; i < 6; i++) {
485         LOGD_ASHARP("(0x00c4 - 0x00c8) dog_k[%d]:%d  \n",
486                     i, pEdgefltCfg->dog_k[i]);
487     }
488 
489 
490     //0x00cc - 0x00d0
491     for(i = 0; i < 6; i++) {
492         LOGD_ASHARP("(0x00cc - 0x00d0) lum_point[%d]:%d  \n",
493                     i, pSharpCfg->lum_point[i]);
494     }
495 
496     //0x00d4
497     LOGD_ASHARP("(0x00d4) pbf_shf_bits:%d  mbf_shf_bits:%d hbf_shf_bits:%d\n",
498                 pSharpCfg->pbf_shf_bits,
499                 pSharpCfg->mbf_shf_bits,
500                 pSharpCfg->hbf_shf_bits);
501 
502 
503     //0x00d8 - 0x00dc
504     for(i = 0; i < 8; i++) {
505         LOGD_ASHARP("(0x00d8 - 0x00dc) pbf_sigma[%d]:%d  \n",
506                     i, pSharpCfg->pbf_sigma[i]);
507     }
508 
509     //0x00e0 - 0x00e4
510     for(i = 0; i < 8; i++) {
511         LOGD_ASHARP("(0x00e0 - 0x00e4) lum_clp_m[%d]:%d  \n",
512                     i, pSharpCfg->lum_clp_m[i]);
513     }
514 
515     //0x00e8 - 0x00ec
516     for(i = 0; i < 8; i++) {
517         LOGD_ASHARP("(0x00e8 - 0x00ec) lum_min_m[%d]:%d  \n",
518                     i, pSharpCfg->lum_min_m[i]);
519     }
520 
521     //0x00f0 - 0x00f4
522     for(i = 0; i < 8; i++) {
523         LOGD_ASHARP("(0x00f0 - 0x00f4) mbf_sigma[%d]:%d  \n",
524                     i, pSharpCfg->mbf_sigma[i]);
525     }
526 
527     //0x00f8 - 0x00fc
528     for(i = 0; i < 8; i++) {
529         LOGD_ASHARP("(0x00f8 - 0x00fc) lum_clp_h[%d]:%d  \n",
530                     i, pSharpCfg->lum_clp_h[i]);
531     }
532 
533     //0x0100 - 0x0104
534     for(i = 0; i < 8; i++) {
535         LOGD_ASHARP("(0x0100 - 0x0104) hbf_sigma[%d]:%d  \n",
536                     i, pSharpCfg->hbf_sigma[i]);
537     }
538 
539     //0x0108 - 0x010c
540     for(i = 0; i < 8; i++) {
541         LOGD_ASHARP("(0x0108 - 0x010c) edge_lum_thed[%d]:%d  \n",
542                     i, pEdgefltCfg->edge_lum_thed[i]);
543     }
544 
545     //0x0110 - 0x0114
546     for(i = 0; i < 8; i++) {
547         LOGD_ASHARP("(0x0110 - 0x0114) clamp_pos[%d]:%d  \n",
548                     i, pEdgefltCfg->clamp_pos[i]);
549     }
550 
551     //0x0118 - 0x011c
552     for(i = 0; i < 8; i++) {
553         LOGD_ASHARP("(0x0118 - 0x011c) clamp_neg[%d]:%d  \n",
554                     i, pEdgefltCfg->clamp_neg[i]);
555     }
556 
557     //0x0120 - 0x0124
558     for(i = 0; i < 8; i++) {
559         LOGD_ASHARP("(0x0120 - 0x0124) detail_alpha[%d]:%d  \n",
560                     i, pEdgefltCfg->detail_alpha[i]);
561     }
562 
563     //0x0128
564     LOGD_ASHARP("(0x0128) rfl_ratio:%d  rfh_ratio:%d\n",
565                 pSharpCfg->rfl_ratio, pSharpCfg->rfh_ratio);
566 
567     // mf/hf ratio
568 
569     //0x012C
570     LOGD_ASHARP("(0x012C) m_ratio:%d  h_ratio:%d\n",
571                 pSharpCfg->m_ratio, pSharpCfg->h_ratio);
572 
573     LOGD_ASHARP("%s:(%d) exit \n", __FUNCTION__, __LINE__);
574 
575     return res;
576 }
577 
ASharpConfigSettingParam(AsharpContext_t * pAsharpCtx,AsharpParamMode_t param_mode,int snr_mode)578 AsharpResult_t ASharpConfigSettingParam(AsharpContext_t *pAsharpCtx, AsharpParamMode_t param_mode, int snr_mode)
579 {
580 	char mode_name[CALIBDB_MAX_MODE_NAME_LENGTH];
581 	char snr_name[CALIBDB_NR_SHARP_NAME_LENGTH];
582 	memset(mode_name, 0x00, sizeof(mode_name));
583 	memset(snr_name, 0x00, sizeof(snr_name));
584 
585 	if(pAsharpCtx == NULL) {
586         	LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
587         	return ASHARP_RET_NULL_POINTER;
588     	}
589 
590 
591 	if(param_mode == ASHARP_PARAM_MODE_NORMAL){
592 		sprintf(mode_name, "%s", "normal");
593 	}else if(param_mode == ASHARP_PARAM_MODE_HDR){
594 		sprintf(mode_name, "%s", "hdr");
595 	}else if(param_mode == ASHARP_PARAM_MODE_GRAY){
596 		sprintf(mode_name, "%s", "gray");
597 	}else{
598 		LOGE_ASHARP("%s(%d): not support mode cell name!\n", __FUNCTION__, __LINE__);
599 		sprintf(mode_name, "%s", "normal");
600 	}
601 
602 	if(snr_mode == 1){
603 		sprintf(snr_name, "%s", "HSNR");
604 	}else if(snr_mode == 0){
605 		sprintf(snr_name, "%s", "LSNR");
606 	}else{
607 		LOGE_ASHARP("%s(%d): not support snr mode!\n", __FUNCTION__, __LINE__);
608 		sprintf(snr_name, "%s", "LSNR");
609 	}
610 
611 	pAsharpCtx->stAuto.sharpEn = pAsharpCtx->stSharpCalib.enable;
612 	sharp_config_setting_param_v1(&pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1, &pAsharpCtx->stSharpCalib, mode_name,  snr_name);
613 	pAsharpCtx->stAuto.edgeFltEn = pAsharpCtx->stEdgeFltCalib.enable;
614 	edgefilter_config_setting_param(&pAsharpCtx->stAuto.stEdgefilterParams, &pAsharpCtx->stEdgeFltCalib, mode_name, snr_name);
615 
616 	return ASHARP_RET_SUCCESS;
617 }
618 
AsharpParamModeProcess(AsharpContext_t * pAsharpCtx,AsharpExpInfo_t * pExpInfo,AsharpParamMode_t * mode)619 AsharpResult_t AsharpParamModeProcess(AsharpContext_t *pAsharpCtx, AsharpExpInfo_t *pExpInfo, AsharpParamMode_t *mode)
620 {
621 	AsharpResult_t res  = ASHARP_RET_SUCCESS;
622 	*mode = pAsharpCtx->eParamMode;
623 
624 	if(pAsharpCtx == NULL) {
625     	LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
626     	return ASHARP_RET_NULL_POINTER;
627 	}
628 
629 	if(pAsharpCtx->isGrayMode){
630 		*mode = ASHARP_PARAM_MODE_GRAY;
631 	}else if(pExpInfo->hdr_mode == 0){
632 		*mode = ASHARP_PARAM_MODE_NORMAL;
633 	}else if(pExpInfo->hdr_mode >= 1){
634 		*mode = ASHARP_PARAM_MODE_HDR;
635 	}else{
636 		*mode = ASHARP_PARAM_MODE_NORMAL;
637 	}
638 
639 	return res;
640 }
641 
642 
ASharpConfigSettingParam_json(AsharpContext_t * pAsharpCtx,AsharpParamMode_t param_mode,int snr_mode)643 AsharpResult_t ASharpConfigSettingParam_json(AsharpContext_t *pAsharpCtx, AsharpParamMode_t param_mode, int snr_mode)
644 {
645 	char mode_name[CALIBDB_MAX_MODE_NAME_LENGTH];
646 	char snr_name[CALIBDB_NR_SHARP_NAME_LENGTH];
647 	memset(mode_name, 0x00, sizeof(mode_name));
648 	memset(snr_name, 0x00, sizeof(snr_name));
649 
650 	if(pAsharpCtx == NULL) {
651         	LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
652         	return ASHARP_RET_NULL_POINTER;
653     	}
654 
655 
656 	if(param_mode == ASHARP_PARAM_MODE_NORMAL){
657 		sprintf(mode_name, "%s", "normal");
658 	}else if(param_mode == ASHARP_PARAM_MODE_HDR){
659 		sprintf(mode_name, "%s", "hdr");
660 	}else if(param_mode == ASHARP_PARAM_MODE_GRAY){
661 		sprintf(mode_name, "%s", "gray");
662 	}else{
663 		LOGE_ASHARP("%s(%d): not support mode cell name!\n", __FUNCTION__, __LINE__);
664 		sprintf(mode_name, "%s", "normal");
665 	}
666 
667 	if(snr_mode == 1){
668 		sprintf(snr_name, "%s", "HSNR");
669 	}else if(snr_mode == 0){
670 		sprintf(snr_name, "%s", "LSNR");
671 	}else{
672 		LOGE_ASHARP("%s(%d): not support snr mode!\n", __FUNCTION__, __LINE__);
673 		sprintf(snr_name, "%s", "LSNR");
674 	}
675 
676 	pAsharpCtx->stAuto.sharpEn = pAsharpCtx->sharp_v1.TuningPara.enable;
677 	sharp_config_setting_param_v1_json(&pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1, &pAsharpCtx->sharp_v1, mode_name,  snr_name);
678 	pAsharpCtx->stAuto.edgeFltEn = pAsharpCtx->edgefilter_v1.TuningPara.enable;
679 	edgefilter_config_setting_param_json(&pAsharpCtx->stAuto.stEdgefilterParams, &pAsharpCtx->edgefilter_v1, mode_name, snr_name);
680 
681 	return ASHARP_RET_SUCCESS;
682 }
683 
684 RKAIQ_END_DECLARE
685 
686