xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/aynrV22/rk_aiq_uapi_aynr_int_v22.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "aynrV22/rk_aiq_uapi_aynr_int_v22.h"
2 #include "aynrV22/rk_aiq_types_aynr_algo_prvt_v22.h"
3 
4 #if 1
5 #define AYNRV3_CHROMA_SF_STRENGTH_SLOPE_FACTOR (5.0)
6 
7 XCamReturn
rk_aiq_uapi_aynrV22_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_ynr_attrib_v22_t * attr,bool need_sync)8 rk_aiq_uapi_aynrV22_SetAttrib(RkAiqAlgoContext *ctx,
9                               const rk_aiq_ynr_attrib_v22_t *attr,
10                               bool need_sync)
11 {
12 
13     Aynr_Context_V22_t* pCtx = (Aynr_Context_V22_t*)ctx;
14 
15     pCtx->eMode = attr->eMode;
16     if(pCtx->eMode == AYNRV22_OP_MODE_AUTO) {
17         pCtx->stAuto = attr->stAuto;
18     } else if(pCtx->eMode == AYNRV22_OP_MODE_MANUAL) {
19         pCtx->stManual.stSelect = attr->stManual.stSelect;
20     } else if(pCtx->eMode == AYNRV22_OP_MODE_REG_MANUAL) {
21         pCtx->stManual.stFix = attr->stManual.stFix;
22     }
23     pCtx->isReCalculate |= 1;
24 
25     return XCAM_RETURN_NO_ERROR;
26 }
27 
28 XCamReturn
rk_aiq_uapi_aynrV22_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_ynr_attrib_v22_t * attr)29 rk_aiq_uapi_aynrV22_GetAttrib(const RkAiqAlgoContext *ctx,
30                               rk_aiq_ynr_attrib_v22_t *attr)
31 {
32 
33     Aynr_Context_V22_t* pCtx = (Aynr_Context_V22_t*)ctx;
34 
35     attr->eMode = pCtx->eMode;
36     memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
37     memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
38 
39     return XCAM_RETURN_NO_ERROR;
40 }
41 
42 
43 XCamReturn
rk_aiq_uapi_aynrV22_SetLumaSFStrength(const RkAiqAlgoContext * ctx,const rk_aiq_ynr_strength_v22_t * pStrength)44 rk_aiq_uapi_aynrV22_SetLumaSFStrength(const RkAiqAlgoContext *ctx,
45                                       const rk_aiq_ynr_strength_v22_t* pStrength)
46 {
47     Aynr_Context_V22_t* pCtx = (Aynr_Context_V22_t*)ctx;
48 
49     float fStrength = 1.0f;
50     float fPercent = 0.5f;
51     float fslope = AYNRV3_CHROMA_SF_STRENGTH_SLOPE_FACTOR;
52 
53     fPercent = pStrength->percent;
54 
55     if(fPercent <= 0.5) {
56         fStrength =  fPercent / 0.5;
57     } else {
58         if(fPercent >= 0.999999)
59             fPercent = 0.999999;
60         fStrength = 0.5 * fslope / (1.0 - fPercent) - fslope + 1;
61     }
62 
63     pCtx->stStrength = *pStrength;
64     pCtx->stStrength.percent = fStrength;
65     pCtx->isReCalculate |= 1;
66 
67     return XCAM_RETURN_NO_ERROR;
68 }
69 
70 
71 
72 XCamReturn
rk_aiq_uapi_aynrV22_GetLumaSFStrength(const RkAiqAlgoContext * ctx,rk_aiq_ynr_strength_v22_t * pStrength)73 rk_aiq_uapi_aynrV22_GetLumaSFStrength(const RkAiqAlgoContext *ctx,
74                                       rk_aiq_ynr_strength_v22_t* pStrength)
75 {
76     Aynr_Context_V22_t* pCtx = (Aynr_Context_V22_t*)ctx;
77 
78     float fStrength = 1.0f;
79     float fPercent = 0.5f;
80     float fslope = AYNRV3_CHROMA_SF_STRENGTH_SLOPE_FACTOR;
81 
82     fStrength = pCtx->stStrength.percent;
83 
84     if(fStrength <= 1) {
85         fPercent = fStrength * 0.5;
86     } else {
87         float tmp = 1.0;
88         tmp = 1 - 0.5 * fslope / (fStrength + fslope - 1 );
89         if(abs(tmp - 0.999999) < 0.000001) {
90             tmp = 1.0;
91         }
92         fPercent = tmp;
93     }
94 
95     *pStrength = pCtx->stStrength;
96     pStrength->percent = fPercent;
97 
98     return XCAM_RETURN_NO_ERROR;
99 }
100 
101 XCamReturn
rk_aiq_uapi_aynrV22_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_ynr_info_v22_t * pInfo)102 rk_aiq_uapi_aynrV22_GetInfo(const RkAiqAlgoContext* ctx,
103                             rk_aiq_ynr_info_v22_t* pInfo) {
104 
105     Aynr_Context_V22_t* pCtx = (Aynr_Context_V22_t*)ctx;
106 
107     pInfo->iso = pCtx->stExpInfo.arIso[pCtx->stExpInfo.hdr_mode];
108 
109 
110     pInfo->expo_info = pCtx->stExpInfo;
111     return XCAM_RETURN_NO_ERROR;
112 }
113 
114 
115 #endif
116 
117