1 #include "abayer2dnrV23/rk_aiq_uapi_camgroup_abayer2dnr_int_v23.h"
2 #include "rk_aiq_types_camgroup_abayer2dnr_prvt_v23.h"
3 
4 
5 #if 1
6 #define RAWNR_LUMA_SF_STRENGTH_SLOPE_FACTOR (8.0)
7 
8 
9 XCamReturn
rk_aiq_uapi_camgroup_abayer2dnrV23_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_bayer2dnr_attrib_v23_t * attr,bool)10 rk_aiq_uapi_camgroup_abayer2dnrV23_SetAttrib(RkAiqAlgoContext *ctx,
11         const rk_aiq_bayer2dnr_attrib_v23_t *attr,
12         bool /* need_sync */)
13 {
14     CamGroup_Abayer2dnrV23_Contex_t *pGroupCtx = (CamGroup_Abayer2dnrV23_Contex_t *)ctx;
15     Abayer2dnr_Context_V23_t* pCtx = pGroupCtx->abayer2dnr_contex_v23;
16 
17     pCtx->eMode = attr->eMode;
18     if(pCtx->eMode == ABAYER2DNR_V23_OP_MODE_AUTO) {
19         pCtx->stAuto = attr->stAuto;
20     } else if(pCtx->eMode == ABAYER2DNR_V23_OP_MODE_MANUAL) {
21         pCtx->stManual.st2DSelect = attr->stManual.st2DSelect;
22     } else if(pCtx->eMode == ABAYER2DNR_V23_OP_MODE_REG_MANUAL) {
23         pCtx->stManual.st2Dfix = attr->stManual.st2Dfix;
24     }
25     pCtx->isReCalculate |= 1;
26 
27     return XCAM_RETURN_NO_ERROR;
28 }
29 
30 XCamReturn
rk_aiq_uapi_camgroup_abayer2dnrV23_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_attrib_v23_t * attr)31 rk_aiq_uapi_camgroup_abayer2dnrV23_GetAttrib(const RkAiqAlgoContext *ctx,
32         rk_aiq_bayer2dnr_attrib_v23_t *attr)
33 {
34 
35     CamGroup_Abayer2dnrV23_Contex_t *pGroupCtx = (CamGroup_Abayer2dnrV23_Contex_t *)ctx;
36     Abayer2dnr_Context_V23_t* pCtx = pGroupCtx->abayer2dnr_contex_v23;
37 
38     attr->eMode = pCtx->eMode;
39     memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
40     memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
41 
42     return XCAM_RETURN_NO_ERROR;
43 }
44 
45 
46 XCamReturn
rk_aiq_uapi_camgroup_abayer2dnrV23_SetStrength(const RkAiqAlgoContext * ctx,const rk_aiq_bayer2dnr_strength_v23_t * pStrength)47 rk_aiq_uapi_camgroup_abayer2dnrV23_SetStrength(const RkAiqAlgoContext *ctx,
48         const rk_aiq_bayer2dnr_strength_v23_t* pStrength)
49 {
50     CamGroup_Abayer2dnrV23_Contex_t *pGroupCtx = (CamGroup_Abayer2dnrV23_Contex_t *)ctx;
51     Abayer2dnr_Context_V23_t* pCtx = (Abayer2dnr_Context_V23_t*)ctx;
52 
53     float fStrength = 1.0f;
54     float fslope = RAWNR_LUMA_SF_STRENGTH_SLOPE_FACTOR;
55     float fPercent = 0.5f;
56 
57     fPercent = pStrength->percent;
58 
59 
60     if(fPercent <= 0.5) {
61         fStrength = fPercent / 0.5;
62     } else {
63         if(fPercent >= 0.999999)
64             fPercent = 0.999999;
65         fStrength = 0.5 * fslope / (1.0 - fPercent) - fslope + 1;
66     }
67 
68     pCtx->stStrength = *pStrength;
69     pCtx->stStrength.percent = fStrength;
70     pCtx->isReCalculate |= 1;
71 
72     return XCAM_RETURN_NO_ERROR;
73 }
74 
75 
76 
77 
78 XCamReturn
rk_aiq_uapi_camgroup_abayer2dnrV23_GetStrength(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_strength_v23_t * pStrength)79 rk_aiq_uapi_camgroup_abayer2dnrV23_GetStrength(const RkAiqAlgoContext *ctx,
80         rk_aiq_bayer2dnr_strength_v23_t* pStrength)
81 {
82     CamGroup_Abayer2dnrV23_Contex_t *pGroupCtx = (CamGroup_Abayer2dnrV23_Contex_t *)ctx;
83     Abayer2dnr_Context_V23_t* pCtx = (Abayer2dnr_Context_V23_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 
109 
110 XCamReturn
rk_aiq_uapi_camgroup_abayer2dnrV23_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_bayer2dnr_info_v23_t * pInfo)111 rk_aiq_uapi_camgroup_abayer2dnrV23_GetInfo(const RkAiqAlgoContext* ctx,
112         rk_aiq_bayer2dnr_info_v23_t* pInfo) {
113 
114     CamGroup_Abayer2dnrV23_Contex_t *pGroupCtx = (CamGroup_Abayer2dnrV23_Contex_t *)ctx;
115     Abayer2dnr_Context_V23_t* pCtx = (Abayer2dnr_Context_V23_t*)ctx;
116 
117     pInfo->iso = pCtx->stExpInfo.arIso[pCtx->stExpInfo.hdr_mode];
118 
119 
120     pInfo->expo_info = pCtx->stExpInfo;
121     return XCAM_RETURN_NO_ERROR;
122 }
123 
124 
125 #endif
126 
127