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