1 #include "abayertnr2/rk_aiq_uapi_abayertnr_int_v2.h"
2 #include "abayertnr2/rk_aiq_types_abayertnr_algo_prvt_v2.h"
3 #include "RkAiqCalibApi.h"
4 //#include "bayertnr_xml2json_v2.h"
5 
6 
7 
8 #if 1
9 
10 #define ABAYERTNR_LUMA_TF_STRENGTH_MAX_PERCENT (7.0)
11 
12 XCamReturn
rk_aiq_uapi_abayertnrV2_SetAttrib(RkAiqAlgoContext * ctx,rk_aiq_bayertnr_attrib_v2_t * attr,bool need_sync)13 rk_aiq_uapi_abayertnrV2_SetAttrib(RkAiqAlgoContext *ctx,
14                                   rk_aiq_bayertnr_attrib_v2_t *attr,
15                                   bool need_sync)
16 {
17 
18     Abayertnr_Context_V2_t* pCtx = (Abayertnr_Context_V2_t*)ctx;
19 
20     pCtx->eMode = attr->eMode;
21     if(pCtx->eMode == ABAYERTNRV2_OP_MODE_AUTO) {
22         pCtx->stAuto = attr->stAuto;
23     } else if(pCtx->eMode == ABAYERTNRV2_OP_MODE_MANUAL) {
24         pCtx->stManual.st3DSelect = attr->stManual.st3DSelect;
25     } else if(pCtx->eMode == ABAYERTNRV2_OP_MODE_REG_MANUAL) {
26         pCtx->stManual.st3DFix = attr->stManual.st3DFix;
27     }
28     pCtx->isReCalculate |= 1;
29 
30     return XCAM_RETURN_NO_ERROR;
31 }
32 
33 XCamReturn
rk_aiq_uapi_abayertnrV2_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_bayertnr_attrib_v2_t * attr)34 rk_aiq_uapi_abayertnrV2_GetAttrib(const RkAiqAlgoContext *ctx,
35                                   rk_aiq_bayertnr_attrib_v2_t *attr)
36 {
37 
38     Abayertnr_Context_V2_t* pCtx = (Abayertnr_Context_V2_t*)ctx;
39 
40     attr->eMode = pCtx->eMode;
41     memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
42     memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
43 
44     return XCAM_RETURN_NO_ERROR;
45 }
46 
47 
48 XCamReturn
rk_aiq_uapi_abayertnrV2_SetStrength(const RkAiqAlgoContext * ctx,rk_aiq_bayertnr_strength_v2_t * pStrength)49 rk_aiq_uapi_abayertnrV2_SetStrength(const RkAiqAlgoContext *ctx,
50                                     rk_aiq_bayertnr_strength_v2_t *pStrength)
51 {
52     Abayertnr_Context_V2_t* pCtx = (Abayertnr_Context_V2_t*)ctx;
53 
54     float fStrength = 1.0;
55     float fslope = ABAYERTNR_LUMA_TF_STRENGTH_MAX_PERCENT;
56     float fPercent = 0.5;
57 
58     fPercent = pStrength->percent;
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_abayertnrV2_GetStrength(const RkAiqAlgoContext * ctx,rk_aiq_bayertnr_strength_v2_t * pStrength)79 rk_aiq_uapi_abayertnrV2_GetStrength(const RkAiqAlgoContext *ctx,
80                                     rk_aiq_bayertnr_strength_v2_t *pStrength)
81 {
82     Abayertnr_Context_V2_t* pCtx = (Abayertnr_Context_V2_t*)ctx;
83 
84     float fStrength = 1.0;
85     float fslope = ABAYERTNR_LUMA_TF_STRENGTH_MAX_PERCENT;
86     float fPercent = 0.5;
87 
88     fStrength = pCtx->stStrength.percent;
89 
90     if(fStrength <= 1) {
91         fPercent = fStrength * 0.5;
92     } else {
93         float tmp = 1.0;
94         tmp = 1 - 0.5 * fslope / (fStrength + fslope - 1);
95         if(abs(tmp - 0.999999) < 0.000001) {
96             tmp = 1.0;
97         }
98         fPercent = tmp;
99     }
100 
101     *pStrength = pCtx->stStrength;
102     pStrength->percent = fPercent;
103 
104     return XCAM_RETURN_NO_ERROR;
105 }
106 
107 XCamReturn
rk_aiq_uapi_abayertnrV2_GetInfo(const RkAiqAlgoContext * ctx,rk_aiq_bayertnr_info_v2_t * pInfo)108 rk_aiq_uapi_abayertnrV2_GetInfo (const RkAiqAlgoContext *ctx,
109                                  rk_aiq_bayertnr_info_v2_t *pInfo)
110 {
111     Abayertnr_Context_V2_t* pCtx = (Abayertnr_Context_V2_t*)ctx;
112 
113     pInfo->iso = pCtx->stExpInfo.arIso[pCtx->stExpInfo.hdr_mode];
114 
115     pInfo->expo_info = pCtx->stExpInfo;
116 
117     return XCAM_RETURN_NO_ERROR;
118 }
119 
120 
121 
122 #endif
123 
124