1 #include "aynrV22/rk_aiq_uapi_camgroup_aynr_int_v22.h"
2 #include "rk_aiq_types_camgroup_aynr_prvt_v22.h"
3 
4 #if 1
5 #define CAMGROUP_AYNRV22_CHROMA_SF_STRENGTH_SLOPE_FACTOR (5.0)
6 
7 
8 XCamReturn
rk_aiq_uapi_camgroup_aynrV22_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_ynr_attrib_v22_t * attr,bool)9 rk_aiq_uapi_camgroup_aynrV22_SetAttrib(RkAiqAlgoContext *ctx,
10                                        const rk_aiq_ynr_attrib_v22_t *attr,
11                                        bool /* need_sync */)
12 {
13     LOGD_ANR("%s:%d\n", __FUNCTION__, __LINE__);
14 
15     CamGroup_AynrV22_Contex_t *pGroupCtx = (CamGroup_AynrV22_Contex_t *)ctx;
16     Aynr_Context_V22_t* pCtx = pGroupCtx->aynr_contex_v22;
17 
18     pCtx->eMode = attr->eMode;
19     if(pCtx->eMode == AYNRV22_OP_MODE_AUTO) {
20         pCtx->stAuto = attr->stAuto;
21     } else if(pCtx->eMode == AYNRV22_OP_MODE_MANUAL) {
22         pCtx->stManual.stSelect = attr->stManual.stSelect;
23     } else if(pCtx->eMode == AYNRV22_OP_MODE_REG_MANUAL) {
24         pCtx->stManual.stFix = attr->stManual.stFix;
25     }
26     pCtx->isReCalculate |= 1;
27 
28     return XCAM_RETURN_NO_ERROR;
29 }
30 
31 XCamReturn
rk_aiq_uapi_camgroup_aynrV22_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_ynr_attrib_v22_t * attr)32 rk_aiq_uapi_camgroup_aynrV22_GetAttrib(const RkAiqAlgoContext *ctx,
33                                        rk_aiq_ynr_attrib_v22_t *attr)
34 {
35     LOGD_ANR("%s:%d\n", __FUNCTION__, __LINE__);
36 
37     CamGroup_AynrV22_Contex_t *pGroupCtx = (CamGroup_AynrV22_Contex_t *)ctx;
38     Aynr_Context_V22_t* pCtx = pGroupCtx->aynr_contex_v22;
39 
40     attr->eMode = pCtx->eMode;
41     memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
42     memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
43 
44     return XCAM_RETURN_NO_ERROR;
45 }
46 
47 
48 XCamReturn
rk_aiq_uapi_camgroup_aynrV22_SetLumaSFStrength(const RkAiqAlgoContext * ctx,const rk_aiq_ynr_strength_v22_t * pStrength)49 rk_aiq_uapi_camgroup_aynrV22_SetLumaSFStrength(const RkAiqAlgoContext *ctx,
50         const rk_aiq_ynr_strength_v22_t* pStrength)
51 {
52     LOGD_ANR("%s:%d\n", __FUNCTION__, __LINE__);
53     CamGroup_AynrV22_Contex_t *pGroupCtx = (CamGroup_AynrV22_Contex_t *)ctx;
54     Aynr_Context_V22_t* pCtx = pGroupCtx->aynr_contex_v22;
55 
56     float fStrength = 1.0f;
57     float fPercent = 0.5f;
58     float fslope = CAMGROUP_AYNRV22_CHROMA_SF_STRENGTH_SLOPE_FACTOR;
59 
60     fPercent = pStrength->percent;
61 
62     if(fPercent <= 0.5) {
63         fStrength =  fPercent / 0.5;
64     } else {
65         if(fPercent >= 0.999999)
66             fPercent = 0.999999;
67         fStrength = 0.5 * fslope / (1.0 - fPercent) - fslope + 1;
68     }
69 
70     pCtx->stStrength = *pStrength;
71     pCtx->stStrength.percent = fStrength;
72     pCtx->isReCalculate |= 1;
73 
74     return XCAM_RETURN_NO_ERROR;
75 }
76 
77 
78 
79 XCamReturn
rk_aiq_uapi_camgroup_aynrV22_GetLumaSFStrength(const RkAiqAlgoContext * ctx,rk_aiq_ynr_strength_v22_t * pStrength)80 rk_aiq_uapi_camgroup_aynrV22_GetLumaSFStrength(const RkAiqAlgoContext *ctx,
81         rk_aiq_ynr_strength_v22_t* pStrength)
82 {
83     LOGD_ANR("%s:%d\n", __FUNCTION__, __LINE__);
84     CamGroup_AynrV22_Contex_t *pGroupCtx = (CamGroup_AynrV22_Contex_t *)ctx;
85     Aynr_Context_V22_t* pCtx = pGroupCtx->aynr_contex_v22;
86 
87     float fStrength = 1.0f;
88     float fPercent = 0.5f;
89     float fslope = CAMGROUP_AYNRV22_CHROMA_SF_STRENGTH_SLOPE_FACTOR;
90 
91     fStrength = pCtx->stStrength.percent;
92 
93     if(fStrength <= 1) {
94         fPercent = fStrength * 0.5;
95     } else {
96         float tmp = 1.0;
97         tmp = 1 - 0.5 * fslope / (fStrength + fslope - 1 );
98         if(abs(tmp - 0.999999) < 0.000001) {
99             tmp = 1.0;
100         }
101         fPercent = tmp;
102     }
103 
104     *pStrength = pCtx->stStrength;
105     pStrength->percent = fPercent;
106 
107     return XCAM_RETURN_NO_ERROR;
108 }
109 
110 XCamReturn
rk_aiq_uapi_camgroup_aynrV22_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_ynr_info_v22_t * pInfo)111 rk_aiq_uapi_camgroup_aynrV22_GetInfo(const RkAiqAlgoContext* ctx,
112                                      rk_aiq_ynr_info_v22_t* pInfo) {
113 
114     CamGroup_AynrV22_Contex_t *pGroupCtx = (CamGroup_AynrV22_Contex_t *)ctx;
115     Aynr_Context_V22_t* pCtx = pGroupCtx->aynr_contex_v22;
116 
117     pInfo->iso = pCtx->stExpInfo.arIso[pCtx->stExpInfo.hdr_mode];
118 
119 
120     pInfo->expo_info = pCtx->stExpInfo;
121     return XCAM_RETURN_NO_ERROR;
122 }
123 
124 #endif
125 
126