xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/arawnr/rk_aiq_uapi_abayernr_int_v1.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #include "arawnr/rk_aiq_uapi_abayernr_int_v1.h"
2 #include "bayernr_xml2json_v1.h"
3 #include "arawnr/rk_aiq_types_abayernr_algo_prvt_v1.h"
4 #include "arawnr/rk_aiq_abayernr_algo_bayernr_v1.h"
5 
6 
7 
8 #if 1
9 #define BAYERNR_RAWNR_SF_STRENGTH_MAX_PERCENT (80.0)
10 
11 XCamReturn
rk_aiq_uapi_abayernr_SetAttrib_v1(RkAiqAlgoContext * ctx,rk_aiq_bayernr_attrib_v1_t * attr,bool need_sync)12 rk_aiq_uapi_abayernr_SetAttrib_v1(RkAiqAlgoContext *ctx,
13                                   rk_aiq_bayernr_attrib_v1_t *attr,
14                                   bool need_sync)
15 {
16 
17     Abayernr_Context_V1_t* pCtx = (Abayernr_Context_V1_t*)ctx;
18 
19     pCtx->eMode = attr->eMode;
20     pCtx->stAuto = attr->stAuto;
21     pCtx->stManual = attr->stManual;
22 
23     return XCAM_RETURN_NO_ERROR;
24 }
25 
26 XCamReturn
rk_aiq_uapi_abayernr_GetAttrib_v1(const RkAiqAlgoContext * ctx,rk_aiq_bayernr_attrib_v1_t * attr)27 rk_aiq_uapi_abayernr_GetAttrib_v1(const RkAiqAlgoContext *ctx,
28                                   rk_aiq_bayernr_attrib_v1_t *attr)
29 {
30 
31     Abayernr_Context_V1_t* pCtx = (Abayernr_Context_V1_t*)ctx;
32 
33     attr->eMode = pCtx->eMode;
34     memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(Abayernr_Auto_Attr_V1_t));
35     memcpy(&attr->stManual, &pCtx->stManual, sizeof(Abayernr_Manual_Attr_V1_t));
36 
37     return XCAM_RETURN_NO_ERROR;
38 }
39 
40 XCamReturn
rk_aiq_uapi_abayernr_SetIQPara_v1(RkAiqAlgoContext * ctx,rk_aiq_bayernr_IQPara_V1_t * pPara,bool need_sync)41 rk_aiq_uapi_abayernr_SetIQPara_v1(RkAiqAlgoContext *ctx,
42                                   rk_aiq_bayernr_IQPara_V1_t *pPara,
43                                   bool need_sync)
44 {
45 #ifdef RKAIQ_ENABLE_PARSER_V1
46     Abayernr_Context_V1_t* pCtx = (Abayernr_Context_V1_t*)ctx;
47     CalibDb_BayerNr_2_t Calibdb_2;
48 
49     printf("%s:%d\n", __FUNCTION__, __LINE__);
50     if(pPara != NULL && pCtx != NULL) {
51         memset(&Calibdb_2, 0x00, sizeof(CalibDb_BayerNr_2_t));
52         Calibdb_2.mode_num = sizeof(pPara->stBayernrPara.mode_cell) / sizeof(CalibDb_BayerNr_ModeCell_t);
53         Calibdb_2.mode_cell = (CalibDb_BayerNr_ModeCell_t *)malloc(Calibdb_2.mode_num * sizeof(CalibDb_BayerNr_ModeCell_t));
54         Calibdb_2.enable = pPara->stBayernrPara.enable;
55         memcpy(Calibdb_2.version, pPara->stBayernrPara.version, sizeof(pPara->stBayernrPara.version));
56         for(int i = 0; i < Calibdb_2.mode_num; i++) {
57             Calibdb_2.mode_cell[i] = pPara->stBayernrPara.mode_cell[i];
58         }
59         printf("%s:%d\n", __FUNCTION__, __LINE__);
60 #if ABAYERNR_USE_JSON_FILE_V1
61         bayernrV1_calibdb_to_calibdbV2(&Calibdb_2, &pCtx->bayernr_v1, 0);
62 #else
63         pCtx->stBayernrCalib.enable = Calibdb_2.enable;
64         memcpy(pCtx->stBayernrCalib.version, Calibdb_2.version, sizeof(Calibdb_2.version));
65         for(int i = 0; i < Calibdb_2.mode_num && i < pCtx->stBayernrCalib.mode_num; i++) {
66             pCtx->stBayernrCalib.mode_cell[i] = Calibdb_2.mode_cell[i];
67         }
68 #endif
69         pCtx->isIQParaUpdate = true;
70         printf("%s:%d\n", __FUNCTION__, __LINE__);
71         free(Calibdb_2.mode_cell);
72     }
73     return XCAM_RETURN_NO_ERROR;
74 #else
75     return XCAM_RETURN_ERROR_PARAM;
76 #endif
77 }
78 
79 
80 XCamReturn
rk_aiq_uapi_abayernr_GetIQPara_v1(RkAiqAlgoContext * ctx,rk_aiq_bayernr_IQPara_V1_t * pPara)81 rk_aiq_uapi_abayernr_GetIQPara_v1(RkAiqAlgoContext *ctx,
82                                   rk_aiq_bayernr_IQPara_V1_t *pPara)
83 {
84 #ifdef RKAIQ_ENABLE_PARSER_V1
85     Abayernr_Context_V1_t* pCtx = (Abayernr_Context_V1_t*)ctx;
86     CalibDb_BayerNr_2_t Calibdb_2;
87 
88     if(pPara != NULL && pCtx != NULL) {
89         memset(&Calibdb_2, 0x00, sizeof(CalibDb_BayerNr_2_t));
90         Calibdb_2.mode_num = sizeof(pPara->stBayernrPara.mode_cell) / sizeof(CalibDb_BayerNr_ModeCell_t);
91         Calibdb_2.mode_cell = (CalibDb_BayerNr_ModeCell_t *)malloc(Calibdb_2.mode_num * sizeof(CalibDb_BayerNr_ModeCell_t));
92 
93         printf("%s:%d\n", __FUNCTION__, __LINE__);
94 #if(ABAYERNR_USE_JSON_FILE_V1)
95         bayernrV1_calibdbV2_to_calibdb(&pCtx->bayernr_v1, &Calibdb_2, 0);
96 #else
97         Calibdb_2.enable = pCtx->stBayernrCalib.enable;
98         memcpy(Calibdb_2.version, pCtx->stBayernrCalib.version, sizeof(pPara->stBayernrPara.version));
99         for(int i = 0; i < Calibdb_2.mode_num && i < pCtx->stBayernrCalib.mode_num; i++) {
100             Calibdb_2.mode_cell[i] = pCtx->stBayernrCalib.mode_cell[i];
101         }
102 #endif
103 
104         printf("%s:%d\n", __FUNCTION__, __LINE__);
105         memset(&pPara->stBayernrPara, 0x00, sizeof(CalibDb_BayerNr_t));
106         pPara->stBayernrPara.enable = Calibdb_2.enable;
107         memcpy(pPara->stBayernrPara.version, Calibdb_2.version, sizeof(Calibdb_2.version));
108         for(int i = 0; i < Calibdb_2.mode_num && i < CALIBDB_MAX_MODE_NUM; i++) {
109             pPara->stBayernrPara.mode_cell[i] = Calibdb_2.mode_cell[i];
110         }
111 
112         free(Calibdb_2.mode_cell);
113         printf("%s:%d\n", __FUNCTION__, __LINE__);
114     }
115 
116     return XCAM_RETURN_NO_ERROR;
117 #else
118     return XCAM_RETURN_ERROR_PARAM;
119 #endif
120 }
121 
122 
123 XCamReturn
rk_aiq_uapi_abayernr_SetRawnrSFStrength_v1(const RkAiqAlgoContext * ctx,float fPercent)124 rk_aiq_uapi_abayernr_SetRawnrSFStrength_v1(const RkAiqAlgoContext *ctx,
125         float fPercent)
126 {
127     Abayernr_Context_V1_t* pCtx = (Abayernr_Context_V1_t*)ctx;
128 
129     float fStrength = 1.0;
130     float fMax = BAYERNR_RAWNR_SF_STRENGTH_MAX_PERCENT;
131 
132     if(fPercent <= 0.5) {
133         fStrength =  fPercent / 0.5;
134     } else {
135         fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
136     }
137 
138     pCtx->fRawnr_SF_Strength = fStrength;
139 
140     return XCAM_RETURN_NO_ERROR;
141 }
142 
143 
144 XCamReturn
rk_aiq_uapi_abayernr_GetRawnrSFStrength_v1(const RkAiqAlgoContext * ctx,float * pPercent)145 rk_aiq_uapi_abayernr_GetRawnrSFStrength_v1(const RkAiqAlgoContext *ctx,
146         float *pPercent)
147 {
148     Abayernr_Context_V1_t* pCtx = (Abayernr_Context_V1_t*)ctx;
149 
150     float fStrength = 1.0f;
151     float fMax = BAYERNR_RAWNR_SF_STRENGTH_MAX_PERCENT;
152 
153     fStrength = pCtx->fRawnr_SF_Strength;
154 
155 
156     if(fStrength <= 1) {
157         *pPercent = fStrength * 0.5;
158     } else {
159         *pPercent = (fStrength - 1) / ((fMax - 1) * 2) + 0.5;
160     }
161 
162 
163     return XCAM_RETURN_NO_ERROR;
164 }
165 
166 
167 
168 XCamReturn
rk_aiq_uapi_abayernr_SetJsonPara_v1(RkAiqAlgoContext * ctx,rk_aiq_bayernr_JsonPara_V1_t * pPara,bool need_sync)169 rk_aiq_uapi_abayernr_SetJsonPara_v1(RkAiqAlgoContext *ctx,
170                                     rk_aiq_bayernr_JsonPara_V1_t *pPara,
171                                     bool need_sync)
172 {
173 
174     Abayernr_Context_V1_t* pCtx = (Abayernr_Context_V1_t*)ctx;
175 
176     if(pCtx != NULL && pPara != NULL) {
177 #if ABAYERNR_USE_JSON_FILE_V1
178         bayernrV1_calibdbV2_assign(&pCtx->bayernr_v1, &pPara->bayernr_v1);
179         pCtx->isIQParaUpdate = true;
180 #endif
181     }
182 
183     return XCAM_RETURN_NO_ERROR;
184 }
185 
186 
187 XCamReturn
rk_aiq_uapi_abayernr_GetJsonPara_v1(RkAiqAlgoContext * ctx,rk_aiq_bayernr_JsonPara_V1_t * pPara)188 rk_aiq_uapi_abayernr_GetJsonPara_v1(RkAiqAlgoContext *ctx,
189                                     rk_aiq_bayernr_JsonPara_V1_t *pPara)
190 {
191 
192     Abayernr_Context_V1_t* pCtx = (Abayernr_Context_V1_t*)ctx;
193 
194     if(pCtx != NULL && pPara != NULL) {
195 #if ABAYERNR_USE_JSON_FILE_V1
196         bayernrV1_calibdbV2_assign(&pPara->bayernr_v1, &pCtx->bayernr_v1);
197 #endif
198     }
199 
200     return XCAM_RETURN_NO_ERROR;
201 }
202 
203 
204 #endif
205 
206