xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/arawnr2/rk_aiq_uapi_abayernr_int_v2.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "arawnr2/rk_aiq_uapi_abayernr_int_v2.h"
2 #include "arawnr2/rk_aiq_types_abayernr_algo_prvt_v2.h"
3 #include "RkAiqCalibApi.h"
4 #include "bayernr_xml2json_v2.h"
5 
6 
7 
8 #if 1
9 
10 #define RAWNR_LUMA_TF_STRENGTH_MAX_PERCENT (100.0)
11 #define RAWNR_LUMA_SF_STRENGTH_MAX_PERCENT (100.0)
12 
13 
14 XCamReturn
rk_aiq_uapi_arawnrV2_SetAttrib(RkAiqAlgoContext * ctx,rk_aiq_bayernr_attrib_v2_t * attr,bool need_sync)15 rk_aiq_uapi_arawnrV2_SetAttrib(RkAiqAlgoContext *ctx,
16                                rk_aiq_bayernr_attrib_v2_t *attr,
17                                bool need_sync)
18 {
19 
20     Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
21 
22     pCtx->eMode = attr->eMode;
23     pCtx->stAuto = attr->stAuto;
24     pCtx->stManual = attr->stManual;
25     pCtx->isReCalculate |= 1;
26 
27     return XCAM_RETURN_NO_ERROR;
28 }
29 
30 XCamReturn
rk_aiq_uapi_arawnrV2_GetAttrib(const RkAiqAlgoContext * ctx,rk_aiq_bayernr_attrib_v2_t * attr)31 rk_aiq_uapi_arawnrV2_GetAttrib(const RkAiqAlgoContext *ctx,
32                                rk_aiq_bayernr_attrib_v2_t *attr)
33 {
34 
35     Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
36 
37     attr->eMode = pCtx->eMode;
38     memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
39     memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
40 
41     return XCAM_RETURN_NO_ERROR;
42 }
43 
44 #if 0
45 XCamReturn
46 rk_aiq_uapi_arawnrV2_SetIQPara(RkAiqAlgoContext *ctx,
47                                rk_aiq_bayernr_IQPara_V2_t *pPara,
48                                bool need_sync)
49 {
50 
51     Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
52 
53 
54 #if ABAYERNR_USE_JSON_FILE_V2
55     bayernrV2_calibdb_to_calibdbV2(&pPara->listHead_mode, &pCtx->bayernr_v2, 0);
56 #else
57     pCtx->list_bayernr_v2 = &pPara->listHead_mode;
58 #endif
59 
60     pCtx->isIQParaUpdate = true;
61     return XCAM_RETURN_NO_ERROR;
62 }
63 
64 
65 XCamReturn
66 rk_aiq_uapi_arawnrV2_GetIQPara(RkAiqAlgoContext *ctx,
67                                rk_aiq_bayernr_IQPara_V2_t *pPara)
68 {
69 
70     Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
71 
72     if(pCtx == NULL && pPara == NULL) {
73         return XCAM_RETURN_NO_ERROR;
74     }
75 
76 #if ABAYERNR_USE_JSON_FILE_V2
77     INIT_LIST_HEAD(&pPara->listHead_mode);
78     CalibDb_Bayernr_V2_t *pBayernrProfile = (CalibDb_Bayernr_V2_t *)malloc(sizeof(CalibDb_Bayernr_V2_t));
79     if(NULL == pBayernrProfile) {
80         LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__);
81         return XCAM_RETURN_NO_ERROR;
82     }
83     memset(pBayernrProfile, 0x00, sizeof(CalibDb_Bayernr_V2_t));
84     INIT_LIST_HEAD(&pBayernrProfile->st2DParams.listHead);
85     INIT_LIST_HEAD(&pBayernrProfile->st3DParams.listHead);
86     list_add_tail((struct list_head*)pBayernrProfile, pPara->listHead_mode);
87 
88     for(int i = 0; i < pCtx->bayernr_v2.Bayernr2D.Setting_len; i++) {
89         Calibdb_Bayernr_2Dparams_V2_t *p2DParam = (Calibdb_Bayernr_2Dparams_V2_t *)malloc(sizeof(Calibdb_Bayernr_2Dparams_V2_t));
90         if(NULL == p2DParam) {
91             LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__);
92             return XCAM_RETURN_NO_ERROR;
93         }
94         memset(p2DParam, 0x00, sizeof(Calibdb_Bayernr_2Dparams_V2_t));
95         list_prepare_item(&p2DParam->listItem);
96         list_add_tail(&p2DParam->listItem, &pBayernrProfile->st2DParams.listHead);
97     }
98 
99     for(int i = 0; i < pCtx->bayernr_v2.Bayernr3D.Setting_len; i++) {
100         CalibDb_Bayernr_3DParams_V2_t *p3DParam = (CalibDb_Bayernr_3DParams_V2_t *)malloc(sizeof(CalibDb_Bayernr_3DParams_V2_t));
101         if(NULL == p3DParam) {
102             LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__);
103             return XCAM_RETURN_NO_ERROR;
104         }
105         memset(p3DParam, 0x00, sizeof(CalibDb_Bayernr_3DParams_V2_t));
106         list_prepare_item(&p3DParam->listItem);
107         list_add_tail(&p3DParam->listItem, &pBayernrProfile->st3DParams.listHead);
108     }
109 
110     bayernrV2_calibdbV2_to_calibdb(&pCtx->bayernr_v2, &pPara->listHead_mode, 0);
111 #else
112     pPara->listHead_mode = *pCtx->list_bayernr_v2;
113 #endif
114 
115     return XCAM_RETURN_NO_ERROR;
116 }
117 #endif
118 
119 XCamReturn
rk_aiq_uapi_rawnrV2_SetSFStrength(const RkAiqAlgoContext * ctx,float fPercent)120 rk_aiq_uapi_rawnrV2_SetSFStrength(const RkAiqAlgoContext *ctx,
121                                   float fPercent)
122 {
123     Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
124 
125     float fStrength = 1.0f;
126     float fMax = RAWNR_LUMA_SF_STRENGTH_MAX_PERCENT;
127 
128 
129     if(fPercent <= 0.5) {
130         fStrength =  fPercent / 0.5;
131     } else {
132         fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
133     }
134 
135     pCtx->fRawnr_SF_Strength = fStrength;
136     pCtx->isReCalculate |= 1;
137 
138     return XCAM_RETURN_NO_ERROR;
139 }
140 
141 
142 XCamReturn
rk_aiq_uapi_rawnrV2_SetTFStrength(const RkAiqAlgoContext * ctx,float fPercent)143 rk_aiq_uapi_rawnrV2_SetTFStrength(const RkAiqAlgoContext *ctx,
144                                   float fPercent)
145 {
146     Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
147 
148     float fStrength = 1.0;
149     float fMax = RAWNR_LUMA_TF_STRENGTH_MAX_PERCENT;
150 
151     if(fPercent <= 0.5) {
152         fStrength =  fPercent / 0.5;
153     } else {
154         fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
155     }
156 
157     pCtx->fRawnr_TF_Strength = fStrength;
158     pCtx->isReCalculate |= 1;
159 
160     return XCAM_RETURN_NO_ERROR;
161 }
162 
163 
164 XCamReturn
rk_aiq_uapi_rawnrV2_GetSFStrength(const RkAiqAlgoContext * ctx,float * pPercent)165 rk_aiq_uapi_rawnrV2_GetSFStrength(const RkAiqAlgoContext *ctx,
166                                   float *pPercent)
167 {
168     Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
169 
170     float fStrength = 1.0f;
171     float fMax = RAWNR_LUMA_SF_STRENGTH_MAX_PERCENT;
172 
173 
174     fStrength = pCtx->fRawnr_SF_Strength;
175 
176     if(fStrength <= 1) {
177         *pPercent = fStrength * 0.5;
178     } else {
179         *pPercent = (fStrength - 1) / ((fMax - 1) * 2) + 0.5;
180     }
181 
182     return XCAM_RETURN_NO_ERROR;
183 }
184 
185 
186 XCamReturn
rk_aiq_uapi_rawnrV2_GetTFStrength(const RkAiqAlgoContext * ctx,float * pPercent)187 rk_aiq_uapi_rawnrV2_GetTFStrength(const RkAiqAlgoContext *ctx,
188                                   float *pPercent)
189 {
190     Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
191 
192     float fStrength = 1.0;
193     float fMax = RAWNR_LUMA_TF_STRENGTH_MAX_PERCENT;
194 
195     fStrength = pCtx->fRawnr_TF_Strength;
196 
197     if(fStrength <= 1) {
198         *pPercent = fStrength * 0.5;
199     } else {
200         *pPercent = (fStrength - 1) / ((fMax - 1) * 2) + 0.5;
201     }
202 
203     return XCAM_RETURN_NO_ERROR;
204 }
205 
206 
207 #endif
208 
209