1 #include "acnrV30/rk_aiq_uapi_camgroup_acnr_int_v30.h"
2 #include "rk_aiq_types_camgroup_acnr_prvt_v30.h"
3 
4 #if 1
5 #define CAMGROUP_ACNRV30_CHROMA_SF_STRENGTH_SLOPE_FACTOR (5.0)
6 
7 
8 XCamReturn
rk_aiq_uapi_camgroup_acnrV30_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_cnr_attrib_v30_t * attr,bool)9 rk_aiq_uapi_camgroup_acnrV30_SetAttrib(RkAiqAlgoContext *ctx,
10                                        const rk_aiq_cnr_attrib_v30_t *attr,
11                                        bool /* need_sync */)
12 {
13     CamGroup_AcnrV30_Contex_t *pGroupCtx = (CamGroup_AcnrV30_Contex_t *)ctx;
14     Acnr_Context_V30_t* pCtx = pGroupCtx->acnr_contex_v30;
15 
16     pCtx->eMode = attr->eMode;
17     if(pCtx->eMode == ACNRV30_OP_MODE_AUTO) {
18         pCtx->stAuto = attr->stAuto;
19     } else if(pCtx->eMode == ACNRV30_OP_MODE_MANUAL) {
20         pCtx->stManual.stSelect = attr->stManual.stSelect;
21     } else if(pCtx->eMode == ACNRV30_OP_MODE_REG_MANUAL) {
22         pCtx->stManual.stFix = attr->stManual.stFix;
23     }
24     pCtx->isReCalculate |= 1;
25 
26     return XCAM_RETURN_NO_ERROR;
27 }
28 
29 XCamReturn
rk_aiq_uapi_camgroup_acnrV30_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_cnr_attrib_v30_t * attr)30 rk_aiq_uapi_camgroup_acnrV30_GetAttrib(const RkAiqAlgoContext *ctx,
31                                        rk_aiq_cnr_attrib_v30_t *attr)
32 {
33 
34     CamGroup_AcnrV30_Contex_t *pGroupCtx = (CamGroup_AcnrV30_Contex_t *)ctx;
35     Acnr_Context_V30_t* pCtx = pGroupCtx->acnr_contex_v30;
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_camgroup_acnrV30_SetChromaSFStrength(const RkAiqAlgoContext * ctx,const rk_aiq_cnr_strength_v30_t * pStrength)47 rk_aiq_uapi_camgroup_acnrV30_SetChromaSFStrength(const RkAiqAlgoContext *ctx,
48         const rk_aiq_cnr_strength_v30_t* pStrength)
49 {
50     CamGroup_AcnrV30_Contex_t *pGroupCtx = (CamGroup_AcnrV30_Contex_t *)ctx;
51     Acnr_Context_V30_t* pCtx = pGroupCtx->acnr_contex_v30;
52 
53     float fStrength = 1.0f;
54     float fslope = CAMGROUP_ACNRV30_CHROMA_SF_STRENGTH_SLOPE_FACTOR;
55     float fPercent = 0.5f;
56 
57     fPercent = pStrength->percent;
58 
59     if(fPercent <= 0.5) {
60         fStrength =  fPercent / 0.5;
61     } else {
62         if(fPercent >= 0.999999)
63             fPercent = 0.999999;
64         fStrength = 0.5 * fslope / (1.0 - fPercent) - fslope  + 1;
65     }
66 
67     pCtx->stStrength = *pStrength;
68     pCtx->stStrength.percent = fStrength;
69     pCtx->isReCalculate |= 1;
70 
71     return XCAM_RETURN_NO_ERROR;
72 }
73 
74 
75 XCamReturn
rk_aiq_uapi_camgroup_acnrV30_GetChromaSFStrength(const RkAiqAlgoContext * ctx,rk_aiq_cnr_strength_v30_t * pStrength)76 rk_aiq_uapi_camgroup_acnrV30_GetChromaSFStrength(const RkAiqAlgoContext *ctx,
77         rk_aiq_cnr_strength_v30_t* pStrength)
78 {
79     CamGroup_AcnrV30_Contex_t *pGroupCtx = (CamGroup_AcnrV30_Contex_t *)ctx;
80     Acnr_Context_V30_t* pCtx = pGroupCtx->acnr_contex_v30;
81 
82     float fStrength = 1.0f;
83     float fslope = CAMGROUP_ACNRV30_CHROMA_SF_STRENGTH_SLOPE_FACTOR;
84     float fPercent = 0.5;
85 
86     fStrength = pCtx->stStrength.percent;
87 
88 
89     if(fStrength <= 1) {
90         fPercent = fStrength * 0.5;
91     } else {
92         float tmp = 1.0;
93         tmp = 1 - 0.5 * fslope / (fStrength + fslope - 1);
94         if(abs(tmp - 0.999999) < 0.000001) {
95             tmp = 1.0;
96         }
97         fPercent = tmp;
98     }
99 
100     *pStrength = pCtx->stStrength;
101     pStrength->percent = fPercent;
102 
103     return XCAM_RETURN_NO_ERROR;
104 }
105 
106 
107 XCamReturn
rk_aiq_uapi_camgroup_acnrV30_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_cnr_info_v30_t * pInfo)108 rk_aiq_uapi_camgroup_acnrV30_GetInfo(const RkAiqAlgoContext* ctx,
109                                      rk_aiq_cnr_info_v30_t* pInfo) {
110 
111     CamGroup_AcnrV30_Contex_t *pGroupCtx = (CamGroup_AcnrV30_Contex_t *)ctx;
112     Acnr_Context_V30_t* pCtx = pGroupCtx->acnr_contex_v30;
113 
114     pInfo->iso = pCtx->stExpInfo.arIso[pCtx->stExpInfo.hdr_mode];
115 
116 
117     pInfo->expo_info = pCtx->stExpInfo;
118     return XCAM_RETURN_NO_ERROR;
119 }
120 
121 #endif
122 
123