1 #include "asharp4/rk_aiq_uapi_asharp_int_v4.h"
2 #include "asharp4/rk_aiq_types_asharp_algo_prvt_v4.h"
3
4 #define ASHSRPV4_STRENGTH_SLOPE_FACTOR (4.0)
5
6
7 XCamReturn
rk_aiq_uapi_asharpV4_SetAttrib(RkAiqAlgoContext * ctx,rk_aiq_sharp_attrib_v4_t * attr,bool need_sync)8 rk_aiq_uapi_asharpV4_SetAttrib(RkAiqAlgoContext *ctx,
9 rk_aiq_sharp_attrib_v4_t *attr,
10 bool need_sync)
11 {
12
13 Asharp_Context_V4_t* pAsharpCtx = (Asharp_Context_V4_t*)ctx;
14
15 pAsharpCtx->eMode = attr->eMode;
16
17 if(pAsharpCtx->eMode == ASHARP4_OP_MODE_AUTO) {
18 pAsharpCtx->stAuto = attr->stAuto;
19 } else if(pAsharpCtx->eMode == ASHARP4_OP_MODE_MANUAL) {
20 pAsharpCtx->stManual.stSelect = attr->stManual.stSelect;
21 } else if(pAsharpCtx->eMode == ASHARP4_OP_MODE_REG_MANUAL) {
22 pAsharpCtx->stManual.stFix = attr->stManual.stFix;
23 }
24
25 pAsharpCtx->isReCalculate |= 1;
26
27 return XCAM_RETURN_NO_ERROR;
28 }
29
30 XCamReturn
rk_aiq_uapi_asharpV4_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_sharp_attrib_v4_t * attr)31 rk_aiq_uapi_asharpV4_GetAttrib(const RkAiqAlgoContext *ctx,
32 rk_aiq_sharp_attrib_v4_t *attr)
33 {
34
35 Asharp_Context_V4_t* pAsharpCtx = (Asharp_Context_V4_t*)ctx;
36
37 attr->eMode = pAsharpCtx->eMode;
38 memcpy(&attr->stAuto, &pAsharpCtx->stAuto, sizeof(attr->stAuto));
39 memcpy(&attr->stManual, &pAsharpCtx->stManual, sizeof(attr->stManual));
40
41 return XCAM_RETURN_NO_ERROR;
42 }
43
44 XCamReturn
rk_aiq_uapi_asharpV4_SetStrength(const RkAiqAlgoContext * ctx,rk_aiq_sharp_strength_v4_t * pStrength)45 rk_aiq_uapi_asharpV4_SetStrength(const RkAiqAlgoContext *ctx,
46 rk_aiq_sharp_strength_v4_t *pStrength)
47 {
48
49 Asharp_Context_V4_t* pAsharpCtx = (Asharp_Context_V4_t*)ctx;
50 float fslope = ASHSRPV4_STRENGTH_SLOPE_FACTOR;
51 float fStrength = 1.0;
52 float fPercent = 0.5;
53
54 fPercent = pStrength->percent;
55
56 if(fPercent <= 0.5) {
57 fStrength = fPercent / 0.5;
58 } else {
59 if(fPercent >= 0.999999)
60 fPercent = 0.999999;
61 fStrength = 0.5 * fslope / (1.0 - fPercent) - fslope + 1;
62 }
63
64 pAsharpCtx->stStrength = *pStrength;
65 pAsharpCtx->stStrength.percent = fStrength;
66 pAsharpCtx->isReCalculate |= 1;
67
68 LOGD_ASHARP("%s:%d percent:%f fStrength:%f \n",
69 __FUNCTION__, __LINE__,
70 fStrength, fPercent);
71
72 return XCAM_RETURN_NO_ERROR;
73 }
74
75 XCamReturn
rk_aiq_uapi_asharpV4_GetStrength(const RkAiqAlgoContext * ctx,rk_aiq_sharp_strength_v4_t * pStrength)76 rk_aiq_uapi_asharpV4_GetStrength(const RkAiqAlgoContext *ctx,
77 rk_aiq_sharp_strength_v4_t *pStrength)
78 {
79
80 Asharp_Context_V4_t* pAsharpCtx = (Asharp_Context_V4_t*)ctx;
81 float fslope = ASHSRPV4_STRENGTH_SLOPE_FACTOR;
82 float fStrength = 1.0;
83 float fPercent = 0.5;
84
85 fStrength = pAsharpCtx->stStrength.percent;
86
87 if(fStrength <= 1) {
88 fPercent = fStrength * 0.5;
89 } else {
90 float tmp = 1.0;
91 tmp = 1 - 0.5 * fslope / (fStrength + fslope - 1);
92 if(abs(tmp - 0.999999) < 0.000001) {
93 tmp = 1.0;
94 }
95 fPercent = tmp;
96 }
97
98 *pStrength = pAsharpCtx->stStrength;
99 pStrength->percent = fPercent;
100
101 LOGD_ASHARP("%s:%d fStrength:%f percent:%f\n",
102 __FUNCTION__, __LINE__,
103 fStrength, fPercent);
104
105 return XCAM_RETURN_NO_ERROR;
106 }
107
108 XCamReturn
rk_aiq_uapi_asharpV4_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_sharp_info_v4_t * pInfo)109 rk_aiq_uapi_asharpV4_GetInfo(const RkAiqAlgoContext *ctx,
110 rk_aiq_sharp_info_v4_t *pInfo)
111 {
112
113 Asharp_Context_V4_t* pAsharpCtx = (Asharp_Context_V4_t*)ctx;
114
115 pInfo->iso = pAsharpCtx->stExpInfo.arIso[pAsharpCtx->stExpInfo.hdr_mode];
116 pInfo->expo_info = pAsharpCtx->stExpInfo;
117
118 return XCAM_RETURN_NO_ERROR;
119 }
120
121
122
123
124