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