xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/acnrV30/rk_aiq_uapi_acnr_int_v30.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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