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