1 #include "abayer2dnr2/rk_aiq_uapi_abayer2dnr_int_v2.h"
2 #include "abayer2dnr2/rk_aiq_types_abayer2dnr_algo_prvt_v2.h"
3 #include "RkAiqCalibApi.h"
4 //#include "bayer2dnr_xml2json_v2.h"
5 
6 
7 
8 #if 1
9 
10 #define RAWNR_LUMA_SF_STRENGTH_SLOPE_FACTOR (8.0)
11 
12 
13 XCamReturn
rk_aiq_uapi_abayer2dnrV2_SetAttrib(RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_attrib_v2_t * attr,bool need_sync)14 rk_aiq_uapi_abayer2dnrV2_SetAttrib(RkAiqAlgoContext *ctx,
15                                    rk_aiq_bayer2dnr_attrib_v2_t *attr,
16                                    bool need_sync)
17 {
18 
19     Abayer2dnr_Context_V2_t* pCtx = (Abayer2dnr_Context_V2_t*)ctx;
20 
21     pCtx->eMode = attr->eMode;
22     if(pCtx->eMode == ABAYER2DNR_OP_MODE_AUTO) {
23         pCtx->stAuto = attr->stAuto;
24     } else if(pCtx->eMode == ABAYER2DNR_OP_MODE_MANUAL) {
25         pCtx->stManual.st2DSelect = attr->stManual.st2DSelect;
26     } else if(pCtx->eMode == ABAYER2DNR_OP_MODE_REG_MANUAL) {
27         pCtx->stManual.st2Dfix = attr->stManual.st2Dfix;
28     }
29     pCtx->isReCalculate |= 1;
30 
31     return XCAM_RETURN_NO_ERROR;
32 }
33 
34 XCamReturn
rk_aiq_uapi_abayer2dnrV2_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_attrib_v2_t * attr)35 rk_aiq_uapi_abayer2dnrV2_GetAttrib(const RkAiqAlgoContext *ctx,
36                                    rk_aiq_bayer2dnr_attrib_v2_t *attr)
37 {
38 
39     Abayer2dnr_Context_V2_t* pCtx = (Abayer2dnr_Context_V2_t*)ctx;
40 
41     attr->eMode = pCtx->eMode;
42     memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
43     memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
44 
45     return XCAM_RETURN_NO_ERROR;
46 }
47 
48 
49 XCamReturn
rk_aiq_uapi_abayer2dnrV2_SetStrength(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_strength_v2_t * pStrength)50 rk_aiq_uapi_abayer2dnrV2_SetStrength(const RkAiqAlgoContext *ctx,
51                                      rk_aiq_bayer2dnr_strength_v2_t *pStrength)
52 {
53     Abayer2dnr_Context_V2_t* pCtx = (Abayer2dnr_Context_V2_t*)ctx;
54 
55     float fStrength = 1.0f;
56     float fslope = RAWNR_LUMA_SF_STRENGTH_SLOPE_FACTOR;
57     float fPercent = 0.5f;
58 
59     fPercent = pStrength->percent;
60 
61     if(fPercent <= 0.5) {
62         fStrength =  fPercent / 0.5;
63     } else {
64         if(fPercent >= 0.999999)
65             fPercent = 0.999999;
66         fStrength = 0.5 * fslope / (1.0 - fPercent) - fslope + 1;
67     }
68 
69     pCtx->stStrength = *pStrength;
70     pCtx->stStrength.percent = fStrength;
71     pCtx->isReCalculate |= 1;
72 
73     return XCAM_RETURN_NO_ERROR;
74 }
75 
76 
77 
78 
79 XCamReturn
rk_aiq_uapi_abayer2dnrV2_GetStrength(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_strength_v2_t * pStrength)80 rk_aiq_uapi_abayer2dnrV2_GetStrength(const RkAiqAlgoContext *ctx,
81                                      rk_aiq_bayer2dnr_strength_v2_t *pStrength)
82 {
83     Abayer2dnr_Context_V2_t* pCtx = (Abayer2dnr_Context_V2_t*)ctx;
84 
85     float fStrength = 1.0f;
86     float fslope = RAWNR_LUMA_SF_STRENGTH_SLOPE_FACTOR;
87     float fPercent = 0.0f;
88 
89     fStrength = pCtx->stStrength.percent;
90 
91     if(fStrength <= 1) {
92         fPercent = fStrength * 0.5;
93     } else {
94         float tmp = 1.0;
95         tmp = 1 - 0.5 * fslope / (fStrength + fslope - 1);
96         if(abs(tmp - 0.999999) < 0.000001) {
97             tmp = 1.0;
98         }
99         fPercent = tmp;
100     }
101 
102     *pStrength = pCtx->stStrength;
103     pStrength->percent = fPercent;
104 
105     return XCAM_RETURN_NO_ERROR;
106 }
107 
108 XCamReturn
rk_aiq_uapi_abayer2dnrV2_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_info_v2_t * pInfo)109 rk_aiq_uapi_abayer2dnrV2_GetInfo(const RkAiqAlgoContext *ctx,
110                                  rk_aiq_bayer2dnr_info_v2_t *pInfo)
111 {
112     Abayer2dnr_Context_V2_t* pCtx = (Abayer2dnr_Context_V2_t*)ctx;
113 
114     pInfo->iso = pCtx->stExpInfo.arIso[pCtx->stExpInfo.hdr_mode];
115 
116     pInfo->expo_info = pCtx->stExpInfo;
117 
118     return XCAM_RETURN_NO_ERROR;
119 }
120 
121 
122 
123 
124 
125 #endif
126 
127