1 #include "asharpV33/rk_aiq_uapi_camgroup_asharp_int_v33.h"
2 #include "rk_aiq_types_camgroup_asharp_prvt_v33.h"
3
4
5 #define CAMGROUP_ASHSRPV33_STRENGTH_SLOPE_FACTOR (4.0)
6
rk_aiq_uapi_camgroup_asharpV33_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_sharp_attrib_v33_t * attr,bool)7 XCamReturn rk_aiq_uapi_camgroup_asharpV33_SetAttrib(RkAiqAlgoContext* ctx,
8 const rk_aiq_sharp_attrib_v33_t* attr,
9 bool /* need_sync */) {
10 LOGD_ASHARP("%s:%d\n", __FUNCTION__, __LINE__);
11 #if RKAIQ_HAVE_SHARP_V33
12
13 CamGroup_AsharpV33_Contex_t *pGroupAsharpCtx = (CamGroup_AsharpV33_Contex_t *)ctx;
14 Asharp_Context_V33_t* pAsharpCtx = pGroupAsharpCtx->asharp_contex_v33;
15
16 pAsharpCtx->eMode = attr->eMode;
17 if (pAsharpCtx->eMode == ASHARP_V33_OP_MODE_AUTO) {
18 pAsharpCtx->stAuto = attr->stAuto;
19 } else if (pAsharpCtx->eMode == ASHARP_V33_OP_MODE_MANUAL) {
20 pAsharpCtx->stManual.stSelect = attr->stManual.stSelect;
21 } else if (pAsharpCtx->eMode == ASHARP_V33_OP_MODE_REG_MANUAL) {
22 pAsharpCtx->stManual.stFix = attr->stManual.stFix;
23 }
24 pAsharpCtx->isReCalculate |= 1;
25 #endif
26 return XCAM_RETURN_NO_ERROR;
27 }
28
rk_aiq_uapi_camgroup_asharpV33_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_sharp_attrib_v33_t * attr)29 XCamReturn rk_aiq_uapi_camgroup_asharpV33_GetAttrib(const RkAiqAlgoContext* ctx,
30 rk_aiq_sharp_attrib_v33_t* attr) {
31 LOGD_ASHARP("%s:%d\n", __FUNCTION__, __LINE__);
32
33 #if RKAIQ_HAVE_SHARP_V33
34 CamGroup_AsharpV33_Contex_t* pGroupAsharpCtx = (CamGroup_AsharpV33_Contex_t*)ctx;
35 Asharp_Context_V33_t* pAsharpCtx = pGroupAsharpCtx->asharp_contex_v33;
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 #endif
41 return XCAM_RETURN_NO_ERROR;
42 }
43
rk_aiq_uapi_camgroup_asharpV33Lite_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_sharp_attrib_v33LT_t * attr,bool)44 XCamReturn rk_aiq_uapi_camgroup_asharpV33Lite_SetAttrib(RkAiqAlgoContext* ctx,
45 const rk_aiq_sharp_attrib_v33LT_t* attr,
46 bool /* need_sync */) {
47 LOGD_ASHARP("%s:%d\n", __FUNCTION__, __LINE__);
48 #if RKAIQ_HAVE_SHARP_V33_LITE
49 CamGroup_AsharpV33_Contex_t* pGroupAsharpCtx = (CamGroup_AsharpV33_Contex_t*)ctx;
50 Asharp_Context_V33_t* pAsharpCtx = pGroupAsharpCtx->asharp_contex_v33;
51
52 pAsharpCtx->eMode = attr->eMode;
53 if (pAsharpCtx->eMode == ASHARP_V33_OP_MODE_AUTO) {
54 pAsharpCtx->stAuto = attr->stAuto;
55 } else if (pAsharpCtx->eMode == ASHARP_V33_OP_MODE_MANUAL) {
56 pAsharpCtx->stManual.stSelect = attr->stManual.stSelect;
57 } else if (pAsharpCtx->eMode == ASHARP_V33_OP_MODE_REG_MANUAL) {
58 pAsharpCtx->stManual.stFix = attr->stManual.stFix;
59 }
60 pAsharpCtx->isReCalculate |= 1;
61 #endif
62 return XCAM_RETURN_NO_ERROR;
63 }
64
rk_aiq_uapi_camgroup_asharpV33Lite_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_sharp_attrib_v33LT_t * attr)65 XCamReturn rk_aiq_uapi_camgroup_asharpV33Lite_GetAttrib(const RkAiqAlgoContext* ctx,
66 rk_aiq_sharp_attrib_v33LT_t* attr) {
67 LOGD_ASHARP("%s:%d\n", __FUNCTION__, __LINE__);
68
69 #if RKAIQ_HAVE_SHARP_V33_LITE
70 CamGroup_AsharpV33_Contex_t *pGroupAsharpCtx = (CamGroup_AsharpV33_Contex_t *)ctx;
71 Asharp_Context_V33_t* pAsharpCtx = pGroupAsharpCtx->asharp_contex_v33;
72
73 attr->eMode = pAsharpCtx->eMode;
74 memcpy(&attr->stAuto, &pAsharpCtx->stAuto, sizeof(attr->stAuto));
75 memcpy(&attr->stManual, &pAsharpCtx->stManual, sizeof(attr->stManual));
76 #endif
77
78 return XCAM_RETURN_NO_ERROR;
79 }
80
81 XCamReturn
rk_aiq_uapi_camgroup_asharpV33_SetStrength(const RkAiqAlgoContext * ctx,const rk_aiq_sharp_strength_v33_t * pStrength)82 rk_aiq_uapi_camgroup_asharpV33_SetStrength(const RkAiqAlgoContext *ctx,
83 const rk_aiq_sharp_strength_v33_t* pStrength)
84 {
85 LOGD_ASHARP("%s:%d\n", __FUNCTION__, __LINE__);
86
87 CamGroup_AsharpV33_Contex_t *pGroupAsharpCtx = (CamGroup_AsharpV33_Contex_t *)ctx;
88 Asharp_Context_V33_t* pAsharpAsharpCtx = pGroupAsharpCtx->asharp_contex_v33;
89
90 float fslope = CAMGROUP_ASHSRPV33_STRENGTH_SLOPE_FACTOR;
91 float fStrength = 1.0f;
92 float fPercent = 0.5f;
93
94 fPercent = pStrength->percent;
95
96 if (fPercent <= 0.5) {
97 fStrength = fPercent / 0.5;
98 } else {
99 if (fPercent >= 0.999999) fPercent = 0.999999;
100 fStrength = 0.5 * fslope / (1.0 - fPercent) - fslope + 1;
101 }
102
103 pAsharpAsharpCtx->stStrength = *pStrength;
104 pAsharpAsharpCtx->stStrength.percent = fStrength;
105 pAsharpAsharpCtx->isReCalculate |= 1;
106
107 LOGD_ASHARP("%s:%d percent:%f fStrength:%f \n", __FUNCTION__, __LINE__, fStrength, fPercent);
108
109 return XCAM_RETURN_NO_ERROR;
110 }
111
112 XCamReturn
rk_aiq_uapi_camgroup_asharpV33_GetStrength(const RkAiqAlgoContext * ctx,rk_aiq_sharp_strength_v33_t * pStrength)113 rk_aiq_uapi_camgroup_asharpV33_GetStrength(const RkAiqAlgoContext *ctx,
114 rk_aiq_sharp_strength_v33_t* pStrength)
115 {
116 LOGD_ASHARP("%s:%d\n", __FUNCTION__, __LINE__);
117
118 CamGroup_AsharpV33_Contex_t *pGroupAsharpCtx = (CamGroup_AsharpV33_Contex_t *)ctx;
119 Asharp_Context_V33_t* pAsharpAsharpCtx = pGroupAsharpCtx->asharp_contex_v33;
120
121 float fslope = CAMGROUP_ASHSRPV33_STRENGTH_SLOPE_FACTOR;
122 float fStrength = 1.0f;
123 float fPercent = 0.5f;
124
125 fStrength = pAsharpAsharpCtx->stStrength.percent;
126
127 if (fStrength <= 1) {
128 fPercent = fStrength * 0.5;
129 } else {
130 float tmp = 1.0;
131 tmp = 1 - 0.5 * fslope / (fStrength + fslope - 1);
132 if (abs(tmp - 0.999999) < 0.000001) {
133 tmp = 1.0;
134 }
135 fPercent = tmp;
136 }
137
138 *pStrength = pAsharpAsharpCtx->stStrength;
139 pStrength->percent = fPercent;
140
141 LOGD_ASHARP("%s:%d fStrength:%f percent:%f\n", __FUNCTION__, __LINE__, fStrength, fPercent);
142
143 return XCAM_RETURN_NO_ERROR;
144 }
145
rk_aiq_uapi_camgroup_asharpV33_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_sharp_info_v33_t * pInfo)146 XCamReturn rk_aiq_uapi_camgroup_asharpV33_GetInfo(const RkAiqAlgoContext* ctx,
147 rk_aiq_sharp_info_v33_t* pInfo) {
148
149 CamGroup_AsharpV33_Contex_t *pGroupAsharpCtx = (CamGroup_AsharpV33_Contex_t *)ctx;
150 Asharp_Context_V33_t* pAsharpAsharpCtx = pGroupAsharpCtx->asharp_contex_v33;
151
152 pInfo->iso = pAsharpAsharpCtx->stExpInfo.arIso[pAsharpAsharpCtx->stExpInfo.hdr_mode];
153
154
155 pInfo->expo_info = pAsharpAsharpCtx->stExpInfo;
156 return XCAM_RETURN_NO_ERROR;
157 }
158
159