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