xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/acnr/rk_aiq_uapi_acnr_int_v1.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "acnr/rk_aiq_uapi_acnr_int_v1.h"
2 #include "acnr/rk_aiq_types_acnr_algo_prvt_v1.h"
3 
4 #if 1
5 #define ACNRV1_CHROMA_SF_STRENGTH_MAX_PERCENT (100.0)
6 
7 
8 XCamReturn
rk_aiq_uapi_acnrV1_SetAttrib(RkAiqAlgoContext * ctx,rk_aiq_cnr_attrib_v1_t * attr,bool need_sync)9 rk_aiq_uapi_acnrV1_SetAttrib(RkAiqAlgoContext *ctx,
10                              rk_aiq_cnr_attrib_v1_t *attr,
11                              bool need_sync)
12 {
13 
14     Acnr_Context_V1_t* pCtx = (Acnr_Context_V1_t*)ctx;
15 
16     pCtx->eMode = attr->eMode;
17     pCtx->stAuto = attr->stAuto;
18     pCtx->stManual = attr->stManual;
19     pCtx->isReCalculate |= 1;
20 
21     return XCAM_RETURN_NO_ERROR;
22 }
23 
24 XCamReturn
rk_aiq_uapi_acnrV1_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_cnr_attrib_v1_t * attr)25 rk_aiq_uapi_acnrV1_GetAttrib(const RkAiqAlgoContext *ctx,
26                              rk_aiq_cnr_attrib_v1_t *attr)
27 {
28 
29     Acnr_Context_V1_t* pCtx = (Acnr_Context_V1_t*)ctx;
30 
31     attr->eMode = pCtx->eMode;
32     memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
33     memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
34 
35     return XCAM_RETURN_NO_ERROR;
36 }
37 
38 #if 0
39 XCamReturn
40 rk_aiq_uapi_acnrV1_SetIQPara(RkAiqAlgoContext *ctx,
41                              rk_aiq_nr_IQPara_t *pPara,
42                              bool need_sync)
43 {
44 
45     Acnr_Context_V1_t* pCtx = (Acnr_Context_V1_t*)ctx;
46 
47     if(pPara->module_bits & (1 << ANR_MODULE_BAYERNR)) {
48         pCtx->stBayernrCalib = pPara->stBayernrPara;
49         pCtx->isIQParaUpdate = true;
50     }
51 
52     if(pPara->module_bits & (1 << ANR_MODULE_MFNR)) {
53         pCtx->stMfnrCalib = pPara->stMfnrPara;
54         pCtx->isIQParaUpdate = true;
55     }
56 
57     if(pPara->module_bits & (1 << ANR_MODULE_UVNR)) {
58         pCtx->stUvnrCalib = pPara->stUvnrPara;
59         pCtx->isIQParaUpdate = true;
60     }
61 
62     if(pPara->module_bits & (1 << ANR_MODULE_YNR)) {
63         pCtx->stYnrCalib = pPara->stYnrPara;
64         pCtx->isIQParaUpdate = true;
65     }
66 
67     return XCAM_RETURN_NO_ERROR;
68 }
69 
70 
71 XCamReturn
72 rk_aiq_uapi_acnrV1_GetIQPara(RkAiqAlgoContext *ctx,
73                              rk_aiq_nr_IQPara_t *pPara)
74 {
75 
76     Acnr_Context_V1_t* pCtx = (Acnr_Context_V1_t*)ctx;
77 
78     pPara->stBayernrPara = pCtx->stBayernrCalib;
79     pPara->stMfnrPara = pCtx->stMfnrCalib;
80     pPara->stUvnrPara = pCtx->stUvnrCalib;
81     pPara->stYnrPara = pCtx->stYnrCalib;
82 
83     return XCAM_RETURN_NO_ERROR;
84 }
85 #endif
86 
87 
88 XCamReturn
rk_aiq_uapi_acnrV1_SetChromaSFStrength(const RkAiqAlgoContext * ctx,float fPercent)89 rk_aiq_uapi_acnrV1_SetChromaSFStrength(const RkAiqAlgoContext *ctx,
90                                        float fPercent)
91 {
92     Acnr_Context_V1_t* pCtx = (Acnr_Context_V1_t*)ctx;
93 
94     float fStrength = 1.0f;
95     float fMax = ACNRV1_CHROMA_SF_STRENGTH_MAX_PERCENT;
96 
97     if(fPercent <= 0.5) {
98         fStrength =  fPercent / 0.5;
99     } else {
100         fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
101     }
102 
103     pCtx->fCnr_SF_Strength = fStrength;
104     pCtx->isReCalculate |= 1;
105 
106     return XCAM_RETURN_NO_ERROR;
107 }
108 
109 
110 XCamReturn
rk_aiq_uapi_acnrV1_GetChromaSFStrength(const RkAiqAlgoContext * ctx,float * pPercent)111 rk_aiq_uapi_acnrV1_GetChromaSFStrength(const RkAiqAlgoContext *ctx,
112                                        float *pPercent)
113 {
114     Acnr_Context_V1_t* pCtx = (Acnr_Context_V1_t*)ctx;
115 
116     float fStrength = 1.0f;
117     float fMax = ACNRV1_CHROMA_SF_STRENGTH_MAX_PERCENT;
118 
119     fStrength = pCtx->fCnr_SF_Strength;
120 
121 
122     if(fStrength <= 1) {
123         *pPercent = fStrength * 0.5;
124     } else {
125         *pPercent = (fStrength - 1) / ((fMax - 1) * 2) + 0.5;
126     }
127 
128 
129     return XCAM_RETURN_NO_ERROR;
130 }
131 
132 
133 #endif
134 
135