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