1 #include "abayertnrV23/rk_aiq_uapi_abayertnr_int_v23.h"
2 #include "abayertnrV23/rk_aiq_types_abayertnr_algo_prvt_v23.h"
3 #include "RkAiqCalibApi.h"
4
5
6
7 #if 1
8
9 #define ABAYERTNR_LUMA_SF_STRENGTH_MAX_PERCENT (7.0)
10
rk_aiq_uapi_abayertnrV23_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_bayertnr_attrib_v23_t * attr,bool)11 XCamReturn rk_aiq_uapi_abayertnrV23_SetAttrib(RkAiqAlgoContext* ctx,
12 const rk_aiq_bayertnr_attrib_v23_t* attr,
13 bool /* need_sync */) {
14 #if (RKAIQ_HAVE_BAYERTNR_V23)
15 Abayertnr_Context_V23_t* pCtx = (Abayertnr_Context_V23_t*)ctx;
16
17 pCtx->eMode = attr->eMode;
18 if(pCtx->eMode == ABAYERTNRV23_OP_MODE_AUTO) {
19 pCtx->stAuto = attr->stAuto;
20 } else if(pCtx->eMode == ABAYERTNRV23_OP_MODE_MANUAL) {
21 pCtx->stManual.st3DSelect = attr->stManual.st3DSelect;
22 } else if(pCtx->eMode == ABAYERTNRV23_OP_MODE_REG_MANUAL) {
23 pCtx->stManual.st3DFix = attr->stManual.st3DFix;
24 }
25 pCtx->isReCalculate |= 1;
26 #endif
27 return XCAM_RETURN_NO_ERROR;
28 }
29
rk_aiq_uapi_abayertnrV23_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_bayertnr_attrib_v23_t * attr)30 XCamReturn rk_aiq_uapi_abayertnrV23_GetAttrib(const RkAiqAlgoContext* ctx,
31 rk_aiq_bayertnr_attrib_v23_t* attr) {
32 #if (RKAIQ_HAVE_BAYERTNR_V23)
33 Abayertnr_Context_V23_t* pCtx = (Abayertnr_Context_V23_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 #endif
39 return XCAM_RETURN_NO_ERROR;
40 }
41
rk_aiq_uapi_abayertnrV23Lite_SetAttrib(RkAiqAlgoContext * ctx,const rk_aiq_bayertnr_attrib_v23L_t * attr,bool)42 XCamReturn rk_aiq_uapi_abayertnrV23Lite_SetAttrib(RkAiqAlgoContext* ctx,
43 const rk_aiq_bayertnr_attrib_v23L_t* attr,
44 bool /* need_sync */) {
45 #if (RKAIQ_HAVE_BAYERTNR_V23_LITE)
46 Abayertnr_Context_V23_t* pCtx = (Abayertnr_Context_V23_t*)ctx;
47
48 pCtx->eMode = attr->eMode;
49 if (pCtx->eMode == ABAYERTNRV23_OP_MODE_AUTO) {
50 pCtx->stAuto = attr->stAuto;
51 } else if (pCtx->eMode == ABAYERTNRV23_OP_MODE_MANUAL) {
52 pCtx->stManual.st3DSelect = attr->stManual.st3DSelect;
53 } else if (pCtx->eMode == ABAYERTNRV23_OP_MODE_REG_MANUAL) {
54 pCtx->stManual.st3DFix = attr->stManual.st3DFix;
55 }
56 pCtx->isReCalculate |= 1;
57 #endif
58 return XCAM_RETURN_NO_ERROR;
59 }
60
rk_aiq_uapi_abayertnrV23Lite_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_bayertnr_attrib_v23L_t * attr)61 XCamReturn rk_aiq_uapi_abayertnrV23Lite_GetAttrib(const RkAiqAlgoContext* ctx,
62 rk_aiq_bayertnr_attrib_v23L_t* attr) {
63 #if (RKAIQ_HAVE_BAYERTNR_V23_LITE)
64 Abayertnr_Context_V23_t* pCtx = (Abayertnr_Context_V23_t*)ctx;
65
66 attr->eMode = pCtx->eMode;
67 memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
68 memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
69 #endif
70 return XCAM_RETURN_NO_ERROR;
71 }
72
73 XCamReturn
rk_aiq_uapi_abayertnrV23_SetStrength(const RkAiqAlgoContext * ctx,const rk_aiq_bayertnr_strength_v23_t * pStrength)74 rk_aiq_uapi_abayertnrV23_SetStrength(const RkAiqAlgoContext *ctx,
75 const rk_aiq_bayertnr_strength_v23_t *pStrength)
76 {
77 Abayertnr_Context_V23_t* pCtx = (Abayertnr_Context_V23_t*)ctx;
78
79 float fStrength = 1.0f;
80 float fslope = ABAYERTNR_LUMA_SF_STRENGTH_MAX_PERCENT;
81 float fPercent = 0.5f;
82
83 fPercent = pStrength->percent;
84
85 if(fPercent <= 0.5) {
86 fStrength = fPercent / 0.5;
87 } else {
88 if(fPercent >= 0.999999)
89 fPercent = 0.999999;
90 fStrength = 0.5 * fslope / (1.0 - fPercent) - fslope + 1;
91 }
92
93 pCtx->stStrength = *pStrength;
94 pCtx->stStrength.percent = fStrength;
95 pCtx->isReCalculate |= 1;
96
97 return XCAM_RETURN_NO_ERROR;
98 }
99
100
101
102
103 XCamReturn
rk_aiq_uapi_abayertnrV23_GetStrength(const RkAiqAlgoContext * ctx,rk_aiq_bayertnr_strength_v23_t * pStrength)104 rk_aiq_uapi_abayertnrV23_GetStrength(const RkAiqAlgoContext *ctx,
105 rk_aiq_bayertnr_strength_v23_t *pStrength )
106 {
107 Abayertnr_Context_V23_t* pCtx = (Abayertnr_Context_V23_t*)ctx;
108
109 float fStrength = 1.0f;
110 float fslope = ABAYERTNR_LUMA_SF_STRENGTH_MAX_PERCENT;
111 float fPercent = 0.5f;
112
113 fStrength = pCtx->stStrength.percent;
114
115 if(fStrength <= 1) {
116 fPercent = fStrength * 0.5;
117 } else {
118 float tmp = 1.0;
119 tmp = 1 - 0.5 * fslope / (fStrength + fslope - 1);
120 if(abs(tmp - 0.999999) < 0.000001) {
121 tmp = 1.0;
122 }
123 fPercent = tmp;
124 }
125
126 *pStrength = pCtx->stStrength;
127 pStrength->percent = fPercent;
128
129 return XCAM_RETURN_NO_ERROR;
130 }
131
132 XCamReturn
rk_aiq_uapi_abayertnrV23_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_bayertnr_info_v23_t * pInfo)133 rk_aiq_uapi_abayertnrV23_GetInfo(const RkAiqAlgoContext* ctx,
134 rk_aiq_bayertnr_info_v23_t* pInfo) {
135
136 Abayertnr_Context_V23_t* pCtx = (Abayertnr_Context_V23_t*)ctx;
137
138 pInfo->iso = pCtx->stExpInfo.arIso[pCtx->stExpInfo.hdr_mode];
139
140
141 pInfo->expo_info = pCtx->stExpInfo;
142 return XCAM_RETURN_NO_ERROR;
143 }
144
145 #endif
146
147