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