xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/asharp4/rk_aiq_uapi_asharp_int_v4.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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