1 #include "amfnr/rk_aiq_uapi_amfnr_int_v1.h"
2 #include "amfnr/rk_aiq_amfnr_algo_mfnr_v1.h"
3 #include "amfnr/rk_aiq_types_amfnr_algo_prvt_v1.h"
4 #include "mfnr_xml2json_v1.h"
5
6 #if 1
7
8 #define MFNR_LUMA_TF_STRENGTH_MAX_PERCENT (50.0)
9 #define MFNR_CHROMA_TF_STRENGTH_MAX_PERCENT (50.0)
10 XCamReturn
rk_aiq_uapi_amfnr_SetAttrib_v1(RkAiqAlgoContext * ctx,rk_aiq_mfnr_attrib_v1_t * attr,bool need_sync)11 rk_aiq_uapi_amfnr_SetAttrib_v1(RkAiqAlgoContext *ctx,
12 rk_aiq_mfnr_attrib_v1_t *attr,
13 bool need_sync)
14 {
15
16 Amfnr_Context_V1_t* pAmfnrCtx = (Amfnr_Context_V1_t*)ctx;
17
18 pAmfnrCtx->eMode = attr->eMode;
19 pAmfnrCtx->stAuto = attr->stAuto;
20 pAmfnrCtx->stManual = attr->stManual;
21
22 return XCAM_RETURN_NO_ERROR;
23 }
24
25 XCamReturn
rk_aiq_uapi_amfnr_GetAttrib_v1(const RkAiqAlgoContext * ctx,rk_aiq_mfnr_attrib_v1_t * attr)26 rk_aiq_uapi_amfnr_GetAttrib_v1(const RkAiqAlgoContext *ctx,
27 rk_aiq_mfnr_attrib_v1_t *attr)
28 {
29
30 Amfnr_Context_V1_t* pAmfnrCtx = (Amfnr_Context_V1_t*)ctx;
31
32 attr->eMode = pAmfnrCtx->eMode;
33 memcpy(&attr->stAuto, &pAmfnrCtx->stAuto, sizeof(Amfnr_Auto_Attr_V1_t));
34 memcpy(&attr->stManual, &pAmfnrCtx->stManual, sizeof(Amfnr_Manual_Attr_V1_t));
35
36 return XCAM_RETURN_NO_ERROR;
37 }
38
39 XCamReturn
rk_aiq_uapi_amfnr_SetIQPara_v1(RkAiqAlgoContext * ctx,rk_aiq_mfnr_IQPara_V1_t * pPara,bool need_sync)40 rk_aiq_uapi_amfnr_SetIQPara_v1(RkAiqAlgoContext *ctx,
41 rk_aiq_mfnr_IQPara_V1_t *pPara,
42 bool need_sync)
43 {
44 #ifdef RKAIQ_ENABLE_PARSER_V1
45 Amfnr_Context_V1_t* pAmfnrCtx = (Amfnr_Context_V1_t*)ctx;
46
47 CalibDb_MFNR_2_t calibdb_2;
48 memset(&calibdb_2, 0x00, sizeof(calibdb_2));
49 calibdb_2.mode_num = sizeof(pPara->stMfnrPara.mode_cell) / sizeof(CalibDb_MFNR_ModeCell_t);
50 calibdb_2.mode_cell = (CalibDb_MFNR_ModeCell_t *)malloc(calibdb_2.mode_num * sizeof(CalibDb_MFNR_ModeCell_t));
51
52 calibdb_2.enable = pPara->stMfnrPara.enable;
53 memcpy(calibdb_2.version, pPara->stMfnrPara.version, sizeof(pPara->stMfnrPara.version));
54 calibdb_2.local_gain_en = pPara->stMfnrPara.local_gain_en;
55 calibdb_2.motion_detect_en = pPara->stMfnrPara.motion_detect_en;
56 calibdb_2.mode_3to1 = pPara->stMfnrPara.mode_3to1;
57 calibdb_2.max_level = pPara->stMfnrPara.max_level;
58 calibdb_2.max_level_uv = pPara->stMfnrPara.max_level_uv;
59 calibdb_2.back_ref_num = pPara->stMfnrPara.back_ref_num;
60 for(int i = 0; i < 4; i++) {
61 calibdb_2.uv_ratio[i] = pPara->stMfnrPara.uv_ratio[i];
62 }
63 for(int i = 0; i < calibdb_2.mode_num; i++) {
64 calibdb_2.mode_cell[i] = pPara->stMfnrPara.mode_cell[i];
65 }
66 pAmfnrCtx->isIQParaUpdate = true;
67
68 #if(AMFNR_USE_JSON_PARA_V1)
69 mfnrV1_calibdb_to_calibdbV2(&calibdb_2, &pAmfnrCtx->mfnr_v1, 0);
70 #else
71 pAmfnrCtx->stMfnrCalib.enable = calibdb_2.enable;
72 memcpy(pAmfnrCtx->stMfnrCalib.version, calibdb_2.version, sizeof(pPara->stMfnrPara.version));
73 pAmfnrCtx->stMfnrCalib.local_gain_en = calibdb_2.local_gain_en;
74 pAmfnrCtx->stMfnrCalib.motion_detect_en = calibdb_2.motion_detect_en;
75 pAmfnrCtx->stMfnrCalib.mode_3to1 = calibdb_2.mode_3to1;
76 pAmfnrCtx->stMfnrCalib.max_level = calibdb_2.max_level;
77 pAmfnrCtx->stMfnrCalib.max_level_uv = calibdb_2.max_level_uv;
78 pAmfnrCtx->stMfnrCalib.back_ref_num = calibdb_2.back_ref_num;
79 for(int i = 0; i < 4; i++) {
80 pAmfnrCtx->stMfnrCalib.uv_ratio[i] = calibdb_2.uv_ratio[i];
81 }
82 for(int i = 0; i < calibdb_2.mode_num && i < pAmfnrCtx->stMfnrCalib.mode_num; i++) {
83 pAmfnrCtx->stMfnrCalib.mode_cell[i] = calibdb_2.mode_cell[i];
84 }
85 #endif
86
87 free(calibdb_2.mode_cell);
88
89 return XCAM_RETURN_NO_ERROR;
90 #else
91 return XCAM_RETURN_ERROR_PARAM;
92 #endif
93 }
94
95
96 XCamReturn
rk_aiq_uapi_amfnr_GetIQPara_v1(RkAiqAlgoContext * ctx,rk_aiq_mfnr_IQPara_V1_t * pPara)97 rk_aiq_uapi_amfnr_GetIQPara_v1(RkAiqAlgoContext *ctx,
98 rk_aiq_mfnr_IQPara_V1_t *pPara)
99 {
100 #ifdef RKAIQ_ENABLE_PARSER_V1
101 Amfnr_Context_V1_t* pAmfnrCtx = (Amfnr_Context_V1_t*)ctx;
102
103 if(ctx != NULL && pPara != NULL) {
104 CalibDb_MFNR_2_t calibdb_2;
105 memset(&calibdb_2, 0x00, sizeof(calibdb_2));
106 calibdb_2.mode_num = sizeof(pPara->stMfnrPara.mode_cell) / sizeof(CalibDb_MFNR_ModeCell_t);
107 calibdb_2.mode_cell = (CalibDb_MFNR_ModeCell_t *)malloc(calibdb_2.mode_num * sizeof(CalibDb_MFNR_ModeCell_t));
108
109 #if(AMFNR_USE_JSON_PARA_V1)
110 mfnrV1_calibdbV2_to_calibdb(&pAmfnrCtx->mfnr_v1, &calibdb_2, 0);
111 #else
112 calibdb_2.enable = pAmfnrCtx->stMfnrCalib.enable;
113 memcpy(calibdb_2.version, pAmfnrCtx->stMfnrCalib.version, sizeof(pPara->stMfnrPara.version));
114 calibdb_2.local_gain_en = pAmfnrCtx->stMfnrCalib.local_gain_en;
115 calibdb_2.motion_detect_en = pAmfnrCtx->stMfnrCalib.motion_detect_en;
116 calibdb_2.mode_3to1 = pAmfnrCtx->stMfnrCalib.mode_3to1;
117 calibdb_2.max_level = pAmfnrCtx->stMfnrCalib.max_level;
118 calibdb_2.max_level_uv = pAmfnrCtx->stMfnrCalib.max_level_uv;
119 calibdb_2.back_ref_num = pAmfnrCtx->stMfnrCalib.back_ref_num;
120 for(int i = 0; i < 4; i++) {
121 calibdb_2.uv_ratio[i] = pAmfnrCtx->stMfnrCalib.uv_ratio[i];
122 }
123 for(int i = 0; i < calibdb_2.mode_num && i < pAmfnrCtx->stMfnrCalib.mode_num; i++) {
124 calibdb_2.mode_cell[i] = pAmfnrCtx->stMfnrCalib.mode_cell[i];
125 }
126 #endif
127
128 memset(&pPara->stMfnrPara, 0x00, sizeof(CalibDb_MFNR_t));
129 pPara->stMfnrPara.enable = calibdb_2.enable;
130 memcpy(pPara->stMfnrPara.version, calibdb_2.version, sizeof(pPara->stMfnrPara.version));
131 pPara->stMfnrPara.local_gain_en = calibdb_2.local_gain_en;
132 pPara->stMfnrPara.motion_detect_en = calibdb_2.motion_detect_en;
133 pPara->stMfnrPara.mode_3to1 = calibdb_2.mode_3to1;
134 pPara->stMfnrPara.max_level = calibdb_2.max_level;
135 pPara->stMfnrPara.max_level_uv = calibdb_2.max_level_uv;
136 pPara->stMfnrPara.back_ref_num = calibdb_2.back_ref_num;
137 for(int i = 0; i < 4; i++) {
138 pPara->stMfnrPara.uv_ratio[i] = calibdb_2.uv_ratio[i];
139 }
140 for(int i = 0; i < calibdb_2.mode_num && i < CALIBDB_MAX_MODE_NUM; i++) {
141 pPara->stMfnrPara.mode_cell[i] = calibdb_2.mode_cell[i];
142 }
143
144 free(calibdb_2.mode_cell);
145 }
146 return XCAM_RETURN_NO_ERROR;
147 #else
148 return XCAM_RETURN_ERROR_PARAM;
149 #endif
150 }
151
152
153 XCamReturn
rk_aiq_uapi_amfnr_SetLumaTFStrength_v1(const RkAiqAlgoContext * ctx,float fPercent)154 rk_aiq_uapi_amfnr_SetLumaTFStrength_v1(const RkAiqAlgoContext *ctx,
155 float fPercent)
156 {
157 Amfnr_Context_V1_t* pAmfnrCtx = (Amfnr_Context_V1_t*)ctx;
158
159 float fStrength = 1.0f;
160 float fMax = MFNR_LUMA_TF_STRENGTH_MAX_PERCENT;
161
162
163 if(fPercent <= 0.5) {
164 fStrength = fPercent / 0.5;
165 } else {
166 fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
167 }
168
169
170 pAmfnrCtx->fLuma_TF_Strength = fStrength;
171
172
173 printf("%s:%d fPercent:%f strenght:%f amfnr:%f\n ", __FUNCTION__, __LINE__, fPercent, fStrength, pAmfnrCtx->fLuma_TF_Strength);
174 return XCAM_RETURN_NO_ERROR;
175 }
176
177
178
179 XCamReturn
rk_aiq_uapi_amfnr_GetLumaTFStrength_v1(const RkAiqAlgoContext * ctx,float * pPercent)180 rk_aiq_uapi_amfnr_GetLumaTFStrength_v1(const RkAiqAlgoContext *ctx,
181 float *pPercent)
182 {
183 Amfnr_Context_V1_t* pAmfnrCtx = (Amfnr_Context_V1_t*)ctx;
184
185 float fStrength = 1.0f;
186 float fMax = MFNR_LUMA_TF_STRENGTH_MAX_PERCENT;
187
188
189 fStrength = pAmfnrCtx->fLuma_TF_Strength;
190
191 if(fStrength <= 1) {
192 *pPercent = fStrength * 0.5;
193 } else {
194 *pPercent = (fStrength - 1) / ((fMax - 1) * 2) + 0.5;
195 }
196
197 printf("%s:%d amfnr:%f fStrength:%f pPercent:%f\n ", __FUNCTION__, __LINE__, pAmfnrCtx->fLuma_TF_Strength, fStrength, *pPercent);
198 return XCAM_RETURN_NO_ERROR;
199 }
200
201
202 XCamReturn
rk_aiq_uapi_amfnr_SetChromaTFStrength_v1(const RkAiqAlgoContext * ctx,float fPercent)203 rk_aiq_uapi_amfnr_SetChromaTFStrength_v1(const RkAiqAlgoContext *ctx,
204 float fPercent)
205 {
206 Amfnr_Context_V1_t* pAmfnrCtx = (Amfnr_Context_V1_t*)ctx;
207
208 float fStrength = 1.0;
209 float fMax = MFNR_CHROMA_TF_STRENGTH_MAX_PERCENT;
210
211 if(fPercent <= 0.5) {
212 fStrength = fPercent / 0.5;
213 } else {
214 fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
215 }
216
217 pAmfnrCtx->fChroma_TF_Strength = fStrength;
218
219 return XCAM_RETURN_NO_ERROR;
220 }
221
222 XCamReturn
rk_aiq_uapi_amfnr_GetChromaTFStrength_v1(const RkAiqAlgoContext * ctx,float * pPercent)223 rk_aiq_uapi_amfnr_GetChromaTFStrength_v1(const RkAiqAlgoContext *ctx,
224 float *pPercent)
225 {
226 Amfnr_Context_V1_t* pAmfnrCtx = (Amfnr_Context_V1_t*)ctx;
227
228 float fStrength = 1.0;
229 float fMax = MFNR_CHROMA_TF_STRENGTH_MAX_PERCENT;
230
231 fStrength = pAmfnrCtx->fChroma_TF_Strength;
232
233 if(fStrength <= 1) {
234 *pPercent = fStrength * 0.5;
235 } else {
236 *pPercent = (fStrength - 1) / ((fMax - 1) * 2) + 0.5;
237 }
238
239 return XCAM_RETURN_NO_ERROR;
240 }
241
242
243
244 XCamReturn
rk_aiq_uapi_amfnr_SetJsonPara_v1(RkAiqAlgoContext * ctx,rk_aiq_mfnr_JsonPara_V1_t * pPara,bool need_sync)245 rk_aiq_uapi_amfnr_SetJsonPara_v1(RkAiqAlgoContext *ctx,
246 rk_aiq_mfnr_JsonPara_V1_t *pPara,
247 bool need_sync)
248 {
249
250 Amfnr_Context_V1_t* pAmfnrCtx = (Amfnr_Context_V1_t*)ctx;
251
252 mfnr_calibdbV2_assign_v1(&pAmfnrCtx->mfnr_v1, &pPara->mfnr_v1);
253 pAmfnrCtx->isIQParaUpdate = true;
254
255 return XCAM_RETURN_NO_ERROR;
256 }
257
258
259
260 XCamReturn
rk_aiq_uapi_amfnr_GetJsonPara_v1(RkAiqAlgoContext * ctx,rk_aiq_mfnr_JsonPara_V1_t * pPara)261 rk_aiq_uapi_amfnr_GetJsonPara_v1(RkAiqAlgoContext *ctx,
262 rk_aiq_mfnr_JsonPara_V1_t *pPara)
263 {
264
265 Amfnr_Context_V1_t* pAmfnrCtx = (Amfnr_Context_V1_t*)ctx;
266
267 mfnr_calibdbV2_assign_v1(&pPara->mfnr_v1, &pAmfnrCtx->mfnr_v1);
268
269 return XCAM_RETURN_NO_ERROR;
270 }
271
272
273 #endif
274
275