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