1 #include "acnrV30/rk_aiq_uapi_acnr_int_v30.h"
2 #include "acnrV30/rk_aiq_types_acnr_algo_prvt_v30.h"
3
4 #if 1
5 #define ACNRV30_CHROMA_SF_STRENGTH_SLOPE_FACTOR (5.0)
6
7
8 XCamReturn
rk_aiq_uapi_acnrV30_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_cnr_attrib_v30_t * attr,bool need_sync)9 rk_aiq_uapi_acnrV30_SetAttrib(RkAiqAlgoContext *ctx,
10 const rk_aiq_cnr_attrib_v30_t *attr,
11 bool need_sync)
12 {
13
14 Acnr_Context_V30_t* pCtx = (Acnr_Context_V30_t*)ctx;
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_acnrV30_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_cnr_attrib_v30_t * attr)30 rk_aiq_uapi_acnrV30_GetAttrib(const RkAiqAlgoContext *ctx,
31 rk_aiq_cnr_attrib_v30_t *attr)
32 {
33
34 Acnr_Context_V30_t* pCtx = (Acnr_Context_V30_t*)ctx;
35
36 attr->eMode = pCtx->eMode;
37 memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
38 memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
39
40 return XCAM_RETURN_NO_ERROR;
41 }
42
43
44
45 XCamReturn
rk_aiq_uapi_acnrV30_SetChromaSFStrength(const RkAiqAlgoContext * ctx,const rk_aiq_cnr_strength_v30_t * pStrength)46 rk_aiq_uapi_acnrV30_SetChromaSFStrength(const RkAiqAlgoContext *ctx,
47 const rk_aiq_cnr_strength_v30_t* pStrength)
48 {
49 Acnr_Context_V30_t* pCtx = (Acnr_Context_V30_t*)ctx;
50
51 float fStrength = 1.0f;
52 float fslope = ACNRV30_CHROMA_SF_STRENGTH_SLOPE_FACTOR;
53 float fPercent = 0.5f;
54
55 fPercent = pStrength->percent;
56
57 if(fPercent <= 0.5) {
58 fStrength = fPercent / 0.5;
59 } else {
60 if(fPercent >= 0.999999)
61 fPercent = 0.999999;
62 fStrength = 0.5 * fslope / (1.0 - fPercent) - fslope + 1;
63 }
64
65 pCtx->stStrength = *pStrength;
66 pCtx->stStrength.percent = fStrength;
67 pCtx->isReCalculate |= 1;
68
69 return XCAM_RETURN_NO_ERROR;
70 }
71
72
73 XCamReturn
rk_aiq_uapi_acnrV30_GetChromaSFStrength(const RkAiqAlgoContext * ctx,rk_aiq_cnr_strength_v30_t * pStrength)74 rk_aiq_uapi_acnrV30_GetChromaSFStrength(const RkAiqAlgoContext *ctx,
75 rk_aiq_cnr_strength_v30_t* pStrength)
76 {
77 Acnr_Context_V30_t* pCtx = (Acnr_Context_V30_t*)ctx;
78
79 float fStrength = 1.0f;
80 float fslope = ACNRV30_CHROMA_SF_STRENGTH_SLOPE_FACTOR;
81 float fPercent = 0.5;
82
83 fStrength = pCtx->stStrength.percent;
84
85
86 if(fStrength <= 1) {
87 fPercent = fStrength * 0.5;
88 } else {
89 float tmp = 1.0;
90 tmp = 1 - 0.5 * fslope / (fStrength + fslope - 1);
91 if(abs(tmp - 0.999999) < 0.000001) {
92 tmp = 1.0;
93 }
94 fPercent = tmp;
95 }
96
97 *pStrength = pCtx->stStrength;
98 pStrength->percent = fPercent;
99
100 return XCAM_RETURN_NO_ERROR;
101 }
102
103
104 XCamReturn
rk_aiq_uapi_acnrV30_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_cnr_info_v30_t * pInfo)105 rk_aiq_uapi_acnrV30_GetInfo(const RkAiqAlgoContext* ctx,
106 rk_aiq_cnr_info_v30_t* pInfo) {
107
108 Acnr_Context_V30_t* pCtx = (Acnr_Context_V30_t*)ctx;
109
110 pInfo->iso = pCtx->stExpInfo.arIso[pCtx->stExpInfo.hdr_mode];
111
112
113 pInfo->expo_info = pCtx->stExpInfo;
114 return XCAM_RETURN_NO_ERROR;
115 }
116
117
118 #endif
119
120