xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/amfnr/rk_aiq_uapi_amfnr_int_v1.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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