xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/acnr2/rk_aiq_uapi_acnr_int_v2.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "acnr2/rk_aiq_uapi_acnr_int_v2.h"
2 #include "acnr2/rk_aiq_types_acnr_algo_prvt_v2.h"
3 
4 #if 1
5 #define ACNRV2_CHROMA_SF_STRENGTH_SLOPE_FACTOR (5.0)
6 
7 
8 
9 XCamReturn
rk_aiq_uapi_acnrV2_SetAttrib(RkAiqAlgoContext * ctx,rk_aiq_cnr_attrib_v2_t * attr,bool need_sync)10 rk_aiq_uapi_acnrV2_SetAttrib(RkAiqAlgoContext *ctx,
11                              rk_aiq_cnr_attrib_v2_t *attr,
12                              bool need_sync)
13 {
14 
15     Acnr_Context_V2_t* pCtx = (Acnr_Context_V2_t*)ctx;
16 
17     pCtx->eMode = attr->eMode;
18     if(pCtx->eMode == ACNRV2_OP_MODE_AUTO) {
19         pCtx->stAuto = attr->stAuto;
20     } else if(pCtx->eMode == ACNRV2_OP_MODE_MANUAL) {
21         pCtx->stManual.stSelect = attr->stManual.stSelect;
22     } else if(pCtx->eMode == ACNRV2_OP_MODE_REG_MANUAL) {
23         pCtx->stManual.stFix = attr->stManual.stFix;
24     }
25     pCtx->isReCalculate |= 1;
26 
27     return XCAM_RETURN_NO_ERROR;
28 }
29 
30 XCamReturn
rk_aiq_uapi_acnrV2_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_cnr_attrib_v2_t * attr)31 rk_aiq_uapi_acnrV2_GetAttrib(const RkAiqAlgoContext *ctx,
32                              rk_aiq_cnr_attrib_v2_t *attr)
33 {
34 
35     Acnr_Context_V2_t* pCtx = (Acnr_Context_V2_t*)ctx;
36 
37     attr->eMode = pCtx->eMode;
38     memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
39     memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
40 
41     return XCAM_RETURN_NO_ERROR;
42 }
43 
44 
45 
46 XCamReturn
rk_aiq_uapi_acnrV2_SetChromaSFStrength(const RkAiqAlgoContext * ctx,rk_aiq_cnr_strength_v2_t * pStrength)47 rk_aiq_uapi_acnrV2_SetChromaSFStrength(const RkAiqAlgoContext *ctx,
48                                        rk_aiq_cnr_strength_v2_t *pStrength)
49 {
50     Acnr_Context_V2_t* pCtx = (Acnr_Context_V2_t*)ctx;
51 
52     float fStrength = 1.0f;
53     float fslope = ACNRV2_CHROMA_SF_STRENGTH_SLOPE_FACTOR;
54     float fPercent = 0.5;
55 
56     fPercent = pStrength->percent;
57 
58     if(fPercent <= 0.5) {
59         fStrength =  fPercent / 0.5;
60     } else {
61         if(fPercent >= 0.999999)
62             fPercent = 0.999999;
63         fStrength = 0.5 * fslope / (1.0 - fPercent) - fslope + 1;
64     }
65 
66     pCtx->stStrength = *pStrength;
67     pCtx->stStrength.percent = fStrength;
68     pCtx->isReCalculate |= 1;
69 
70     return XCAM_RETURN_NO_ERROR;
71 }
72 
73 
74 XCamReturn
rk_aiq_uapi_acnrV2_GetChromaSFStrength(const RkAiqAlgoContext * ctx,rk_aiq_cnr_strength_v2_t * pStrength)75 rk_aiq_uapi_acnrV2_GetChromaSFStrength(const RkAiqAlgoContext *ctx,
76                                        rk_aiq_cnr_strength_v2_t *pStrength)
77 {
78     Acnr_Context_V2_t* pCtx = (Acnr_Context_V2_t*)ctx;
79 
80     float fStrength = 1.0f;
81     float fslope = ACNRV2_CHROMA_SF_STRENGTH_SLOPE_FACTOR;
82     float fPercent = 0.5;
83 
84     fStrength = pCtx->stStrength.percent;
85 
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 = pCtx->stStrength;
99     pStrength->percent = fPercent;
100     return XCAM_RETURN_NO_ERROR;
101 }
102 
103 XCamReturn
rk_aiq_uapi_acnrV2_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_cnr_info_v2_t * pInfo)104 rk_aiq_uapi_acnrV2_GetInfo(const RkAiqAlgoContext *ctx,
105                            rk_aiq_cnr_info_v2_t *pInfo)
106 {
107     Acnr_Context_V2_t* pCtx = (Acnr_Context_V2_t*)ctx;
108 
109     pInfo->iso = pCtx->stExpInfo.arIso[pCtx->stExpInfo.hdr_mode];
110     pInfo->expo_info = pCtx->stExpInfo;
111 
112     return XCAM_RETURN_NO_ERROR;
113 }
114 
115 
116 #endif
117 
118