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