1 #include "abayer2dnr2/rk_aiq_uapi_camgroup_abayer2dnr_int_v2.h"
2 #include "rk_aiq_types_camgroup_abayer2dnr_prvt_v2.h"
3 
4 
5 #if 1
6 
7 #define RAWNR_LUMA_TF_STRENGTH_MAX_PERCENT (100.0)
8 #define RAWNR_LUMA_SF_STRENGTH_MAX_PERCENT (100.0)
9 
10 
11 XCamReturn
rk_aiq_uapi_camgroup_abayer2dnrV2_SetAttrib(RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_attrib_v2_t * attr,bool need_sync)12 rk_aiq_uapi_camgroup_abayer2dnrV2_SetAttrib(RkAiqAlgoContext *ctx,
13         rk_aiq_bayer2dnr_attrib_v2_t *attr,
14         bool need_sync)
15 {
16     CamGroup_Abayer2dnrV2_Contex_t *pGroupCtx = (CamGroup_Abayer2dnrV2_Contex_t *)ctx;
17     Abayer2dnr_Context_V2_t* pCtx = pGroupCtx->abayer2dnr_contex_v2;
18 
19     pCtx->eMode = attr->eMode;
20     if(pCtx->eMode == ABAYER2DNR_OP_MODE_AUTO) {
21         pCtx->stAuto = attr->stAuto;
22     } else if(pCtx->eMode == ABAYER2DNR_OP_MODE_MANUAL) {
23         pCtx->stManual.st2DSelect = attr->stManual.st2DSelect;
24     } else if(pCtx->eMode == ABAYER2DNR_OP_MODE_REG_MANUAL) {
25         pCtx->stManual.st2Dfix = attr->stManual.st2Dfix;
26     }
27     pCtx->isReCalculate |= 1;
28 
29     return XCAM_RETURN_NO_ERROR;
30 }
31 
32 XCamReturn
rk_aiq_uapi_camgroup_abayer2dnrV2_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_attrib_v2_t * attr)33 rk_aiq_uapi_camgroup_abayer2dnrV2_GetAttrib(const RkAiqAlgoContext *ctx,
34         rk_aiq_bayer2dnr_attrib_v2_t *attr)
35 {
36 
37     CamGroup_Abayer2dnrV2_Contex_t *pGroupCtx = (CamGroup_Abayer2dnrV2_Contex_t *)ctx;
38     Abayer2dnr_Context_V2_t* pCtx = pGroupCtx->abayer2dnr_contex_v2;
39 
40     attr->eMode = pCtx->eMode;
41     memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
42     memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
43 
44     return XCAM_RETURN_NO_ERROR;
45 }
46 
47 
48 XCamReturn
rk_aiq_uapi_camgroup_abayer2dnrV2_SetStrength(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_strength_v2_t * pStrength)49 rk_aiq_uapi_camgroup_abayer2dnrV2_SetStrength(const RkAiqAlgoContext *ctx,
50         rk_aiq_bayer2dnr_strength_v2_t *pStrength)
51 {
52     CamGroup_Abayer2dnrV2_Contex_t *pGroupCtx = (CamGroup_Abayer2dnrV2_Contex_t *)ctx;
53     Abayer2dnr_Context_V2_t* pCtx = pGroupCtx->abayer2dnr_contex_v2;
54 
55     float fStrength = 1.0f;
56     float fMax = RAWNR_LUMA_SF_STRENGTH_MAX_PERCENT;
57     float fPercent = 0.5;
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 / (1.0 - fPercent);
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_camgroup_abayer2dnrV2_GetStrength(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_strength_v2_t * pStrength)80 rk_aiq_uapi_camgroup_abayer2dnrV2_GetStrength(const RkAiqAlgoContext *ctx,
81         rk_aiq_bayer2dnr_strength_v2_t *pStrength)
82 {
83     CamGroup_Abayer2dnrV2_Contex_t *pGroupCtx = (CamGroup_Abayer2dnrV2_Contex_t *)ctx;
84     Abayer2dnr_Context_V2_t* pCtx = pGroupCtx->abayer2dnr_contex_v2;
85 
86     float fStrength = 1.0f;
87     float fMax = RAWNR_LUMA_SF_STRENGTH_MAX_PERCENT;
88     float fPercent = 0.5;
89 
90     fStrength = pCtx->stStrength.percent;
91 
92     if(fStrength <= 1) {
93         fPercent = fStrength * 0.5;
94     } else {
95         float tmp = 1.0;
96         tmp = 1 - 0.5 / fStrength;
97         if(abs(tmp - 0.999999) < 0.000001) {
98             tmp = 1.0;
99         }
100         fPercent = tmp;
101     }
102 
103     *pStrength = pCtx->stStrength;
104     pStrength->percent = fPercent;
105 
106     return XCAM_RETURN_NO_ERROR;
107 }
108 
109 
110 XCamReturn
rk_aiq_uapi_camgroup_abayer2dnrV2_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_info_v2_t * pInfo)111 rk_aiq_uapi_camgroup_abayer2dnrV2_GetInfo(const RkAiqAlgoContext *ctx,
112         rk_aiq_bayer2dnr_info_v2_t *pInfo)
113 {
114     CamGroup_Abayer2dnrV2_Contex_t *pGroupCtx = (CamGroup_Abayer2dnrV2_Contex_t *)ctx;
115     Abayer2dnr_Context_V2_t* pCtx = pGroupCtx->abayer2dnr_contex_v2;
116 
117     pInfo->iso = pCtx->stExpInfo.arIso[pCtx->stExpInfo.hdr_mode];
118     pInfo->expo_info = pCtx->stExpInfo;
119 
120     return XCAM_RETURN_NO_ERROR;
121 }
122 
123 #endif
124 
125