1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * Copyright (c) 2019 Rockchip Corporation
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Licensed under the Apache License, Version 2.0 (the "License");
5*4882a593Smuzhiyun * you may not use this file except in compliance with the License.
6*4882a593Smuzhiyun * You may obtain a copy of the License at
7*4882a593Smuzhiyun *
8*4882a593Smuzhiyun * http://www.apache.org/licenses/LICENSE-2.0
9*4882a593Smuzhiyun *
10*4882a593Smuzhiyun * Unless required by applicable law or agreed to in writing, software
11*4882a593Smuzhiyun * distributed under the License is distributed on an "AS IS" BASIS,
12*4882a593Smuzhiyun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4882a593Smuzhiyun * See the License for the specific language governing permissions and
14*4882a593Smuzhiyun * limitations under the License.
15*4882a593Smuzhiyun *
16*4882a593Smuzhiyun */
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun #include "RkAiqCalibDb.h"
20*4882a593Smuzhiyun #include <unistd.h>
21*4882a593Smuzhiyun #include <sys/types.h>
22*4882a593Smuzhiyun #include <sys/stat.h>
23*4882a593Smuzhiyun #include <fcntl.h>
24*4882a593Smuzhiyun #include <stdio.h>
25*4882a593Smuzhiyun #include "RkAiqCalibApi.h"
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun #define FUNC_ENTER LOG1("%s enter", __FUNCTION__);
29*4882a593Smuzhiyun #define FUNC_EXIT LOG1("%s exit", __FUNCTION__);
30*4882a593Smuzhiyun #define CALIBDB_PATH_LEN 256
31*4882a593Smuzhiyun #define CALIBDB_ENV_PATH_STR "rkaiq_calibdb_path"
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun namespace RkCam {
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun namespace {
36*4882a593Smuzhiyun // TODO: implement ops for different isp hw
calibdbV1_ctx_size(CamCalibDbContext_t * ctx)37*4882a593Smuzhiyun static inline size_t calibdbV1_ctx_size(CamCalibDbContext_t* ctx) {
38*4882a593Smuzhiyun if (CHECK_ISP_HW_V20())
39*4882a593Smuzhiyun return sizeof(CamCalibDbContextIsp20_t);
40*4882a593Smuzhiyun else if (CHECK_ISP_HW_V21())
41*4882a593Smuzhiyun return sizeof(CamCalibDbContextIsp21_t);
42*4882a593Smuzhiyun else
43*4882a593Smuzhiyun return sizeof(CamCalibDbContextIsp20_t);
44*4882a593Smuzhiyun }
45*4882a593Smuzhiyun
calibdbV1_ctx_new()46*4882a593Smuzhiyun static inline CamCalibDbContext_t* calibdbV1_ctx_new() {
47*4882a593Smuzhiyun if (CHECK_ISP_HW_V20())
48*4882a593Smuzhiyun return new (CamCalibDbContextIsp20_t);
49*4882a593Smuzhiyun else if (CHECK_ISP_HW_V21())
50*4882a593Smuzhiyun return new (CamCalibDbContextIsp21_t);
51*4882a593Smuzhiyun else
52*4882a593Smuzhiyun return NULL;
53*4882a593Smuzhiyun }
54*4882a593Smuzhiyun
calibdbV1_ctx_delete(CamCalibDbContext_t * ctx)55*4882a593Smuzhiyun static inline void calibdbV1_ctx_delete(CamCalibDbContext_t* ctx) {
56*4882a593Smuzhiyun if (CHECK_ISP_HW_V20())
57*4882a593Smuzhiyun delete (CamCalibDbContextIsp20_t*)ctx;
58*4882a593Smuzhiyun else if (CHECK_ISP_HW_V21())
59*4882a593Smuzhiyun delete (CamCalibDbContextIsp21_t*)ctx;
60*4882a593Smuzhiyun }
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun } // namespace
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun map<string, CamCalibDbContext_t*> RkAiqCalibDb::mCalibDbsMap;
65*4882a593Smuzhiyun XCam::Mutex RkAiqCalibDb::mMutex{false};
66*4882a593Smuzhiyun
calibGetEnviromentPath(const char * variable,char * value)67*4882a593Smuzhiyun static bool calibGetEnviromentPath(const char* variable, char* value)
68*4882a593Smuzhiyun {
69*4882a593Smuzhiyun if (!variable || !value) {
70*4882a593Smuzhiyun return false;
71*4882a593Smuzhiyun }
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun char* valueStr = getenv(variable);
74*4882a593Smuzhiyun if (valueStr) {
75*4882a593Smuzhiyun strncpy(value, valueStr, CALIBDB_PATH_LEN - 100 - 2);
76*4882a593Smuzhiyun return true;
77*4882a593Smuzhiyun }
78*4882a593Smuzhiyun return false;
79*4882a593Smuzhiyun }
80*4882a593Smuzhiyun
getFilePathName(char * iqFile,char * location)81*4882a593Smuzhiyun static void getFilePathName(char* iqFile, char *location)
82*4882a593Smuzhiyun {
83*4882a593Smuzhiyun char dir[CALIBDB_PATH_LEN - 100 - 1];
84*4882a593Smuzhiyun char name[100 - 1 - 5];
85*4882a593Smuzhiyun char *srcfile = strdup(iqFile);
86*4882a593Smuzhiyun char *pstart = strrchr(srcfile, '/');
87*4882a593Smuzhiyun char *pend = strrchr(srcfile, '.');
88*4882a593Smuzhiyun *pend = '\0';
89*4882a593Smuzhiyun strcpy(name, pstart + 1);
90*4882a593Smuzhiyun if (calibGetEnviromentPath(CALIBDB_ENV_PATH_STR, dir)) {
91*4882a593Smuzhiyun snprintf(location, CALIBDB_PATH_LEN, "%s/%s.bin", dir, name);
92*4882a593Smuzhiyun } else {
93*4882a593Smuzhiyun snprintf(location, CALIBDB_PATH_LEN, "%s.bin", srcfile);
94*4882a593Smuzhiyun }
95*4882a593Smuzhiyun free(srcfile);
96*4882a593Smuzhiyun LOGD("calibdb file is %s", location);
97*4882a593Smuzhiyun }
98*4882a593Smuzhiyun
getFilePathName2(char * iqFile,char * newName)99*4882a593Smuzhiyun static void getFilePathName2(char* iqFile, char *newName)
100*4882a593Smuzhiyun {
101*4882a593Smuzhiyun char dir[CALIBDB_PATH_LEN - 100 - 1];
102*4882a593Smuzhiyun char name[100 - 1 - 10];
103*4882a593Smuzhiyun char *srcfile = strdup(iqFile);
104*4882a593Smuzhiyun char *pstart = strrchr(srcfile, '/');
105*4882a593Smuzhiyun char *pend = strrchr(srcfile, '.');
106*4882a593Smuzhiyun *pend = '\0';
107*4882a593Smuzhiyun strcpy(name, pstart + 1);
108*4882a593Smuzhiyun if (calibGetEnviromentPath(CALIBDB_ENV_PATH_STR, dir)) {
109*4882a593Smuzhiyun snprintf(newName, CALIBDB_PATH_LEN, "%s/%s_write.xml", dir, name);
110*4882a593Smuzhiyun } else {
111*4882a593Smuzhiyun snprintf(newName, CALIBDB_PATH_LEN, "%s_write.xml", srcfile);
112*4882a593Smuzhiyun }
113*4882a593Smuzhiyun free(srcfile);
114*4882a593Smuzhiyun LOGD("calibdb file is %s", newName);
115*4882a593Smuzhiyun }
116*4882a593Smuzhiyun
isDataBinExist(char * iqFile)117*4882a593Smuzhiyun static bool isDataBinExist(char* iqFile) {
118*4882a593Smuzhiyun char path[CALIBDB_PATH_LEN];
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun getFilePathName(iqFile, path);
121*4882a593Smuzhiyun if (0 == access(path, F_OK))
122*4882a593Smuzhiyun return true;
123*4882a593Smuzhiyun else
124*4882a593Smuzhiyun return false;
125*4882a593Smuzhiyun }
126*4882a593Smuzhiyun
persist(int fd,int payload_size,char * payload_ptr)127*4882a593Smuzhiyun static int persist(int fd, int payload_size, char* payload_ptr) {
128*4882a593Smuzhiyun int ret = true;
129*4882a593Smuzhiyun
130*4882a593Smuzhiyun LOGD("persist payload_size %d bytes", payload_size);
131*4882a593Smuzhiyun if (write(fd, payload_ptr, payload_size) <= 0) {
132*4882a593Smuzhiyun LOGE("persist cell failed\n");
133*4882a593Smuzhiyun return -1;
134*4882a593Smuzhiyun }
135*4882a593Smuzhiyun
136*4882a593Smuzhiyun return 0;
137*4882a593Smuzhiyun }
138*4882a593Smuzhiyun
reconstruct(int fd,int payload_size,char ** payload_ptr)139*4882a593Smuzhiyun static int reconstruct(int fd, int payload_size, char** payload_ptr) {
140*4882a593Smuzhiyun *payload_ptr = (char*)malloc(payload_size);
141*4882a593Smuzhiyun if (*payload_ptr == NULL)
142*4882a593Smuzhiyun return -1;
143*4882a593Smuzhiyun LOGD("malloc payload_ptr %p, size %d bytes", *payload_ptr, payload_size);
144*4882a593Smuzhiyun if (read(fd, *payload_ptr, payload_size) <= 0) {
145*4882a593Smuzhiyun LOGE("reconstruct cell failed %s!\n", strerror(errno));
146*4882a593Smuzhiyun free(*payload_ptr);
147*4882a593Smuzhiyun return -1;
148*4882a593Smuzhiyun }
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun return 0;
151*4882a593Smuzhiyun }
152*4882a593Smuzhiyun
persistCalib(int fd,CamCalibDbContext_t * pcalib)153*4882a593Smuzhiyun static int persistCalib(int fd, CamCalibDbContext_t* pcalib) {
154*4882a593Smuzhiyun int ret = 0;
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun if (!CHECK_ISP_HW_V20()) {
157*4882a593Smuzhiyun LOGE("only support isp20 calibv1 !");
158*4882a593Smuzhiyun return -1;
159*4882a593Smuzhiyun }
160*4882a593Smuzhiyun CamCalibDbContextIsp20_t* calib = TO_CALIBDBV1_ISP20(pcalib);
161*4882a593Smuzhiyun ret |= persist(fd, sizeof(CamCalibDbContextIsp20_t), (char*)calib);
162*4882a593Smuzhiyun LOGD("CamCalibDbContextIsp20_t size %d bytes", sizeof(CamCalibDbContextIsp20_t));
163*4882a593Smuzhiyun // points
164*4882a593Smuzhiyun ret |= persist(fd,
165*4882a593Smuzhiyun sizeof(CalibDb_BayerNr_ModeCell_t) * calib->bayerNr.mode_num,
166*4882a593Smuzhiyun (char*)(calib->bayerNr.mode_cell));
167*4882a593Smuzhiyun ret |= persist(fd,
168*4882a593Smuzhiyun sizeof(CalibDb_LscTableProfile_t) * calib->lsc.tableAllNum,
169*4882a593Smuzhiyun (char*)(calib->lsc.tableAll));
170*4882a593Smuzhiyun ret |= persist(fd,
171*4882a593Smuzhiyun sizeof(CalibDb_UVNR_ModeCell_t) * calib->uvnr.mode_num,
172*4882a593Smuzhiyun (char*)(calib->uvnr.mode_cell));
173*4882a593Smuzhiyun ret |= persist(fd,
174*4882a593Smuzhiyun sizeof(CalibDb_YNR_ModeCell_t) * calib->ynr.mode_num,
175*4882a593Smuzhiyun (char*)(calib->ynr.mode_cell));
176*4882a593Smuzhiyun ret |= persist(fd,
177*4882a593Smuzhiyun sizeof(CalibDb_MFNR_ModeCell_t) * calib->mfnr.mode_num,
178*4882a593Smuzhiyun (char*)(calib->mfnr.mode_cell));
179*4882a593Smuzhiyun ret |= persist(fd,
180*4882a593Smuzhiyun sizeof(CalibDb_Sharp_ModeCell_t) * calib->sharp.mode_num,
181*4882a593Smuzhiyun (char*)(calib->sharp.mode_cell));
182*4882a593Smuzhiyun ret |= persist(fd,
183*4882a593Smuzhiyun sizeof(CalibDb_EdgeFilter_ModeCell_t) * calib->edgeFilter.mode_num,
184*4882a593Smuzhiyun (char*)(calib->edgeFilter.mode_cell));
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun return ret;
187*4882a593Smuzhiyun }
188*4882a593Smuzhiyun
reconstructCalib(int fd,CamCalibDbContext_t * pcalib)189*4882a593Smuzhiyun static int reconstructCalib(int fd, CamCalibDbContext_t* pcalib) {
190*4882a593Smuzhiyun int ret = 0;
191*4882a593Smuzhiyun
192*4882a593Smuzhiyun if (!CHECK_ISP_HW_V20()) {
193*4882a593Smuzhiyun LOGE("only support isp20 calibv1 !");
194*4882a593Smuzhiyun return -1;
195*4882a593Smuzhiyun }
196*4882a593Smuzhiyun CamCalibDbContextIsp20_t* calib = TO_CALIBDBV1_ISP20(pcalib);
197*4882a593Smuzhiyun if (read(fd, calib, sizeof(CamCalibDbContextIsp20_t)) <= 0)
198*4882a593Smuzhiyun return -1;
199*4882a593Smuzhiyun LOGD("CamCalibDbContextIsp20_t size %d bytes", sizeof(CamCalibDbContextIsp20_t));
200*4882a593Smuzhiyun // reconstruct points
201*4882a593Smuzhiyun ret |= reconstruct(fd,
202*4882a593Smuzhiyun sizeof(CalibDb_BayerNr_ModeCell_t) * calib->bayerNr.mode_num,
203*4882a593Smuzhiyun (char**)(&calib->bayerNr.mode_cell));
204*4882a593Smuzhiyun ret |= reconstruct(fd,
205*4882a593Smuzhiyun sizeof(CalibDb_LscTableProfile_t) * calib->lsc.tableAllNum,
206*4882a593Smuzhiyun (char**)(&calib->lsc.tableAll));
207*4882a593Smuzhiyun ret |= reconstruct(fd,
208*4882a593Smuzhiyun sizeof(CalibDb_UVNR_ModeCell_t) * calib->uvnr.mode_num,
209*4882a593Smuzhiyun (char**)(&calib->uvnr.mode_cell));
210*4882a593Smuzhiyun ret |= reconstruct(fd,
211*4882a593Smuzhiyun sizeof(CalibDb_YNR_ModeCell_t) * calib->ynr.mode_num,
212*4882a593Smuzhiyun (char**)(&calib->ynr.mode_cell));
213*4882a593Smuzhiyun ret |= reconstruct(fd,
214*4882a593Smuzhiyun sizeof(CalibDb_MFNR_ModeCell_t) * calib->mfnr.mode_num,
215*4882a593Smuzhiyun (char**)(&calib->mfnr.mode_cell));
216*4882a593Smuzhiyun ret |= reconstruct(fd,
217*4882a593Smuzhiyun sizeof(CalibDb_Sharp_ModeCell_t) * calib->sharp.mode_num,
218*4882a593Smuzhiyun (char**)(&calib->sharp.mode_cell));
219*4882a593Smuzhiyun ret |= reconstruct(fd,
220*4882a593Smuzhiyun sizeof(CalibDb_EdgeFilter_ModeCell_t) * calib->edgeFilter.mode_num,
221*4882a593Smuzhiyun (char**)(&calib->edgeFilter.mode_cell));
222*4882a593Smuzhiyun
223*4882a593Smuzhiyun return ret;
224*4882a593Smuzhiyun }
225*4882a593Smuzhiyun
calibSaveToFile(char * iqFile,CamCalibDbContext_t * calib)226*4882a593Smuzhiyun static bool calibSaveToFile(char* iqFile, CamCalibDbContext_t* calib)
227*4882a593Smuzhiyun {
228*4882a593Smuzhiyun int fd;
229*4882a593Smuzhiyun bool ret = true;
230*4882a593Smuzhiyun char path[CALIBDB_PATH_LEN];
231*4882a593Smuzhiyun
232*4882a593Smuzhiyun getFilePathName(iqFile, path);
233*4882a593Smuzhiyun fd = open(path, O_CREAT | O_TRUNC | O_RDWR | O_SYNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
234*4882a593Smuzhiyun if (fd < 0) {
235*4882a593Smuzhiyun ret = false;
236*4882a593Smuzhiyun LOGE("open %s failed!", path);
237*4882a593Smuzhiyun } else {
238*4882a593Smuzhiyun lseek(fd, 0, SEEK_SET);
239*4882a593Smuzhiyun if (persistCalib(fd, calib)) {
240*4882a593Smuzhiyun LOGE("write %s failed!\n", path);
241*4882a593Smuzhiyun remove(path);
242*4882a593Smuzhiyun ret = false;
243*4882a593Smuzhiyun }
244*4882a593Smuzhiyun close(fd);
245*4882a593Smuzhiyun }
246*4882a593Smuzhiyun return ret;
247*4882a593Smuzhiyun }
248*4882a593Smuzhiyun
calibReadFromFile(char * iqFile,CamCalibDbContext_t * calib)249*4882a593Smuzhiyun static bool calibReadFromFile(char* iqFile, CamCalibDbContext_t* calib)
250*4882a593Smuzhiyun {
251*4882a593Smuzhiyun int fd;
252*4882a593Smuzhiyun bool ret = true;
253*4882a593Smuzhiyun char path[CALIBDB_PATH_LEN];
254*4882a593Smuzhiyun
255*4882a593Smuzhiyun getFilePathName(iqFile, path);
256*4882a593Smuzhiyun fd = open(path, O_RDONLY | O_SYNC);
257*4882a593Smuzhiyun if (fd < 0) {
258*4882a593Smuzhiyun ret = false;
259*4882a593Smuzhiyun } else {
260*4882a593Smuzhiyun lseek(fd, 0, SEEK_SET);
261*4882a593Smuzhiyun if (reconstructCalib(fd, calib)) {
262*4882a593Smuzhiyun LOGE("read %s failed!\n", path);
263*4882a593Smuzhiyun ret = false;
264*4882a593Smuzhiyun }
265*4882a593Smuzhiyun close(fd);
266*4882a593Smuzhiyun }
267*4882a593Smuzhiyun
268*4882a593Smuzhiyun return ret;
269*4882a593Smuzhiyun }
270*4882a593Smuzhiyun
_calc_checksum(CamCalibDbContext_t * CalibDb)271*4882a593Smuzhiyun static uint32_t _calc_checksum(CamCalibDbContext_t *CalibDb) {
272*4882a593Smuzhiyun
273*4882a593Smuzhiyun uint32_t checkSum = 0;
274*4882a593Smuzhiyun uint32_t i = 0;
275*4882a593Smuzhiyun uint32_t *data = NULL;
276*4882a593Smuzhiyun uint32_t size = 0;
277*4882a593Smuzhiyun
278*4882a593Smuzhiyun if (!CHECK_ISP_HW_V20()) {
279*4882a593Smuzhiyun LOGE("only support isp20 calibv1 !");
280*4882a593Smuzhiyun return -1;
281*4882a593Smuzhiyun }
282*4882a593Smuzhiyun CamCalibDbContextIsp20_t* pCalibDb = TO_CALIBDBV1_ISP20(CalibDb);
283*4882a593Smuzhiyun
284*4882a593Smuzhiyun #define CALC_SUM(data,size) \
285*4882a593Smuzhiyun for(i = 0; i < sizeof(size) / 4; i++) { \
286*4882a593Smuzhiyun checkSum += *data; \
287*4882a593Smuzhiyun data++; \
288*4882a593Smuzhiyun }
289*4882a593Smuzhiyun
290*4882a593Smuzhiyun // header
291*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->header);
292*4882a593Smuzhiyun size = sizeof(CalibDb_Header_t) ;
293*4882a593Smuzhiyun CALC_SUM(data, size);
294*4882a593Smuzhiyun #if 0 // TODO Merge
295*4882a593Smuzhiyun // awb
296*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->awb);
297*4882a593Smuzhiyun size = sizeof(CalibDb_Awb_Para_t) ;
298*4882a593Smuzhiyun CALC_SUM(data, size);
299*4882a593Smuzhiyun #endif
300*4882a593Smuzhiyun // lut3d
301*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->lut3d);
302*4882a593Smuzhiyun size = sizeof(CalibDb_Lut3d_t) ;
303*4882a593Smuzhiyun CALC_SUM(data, size);
304*4882a593Smuzhiyun
305*4882a593Smuzhiyun // aec
306*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->aec);
307*4882a593Smuzhiyun size = sizeof(CalibDb_Aec_Para_t) ;
308*4882a593Smuzhiyun CALC_SUM(data, size);
309*4882a593Smuzhiyun
310*4882a593Smuzhiyun // af
311*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->af);
312*4882a593Smuzhiyun size = sizeof(CalibDb_AF_t) ;
313*4882a593Smuzhiyun CALC_SUM(data, size);
314*4882a593Smuzhiyun
315*4882a593Smuzhiyun // ahdr
316*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->atmo);
317*4882a593Smuzhiyun size = sizeof(CalibDb_Atmo_Para_t) ;
318*4882a593Smuzhiyun CALC_SUM(data, size);
319*4882a593Smuzhiyun
320*4882a593Smuzhiyun // ahdr
321*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->amerge);
322*4882a593Smuzhiyun size = sizeof(CalibDb_Amerge_Para_t) ;
323*4882a593Smuzhiyun CALC_SUM(data, size);
324*4882a593Smuzhiyun
325*4882a593Smuzhiyun // ablc
326*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->blc);
327*4882a593Smuzhiyun size = sizeof(CalibDb_Blc_t) ;
328*4882a593Smuzhiyun CALC_SUM(data, size);
329*4882a593Smuzhiyun
330*4882a593Smuzhiyun // dpcc
331*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->dpcc);
332*4882a593Smuzhiyun size = sizeof(CalibDb_Dpcc_t) ;
333*4882a593Smuzhiyun CALC_SUM(data, size);
334*4882a593Smuzhiyun
335*4882a593Smuzhiyun // bayer nr
336*4882a593Smuzhiyun data = (uint32_t*)(pCalibDb->bayerNr.mode_cell);
337*4882a593Smuzhiyun size = pCalibDb->bayerNr.mode_num * sizeof(CalibDb_BayerNr_ModeCell_t);
338*4882a593Smuzhiyun CALC_SUM(data, size);
339*4882a593Smuzhiyun
340*4882a593Smuzhiyun // lsc
341*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->lsc.aLscCof);
342*4882a593Smuzhiyun size = sizeof(CalibDb_AlscCof_t);
343*4882a593Smuzhiyun CALC_SUM(data, size);
344*4882a593Smuzhiyun data = (uint32_t*)(pCalibDb->lsc.tableAll);
345*4882a593Smuzhiyun size = pCalibDb->lsc.tableAllNum * sizeof(CalibDb_LscTableProfile_t);
346*4882a593Smuzhiyun CALC_SUM(data, size);
347*4882a593Smuzhiyun
348*4882a593Smuzhiyun // rkdm
349*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->dm);
350*4882a593Smuzhiyun size = sizeof(CalibDb_RKDM_t) ;
351*4882a593Smuzhiyun CALC_SUM(data, size);
352*4882a593Smuzhiyun
353*4882a593Smuzhiyun // ccm
354*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->ccm);
355*4882a593Smuzhiyun size = sizeof(CalibDb_Ccm_t) ;
356*4882a593Smuzhiyun CALC_SUM(data, size);
357*4882a593Smuzhiyun
358*4882a593Smuzhiyun // uvnr
359*4882a593Smuzhiyun data = (uint32_t*)(pCalibDb->uvnr.mode_cell);
360*4882a593Smuzhiyun size = pCalibDb->uvnr.mode_num * sizeof(CalibDb_UVNR_ModeCell_t);
361*4882a593Smuzhiyun CALC_SUM(data, size);
362*4882a593Smuzhiyun
363*4882a593Smuzhiyun // gamma
364*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->gamma);
365*4882a593Smuzhiyun size = sizeof(CalibDb_Gamma_t ) ;
366*4882a593Smuzhiyun CALC_SUM(data, size);
367*4882a593Smuzhiyun
368*4882a593Smuzhiyun // ynr
369*4882a593Smuzhiyun data = (uint32_t*)(pCalibDb->ynr.mode_cell);
370*4882a593Smuzhiyun size = pCalibDb->ynr.mode_num * sizeof(CalibDb_YNR_ModeCell_t);
371*4882a593Smuzhiyun CALC_SUM(data, size);
372*4882a593Smuzhiyun
373*4882a593Smuzhiyun // gamma
374*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->gic);
375*4882a593Smuzhiyun size = sizeof(CalibDb_Gic_t) ;
376*4882a593Smuzhiyun CALC_SUM(data, size);
377*4882a593Smuzhiyun
378*4882a593Smuzhiyun // mfnr
379*4882a593Smuzhiyun data = (uint32_t*)(pCalibDb->mfnr.mode_cell);
380*4882a593Smuzhiyun size = pCalibDb->mfnr.mode_num * sizeof(CalibDb_MFNR_ModeCell_t);
381*4882a593Smuzhiyun CALC_SUM(data, size);
382*4882a593Smuzhiyun
383*4882a593Smuzhiyun // sharp
384*4882a593Smuzhiyun data = (uint32_t*)(pCalibDb->sharp.mode_cell);
385*4882a593Smuzhiyun size = pCalibDb->sharp.mode_num * sizeof(CalibDb_Sharp_ModeCell_t);
386*4882a593Smuzhiyun CALC_SUM(data, size);
387*4882a593Smuzhiyun
388*4882a593Smuzhiyun // edgefilter
389*4882a593Smuzhiyun data = (uint32_t*)(pCalibDb->edgeFilter.mode_cell);
390*4882a593Smuzhiyun size = pCalibDb->edgeFilter.mode_num * sizeof(CalibDb_EdgeFilter_ModeCell_t);
391*4882a593Smuzhiyun CALC_SUM(data, size);
392*4882a593Smuzhiyun
393*4882a593Smuzhiyun // dehaze
394*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->dehaze);
395*4882a593Smuzhiyun size = sizeof(CalibDb_Dehaze_t) ;
396*4882a593Smuzhiyun CALC_SUM(data, size);
397*4882a593Smuzhiyun
398*4882a593Smuzhiyun // fec
399*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->afec);
400*4882a593Smuzhiyun size = sizeof(CalibDb_FEC_t );
401*4882a593Smuzhiyun CALC_SUM(data, size);
402*4882a593Smuzhiyun
403*4882a593Smuzhiyun // ldch
404*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->aldch);
405*4882a593Smuzhiyun size = sizeof(CalibDb_LDCH_t );
406*4882a593Smuzhiyun CALC_SUM(data, size);
407*4882a593Smuzhiyun
408*4882a593Smuzhiyun // lumaDetect
409*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->lumaDetect);
410*4882a593Smuzhiyun size = sizeof(CalibDb_LUMA_DETECT_t);
411*4882a593Smuzhiyun CALC_SUM(data, size);
412*4882a593Smuzhiyun
413*4882a593Smuzhiyun // orb
414*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->orb);
415*4882a593Smuzhiyun size = sizeof(CalibDb_ORB_t);
416*4882a593Smuzhiyun CALC_SUM(data, size);
417*4882a593Smuzhiyun
418*4882a593Smuzhiyun // sensor
419*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->sensor);
420*4882a593Smuzhiyun size = sizeof(CalibDb_Sensor_Para_t);
421*4882a593Smuzhiyun CALC_SUM(data, size);
422*4882a593Smuzhiyun
423*4882a593Smuzhiyun // module
424*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->module);
425*4882a593Smuzhiyun size = sizeof(CalibDb_Module_Info_t );
426*4882a593Smuzhiyun CALC_SUM(data, size);
427*4882a593Smuzhiyun
428*4882a593Smuzhiyun // cpsl
429*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->cpsl);
430*4882a593Smuzhiyun size = sizeof(CalibDb_Cpsl_t );
431*4882a593Smuzhiyun CALC_SUM(data, size);
432*4882a593Smuzhiyun
433*4882a593Smuzhiyun // colorAsGrey
434*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->colorAsGrey);
435*4882a593Smuzhiyun size = sizeof(CalibDb_ColorAsGrey_t );
436*4882a593Smuzhiyun CALC_SUM(data, size);
437*4882a593Smuzhiyun
438*4882a593Smuzhiyun // ie
439*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->ie);
440*4882a593Smuzhiyun size = sizeof(CalibDb_IE_t);
441*4882a593Smuzhiyun CALC_SUM(data, size);
442*4882a593Smuzhiyun
443*4882a593Smuzhiyun // sysContrl
444*4882a593Smuzhiyun data = (uint32_t*)(&pCalibDb->sysContrl);
445*4882a593Smuzhiyun size = sizeof(CalibDb_System_t);
446*4882a593Smuzhiyun CALC_SUM(data, size);
447*4882a593Smuzhiyun
448*4882a593Smuzhiyun LOGD("%s(%d): iq data checksum:%u \n", __FUNCTION__, __LINE__, checkSum);
449*4882a593Smuzhiyun
450*4882a593Smuzhiyun LOGD("%s(%d): exit\n", __FUNCTION__, __LINE__);
451*4882a593Smuzhiyun return checkSum;
452*4882a593Smuzhiyun }
453*4882a593Smuzhiyun
createCalibDb(char * iqFile)454*4882a593Smuzhiyun CamCalibDbContext_t* RkAiqCalibDb::createCalibDb(char* iqFile)
455*4882a593Smuzhiyun {
456*4882a593Smuzhiyun map<string, CamCalibDbContext_t*>::iterator it;
457*4882a593Smuzhiyun
458*4882a593Smuzhiyun string str(iqFile);
459*4882a593Smuzhiyun
460*4882a593Smuzhiyun it = mCalibDbsMap.find(str);
461*4882a593Smuzhiyun if (it != mCalibDbsMap.end()) {
462*4882a593Smuzhiyun LOGD("use cached calibdb for %s!", iqFile);
463*4882a593Smuzhiyun return it->second;
464*4882a593Smuzhiyun } else {
465*4882a593Smuzhiyun CamCalibDbContext_t *pCalibDb = calibdbV1_ctx_new();
466*4882a593Smuzhiyun if (!pCalibDb)
467*4882a593Smuzhiyun LOGE("not support isp hw ver %d", g_rkaiq_isp_hw_ver);
468*4882a593Smuzhiyun if (pCalibDb) {
469*4882a593Smuzhiyun initCalibDb(pCalibDb);
470*4882a593Smuzhiyun if (0 == access(iqFile, F_OK)) {
471*4882a593Smuzhiyun RkAiqCalibParser parser(pCalibDb);
472*4882a593Smuzhiyun mMutex.lock();
473*4882a593Smuzhiyun bool ret = parser.doParse(iqFile);
474*4882a593Smuzhiyun mMutex.unlock();
475*4882a593Smuzhiyun if (ret) {
476*4882a593Smuzhiyun uint32_t magicCode = calib_check_calc_checksum();
477*4882a593Smuzhiyun if (magicCode != ((CalibDb_Header_t*)pCalibDb)->magic_code)
478*4882a593Smuzhiyun LOGW("magic code is not matched! calculated:%u, readed:%u", magicCode,
479*4882a593Smuzhiyun ((CalibDb_Header_t*)pCalibDb)->magic_code);
480*4882a593Smuzhiyun mCalibDbsMap[str] = pCalibDb;
481*4882a593Smuzhiyun LOGD("create calibdb from %s success.", iqFile);
482*4882a593Smuzhiyun _calc_checksum(pCalibDb);
483*4882a593Smuzhiyun return pCalibDb;
484*4882a593Smuzhiyun } else {
485*4882a593Smuzhiyun LOGE("parse %s failed.", iqFile);
486*4882a593Smuzhiyun }
487*4882a593Smuzhiyun } else if(isDataBinExist(iqFile)) {
488*4882a593Smuzhiyun if (calibReadFromFile(iqFile, pCalibDb)) {
489*4882a593Smuzhiyun uint32_t magicCode = calib_check_calc_checksum();
490*4882a593Smuzhiyun if (magicCode != ((CalibDb_Header_t*)pCalibDb)->magic_code)
491*4882a593Smuzhiyun LOGE("magic code is not matched! calculated:%u, readed:%u", magicCode,
492*4882a593Smuzhiyun ((CalibDb_Header_t*)pCalibDb)->magic_code);
493*4882a593Smuzhiyun mCalibDbsMap[str] = pCalibDb;
494*4882a593Smuzhiyun LOGD("get calibdb from bin success.");
495*4882a593Smuzhiyun _calc_checksum(pCalibDb);
496*4882a593Smuzhiyun return pCalibDb;
497*4882a593Smuzhiyun } else {
498*4882a593Smuzhiyun LOGE("get calibdb from bin failed.");
499*4882a593Smuzhiyun }
500*4882a593Smuzhiyun } else {
501*4882a593Smuzhiyun LOGE("calibdb %s and bin are all not exist!", iqFile);
502*4882a593Smuzhiyun }
503*4882a593Smuzhiyun } else {
504*4882a593Smuzhiyun LOGE("alloc calibdb memory failed.");
505*4882a593Smuzhiyun }
506*4882a593Smuzhiyun }
507*4882a593Smuzhiyun return NULL;
508*4882a593Smuzhiyun }
509*4882a593Smuzhiyun
generateCalibDb(char * iqFileRef,char * iqFileOutput,CamCalibDbContext_t * pCalibDb)510*4882a593Smuzhiyun bool RkAiqCalibDb::generateCalibDb(char* iqFileRef, char* iqFileOutput, CamCalibDbContext_t* pCalibDb)
511*4882a593Smuzhiyun {
512*4882a593Smuzhiyun //map<string, CamCalibDbContext_t*>::iterator it;
513*4882a593Smuzhiyun
514*4882a593Smuzhiyun string str(iqFileRef);
515*4882a593Smuzhiyun
516*4882a593Smuzhiyun //it = mCalibDbsMap.find(str);
517*4882a593Smuzhiyun if (pCalibDb) {
518*4882a593Smuzhiyun RkAiqCalibParser parser(pCalibDb);
519*4882a593Smuzhiyun if (parser.doGenerate(iqFileRef, iqFileOutput)) {
520*4882a593Smuzhiyun mCalibDbsMap[str] = pCalibDb;
521*4882a593Smuzhiyun LOGD("generate calibdb from %s to %s success.", iqFileRef, iqFileOutput);
522*4882a593Smuzhiyun return true;
523*4882a593Smuzhiyun }
524*4882a593Smuzhiyun else {
525*4882a593Smuzhiyun LOGE("generate %s to %s failed.", iqFileRef, iqFileOutput);
526*4882a593Smuzhiyun }
527*4882a593Smuzhiyun }
528*4882a593Smuzhiyun else {
529*4882a593Smuzhiyun LOGE("alloc generate memory failed.");
530*4882a593Smuzhiyun }
531*4882a593Smuzhiyun return false;
532*4882a593Smuzhiyun }
533*4882a593Smuzhiyun
releaseCalibDb()534*4882a593Smuzhiyun void RkAiqCalibDb::releaseCalibDb()
535*4882a593Smuzhiyun {
536*4882a593Smuzhiyun std::map<string, CamCalibDbContext_t*>::iterator it;
537*4882a593Smuzhiyun for (it = mCalibDbsMap.begin(); it != mCalibDbsMap.end(); it++) {
538*4882a593Smuzhiyun CamCalibDbContext_t *pCalibDb = it->second;
539*4882a593Smuzhiyun if(pCalibDb) {
540*4882a593Smuzhiyun CalibDb_Lsc_t* lsc =
541*4882a593Smuzhiyun (CalibDb_Lsc_t*)CALIBDB_GET_MODULE_PTR(pCalibDb, lsc);
542*4882a593Smuzhiyun if(lsc && lsc->tableAll != NULL) {
543*4882a593Smuzhiyun free(lsc->tableAll);
544*4882a593Smuzhiyun
545*4882a593Smuzhiyun }
546*4882a593Smuzhiyun
547*4882a593Smuzhiyun list_head* list = (list_head*)CALIBDB_GET_MODULE_PTR(pCalibDb, awb_adjust_para);
548*4882a593Smuzhiyun if (list)
549*4882a593Smuzhiyun clear_list(list);
550*4882a593Smuzhiyun
551*4882a593Smuzhiyun list = (list_head*)CALIBDB_GET_MODULE_PTR(pCalibDb, awb_calib_para_v200);
552*4882a593Smuzhiyun if (list)
553*4882a593Smuzhiyun clear_list(list);
554*4882a593Smuzhiyun
555*4882a593Smuzhiyun list = (list_head*)CALIBDB_GET_MODULE_PTR(pCalibDb, awb_calib_para_v201);
556*4882a593Smuzhiyun if (list)
557*4882a593Smuzhiyun clear_list(list);
558*4882a593Smuzhiyun
559*4882a593Smuzhiyun if(CHECK_ISP_HW_V21()) {
560*4882a593Smuzhiyun
561*4882a593Smuzhiyun list_head* ae_list = (list_head*)CALIBDB_GET_MODULE_PTR(pCalibDb, ae_calib_para);
562*4882a593Smuzhiyun if (ae_list)
563*4882a593Smuzhiyun clear_list(ae_list);
564*4882a593Smuzhiyun
565*4882a593Smuzhiyun ae_list = (list_head*)CALIBDB_GET_MODULE_PTR(pCalibDb, ae_tuning_para);
566*4882a593Smuzhiyun if (ae_list)
567*4882a593Smuzhiyun clear_list(ae_list);
568*4882a593Smuzhiyun }
569*4882a593Smuzhiyun
570*4882a593Smuzhiyun LOGI("releaseCalibDb!");
571*4882a593Smuzhiyun CalibDb_BayerNr_2_t* bayerNr =
572*4882a593Smuzhiyun (CalibDb_BayerNr_2_t*)CALIBDB_GET_MODULE_PTR(pCalibDb, bayerNr);
573*4882a593Smuzhiyun if(bayerNr && bayerNr->mode_cell != NULL) {
574*4882a593Smuzhiyun free(bayerNr->mode_cell);
575*4882a593Smuzhiyun bayerNr->mode_cell = NULL;
576*4882a593Smuzhiyun bayerNr->mode_num = 0;
577*4882a593Smuzhiyun }
578*4882a593Smuzhiyun CalibDb_UVNR_2_t *uvnr =
579*4882a593Smuzhiyun (CalibDb_UVNR_2_t*)CALIBDB_GET_MODULE_PTR(pCalibDb, uvnr);
580*4882a593Smuzhiyun if(uvnr && uvnr->mode_cell != NULL) {
581*4882a593Smuzhiyun free(uvnr->mode_cell);
582*4882a593Smuzhiyun uvnr->mode_cell = NULL;
583*4882a593Smuzhiyun uvnr->mode_num = 0;
584*4882a593Smuzhiyun }
585*4882a593Smuzhiyun CalibDb_YNR_2_t *ynr =
586*4882a593Smuzhiyun (CalibDb_YNR_2_t*)CALIBDB_GET_MODULE_PTR(pCalibDb, ynr);
587*4882a593Smuzhiyun if(ynr && ynr->mode_cell != NULL) {
588*4882a593Smuzhiyun free(ynr->mode_cell);
589*4882a593Smuzhiyun ynr->mode_cell = NULL;
590*4882a593Smuzhiyun ynr->mode_num = 0;
591*4882a593Smuzhiyun
592*4882a593Smuzhiyun }
593*4882a593Smuzhiyun CalibDb_MFNR_2_t *mfnr =
594*4882a593Smuzhiyun (CalibDb_MFNR_2_t*)CALIBDB_GET_MODULE_PTR(pCalibDb, mfnr);
595*4882a593Smuzhiyun if(mfnr && mfnr->mode_cell != NULL) {
596*4882a593Smuzhiyun free(mfnr->mode_cell);
597*4882a593Smuzhiyun mfnr->mode_cell = NULL;
598*4882a593Smuzhiyun mfnr->mode_num = 0;
599*4882a593Smuzhiyun }
600*4882a593Smuzhiyun CalibDb_Sharp_2_t *sharp =
601*4882a593Smuzhiyun (CalibDb_Sharp_2_t*)CALIBDB_GET_MODULE_PTR(pCalibDb, sharp);
602*4882a593Smuzhiyun if(sharp && sharp->mode_cell != NULL) {
603*4882a593Smuzhiyun free(sharp->mode_cell);
604*4882a593Smuzhiyun sharp->mode_cell = NULL;
605*4882a593Smuzhiyun sharp->mode_num = 0;
606*4882a593Smuzhiyun }
607*4882a593Smuzhiyun CalibDb_EdgeFilter_2_t *edgeFilter =
608*4882a593Smuzhiyun (CalibDb_EdgeFilter_2_t*)CALIBDB_GET_MODULE_PTR(pCalibDb, edgeFilter);
609*4882a593Smuzhiyun if(edgeFilter && edgeFilter->mode_cell != NULL) {
610*4882a593Smuzhiyun free(edgeFilter->mode_cell);
611*4882a593Smuzhiyun edgeFilter->mode_cell = NULL;
612*4882a593Smuzhiyun edgeFilter->mode_num = 0;
613*4882a593Smuzhiyun }
614*4882a593Smuzhiyun calibdbV1_ctx_delete(pCalibDb);
615*4882a593Smuzhiyun }
616*4882a593Smuzhiyun }
617*4882a593Smuzhiyun mCalibDbsMap.clear();
618*4882a593Smuzhiyun }
619*4882a593Smuzhiyun
getCalibDb(char * iqFile)620*4882a593Smuzhiyun CamCalibDbContext_t* RkAiqCalibDb::getCalibDb(char* iqFile)
621*4882a593Smuzhiyun {
622*4882a593Smuzhiyun std::map<string, CamCalibDbContext_t*>::iterator it;
623*4882a593Smuzhiyun
624*4882a593Smuzhiyun std::string str(iqFile);
625*4882a593Smuzhiyun
626*4882a593Smuzhiyun it = mCalibDbsMap.find(str);
627*4882a593Smuzhiyun if (it != mCalibDbsMap.end()) {
628*4882a593Smuzhiyun return it->second;
629*4882a593Smuzhiyun } else {
630*4882a593Smuzhiyun LOGE("calibDb not found!");
631*4882a593Smuzhiyun return NULL;
632*4882a593Smuzhiyun }
633*4882a593Smuzhiyun }
634*4882a593Smuzhiyun
createCalibDbBinFromXml(char * iqFile)635*4882a593Smuzhiyun void RkAiqCalibDb::createCalibDbBinFromXml(char* iqFile)
636*4882a593Smuzhiyun {
637*4882a593Smuzhiyun CamCalibDbContext_t *pCalibDb = calibdbV1_ctx_new();
638*4882a593Smuzhiyun if (pCalibDb) {
639*4882a593Smuzhiyun if (0 == access(iqFile, F_OK)) {
640*4882a593Smuzhiyun RkAiqCalibParser parser(pCalibDb);
641*4882a593Smuzhiyun if (parser.doParse(iqFile)) {
642*4882a593Smuzhiyun uint32_t magicCode = calib_check_calc_checksum();
643*4882a593Smuzhiyun if (magicCode != ((CalibDb_Header_t*)pCalibDb)->magic_code)
644*4882a593Smuzhiyun LOGW("magic code is not matched! calculated:%u, readed:%u", magicCode,
645*4882a593Smuzhiyun ((CalibDb_Header_t*)pCalibDb)->magic_code);
646*4882a593Smuzhiyun LOGI("create calibdb from %s success, magic code %u.", iqFile, magicCode);
647*4882a593Smuzhiyun if (calibSaveToFile(iqFile, pCalibDb))
648*4882a593Smuzhiyun LOGD("save to bin success.");
649*4882a593Smuzhiyun else
650*4882a593Smuzhiyun LOGE("save to bin failed.");
651*4882a593Smuzhiyun } else {
652*4882a593Smuzhiyun LOGE("parse %s failed.", iqFile);
653*4882a593Smuzhiyun }
654*4882a593Smuzhiyun } else {
655*4882a593Smuzhiyun LOGE("%s is not found!", iqFile);
656*4882a593Smuzhiyun }
657*4882a593Smuzhiyun calibdbV1_ctx_delete(pCalibDb);
658*4882a593Smuzhiyun }
659*4882a593Smuzhiyun }
660*4882a593Smuzhiyun
initCalibDb(CamCalibDbContext_t * pCalibDb)661*4882a593Smuzhiyun void RkAiqCalibDb::initCalibDb(CamCalibDbContext_t* pCalibDb)
662*4882a593Smuzhiyun {
663*4882a593Smuzhiyun if (pCalibDb) {
664*4882a593Smuzhiyun memset(pCalibDb, 0, calibdbV1_ctx_size(pCalibDb));
665*4882a593Smuzhiyun CalibDb_cProc_t *cProc =
666*4882a593Smuzhiyun (CalibDb_cProc_t *)CALIBDB_GET_MODULE_PTR(pCalibDb, cProc);
667*4882a593Smuzhiyun /* initialize cproc */
668*4882a593Smuzhiyun if (cProc) {
669*4882a593Smuzhiyun cProc->enable = 1;
670*4882a593Smuzhiyun cProc->brightness = 128;
671*4882a593Smuzhiyun cProc->contrast = 128;
672*4882a593Smuzhiyun cProc->saturation = 128;
673*4882a593Smuzhiyun cProc->hue = 128;
674*4882a593Smuzhiyun }
675*4882a593Smuzhiyun }
676*4882a593Smuzhiyun }
parseXmlandWriteXml(char * iqFile)677*4882a593Smuzhiyun void RkAiqCalibDb::parseXmlandWriteXml(char* iqFile)
678*4882a593Smuzhiyun {
679*4882a593Smuzhiyun CamCalibDbContext_t *pCalibDb = calibdbV1_ctx_new();
680*4882a593Smuzhiyun if (pCalibDb) {
681*4882a593Smuzhiyun if (0 == access(iqFile, F_OK)) {
682*4882a593Smuzhiyun RkAiqCalibParser parser(pCalibDb);
683*4882a593Smuzhiyun if (parser.doParse(iqFile)) {
684*4882a593Smuzhiyun uint32_t magicCode = calib_check_calc_checksum();
685*4882a593Smuzhiyun if (magicCode != ((CalibDb_Header_t*)pCalibDb)->magic_code) {
686*4882a593Smuzhiyun LOGW("magic code is not matched! calculated:%u, readed:%u", magicCode,
687*4882a593Smuzhiyun ((CalibDb_Header_t*)pCalibDb)->magic_code);
688*4882a593Smuzhiyun } else {
689*4882a593Smuzhiyun printf("create calibdb from %s success, magic code %u.", iqFile, magicCode);
690*4882a593Smuzhiyun char iqFileOutput[CALIBDB_PATH_LEN];
691*4882a593Smuzhiyun getFilePathName2(iqFile, iqFileOutput);
692*4882a593Smuzhiyun parser.updateXmlParseReadWriteFlag(XML_PARSER_WRITE);
693*4882a593Smuzhiyun if (parser.doGenerate(iqFile, iqFileOutput)) {
694*4882a593Smuzhiyun string str(iqFile);
695*4882a593Smuzhiyun mCalibDbsMap[str] = pCalibDb;
696*4882a593Smuzhiyun LOGD("generate calibdb from %s to %s success.", iqFile, iqFileOutput);
697*4882a593Smuzhiyun }
698*4882a593Smuzhiyun else {
699*4882a593Smuzhiyun LOGE("generate %s to %s failed.", iqFile, iqFileOutput);
700*4882a593Smuzhiyun }
701*4882a593Smuzhiyun }
702*4882a593Smuzhiyun } else {
703*4882a593Smuzhiyun LOGE("parse %s failed.", iqFile);
704*4882a593Smuzhiyun }
705*4882a593Smuzhiyun } else {
706*4882a593Smuzhiyun LOGE("%s is not found!", iqFile);
707*4882a593Smuzhiyun }
708*4882a593Smuzhiyun calibdbV1_ctx_delete(pCalibDb);
709*4882a593Smuzhiyun }
710*4882a593Smuzhiyun }
711*4882a593Smuzhiyun
712*4882a593Smuzhiyun
713*4882a593Smuzhiyun } //namespace RkCam
714*4882a593Smuzhiyun
715*4882a593Smuzhiyun
716*4882a593Smuzhiyun
717*4882a593Smuzhiyun
718*4882a593Smuzhiyun
719*4882a593Smuzhiyun
720*4882a593Smuzhiyun
721