1 #include "acnr2/rk_aiq_uapi_camgroup_acnr_int_v2.h"
2 #include "rk_aiq_types_camgroup_acnr_prvt_v2.h"
3
4 #if 1
5 #define ACNRV2_CHROMA_SF_STRENGTH_MAX_PERCENT (100.0)
6
7
8 XCamReturn
rk_aiq_uapi_camgroup_acnrV2_SetAttrib(RkAiqAlgoContext * ctx,rk_aiq_cnr_attrib_v2_t * attr,bool need_sync)9 rk_aiq_uapi_camgroup_acnrV2_SetAttrib(RkAiqAlgoContext *ctx,
10 rk_aiq_cnr_attrib_v2_t *attr,
11 bool need_sync)
12 {
13 CamGroup_AcnrV2_Contex_t *pGroupCtx = (CamGroup_AcnrV2_Contex_t *)ctx;
14 Acnr_Context_V2_t* pCtx = pGroupCtx->acnr_contex_v2;
15
16 pCtx->eMode = attr->eMode;
17 if(pCtx->eMode == ACNRV2_OP_MODE_AUTO) {
18 pCtx->stAuto = attr->stAuto;
19 } else if(pCtx->eMode == ACNRV2_OP_MODE_MANUAL) {
20 pCtx->stManual.stSelect = attr->stManual.stSelect;
21 } else if(pCtx->eMode == ACNRV2_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_acnrV2_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_cnr_attrib_v2_t * attr)30 rk_aiq_uapi_camgroup_acnrV2_GetAttrib(const RkAiqAlgoContext *ctx,
31 rk_aiq_cnr_attrib_v2_t *attr)
32 {
33
34 CamGroup_AcnrV2_Contex_t *pGroupCtx = (CamGroup_AcnrV2_Contex_t *)ctx;
35 Acnr_Context_V2_t* pCtx = pGroupCtx->acnr_contex_v2;
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_acnrV2_SetChromaSFStrength(const RkAiqAlgoContext * ctx,rk_aiq_cnr_strength_v2_t * pStrength)47 rk_aiq_uapi_camgroup_acnrV2_SetChromaSFStrength(const RkAiqAlgoContext *ctx,
48 rk_aiq_cnr_strength_v2_t *pStrength)
49 {
50 CamGroup_AcnrV2_Contex_t *pGroupCtx = (CamGroup_AcnrV2_Contex_t *)ctx;
51 Acnr_Context_V2_t* pCtx = pGroupCtx->acnr_contex_v2;
52
53 float fStrength = 1.0f;
54 float fMax = ACNRV2_CHROMA_SF_STRENGTH_MAX_PERCENT;
55 float fPercent = 0.5;
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 / (1.0 - fPercent);
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_acnrV2_GetChromaSFStrength(const RkAiqAlgoContext * ctx,rk_aiq_cnr_strength_v2_t * pStrength)76 rk_aiq_uapi_camgroup_acnrV2_GetChromaSFStrength(const RkAiqAlgoContext *ctx,
77 rk_aiq_cnr_strength_v2_t *pStrength)
78 {
79 CamGroup_AcnrV2_Contex_t *pGroupCtx = (CamGroup_AcnrV2_Contex_t *)ctx;
80 Acnr_Context_V2_t* pCtx = pGroupCtx->acnr_contex_v2;
81
82 float fStrength = 1.0f;
83 float fMax = ACNRV2_CHROMA_SF_STRENGTH_MAX_PERCENT;
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 / fStrength;
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 XCamReturn
rk_aiq_uapi_camgroup_acnrV2_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_cnr_info_v2_t * pInfo)107 rk_aiq_uapi_camgroup_acnrV2_GetInfo(const RkAiqAlgoContext *ctx,
108 rk_aiq_cnr_info_v2_t *pInfo)
109 {
110 CamGroup_AcnrV2_Contex_t *pGroupCtx = (CamGroup_AcnrV2_Contex_t *)ctx;
111 Acnr_Context_V2_t* pCtx = pGroupCtx->acnr_contex_v2;
112
113 pInfo->iso = pCtx->stExpInfo.arIso[pCtx->stExpInfo.hdr_mode];
114 pInfo->expo_info = pCtx->stExpInfo;
115
116 return XCAM_RETURN_NO_ERROR;
117 }
118
119 #endif
120
121