/* * Copyright (c) 2019 Rockchip Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #include #include #include #include "RkAiqCalibParser.h" #include "calibtags.h" #include "xmltags.h" #include #include using namespace std; namespace RkCam { #define MEMSET( TARGET, C, LEN) memset(TARGET,C,LEN) #define MEMCPY( DST, SRC, LEN) memcpy(DST,SRC,LEN) //#define DEBUG_LOG //#define INFO_LOG #ifdef INFO_LOG #define INFO_PRINT(TAG_NAME) LOG1("[Line:%d, Tag: %s]\n",__LINE__,TAG_NAME.c_str()) #else #define INFO_PRINT(TAG_NAME) #endif #define redirectOut std::cout #define CALIBDB_MODULE_PTR_HELPER_BRANCH(type, module, clause) \ type* module = (type*)CALIBDB_GET_MODULE_PTR(mCalibDb, module); \ if (!module) { \ LOGE("no" #module "struct exist !"); \ clause; \ } #define CALIBDB_MODULE_PTR_HELPER_RET(type, module) \ CALIBDB_MODULE_PTR_HELPER_BRANCH(type, module, return true) #define CALIBDB_MODULE_PTR_HELPER_CON(type, module) \ CALIBDB_MODULE_PTR_HELPER_BRANCH(type, module, pchild = pchild->NextSibling(); continue) #define CALIBDB_MODULE_PTR_HELPER(type, module) \ CALIBDB_MODULE_PTR_HELPER_BRANCH(type, module, ;) /****************************************************************************** * Toupper *****************************************************************************/ char* Toupper(const char* s) { int i = 0; char* p = (char*)s; char tmp; int len = 0; if (p) { len = strlen(p); for (i = 0; i < len; i++) { tmp = p[i]; if (tmp >= 'a' && tmp <= 'z') tmp = tmp - 32; p[i] = tmp; } } return p; } int RkAiqCalibParser::ParseCharToHex ( XmlTag* tag, /**< trimmed c string */ uint32_t* reg_value ) { bool ok; *reg_value = tag->ValueToUInt(&ok); if (!ok) { LOGE( "%s(%d): parse error: invalid register value:\n", __FUNCTION__, __LINE__, tag->Value()); return (false); } else { #ifdef DEBUG_LOG LOGD( "%s(%d): parse reg valevalue:\n", __FUNCTION__, __LINE__, *reg_value); #endif } return 0; } void RkAiqCalibParser::parseReadWriteCtrl(bool ctrl) { xmlParseReadWrite = ctrl; } /****************************************************************************** * ParseFloatArray *****************************************************************************/ int RkAiqCalibParser::ParseFloatArray ( const XMLNode* pNode, /**< trimmed c string */ float* values, /**< pointer to memory */ const int num, /**< number of expected float values */ int printAccuracy /**< accuracy of XML write */ ) { if (!xmlParseReadWrite) // read { const char* c_string = XmlTag(pNode->ToElement()).Value(); float* value = values; char* str = (char*)c_string; int last = strlen(str); /* calc. end adress of string */ char* str_last = str + (last - 1); std::string s_string(str); size_t find_start = s_string.find("[", 0); size_t find_end = s_string.find("]", 0); if ((find_start == std::string::npos) || (find_end == std::string::npos)) { #ifdef DEBUG_LOG LOGD( "%s(%d): start=%d,end=%d\n", __FUNCTION__, __LINE__, find_start, find_end); #endif return -1; } str = (char*)c_string + find_start; str_last = (char*)c_string + find_end; /* skipped left parenthesis */ str++; /* skip spaces */ while (*str == 0x20 || *str == 0x09 || (*str == 0x0a) || (*str == 0x0d)) { str++; } int cnt = 0; int scanned; float f; /* parse the c-string */ while ((str != str_last) && (cnt < num)) { scanned = sscanf(str, "%f", &f); if (scanned != 1) { LOGE( "%s(%d): %f err\n", __FUNCTION__, __LINE__, f); goto err1; } else { value[cnt] = f; cnt++; } /* remove detected float */ while ((*str != 0x20) && (*str != 0x09) && (*str != ',') && (*str != ']')) { str++; } /* skip spaces and comma */ while ((*str == 0x20) || (*str == ',') || (*str == 0x09) || (*str == 0x0a) || (*str == 0x0d)) { str++; } } #ifdef DEBUG_LOG for (int i = 0; i < cnt; i++) { LOGD( "%f,\n", value[i]); } #endif return (cnt); } else if (xmlParseReadWrite == XML_PARSER_WRITE) // write { char cmd[16] = {"%s%.0f "}; if (printAccuracy > 9) printAccuracy = 9; cmd[4] = '0' + printAccuracy; autoTabForward(); autoTabForward(); int cols = XmlTag(pNode->ToElement()).SizeCol(); int rows = XmlTag(pNode->ToElement()).SizeRow(); char str[8192]; char* strp = str; snprintf(str, sizeof(str), "\n%s[", autoTabStr); for (int i = 0; i < rows; i++) { for (int k = 0; k < cols; k++) snprintf(str, sizeof(str), cmd, strp, values[i * cols + k]); if (i < rows - 1) { strcat(str, "\n"); strcat(str, autoTabStr); } } autoTabBackward(); strcat(str, "]\n"); strcat(str, autoTabStr); XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); pComment->SetValue((const char *)str); autoTabBackward(); return (num); } err1: MEMSET(values, 0, (sizeof(float)* num)); return (0); } /****************************************************************************** * ParseDoubleArray *****************************************************************************/ int RkAiqCalibParser::ParseDoubleArray ( const XMLNode *pNode, /**< trimmed c string */ double* values, /**< pointer to memory */ const int num /**< number of expected float values */ ) { if (xmlParseReadWrite == XML_PARSER_READ) // read { const char* c_string = XmlTag(pNode->ToElement()).Value(); double* value = values; char* str = (char*)c_string; int last = strlen(str); /* calc. end adress of string */ char* str_last = str + (last - 1); std::string s_string(str); size_t find_start = s_string.find("[", 0); size_t find_end = s_string.find("]", 0); if ((find_start == std::string::npos) || (find_end == std::string::npos)) { #ifdef DEBUG_LOG LOGD( "%s(%d): start=%d,end=%d\n", __FUNCTION__, __LINE__, find_start, find_end); #endif return -1; } str = (char*)c_string + find_start; str_last = (char*)c_string + find_end; /* skipped left parenthesis */ str++; /* skip spaces */ while (*str == 0x20 || *str == 0x09 || (*str == 0x0a) || (*str == 0x0d)) { str++; } int cnt = 0; int scanned; double d; /* parse the c-string */ while ((str != str_last) && (cnt < num)) { scanned = sscanf(str, "%lf", &d); if (scanned != 1) { LOGE( "%s(%d): %f err\n", __FUNCTION__, __LINE__, d); goto err2; } else { value[cnt] = d; cnt++; } /* remove detected float */ while ((*str != 0x20) && (*str != 0x09) && (*str != ',') && (*str != ']')) { str++; } /* skip spaces and comma */ while ((*str == 0x20) || (*str == ',') || (*str == 0x09) || (*str == 0x0a) || (*str == 0x0d)) { str++; } } #ifdef DEBUG_LOG for (int i = 0; i < cnt; i++) { LOGD( "%f,\n", value[i]); } #endif return (cnt); } else if (xmlParseReadWrite == XML_PARSER_WRITE) // write { autoTabForward(); autoTabForward(); int cols = XmlTag(pNode->ToElement()).SizeCol(); int rows = XmlTag(pNode->ToElement()).SizeRow(); char str[8192]; snprintf(str, sizeof(str), "\n%s[", autoTabStr); char tmp_val_str[64]; for (int i = 0; i < rows; i++) { for (int k = 0; k < cols; k++) { snprintf(tmp_val_str, sizeof(tmp_val_str), "%.16e ", values[i * cols + k]); strcat(str, tmp_val_str); } if (i < rows - 1) { strcat(str, "\n"); strcat(str, autoTabStr); } } autoTabBackward(); strcat(str, "]\n"); strcat(str, autoTabStr); XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); pComment->SetValue((const char *)str); autoTabBackward(); return (num); } err2: MEMSET(values, 0, (sizeof(float)* num)); return (0); } /****************************************************************************** * ParseUintArray *****************************************************************************/ int RkAiqCalibParser::ParseUintArray ( const XMLNode *pNode, /**< trimmed c string */ uint32_t* values, /**< pointer to memory */ const int num /**< number of expected float values */ ) { if (!xmlParseReadWrite) // read { uint32_t* value = values; const char* c_string = XmlTag(pNode->ToElement()).Value(); char* str = (char*)c_string; int last = strlen(str); char* str_last = str + (last - 1); std::string s_string(str); size_t find_start = s_string.find("[", 0); size_t find_end = s_string.find("]", 0); if ((find_start == std::string::npos) || (find_end == std::string::npos)) { #ifdef DEBUG_LOG LOGE( "%s(%d): start=%d,end=%d\n", __FUNCTION__, __LINE__, find_start, find_end); #endif return -1; } str = (char*)c_string + find_start; str_last = (char*)c_string + find_end; /* calc. end adress of string */ // char *str_last = str + (last-1); /* skipped left parenthesis */ str++; /* skip spaces */ while (*str == 0x20 || *str == 0x09 || (*str == 0x0a) || (*str == 0x0d)) { str++; } int cnt = 0; int scanned; uint32_t f; /* parse the c-string */ while ((str != str_last) && (cnt < num)) { scanned = sscanf(str, "%u", &f); if (scanned != 1) { LOGE( "%s(%d): f:%f error\n", __FUNCTION__, __LINE__, f); goto err1; } else { value[cnt] = f; cnt++; } /* remove detected float */ while ((*str != 0x20) && (*str != 0x09) && (*str != ',') && (*str != ']')) { str++; } /* skip spaces and comma */ while ((*str == 0x20) || (*str == ',') || (*str == 0x09) || (*str == 0x0a) || (*str == 0x0d)) { str++; } } #ifdef DEBUG_LOG for (int i = 0; i < cnt; i++) { LOGD( "%u,\n", value[i]); } #endif return (cnt); } else if (xmlParseReadWrite == XML_PARSER_WRITE) // write { autoTabForward(); autoTabForward(); int cols = XmlTag(pNode->ToElement()).SizeCol(); int rows = XmlTag(pNode->ToElement()).SizeRow(); char str[8192]; snprintf(str, sizeof(str), "\n%s[", autoTabStr); char tmp_val_str[25]; for (int i = 0; i < rows; i++) { for (int k = 0; k < cols; k++) { snprintf(tmp_val_str, sizeof(tmp_val_str), "%d ", values[i * cols + k]); strcat(str, tmp_val_str); } if (i < rows - 1) { strcat(str, "\n"); strcat(str, autoTabStr); } } autoTabBackward(); strcat(str, "]\n"); strcat(str, autoTabStr); XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); pComment->SetValue((const char *)str); autoTabBackward(); return num; } err1: MEMSET(values, 0, (sizeof(uint32_t)* num)); return (0); } /****************************************************************************** * ParseIntArray *****************************************************************************/ int RkAiqCalibParser::ParseIntArray ( const XMLNode *pNode, /**< trimmed c string */ int32_t* values, /**< pointer to memory */ const int num /**< number of expected float values */ ) { if (!xmlParseReadWrite) // read { int32_t* value = values; const char* c_string = XmlTag(pNode->ToElement()).Value(); char* str = (char*)c_string; int last = strlen(str); char* str_last = str + (last - 1); std::string s_string(str); size_t find_start = s_string.find("[", 0); size_t find_end = s_string.find("]", 0); if ((find_start == std::string::npos) || (find_end == std::string::npos)) { return -1; } str = (char*)c_string + find_start; str_last = (char*)c_string + find_end; /* calc. end adress of string */ // char *str_last = str + (last-1); /* skipped left parenthesis */ str++; /* skip spaces */ while (*str == 0x20 || *str == 0x09 || (*str == 0x0a) || (*str == 0x0d)) { str++; } int cnt = 0; int scanned; int32_t f; /* parse the c-string */ while ((str != str_last) && (cnt < num)) { scanned = sscanf(str, "%d", &f); if (scanned != 1) { LOGE( "%s(%d): f:%f error\n", __FUNCTION__, __LINE__, f); goto err1; } else { value[cnt] = f; cnt++; } /* remove detected float */ while ((*str != 0x20) && (*str != 0x09) && (*str != ',') && (*str != ']')) { str++; } /* skip spaces and comma */ while ((*str == 0x20) || (*str == ',') || (*str == 0x09) || (*str == 0x0a) || (*str == 0x0d)) { str++; } } #ifdef DEBUG_LOG for (int i = 0; i < cnt; i++) { LOGD( "%d,\n", value[i]); } #endif return (cnt); } else if (xmlParseReadWrite == XML_PARSER_WRITE) // write { autoTabForward(); autoTabForward(); int cols = XmlTag(pNode->ToElement()).SizeCol(); int rows = XmlTag(pNode->ToElement()).SizeRow(); char str[8192]; snprintf(str, sizeof(str), "\n%s[", autoTabStr); char tmp_val_str[25]; for (int i = 0; i < rows; i++) { for (int k = 0; k < cols; k++) { snprintf(tmp_val_str, sizeof(tmp_val_str), "%d ", values[i * cols + k]); strcat(str, tmp_val_str); } if (i < rows - 1) { strcat(str, "\n"); strcat(str, autoTabStr); } } autoTabBackward(); strcat(str, "]\n"); strcat(str, autoTabStr); XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); pComment->SetValue((const char *)str); autoTabBackward(); return num; } err1: MEMSET(values, 0, (sizeof(int32_t)* num)); return (0); } /****************************************************************************** * ParseUchartArray//cxf *****************************************************************************/ int RkAiqCalibParser::ParseUcharArray ( const XMLNode *pNode, /**< trimmed c string */ uint8_t* values, /**< pointer to memory */ const int num /**< number of expected float values */ ) { if (!xmlParseReadWrite) // read { uint8_t* value = values; const char* c_string = XmlTag(pNode->ToElement()).Value(); char* str = (char*)c_string; int last = strlen(str); char* str_last = str + (last - 1); std::string s_string(str); size_t find_start = s_string.find("[", 0); size_t find_end = s_string.find("]", 0); if ((find_start == std::string::npos) || (find_end == std::string::npos)) { return -1; } str = (char*)c_string + find_start; str_last = (char*)c_string + find_end; /* calc. end adress of string */ // char *str_last = str + (last-1); /* skipped left parenthesis */ str++; /* skip spaces */ while (*str == 0x20 || *str == 0x09 || (*str == 0x0a) || (*str == 0x0d)) { str++; } int cnt = 0; int scanned; uint16_t f; // uint8_t f; /* parse the c-string */ while ((str != str_last) && (cnt < num)) { scanned = sscanf(str, "%hu", &f); // %hhu if (scanned != 1) { LOGD( "%s(%d):f:%f\n", __FUNCTION__, __LINE__, f); goto err1; } else { value[cnt] = f; cnt++; } /* remove detected float */ while ((*str != 0x20) && (*str != 0x09) && (*str != ',') && (*str != ']')) { str++; } /* skip spaces and comma */ while ((*str == 0x20) || (*str == ',') || (*str == 0x09) || (*str == 0x0a) || (*str == 0x0d)) { str++; } } #ifdef DEBUG_LOG for (int i = 0; i < cnt; i++) { LOGD( "%u,\n", value[i]); } #endif return (cnt); } else if (xmlParseReadWrite == XML_PARSER_WRITE) // write { autoTabForward(); autoTabForward(); int cols = XmlTag(pNode->ToElement()).SizeCol(); int rows = XmlTag(pNode->ToElement()).SizeRow(); char str[8192]; snprintf(str, sizeof(str), "\n%s[", autoTabStr); char tmp_val_str[25]; for (int i = 0; i < rows; i++) { for (int k = 0; k < cols; k++) { snprintf(tmp_val_str, sizeof(tmp_val_str), "%d ", values[i * cols + k]); strcat(str, tmp_val_str); } if (i < rows - 1) { strcat(str, "\n"); strcat(str, autoTabStr); } } autoTabBackward(); strcat(str, "]\n"); strcat(str, autoTabStr); XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); pComment->SetValue((const char *)str); autoTabBackward(); return num; } err1: MEMSET(values, 0, (sizeof(uint8_t)* num)); return (0); } /****************************************************************************** * ParseUchartArray *****************************************************************************/ int RkAiqCalibParser::ParseCharArray ( const XMLNode *pNode, /**< trimmed c string */ int8_t* values, /**< pointer to memory */ const int num /**< number of expected float values */ ) { XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); if (!xmlParseReadWrite) // read { int8_t* value = values; const char* c_string = XmlTag(pNode->ToElement()).Value(); char* str = (char*)c_string; int last = strlen(str); char* str_last = str + (last - 1); std::string s_string(str); size_t find_start = s_string.find("[", 0); size_t find_end = s_string.find("]", 0); if ((find_start == std::string::npos) || (find_end == std::string::npos)) { #ifdef DEBUG_LOG LOGE( "%s(%d): start=%d,end=%d\n", __FUNCTION__, __LINE__, find_start, find_end); #endif return -1; } str = (char*)c_string + find_start; str_last = (char*)c_string + find_end; /* calc. end adress of string */ // char *str_last = str + (last-1); /* skipped left parenthesis */ str++; /* skip spaces */ while (*str == 0x20 || *str == 0x09 || (*str == 0x0a) || (*str == 0x0d)) { str++; } int cnt = 0; int scanned; int16_t f; /* parse the c-string */ while ((str != str_last) && (cnt < num)) { scanned = sscanf(str, "%hd", &f); if (scanned != 1) { LOGE("%s(%d): error", __FUNCTION__, __LINE__); goto err1; } else { value[cnt] = f; cnt++; } /* remove detected float */ while ((*str != 0x20) && (*str != 0x09) && (*str != ',') && (*str != ']')) { str++; } /* skip spaces and comma */ while ((*str == 0x20) || (*str == ',') || (*str == 0x09) || (*str == 0x0a) || (*str == 0x0d)) { str++; } } #ifdef DEBUG_LOG for (int i = 0; i < cnt; i++) { LOGD( "%d,\n", value[i]); } #endif return (cnt); } else if (xmlParseReadWrite == XML_PARSER_WRITE) // write { autoTabForward(); autoTabForward(); int cols = XmlTag(pNode->ToElement()).SizeCol(); int rows = XmlTag(pNode->ToElement()).SizeRow(); char str[8192]; snprintf(str, sizeof(str), "\n%s[", autoTabStr); char tmp_val_str[25]; for (int i = 0; i < rows; i++) { for (int k = 0; k < cols; k++) { snprintf(tmp_val_str, sizeof(tmp_val_str), "%d ", values[i * cols + k]); strcat(str, tmp_val_str); } if (i < rows - 1) { strcat(str, "\n"); strcat(str, autoTabStr); } } autoTabBackward(); strcat(str, "]\n"); strcat(str, autoTabStr); XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); pComment->SetValue((const char *)str); autoTabBackward(); return num; } err1: MEMSET(values, 0, (sizeof(uint8_t)* num)); return (0); } /****************************************************************************** * ParseUshortArray *****************************************************************************/ int RkAiqCalibParser::ParseUshortArray ( const XMLNode *pNode, /**< trimmed c string */ uint16_t* values, /**< pointer to memory */ const int num /**< number of expected float values */ ) { XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); if (!xmlParseReadWrite) // read { uint16_t* value = values; const char* c_string = XmlTag(pNode->ToElement()).Value(); char* str = (char*)c_string; int last = strlen(str); char* str_last = str + (last - 1); std::string s_string(str); size_t find_start = s_string.find("[", 0); size_t find_end = s_string.find("]", 0); if ((find_start == std::string::npos) || (find_end == std::string::npos)) { #ifdef DEBUG_LOG LOGE( "%s(%d): parse error! start:%s end:%s\n", __FUNCTION__, __LINE__, find_start, find_end); #endif return -1; } str = (char*)c_string + find_start; str_last = (char*)c_string + find_end; /* calc. end adress of string */ //char *str_last = str + (last-1); /* skipped left parenthesis */ str++; /* skip spaces */ while (*str == 0x20 || *str == 0x09 || (*str == 0x0a) || (*str == 0x0d)) { str++; } int cnt = 0; int scanned; uint16_t f; /* parse the c-string */ while ((str != str_last) && (cnt < num)) { scanned = sscanf(str, "%hu", &f); if (scanned != 1) { LOGD( "%s(%d): parse error!\n", __FUNCTION__, __LINE__); goto err1; } else { value[cnt] = f; cnt++; } /* remove detected float */ while ((*str != 0x20) && (*str != 0x09) && (*str != ',') && (*str != ']')) { str++; } /* skip spaces and comma */ while ((*str == 0x20) || (*str == ',') || (*str == 0x09) || (*str == 0x0a) || (*str == 0x0d)) { str++; } } #ifdef DEBUG_LOG for (int i = 0; i < cnt; i++) { LOGD( "%u,\n", value[i]); } #endif return (cnt); } else if (xmlParseReadWrite == XML_PARSER_WRITE) // write { autoTabForward(); autoTabForward(); int cols = XmlTag(pNode->ToElement()).SizeCol(); int rows = XmlTag(pNode->ToElement()).SizeRow(); char str[8192]; snprintf(str, sizeof(str), "\n%s[", autoTabStr); char tmp_val_str[25]; for (int i = 0; i < rows; i++) { for (int k = 0; k < cols; k++) { snprintf(tmp_val_str, sizeof(tmp_val_str), "%d ", values[i * cols + k]); strcat(str, tmp_val_str); } if (i < rows - 1) { strcat(str, "\n"); strcat(str, autoTabStr); } } autoTabBackward(); strcat(str, "]\n"); strcat(str, autoTabStr); XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); pComment->SetValue((const char *)str); autoTabBackward(); return num; } err1: MEMSET(values, 0, (sizeof(uint16_t)* num)); return (0); } /****************************************************************************** * ParseShortArray *****************************************************************************/ int RkAiqCalibParser::ParseShortArray ( const XMLNode *pNode, /**< trimmed c string */ int16_t* values, /**< pointer to memory */ const int num /**< number of expected float values */ ) { XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); if (!xmlParseReadWrite) // read { int16_t* value = values; const char* c_string = XmlTag(pNode->ToElement()).Value(); char* str = (char*)c_string; int last = strlen(str); char* str_last = str + (last - 1); std::string s_string(str); size_t find_start = s_string.find("[", 0); size_t find_end = s_string.find("]", 0); if ((find_start == std::string::npos) || (find_end == std::string::npos)) { #ifdef DEBUG_LOG LOGE( "%s(%d): parse error!\n", __FUNCTION__, __LINE__); #endif return -1; } str = (char*)c_string + find_start; str_last = (char*)c_string + find_end; /* calc. end adress of string */ // char *str_last = str + (last-1); /* skipped left parenthesis */ str++; /* skip spaces */ while (*str == 0x20 || *str == 0x09 || (*str == 0x0a) || (*str == 0x0d)) { str++; } int cnt = 0; int scanned; int16_t f; /* parse the c-string */ while ((str != str_last) && (cnt < num)) { scanned = sscanf(str, "%hd", &f); if (scanned != 1) { LOGE( "%s(%d): parse error!\n", __FUNCTION__, __LINE__); goto err1; } else { value[cnt] = f; cnt++; } /* remove detected float */ while ((*str != 0x20) && (*str != 0x09) && (*str != ',') && (*str != ']')) { str++; } /* skip spaces and comma */ while ((*str == 0x20) || (*str == ',') || (*str == 0x09) || (*str == 0x0a) || (*str == 0x0d)) { str++; } } #ifdef DEBUG_LOG for (int i = 0; i < cnt; i++) { LOGD( "%d,\n", value[i]); } #endif return (cnt); } else if (xmlParseReadWrite == XML_PARSER_WRITE) // write { autoTabForward(); autoTabForward(); int cols = XmlTag(pNode->ToElement()).SizeCol(); int rows = XmlTag(pNode->ToElement()).SizeRow(); char str[8192]; snprintf(str, sizeof(str), "\n%s[", autoTabStr); char tmp_val_str[25]; for (int i = 0; i < rows; i++) { for (int k = 0; k < cols; k++) { snprintf(tmp_val_str, sizeof(tmp_val_str), "%d ", values[i * cols + k]); strcat(str, tmp_val_str); } if (i < rows - 1) { strcat(str, "\n"); strcat(str, autoTabStr); } } autoTabBackward(); strcat(str, "]\n"); strcat(str, autoTabStr); XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); pComment->SetValue((const char *)str); autoTabBackward(); return num; } err1: MEMSET(values, 0, (sizeof(uint16_t)* num)); return (0); } /****************************************************************************** * ParseByteArray *****************************************************************************/ int RkAiqCalibParser::ParseByteArray ( const XMLNode *pNode, /**< trimmed c string */ uint8_t* values, /**< pointer to memory */ const int num /**< number of expected float values */ ) { XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); if (!xmlParseReadWrite) // read { uint8_t* value = values; const char* c_string = XmlTag(pNode->ToElement()).Value(); char* str = (char*)c_string; int last = strlen(str); char* str_last = str + (last - 1); std::string s_string(str); size_t find_start = s_string.find("[", 0); size_t find_end = s_string.find("]", 0); if ((find_start == std::string::npos) || (find_end == std::string::npos)) { #ifdef DEBUG_LOG LOGE( "%s(%d): parse error!\n", __FUNCTION__, __LINE__); #endif return -1; } str = (char*)c_string + find_start; str_last = (char*)c_string + find_end; /* calc. end adress of string */ //char *str_last = str + (last-1); /* skipped left parenthesis */ str++; /* skip spaces */ while (*str == 0x20 || *str == 0x09 || (*str == 0x0a) || (*str == 0x0d)) { str++; } int cnt = 0; int scanned; uint16_t f; /* parse the c-string */ while ((str != str_last) && (cnt < num)) { scanned = sscanf(str, "%hu", &f); if (scanned != 1) { LOGE( "%s(%d): parse error!\n", __FUNCTION__, __LINE__); goto err1; } else { value[cnt] = (uint8_t)f; cnt++; } /* remove detected float */ while ((*str != 0x20) && (*str != 0x09) && (*str != ',') && (*str != ']')) { str++; } /* skip spaces and comma */ while ((*str == 0x20) || (*str == ',') || (*str == 0x09) || (*str == 0x0a) || (*str == 0x0d)) { str++; } } #ifdef DEBUG_LOG for (int i = 0; i < cnt; i++) { LOGD( "%u,\n", value[i]); } #endif return (cnt); } else if (xmlParseReadWrite == XML_PARSER_WRITE) // write { autoTabForward(); autoTabForward(); int cols = XmlTag(pNode->ToElement()).SizeCol(); int rows = XmlTag(pNode->ToElement()).SizeRow(); char str[8192]; snprintf(str, sizeof(str), "\n%s[", autoTabStr); char tmp_val_str[25]; for (int i = 0; i < rows; i++) { for (int k = 0; k < cols; k++) { snprintf(tmp_val_str, sizeof(tmp_val_str), "%d ", values[i * cols + k]); strcat(str, tmp_val_str); } if (i < rows - 1) { strcat(str, "\n"); strcat(str, autoTabStr); } } autoTabBackward(); strcat(str, "]\n"); strcat(str, autoTabStr); XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); pComment->SetValue((const char *)str); autoTabBackward(); return num; } err1: MEMSET(values, 0, (sizeof(uint8_t)* num)); return (0); } /****************************************************************************** * ParseString *****************************************************************************/ int RkAiqCalibParser::ParseString ( const XMLNode *pNode, /**< trimmed c string */ char* values, /**< pointer to memory */ const int size /**< size of memory */ ) { if (xmlParseReadWrite == XML_PARSER_READ) // read { const char* c_string = XmlTag(pNode->ToElement()).Value(); char* str = (char*)c_string; int last = strlen(str); char* str_last = str + (last - 1); if (*str == '[') str += 1; if (*str_last == ']') *str_last = '\0'; memset(values, 0, size); strncpy(values, str, size - 1); //values[size] = ''; return 0; } else if (xmlParseReadWrite == XML_PARSER_WRITE) { char str[8192]; //sprintf(str, "[%s]", values); autoTabForward(); autoTabForward(); snprintf(str, sizeof(str), "\n%s%s", autoTabStr, values); autoTabBackward(); strcat(str, "\n"); strcat(str, autoTabStr); autoTabBackward(); XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); pComment->SetValue((const char *)str); snprintf(str, sizeof(str), "[1 %u]", (unsigned int)(strlen(values))); XMLElement* pElement = (((XMLNode*)pNode)->ToElement()); pElement->SetAttribute(CALIB_ATTRIBUTE_SIZE, str); return 0; } return 0; } /****************************************************************************** * ParseLscProfileArray *****************************************************************************/ int RkAiqCalibParser::ParseLscProfileArray ( const XMLNode *pNode, /**< trimmed c string */ CalibDb_Lsc_ProfileName_t values[], /**< pointer to memory */ const int num /**< number of expected float values */ ) { if (!xmlParseReadWrite) // read { for (int i = 0; i < LSC_PROFILES_NUM_MAX; i++) memset(values[i], 0, LSC_PROFILE_NAME); const char *c_string = XmlTag(pNode->ToElement()).Value(); Toupper(c_string); char *str = (char *)c_string; int last = strlen(str); /* calc. end adress of string */ char *str_last = str + (last - 1); /* skip beginning spaces */ while (*str == 0x20 || *str == 0x09) { str++; } /* skip ending spaces */ while (*str_last == 0x20 || *str_last == 0x09) { str_last--; } int cnt = 0; int scanned; CalibDb_Lsc_ProfileName_t f; memset(f, 0, sizeof(f)); /* parse the c-string */ while ((str != str_last) && (cnt < num)) { scanned = sscanf(str, "%s", f); if (scanned != 1) { LOGE("%s(%d): parse error!\n", __FUNCTION__, __LINE__); goto err1; } else { strncpy(values[cnt], f, strlen(f)); values[cnt][strlen(f)] = '\0'; cnt++; } /* remove detected string */ while ((*str != 0x20) && (*str != ',') && (*str != ']') && (str != str_last)) { str++; } if (str != str_last) { /* skip spaces and comma */ while ((*str == 0x20) || (*str == ',')) { str++; } } memset(f, 0, sizeof(f)); } return (cnt); } else if (xmlParseReadWrite == XML_PARSER_WRITE) // write { autoTabForward(); autoTabForward(); char str[8192]; snprintf(str, sizeof(str), "\n%s", autoTabStr); int i = 0; size_t str_len = 0; while (values[i][0] != 0) { str_len += strlen(values[i]); strcat(str, values[i++]); strcat(str, " "); str_len++; } autoTabBackward(); strcat(str, "\n"); strcat(str, autoTabStr); XMLNode* pComment = (XMLNode*)pNode->ToElement()->FirstChild(); pComment->SetValue((const char *)str); snprintf(str, sizeof(str), "[1 %u]", (unsigned int)(str_len - 1)); pComment = (XMLNode *)pNode; pComment->ToElement()->SetAttribute(CALIB_ATTRIBUTE_SIZE, str); autoTabBackward(); return num; } err1: memset(values, 0, (sizeof(uint16_t)* num)); return (0); } void RkAiqCalibParser::autoTabForward() { if (autoTabIdx == 124) return; autoTabStr[autoTabIdx] = ' '; autoTabIdx += 4; autoTabStr[autoTabIdx] = '\0'; } void RkAiqCalibParser::autoTabBackward() { if (autoTabIdx == 0) return; autoTabStr[autoTabIdx] = ' '; autoTabIdx -= 4; autoTabStr[autoTabIdx] = '\0'; } RkAiqCalibParser::RkAiqCalibParser(CamCalibDbContext_t *pCalibDb) { mCalibDb = pCalibDb; if(mCalibDb != NULL) { CamCalibDbCreate(mCalibDb); } CALIBDB_MODULE_PTR_HELPER(list_head, awb_adjust_para); if (awb_adjust_para) INIT_LIST_HEAD(awb_adjust_para); CALIBDB_MODULE_PTR_HELPER(list_head, awb_calib_para_v200); if (awb_calib_para_v200) INIT_LIST_HEAD(awb_calib_para_v200); CALIBDB_MODULE_PTR_HELPER(list_head, awb_calib_para_v201); if (awb_calib_para_v201) INIT_LIST_HEAD(awb_calib_para_v201); if(CHECK_ISP_HW_V21()) { CALIBDB_MODULE_PTR_HELPER(list_head, ae_calib_para); if (ae_calib_para) INIT_LIST_HEAD(ae_calib_para); CALIBDB_MODULE_PTR_HELPER(list_head, ae_tuning_para); if (ae_tuning_para) INIT_LIST_HEAD(ae_tuning_para); } xmlParseReadWrite = XML_PARSER_READ; memset(autoTabStr, ' ', sizeof(autoTabStr)); autoTabIdx = 0; autoTabStr[0] = '\0'; } RkAiqCalibParser::~RkAiqCalibParser() { } bool RkAiqCalibParser::doParse ( const char* device ) { int errorID; XMLDocument doc; bool res = true; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); errorID = doc.LoadFile(device); LOGD("%s(%d): doc.LoadFile filename:%s errorID:%d\n", __FUNCTION__, __LINE__, device, errorID); if (doc.Error()) { LOGE("%s(%d): Error: Parse error errorID %d\n", __FUNCTION__, __LINE__, errorID); return (false); } XMLElement* proot = doc.RootElement(); std::string tagname(proot->Name()); if (tagname != CALIB_FILESTART_TAG) { LOGE("Error: Not a calibration data file"); return (false); } // parse Read Mode parseReadWriteCtrl(XML_PARSER_READ); XML_CHECK_START(CALIB_FILESTART_TAG_ID, CALIB_FILESTART_TAG_ID); // parse header section XMLElement* pheader = proot->FirstChildElement(TAG_NAME(CALIB_HEADER_TAG_ID)); XmlTag tag = XmlTag(pheader); if (pheader) { res = parseEntryHeader(pheader->ToElement(), NULL); if (!res) { return (res); } XML_CHECK_TOPTAG_MARK(CALIB_HEADER_TAG_ID, tag.Type(), tag.Size()); } // parse sensor section XMLElement* psensor = proot->FirstChildElement(TAG_NAME(CALIB_SENSOR_TAG_ID)); XmlTag tag1 = XmlTag(psensor); if (psensor) { res = parseEntrySensor(psensor->ToElement(), NULL); if (!res) { return (res); } XML_CHECK_TOPTAG_MARK(CALIB_SENSOR_TAG_ID, tag1.Type(), tag1.Size()); } if(CHECK_ISP_HW_V20()) { // parse system section XMLElement* psystem = proot->FirstChildElement(TAG_NAME(CALIB_SYSTEM_TAG_ID)); XmlTag tag2 = XmlTag(psystem); if (psystem) { res = parseEntrySystem(psystem->ToElement(), NULL); if (!res) { return (res); } XML_CHECK_TOPTAG_MARK(CALIB_SYSTEM_TAG_ID, tag2.Type(), tag2.Size()); } } if(CHECK_ISP_HW_V21()) { // parse expset section XMLElement* pexpset = proot->FirstChildElement(TAG_NAME(CALIB_EXPSET_TAG_ID)); XmlTag tag2 = XmlTag(pexpset); if (pexpset) { res = parseEntryExpSet(pexpset->ToElement(), NULL); if (!res) { return (res); } XML_CHECK_TOPTAG_MARK(CALIB_EXPSET_TAG_ID, tag2.Type(), tag2.Size()); } // parse moduleinfo section XMLElement* pmodule = proot->FirstChildElement(TAG_NAME(CALIB_MODULEINFO_TAG_ID)); XmlTag tag3 = XmlTag(pmodule); if (pmodule) { res = parseEntryModuleInfo(pmodule->ToElement(), NULL); if (!res) { return (res); } XML_CHECK_TOPTAG_MARK(CALIB_MODULEINFO_TAG_ID, tag3.Type(), tag3.Size()); } } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (res); } bool RkAiqCalibParser::doGenerate ( const char* deviceRef, const char* deviceOutput ) { int errorID; XMLDocument doc; bool res = true; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); errorID = doc.LoadFile(deviceRef); LOGD("%s(%d): doc.LoadFile filename:%s errorID:%d\n", __FUNCTION__, __LINE__, deviceRef, errorID); if (doc.Error()) { LOGE("%s(%d): Error: Parse error errorID %d\n", __FUNCTION__, __LINE__, errorID); return (false); } XMLElement* proot = doc.RootElement(); std::string tagname(proot->Name()); if (tagname != CALIB_FILESTART_TAG) { LOGE("Error: Not a calibration data file"); return (false); } // parse Read Mode parseReadWriteCtrl(XML_PARSER_WRITE); XML_CHECK_START(CALIB_FILESTART_TAG_ID, CALIB_FILESTART_TAG_ID); // parse header section XMLElement* pheader = proot->FirstChildElement(TAG_NAME(CALIB_HEADER_TAG_ID)); XmlTag tag = XmlTag(pheader); if (pheader) { res = parseEntryHeader(pheader->ToElement(), NULL); if (!res) { return (res); } XML_CHECK_TOPTAG_MARK(CALIB_HEADER_TAG_ID, tag.Type(), tag.Size()); } // parse sensor section XMLElement* psensor = proot->FirstChildElement(TAG_NAME(CALIB_SENSOR_TAG_ID)); XmlTag tag1 = XmlTag(psensor); if (psensor) { res = parseEntrySensor(psensor->ToElement(), NULL); if (!res) { return (res); } XML_CHECK_TOPTAG_MARK(CALIB_SENSOR_TAG_ID, tag1.Type(), tag1.Size()); } // parse system section XMLElement* psystem = proot->FirstChildElement(TAG_NAME(CALIB_SYSTEM_TAG_ID)); XmlTag tag2 = XmlTag(psystem); if (psystem) { res = parseEntrySystem(psystem->ToElement(), NULL); if (!res) { return (res); } XML_CHECK_TOPTAG_MARK(CALIB_SYSTEM_TAG_ID, tag2.Type(), tag2.Size()); } XML_CHECK_END(); errorID = doc.SaveFile(deviceOutput); LOGD("%s(%d): doc.SaveFile filename:%s errorID:%d\n", __FUNCTION__, __LINE__, deviceRef, errorID); if (doc.Error()) { LOGE("%s(%d): Error: Generate error ID %d\n", __FUNCTION__, __LINE__, errorID); return (false); } LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (res); } bool RkAiqCalibParser::parseCellNoElement ( const XMLElement* pelement, int noElements, int &RealNo ) { int cnt = 0; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); const XMLNode* pchild = pelement->FirstChild(); while (pchild && (cnt < noElements)) { pchild = pchild->NextSibling(); cnt ++; } RealNo = cnt; LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return true; } bool RkAiqCalibParser::parseEntryCell ( const XMLElement* pelement, int noElements, parseCellContent func, void* param, uint32_t cur_id, uint32_t parent_id ) { int cnt = 0; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); int cell_size = 0; CALIB_IQ_TAG_ID_T cur_tag_id = (CALIB_IQ_TAG_ID_T)cur_id; CALIB_IQ_TAG_ID_T parent_tag_id = (CALIB_IQ_TAG_ID_T)parent_id; parseCellNoElement(pelement, noElements, cell_size); XML_CHECK_CELL_SET_SIZE(cell_size); if(cell_size != noElements) { LOGD("%s(%d): Warning: parent_tagname:%s tag_name:%s define %d cell, but only use %d cells !!!!\n", __FUNCTION__, __LINE__, TAG_NAME(parent_tag_id), TAG_NAME(cur_tag_id), noElements, cell_size); } LOGD("####@@@@@ cur_tag_id %d parent_tag_id %d cell_size %d\n", cur_tag_id, parent_tag_id, cell_size); const XMLNode* pchild = pelement->FirstChild(); while (pchild && (cnt < noElements)) { XmlCellTag tag = XmlCellTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); if (tagname == TAG_NAME(CALIB_CELL_TAG_ID)) { autoTabForward(); bool result = (this->*func)(pchild->ToElement(), /*param*/(void*)&cnt); autoTabBackward(); if (!result) { return (result); } } else { LOGW("unknown cell tag: %s", tagname.c_str()); //return (false); } pchild = pchild->NextSibling(); cnt++; } LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryCell2 ( const XMLElement* pelement, int noElements, parseCellContent2 func, void* param, uint32_t cur_id, uint32_t parent_id ) { int cnt = 0; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); int cell_size = 0; CALIB_IQ_TAG_ID_T cur_tag_id = (CALIB_IQ_TAG_ID_T)cur_id; CALIB_IQ_TAG_ID_T parent_tag_id = (CALIB_IQ_TAG_ID_T)parent_id; parseCellNoElement(pelement, noElements, cell_size); XML_CHECK_CELL_SET_SIZE(cell_size); if(cell_size != noElements) { LOGD("%s(%d): Warning: parent_tagname:%s tag_name:%s define %d cell, but only use %d cells !!!!\n", __FUNCTION__, __LINE__, TAG_NAME(parent_tag_id), TAG_NAME(cur_tag_id), noElements, cell_size); } const XMLNode* pchild = pelement->FirstChild(); while (pchild && (cnt < noElements)) { XmlCellTag tag = XmlCellTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); if (tagname == TAG_NAME(CALIB_CELL_TAG_ID)) { autoTabForward(); bool result = (this->*func)(pchild->ToElement(), param, cnt); autoTabBackward(); if (!result) { return (result); } } else { LOGW("unknown cell tag: %s", tagname.c_str()); //return (false); } pchild = pchild->NextSibling(); cnt++; } LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryCell3 ( XMLElement* pelement, int noElements, int noOutElements, parseCellContent func, void* param, uint32_t cur_id, uint32_t parent_id ) { int cnt = 0; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); int cell_size = 0; CALIB_IQ_TAG_ID_T cur_tag_id = (CALIB_IQ_TAG_ID_T)cur_id; CALIB_IQ_TAG_ID_T parent_tag_id = (CALIB_IQ_TAG_ID_T)parent_id; parseCellNoElement(pelement, noElements, cell_size); XML_CHECK_CELL_SET_SIZE(noOutElements); LOGD("####@@@@@ cur_tag_id %d parent_tag_id %d cell_size %d\n", cur_tag_id, parent_tag_id, cell_size); if (noOutElements > noElements) { //noOutElements = noElements; XMLNode* pchild_ref = pelement->FirstChild(); while (pchild_ref->NextSibling() != NULL) pchild_ref = pchild_ref->NextSibling(); for (; noElements < noOutElements; noElements++) { XMLNode* copy = pchild_ref->DeepClone(NULL); pelement->InsertEndChild(copy); } } const XMLNode* pchild = pelement->FirstChild(); while (pchild && (cnt < noOutElements)) { XmlCellTag tag = XmlCellTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); if (tagname == TAG_NAME(CALIB_CELL_TAG_ID)) { autoTabForward(); bool result = (this->*func)(pchild->ToElement(), /*param*/(void*)&cnt); autoTabBackward(); if (!result) { return (result); } } else { LOG1("unknown cell tag: %s", tagname.c_str()); return (false); } pchild = pchild->NextSibling(); cnt++; } XMLNode *pchild_del[100]; int del_cnt = 0; while (pchild) { pchild_del[del_cnt] = (XMLNode *)pchild; pchild = pchild->NextSibling(); cnt++; del_cnt++; } for (int i = 0; i < del_cnt; i++) { pelement->DeleteChild(pchild_del[i]); } LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); char str[20]; snprintf(str, sizeof(str), "[1 %u]", (unsigned int)noOutElements); pelement->SetAttribute(CALIB_ATTRIBUTE_SIZE, str); return (true); } bool RkAiqCalibParser::parseEntryCell4 ( XMLElement* pelement, int noElements, int noOutElements, parseCellContent2 func, void* param, uint32_t cur_id, uint32_t parent_id ) { int cnt = 0; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); int cell_size = 0; CALIB_IQ_TAG_ID_T cur_tag_id = (CALIB_IQ_TAG_ID_T)cur_id; CALIB_IQ_TAG_ID_T parent_tag_id = (CALIB_IQ_TAG_ID_T)parent_id; parseCellNoElement(pelement, noElements, cell_size); XML_CHECK_CELL_SET_SIZE(noOutElements); LOGD("####@@@@@ cur_tag_id %d parent_tag_id %d cell_size %d\n", cur_tag_id, parent_tag_id, cell_size); if (noOutElements > noElements) { //noOutElements = noElements; XMLNode* pchild_ref = pelement->FirstChild(); while (pchild_ref->NextSibling() != NULL) pchild_ref = pchild_ref->NextSibling(); for (; noElements < noOutElements; noElements++) { XMLNode* copy = pchild_ref->DeepClone(NULL); pelement->InsertEndChild(copy); } } const XMLNode* pchild = pelement->FirstChild(); while (pchild && (cnt < noOutElements)) { XmlCellTag tag = XmlCellTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); if (tagname == TAG_NAME(CALIB_CELL_TAG_ID)) { autoTabForward(); bool result = (this->*func)(pchild->ToElement(), param, cnt); autoTabBackward(); if (!result) { return (result); } } else { LOG1("unknown cell tag: %s", tagname.c_str()); return (false); } pchild = pchild->NextSibling(); cnt++; } XMLNode *pchild_del[100]; int del_cnt = 0; while (pchild) { pchild_del[del_cnt] = (XMLNode *)pchild; pchild = pchild->NextSibling(); cnt++; del_cnt++; } for (int i = 0; i < del_cnt; i++) { pelement->DeleteChild(pchild_del[i]); } LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); char str[20]; snprintf(str, sizeof(str), "[1 %u]", (unsigned int)noOutElements); pelement->SetAttribute(CALIB_ATTRIBUTE_SIZE, str); return (true); } bool RkAiqCalibParser::parseEntryHeader ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_HEADER_TAG_ID, CALIB_FILESTART_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Header_t, header); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG LOG1("tag: %s", tagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_HEADER_CODE_XML_PARSE_VERSION_TAG_ID)) { ParseString(pchild, header->parse_version, sizeof(header->parse_version)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_HEADER_CREATION_DATE_TAG_ID)) { ParseString(pchild, header->date, sizeof(header->date)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_HEADER_CREATOR_TAG_ID)) { ParseString(pchild, header->author, sizeof(header->author)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_HEADER_GENERATOR_VERSION_TAG_ID)) { ParseString(pchild, header->gen_verion, sizeof(header->gen_verion)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_HEADER_SENSOR_NAME_TAG_ID)) { ParseString(pchild, header->sensor_name, sizeof(header->sensor_name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_HEADER_SAMPLE_NAME_TAG_ID)) { ParseString(pchild, header->sample_name, sizeof(header->sample_name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_HEADER_MAGIC_CODE_TAG_ID)) { ParseUintArray(pchild, &header->magic_code, 1); } else { LOGW("parse error in header section (unknow tag: %s)", tagname.c_str()); //return (false); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensor ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); (void)param; XML_CHECK_START(CALIB_SENSOR_TAG_ID, CALIB_FILESTART_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_TAG_ID)) { if (!parseEntrySensorAwb(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_TAG_ID) && CHECK_ISP_HW_V20()) { if (!parseEntrySensorAec(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_TAG_ID) && CHECK_ISP_HW_V21()) { if (!parseEntrySensorAecV21(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_MERGE_TAG_ID)) { if (!parseEntrySensorAhdrMerge(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_TAG_ID)) { if (!parseEntrySensorAhdrTmo(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_TAG_ID)) { if (!parseEntrySensorDrc(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BLC_TAG_ID)) { if (!parseEntrySensorBlc(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LUT3D_TAG_ID)) { if (!parseEntrySensorLut3d(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_TAG_ID)) { if (!parseEntrySensorDpcc(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_TAG_ID)) { if (!parseEntrySensorBayerNr(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TAG_ID)) { if (!parseEntrySensorLsc(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_TAG_ID)) { if (!parseEntrySensorRKDM(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_TAG_ID)) { if (!parseEntrySensorCCM(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_TAG_ID)) { if (!parseEntrySensorUVNR(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GAMMA_TAG_ID)) { if (!parseEntrySensorGamma(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEGAMMA_TAG_ID)) { if (!parseEntrySensorDegamma(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_TAG_ID)) { if (!parseEntrySensorYnr(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_TAG_ID)) { if (!parseEntrySensorGic(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_TAG_ID)) { if (!parseEntrySensorMFNR(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_TAG_ID)) { if (!parseEntrySensorSharp(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_TAG_ID)) { if (!parseEntrySensorEdgeFilter(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_TAG_ID)) { if (!parseEntrySensorDehaze(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_TAG_ID)) { if (!parseEntrySensorAf(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LDCH_TAG_ID)) { if (!parseEntrySensorLdch(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_FEC_TAG_ID)) { if (!parseEntrySensorFec(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EIS_TAG_ID)) { if (!parseEntrySensorEis(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LUMA_DETECT_TAG_ID)) { if (!parseEntrySensorLumaDetect(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ORB_TAG_ID)) { if (!parseEntrySensorOrb(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_TAG_ID)) { if (!parseEntrySensorInfo(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MODULEINFO_TAG_ID)) { if (!parseEntrySensorModuleInfo(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPSL_TAG_ID)) { if (!parseEntrySensorCpsl(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_COLOR_AS_GREY_TAG_ID)) { if (!parseEntrySensorColorAsGrey(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorBayernrV2, NULL, (uint32_t)CALIB_SENSOR_BAYERNR_V2_TAG_ID, (uint32_t)CALIB_SENSOR_TAG_ID)) { LOGE("parse error in bayernrV2 (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorYnrV2, NULL, (uint32_t)CALIB_SENSOR_YNR_V2_TAG_ID, (uint32_t)CALIB_SENSOR_TAG_ID)) { LOGE("parse error in bayernrV2 (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorCnrV1, NULL, (uint32_t)CALIB_SENSOR_CNR_V1_TAG_ID, (uint32_t)CALIB_SENSOR_TAG_ID)) { LOGE("parse error in bayernrV2 (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorSharpV3, NULL, (uint32_t)CALIB_SENSOR_SHARP_V3_TAG_ID, (uint32_t)CALIB_SENSOR_TAG_ID)) { LOGE("parse error in bayernrV2 (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPROC_TAG_ID)) { if (!parseEntrySensorCproc(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IE_TAG_ID)) { if (!parseEntrySensorIE(pchild->ToElement())) { return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } /****************************************************************************** * RkAiqCalibParser::parseEntryAwb *****************************************************************************/ bool RkAiqCalibParser::parseEntrySensorAwb ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_V200_TAG_ID)) { CALIBDB_MODULE_PTR_HELPER_CON(list_head, awb_calib_para_v200); if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbCalibParaV200, awb_calib_para_v200, (uint32_t)CALIB_SENSOR_AWB_V200_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_TAG_ID)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_V201_TAG_ID)) { CALIBDB_MODULE_PTR_HELPER_CON(list_head, awb_calib_para_v201); if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbCalibParaV201, awb_calib_para_v201, (uint32_t)CALIB_SENSOR_AWB_V201_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_TAG_ID)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_ADJUSTPARA_TAG_ID)) { CALIBDB_MODULE_PTR_HELPER_CON(list_head, awb_adjust_para); if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbAdjustPara, awb_adjust_para, (uint32_t)CALIB_SENSOR_AWB_ADJUSTPARA_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_TAG_ID)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else { LOGW("parse error in AWB section (unknow tag:%s)", tagname.c_str()); //return (false); } pchild = pchild->NextSibling(); } XML_CHECK_END(); /*DCT_ASSERT((awb.adjust_para.lightNum == awb.calib_para_v200.lightNum)); DCT_ASSERT((awb.adjust_para.lightNum == awb.calib_para_v201.lightNum));*/ //v201 to do LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbCalibParaV200 ( const XMLElement* pelement, void* param, int index ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_V200_TAG_ID, CALIB_SENSOR_AWB_TAG_ID); list_head* calib_para_v200_list = (list_head* )param; CalibDb_Awb_Calib_Para_V200_t calib_para_v200; memset(&calib_para_v200, 0, sizeof(calib_para_v200)); bool ret; if (xmlParseReadWrite == XML_PARSER_WRITE) { const CalibDb_Awb_Calib_Para_V200_t *calib_para_v200_2 = NULL; ret = GetAwbProfileFromAwbCalibV200ListByIdx(calib_para_v200_list, index, &calib_para_v200_2); DCT_ASSERT(ret == true); DCT_ASSERT(calib_para_v200_2 != NULL); memcpy(&calib_para_v200, calib_para_v200_2, sizeof(CalibDb_Awb_Calib_Para_V200_t)); } const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIIB_SCENE_TAG_ID)) { ParseString(pchild, calib_para_v200.scene, sizeof(calib_para_v200.scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID)) { if (!parseEntrySensorAwbMeasureGlobalsV200(pchild->ToElement(), &calib_para_v200)) { LOGE("parse error in AWB globals (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_V200_LIGHTSOURCES_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbMeasureLightSourcesV200, &calib_para_v200, (uint32_t)CALIB_SENSOR_AWB_V200_LIGHTSOURCES_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_V200_TAG_ID)) { LOGE("parse error in AWB light sources (%s)", tagname.c_str()); return (false); } } else { LOGW("parse error in AWB section (unknow tag:%s)", tagname.c_str()); //return (false); } pchild = pchild->NextSibling(); } XML_CHECK_END(); if (xmlParseReadWrite == XML_PARSER_READ) { ret = AddAwbCalibV200Profile2AwbCalibV200List(calib_para_v200_list, &calib_para_v200); DCT_ASSERT(ret == true); } LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbAdjustPara ( const XMLElement* pelement, void* param, int index ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_ADJUSTPARA_TAG_ID, CALIB_SENSOR_AWB_TAG_ID); list_head* adjust_para_list = (list_head* )param; CalibDb_Awb_Adjust_Para_t adjust_para; memset(&adjust_para, 0, sizeof(adjust_para)); bool ret; if (xmlParseReadWrite == XML_PARSER_WRITE) { const CalibDb_Awb_Adjust_Para_t *adjust_para_2 = NULL; ret = GetAwbProfileFromAwbAdjustListByIdx(adjust_para_list, index, &adjust_para_2); DCT_ASSERT(ret == true); DCT_ASSERT(adjust_para_2 != NULL); memcpy(&adjust_para, adjust_para_2, sizeof(CalibDb_Awb_Adjust_Para_t)); } const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIIB_SCENE_TAG_ID)) { ParseString(pchild, adjust_para.scene, sizeof(adjust_para.scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_ADJUSTPARA_GLOBALS_TAG_ID)) { if (!parseEntrySensorAwbStrategyGlobals(pchild->ToElement(), &adjust_para)) { LOGE("parse error in AWB globals (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_ADJUSTPARA_LIGHTSOURCES_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbStrategyLightSources, &adjust_para, (uint32_t)CALIB_SENSOR_AWB_ADJUSTPARA_LIGHTSOURCES_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_ADJUSTPARA_TAG_ID)) { LOGE("parse error in AWB light sources (%s)", tagname.c_str()); return (false); } } else { LOGW("parse error in AWB section (unknow tag:%s)", tagname.c_str()); //return (false); } pchild = pchild->NextSibling(); } XML_CHECK_END(); if (xmlParseReadWrite == XML_PARSER_READ) { ret = AddAwbAdjustProfile2AwbAdjustList(adjust_para_list, &adjust_para); DCT_ASSERT(ret == true); } LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbMeasureGlobalsV200 ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID, CALIB_SENSOR_AWB_V200_TAG_ID); CalibDb_Awb_Calib_Para_V200_t *calib_para_v200 = (CalibDb_Awb_Calib_Para_V200_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_HDRFRAMECHOOSE_TAG_ID)) { if (!parseEntrySensorAwbFrameChoose(pchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LSCBYPASSENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v200->lscBypEnable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v200->lscBypEnable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_UVDETECTIONENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v200->uvDetectionEnable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v200->uvDetectionEnable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_XYDETECTIONENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v200->xyDetectionEnable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v200->xyDetectionEnable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_YUVDETECTIONENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v200->yuvDetectionEnable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v200->yuvDetectionEnable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINDAYLIGHTCLIPENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v200->wbGainDaylightClipEn; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v200->wbGainDaylightClipEn = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINCLIPEANBLE_TAG_ID)) { unsigned char tempVal = calib_para_v200->wbGainClipEn; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v200->wbGainClipEn = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LSUSEDFORYUVDET_TAG_ID)) { calib_para_v200->lsUsedForYuvDetNum = 0; if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbLsForYuvDet, param, (uint32_t)CALIB_SENSOR_AWB_LSUSEDFORYUVDET_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_DOWNSCALEMODE_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v200->dsMode, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_BLCKMEASUREMODE_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v200->blkMeasureMode, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MEASUREWINDOW_TAG_ID)) { if (!parseEntrySensorAwbMeasureWindow(pchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MULTIWINDOWENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v200->multiwindow_en; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v200->multiwindow_en = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_TAG_ID)) { if (!parseEntrySensorAwbLimitRange(pchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_CELL_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbLimitRangeCell, param, (uint32_t)CALIB_SENSOR_AWB_LIMITRANGE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_PSEUDOLUMWEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->rgb2tcs_param.pseudoLuminanceWeight, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_ROTATIONMAT_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->rgb2tcs_param.rotationMat, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MULTIWINDOW_TAG_ID)) { //unsigned short tempVal[32]; int no = ParseUshortArray(pchild, calib_para_v200->multiwindow[0], tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no <= CALD_AWB_WINDOW_NUM_MAX * 4)); //MEMCPY(calib_para_v200->multiwindow, tempVal, sizeof(short)*no); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_EXCLUDERANGE_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbGlobalsExclude, param, (uint32_t)CALIB_SENSOR_AWB_EXCLUDERANGE_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID)) { LOGE("parse error in AWB globals excluderange (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_SPATIALGAIN_L_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->spatialGain_L, tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no == 4)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_SPATIALGAIN_H_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->spatialGain_H, tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no == 4)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_TEMPORALDEFAULTGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->temporalDefaultGain, tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no == 4)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CA_TARGETGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->ca_targetGain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_SINGLECOLORPROCESS_TAG_ID)) { if (!parseEntrySensorAwbSingleColorV200(pchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LINERGBG_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->lineRgBg, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LINERGBGPROJCCT_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->lineRgProjCCT, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINDAYLIGHTCLIP_TAG_ID)) { if (!parseEntrySensorAwbwbGainDaylightClipV200(pchild->ToElement(), &calib_para_v200->cct_clip_cfg)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINCLIP_TAG_ID)) { if (!parseEntrySensorAwbwbGainClipV200(pchild->ToElement(), &calib_para_v200->cct_clip_cfg)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else { LOGE("parse error in AWB section (unknow tag:%s)", tagname.c_str()); //return ( false ); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbDampFactor ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_DAMPFACTOR_TAG_ID, CALIB_SENSOR_AWB_ADJUSTPARA_GLOBALS_TAG_ID); CalibDb_Awb_Adjust_Para_t *adjust_para = (CalibDb_Awb_Adjust_Para_t*)param; const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_DFSTEP_TAG_ID)) { int no = ParseFloatArray(psubchild, &adjust_para->dFStep, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_DFMIN_TAG_ID)) { int no = ParseFloatArray(psubchild, &adjust_para->dFMin, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_DFMAX_TAG_ID)) { int no = ParseFloatArray(psubchild, &adjust_para->dFMax, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LVIIRSIZE_TAG_ID)) { int no = ParseIntArray(psubchild, &adjust_para->LvIIRsize, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LVVARTH_TAG_ID)) { int no = ParseFloatArray(psubchild, &adjust_para->LvVarTh, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbXyRegionWpnumthCell ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_XYREGION_WPNUMTH_CELL_TAG_ID, CALIB_SENSOR_AWB_XYREGIONSTABLESELECTION_TAG_ID); CalibDb_Awb_Adjust_Para_t *adjust_para = (CalibDb_Awb_Adjust_Para_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_XYREGION_LV_TAG_ID)) { float tmpValue= adjust_para->wpNumTh.lumaValue[index]; int no = ParseFloatArray(pchild, &tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); adjust_para->wpNumTh.lumaValue[index] = tmpValue; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_XYREGION_WPNUMTHFORBIGTYPE_TAG_ID)) { float tmpValue= adjust_para->wpNumTh.wpNumThForBigType[index]; int no = ParseFloatArray(pchild, &tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); adjust_para->wpNumTh.wpNumThForBigType[index] = tmpValue; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_XYREGION_WPNUMTHFOREXTRATYPE_TAG_ID)) { float tmpValue= adjust_para->wpNumTh.wpNumThForExtraType[index]; int no = ParseFloatArray(pchild, &tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); adjust_para->wpNumTh.wpNumThForExtraType[index] = tmpValue; } else { LOGW("unknown tag %s", tagname.c_str()); } pchild = pchild->NextSibling(); } adjust_para->wpNumTh.num++; DCT_ASSERT((adjust_para->wpNumTh.num <= CALD_AWB_LV_NUM_MAX)); XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbwbWpTh ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_WP_TH_TAG_ID, CALIB_SENSOR_AWB_ADJUSTPARA_GLOBALS_TAG_ID); CalibDb_Awb_Adjust_Para_t *adjust_para = (CalibDb_Awb_Adjust_Para_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WP_LV_TAG_ID)) { int no = ParseFloatArray(pchild, &adjust_para->WP_TH.lumaValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); }else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WP_THL_TAG_ID)) { int no = ParseFloatArray(pchild, &adjust_para->WP_TH.WP_THL[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WP_THH_TAG_ID)) { int no = ParseFloatArray(pchild, &adjust_para->WP_TH.WP_THH[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); adjust_para->WP_TH.num++; DCT_ASSERT((adjust_para->WP_TH.num <=CALD_AWB_LV_NUM_MAX)); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbXyRegionStableSelection ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_XYREGIONSTABLESELECTION_TAG_ID, CALIB_SENSOR_AWB_ADJUSTPARA_GLOBALS_TAG_ID); CalibDb_Awb_Adjust_Para_t *adjust_para = (CalibDb_Awb_Adjust_Para_t*)param; const XMLNode* psubchild = pelement->FirstChild(); autoTabForward(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_XYREGIONSIZE_TAG_ID)) { int no = ParseIntArray(psubchild, &adjust_para->xyTypeListSize, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LVVARTH_TAG_ID)) { int no = ParseFloatArray(psubchild, &adjust_para->varianceLumaTh, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_XYREGION_WPNUMTH_CELL_TAG_ID)) { if (!parseEntryCell2(psubchild->ToElement(), subTag.Size(), &RkAiqCalibParser::parseEntrySensorAwbXyRegionWpnumthCell, param, (uint32_t)CALIB_SENSOR_AWB_XYREGION_WPNUMTH_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_XYREGIONSTABLESELECTION_TAG_ID)) { LOGE("parse error in AWB xyRegionStableSelection (%s)", subTagname.c_str()); return (false); } } psubchild = psubchild->NextSibling(); } //compatible with the version <= v1.4.7 if(adjust_para->wpNumTh.num ==0){ adjust_para->wpNumTh.num = 1; adjust_para->wpNumTh.lumaValue[0] = 0; adjust_para->wpNumTh.wpNumThForBigType[0] = adjust_para->WP_TH.WP_THH[0]; adjust_para->wpNumTh.wpNumThForExtraType[0] = adjust_para->WP_TH.WP_THH[0]; } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbStrategyGlobals ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_ADJUSTPARA_GLOBALS_TAG_ID, CALIB_SENSOR_AWB_ADJUSTPARA_TAG_ID); CalibDb_Awb_Adjust_Para_t *adjust_para = (CalibDb_Awb_Adjust_Para_t*)param; int no1 = 0, no2 = 0, no3 = 0, no4 = 0; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_AWB_ENABLE_TAG_ID)) { unsigned char tempVal = adjust_para->awbEnable; int no = ParseUcharArray(pchild, &tempVal, 1); adjust_para->awbEnable = (tempVal == 0 ? false : true); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WB_BYPASS_TAG_ID)) { unsigned char tempVal = adjust_para->wbBypass; int no = ParseUcharArray(pchild, &tempVal, 1); adjust_para->wbBypass = (tempVal == 0 ? false : true); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINADJUSTENABLE_TAG_ID)) { unsigned char tempVal = adjust_para->wbGainAdjustEn; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); adjust_para->wbGainAdjustEn = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LSFORFIRSTFRAME_TAG_ID)) { ParseString(pchild, adjust_para->lsForFirstFrame, sizeof(adjust_para->lsForFirstFrame)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_UVRANGESMALLENABLE_TAG_ID)) { unsigned char tempVal = adjust_para->uvRange_small_enable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); adjust_para->uvRange_small_enable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CA_ENABLE_TAG_ID)) { unsigned char tempVal = adjust_para->ca_enable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); adjust_para->ca_enable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_TOLERANCE_TAG_ID)) { const XMLNode* psubchild = pchild->ToElement()->FirstChild(); autoTabForward(); adjust_para->tolerance.num = 0; XML_CHECK_START(CALIB_SENSOR_AWB_TOLERANCE_TAG_ID, CALIB_SENSOR_AWB_ADJUSTPARA_GLOBALS_TAG_ID); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LV_TAG_ID)) { no1 = ParseFloatArray(psubchild, adjust_para->tolerance.LV, subTag.Size()); DCT_ASSERT((no1 == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_VALUE_TAG_ID)) { no2 = ParseFloatArray(psubchild, adjust_para->tolerance.value, subTag.Size()); DCT_ASSERT((no2 == subTag.Size())); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_RUNINTERNAL_TAG_ID)) { const XMLNode* psubchild = pchild->ToElement()->FirstChild(); autoTabForward(); adjust_para->runInterval.num = 0; XML_CHECK_START(CALIB_SENSOR_AWB_RUNINTERNAL_TAG_ID, CALIB_SENSOR_AWB_ADJUSTPARA_GLOBALS_TAG_ID); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LV_TAG_ID)) { no3 = ParseFloatArray(psubchild, adjust_para->runInterval.LV, subTag.Size()); DCT_ASSERT((no3 == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_VALUE_TAG_ID)) { no4 = ParseFloatArray(psubchild, adjust_para->runInterval.value, subTag.Size()); DCT_ASSERT((no4 == subTag.Size())); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MULTIWINDOWMODE_TAG_ID)) { int no = ParseUcharArray(pchild, &adjust_para->multiwindowMode, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_DAMPFACTOR_TAG_ID)) { if (!parseEntrySensorAwbDampFactor(pchild->ToElement(), param)) { LOGE("parse error in AWB globals (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LVMATRIX_TAG_ID)) { int no = ParseUintArray(pchild, adjust_para->LVMatrix, tag.Size()); DCT_ASSERT((no <= CALD_AWB_LV_NUM_MAX)); DCT_ASSERT((no == tag.Size())); adjust_para->LV_NUM = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LV_THL_TAG_ID)) { int no = ParseUintArray(pchild, &adjust_para->LV_THL, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LV_THL2_TAG_ID)) { int no = ParseUintArray(pchild, &adjust_para->LV_THL2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LV_THH_TAG_ID)) { int no = ParseUintArray(pchild, &adjust_para->LV_THH, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LV_THH2_TAG_ID)) { int no = ParseUintArray(pchild, &adjust_para->LV_THH2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WP_THL_TAG_ID)) { //compatible with the version <= v1.4.7 int no = ParseFloatArray(pchild, &adjust_para->WP_TH.WP_THL[0], tag.Size()); DCT_ASSERT((no == tag.Size())); adjust_para->WP_TH.num = 1;//compatible with the version <= v1.4.7 } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WP_THH_TAG_ID)) { //compatible with the version <= v1.4.7 int no = ParseFloatArray(pchild, &adjust_para->WP_TH.WP_THH[0], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WP_TH_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbwbWpTh, param, (uint32_t)CALIB_SENSOR_AWB_WP_TH_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_ADJUSTPARA_GLOBALS_TAG_ID)) { LOGE("parse error in AWB globals (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_PRODIS_THL_TAG_ID)) { int no = ParseFloatArray(pchild, &adjust_para->proDis_THL, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_PRODIS_THH_TAG_ID)) { int no = ParseFloatArray(pchild, &adjust_para->proDis_THH, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_PROLV_INDOOR_THL_TAG_ID)) { int no = ParseUintArray(pchild, &adjust_para->proLV_Indoor_THL, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_PROLV_INDOOR_THH_TAG_ID)) { int no = ParseUintArray(pchild, &adjust_para->proLV_Indoor_THH, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_PROLV_OUTDOOR_THL_TAG_ID)) { int no = ParseUintArray(pchild, &adjust_para->proLV_Outdoor_THL, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_PROLV_OUTDOOR_THH_TAG_ID)) { int no = ParseUintArray(pchild, &adjust_para->proLV_Outdoor_THH, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_TEMPORALCALGAINSETSIZE_TAG_ID)) { int no = ParseUcharArray(pchild, &adjust_para->temporalCalGainSetSize, tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no <= CALD_AWB_TEMPORAL_GAIN_SIZE_MAX)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_TEMPORALGAINSETWEIGHT_TAG_ID)) { int no = ParseUcharArray(pchild, adjust_para->temporalGainSetWeight, tag.Size()); DCT_ASSERT((no <= CALD_AWB_TEMPORAL_GAIN_SIZE_MAX)); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no == adjust_para->temporalCalGainSetSize));//check } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPNUMPERCTH_TAG_ID)) { int no = ParseFloatArray(pchild, &adjust_para->wpNumPercTh, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_TEMPWEIGTH_TAG_ID)) { int no = ParseUcharArray(pchild, adjust_para->tempWeight, tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no <= CALD_AWB_LV_NUM_MAX)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CA_LACALCFACTOR_TAG_ID)) { int no = ParseFloatArray(pchild, &adjust_para->ca_LACalcFactor, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CONVERGEDVARTH_TAG_ID)) { int no = ParseFloatArray(pchild, &adjust_para->convergedVarTh, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_XYREGIONSTABLESELECTION_TAG_ID)) { if (!parseEntrySensorAwbXyRegionStableSelection(pchild->ToElement(), param)) { LOGE("parse error in AWB globals (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINADJUST_TAG_ID)) { if (!parseEntrySensorAwbwbGainAdjust(pchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINOFFSET_TAG_ID)) { if (!parseEntrySensorAwbwbGainOffset(pchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_REMOSAICPARA_TAG_ID)) { if (!parseEntrySensorAwbRemosaicPara(pchild->ToElement(), &adjust_para->remosaic_cfg)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else { LOGW("parse error in AWB section (unknow tag:%s)", tagname.c_str()); //return ( false ); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((no2 == no1)); adjust_para->tolerance.num = no1; DCT_ASSERT((no3 == no4)); adjust_para->runInterval.num = no3; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbLsForYuvDet ( const XMLElement* pelement, void* param, int index ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_LSUSEDFORYUVDET_TAG_ID, CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V200_t *calib_para_v200 = (CalibDb_Awb_Calib_Para_V200_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); LOGD("%s(%d): tag.Size %d\n", __FUNCTION__, __LINE__, tag.Size()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LSUSEDFORYUVDET_NAME_TAG_ID)) { ParseString(pchild, calib_para_v200->lsUsedForYuvDet[index], sizeof(calib_para_v200->lsUsedForYuvDet[index]));//check } else { LOGW("UNKNOWN tag: %s", tagname.c_str()); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_LS_NUM_MAX)); calib_para_v200->lsUsedForYuvDetNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbFrameChoose ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_HDRFRAMECHOOSE_TAG_ID, CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V200_t *calib_para_v200 = (CalibDb_Awb_Calib_Para_V200_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MODE_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v200->hdrFrameChooseMode, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_FRAMECHOOSE_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v200->hdrFrameChoose, 1); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbFrameChooseV201 ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_HDRFRAMECHOOSE_TAG_ID, CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MODE_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v201->hdrFrameChooseMode, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_FRAMECHOOSE_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v201->hdrFrameChoose, 1); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbMeasureWindow ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_MEASUREWINDOW_TAG_ID, CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V200_t *calib_para_v200 = (CalibDb_Awb_Calib_Para_V200_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MODE_TAG_ID)) { int no = ParseIntArray(pchild, &calib_para_v200->measeureWindow.mode, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_RESALL_TAG_ID)) { calib_para_v200->measeureWindow.resNum = 0; if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbWindow, param, (uint32_t)CALIB_SENSOR_AWB_RESALL_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_MEASUREWINDOW_TAG_ID)) { LOGE("parse error in AWB light sources (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbLimitRange ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_LIMITRANGE_TAG_ID, CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V200_t *calib_para_v200 = (CalibDb_Awb_Calib_Para_V200_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_Y_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v200->limitRange.minY[0], calib_para_v200->limitRange.maxY[0] }; int no = ParseUshortArray(pchild, tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v200->limitRange.minY[0] = tmpValue[0]; calib_para_v200->limitRange.maxY[0] = tmpValue[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_R_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v200->limitRange.minR[0], calib_para_v200->limitRange.maxR[0] }; int no = ParseUshortArray(pchild, tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v200->limitRange.minR[0] = tmpValue[0]; calib_para_v200->limitRange.maxR[0] = tmpValue[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_G_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v200->limitRange.minG[0], calib_para_v200->limitRange.maxG[0] }; int no = ParseUshortArray(pchild, tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v200->limitRange.minG[0] = tmpValue[0]; calib_para_v200->limitRange.maxG[0] = tmpValue[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_B_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v200->limitRange.minB[0], calib_para_v200->limitRange.maxB[0] }; int no = ParseUshortArray(pchild, tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v200->limitRange.minB[0] = tmpValue[0]; calib_para_v200->limitRange.maxB[0] = tmpValue[1]; } else { LOGW("unknown tag %s", tagname.c_str()); } pchild = pchild->NextSibling(); } calib_para_v200->limitRange.lumaNum = 1; calib_para_v200->limitRange.lumaValue[0]=0; XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbLimitRangeCell ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_LIMITRANGE_CELL_TAG_ID, CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V200_t *calib_para_v200 = (CalibDb_Awb_Calib_Para_V200_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_LV_TAG_ID)) { float tmpValue= calib_para_v200->limitRange.lumaValue[index]; int no = ParseFloatArray(pchild, &tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v200->limitRange.lumaValue[index] = tmpValue; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_Y_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v200->limitRange.minY[index], calib_para_v200->limitRange.maxY[index] }; int no = ParseUshortArray(pchild, tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v200->limitRange.minY[index] = tmpValue[0]; calib_para_v200->limitRange.maxY[index] = tmpValue[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_R_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v200->limitRange.minR[index], calib_para_v200->limitRange.maxR[index] }; int no = ParseUshortArray(pchild, tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v200->limitRange.minR[index]= tmpValue[0]; calib_para_v200->limitRange.maxR[index] = tmpValue[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_G_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v200->limitRange.minG[index], calib_para_v200->limitRange.maxG[index] }; int no = ParseUshortArray(pchild, tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v200->limitRange.minG[index] = tmpValue[0]; calib_para_v200->limitRange.maxG[index] = tmpValue[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_B_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v200->limitRange.minB[index], calib_para_v200->limitRange.maxB[index] }; int no = ParseUshortArray(pchild, tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v200->limitRange.minB[index] = tmpValue[0]; calib_para_v200->limitRange.maxB[index] = tmpValue[1]; } else { LOGW("unknown tag %s", tagname.c_str()); } pchild = pchild->NextSibling(); } calib_para_v200->limitRange.lumaNum++; DCT_ASSERT(( calib_para_v200->limitRange.lumaNum <= CALD_AWB_LV_NUM_MAX)); XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbWindow ( const XMLElement* pelement, void* param, int index ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_RESALL_TAG_ID, CALIB_SENSOR_AWB_MEASUREWINDOW_TAG_ID); CalibDb_Awb_Calib_Para_V200_t *calib_para_v200 = (CalibDb_Awb_Calib_Para_V200_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_RESOLUTION_TAG_ID)) { ParseString(pchild, calib_para_v200->measeureWindow.resName[index], sizeof(calib_para_v200->measeureWindow.resName[index])); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MEASUREWINDOWSIZE_TAG_ID)) { int no = ParseUshortArray(pchild, calib_para_v200->measeureWindow.window[index], tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no <= 4)); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_RRES_NUM_MAX)); calib_para_v200->measeureWindow.resNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbwbGainAdjust ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_WBGAINADJUST_TAG_ID, CALIB_SENSOR_AWB_ADJUSTPARA_GLOBALS_TAG_ID); CalibDb_Awb_Adjust_Para_t *adjust_para = (CalibDb_Awb_Adjust_Para_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CTGRID_NUM_TAG_ID)) { int no = ParseIntArray(pchild, &adjust_para->cct_lut_cfg[0].ct_grid_num, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CTINRANGE_TAG_ID)) { int no = ParseFloatArray(pchild, adjust_para->cct_lut_cfg[0].ct_range, tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no == 2)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CRIGRID_NUM_TAG_ID)) { int no = ParseIntArray(pchild, &adjust_para->cct_lut_cfg[0].cri_grid_num, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CRIINRANGE_TAG_ID)) { int no = ParseFloatArray(pchild, adjust_para->cct_lut_cfg[0].cri_range, tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no == 2)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LUTALL_TAG_ID)) { adjust_para->cct_lut_cfg_num = tag.Size(); DCT_ASSERT((adjust_para->cct_lut_cfg_num <= CALD_AWB_CT_LV_NUM_MAX)); if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbCctLutAll, param, (uint32_t)CALIB_SENSOR_AWB_LUTALL_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_WBGAINADJUST_TAG_ID)) { LOGE("parse error in AWB wbGainAdjust (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbwbGainOffset ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_WBGAINOFFSET_TAG_ID, CALIB_SENSOR_AWB_ADJUSTPARA_GLOBALS_TAG_ID); CalibDb_Awb_Adjust_Para_t *adjust_para = (CalibDb_Awb_Adjust_Para_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINOFFSET_ENABLE_TAG_ID)) { unsigned char tempVal = adjust_para->wbGainOffset.enable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); adjust_para->wbGainOffset.enable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINOFFSET_OFFSET_TAG_ID)) { int no = ParseFloatArray(pchild, adjust_para->wbGainOffset.offset, tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no == 4)); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbwbGainDaylightClipV200 ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_WBGAINDAYLIGHTCLIP_TAG_ID, CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID); CalibDb_Awb_Cct_Clip_Cfg_t *cct_clip_cfg = (CalibDb_Awb_Cct_Clip_Cfg_t *)param; const XMLNode* psubchild = pelement->FirstChild(); autoTabForward(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_OUTDOORCCTMIN_TAG_ID)) { int no = ParseFloatArray(psubchild, &cct_clip_cfg->outdoor_cct_min, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } psubchild = psubchild->NextSibling(); } autoTabBackward(); XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbwbGainClipV200 ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_WBGAINCLIP_TAG_ID, CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID); CalibDb_Awb_Cct_Clip_Cfg_t *cct_clip_cfg = (CalibDb_Awb_Cct_Clip_Cfg_t *)param; const XMLNode* psubchild = pelement->FirstChild(); autoTabForward(); int cct_num = 0; int cri_bound_up_num = 0; int cri_bound_low_num = 0; while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CCT_TAG_ID)) { int no = ParseFloatArray(psubchild, cct_clip_cfg->cct, subTag.Size()); DCT_ASSERT((no == subTag.Size())); cct_num = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CRIBOUNDUP_TAG_ID)) { int no = ParseFloatArray(psubchild, cct_clip_cfg->cri_bound_up, subTag.Size()); DCT_ASSERT((no == subTag.Size())); cri_bound_up_num = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CRIBOUNDLOW_TAG_ID)) { int no = ParseFloatArray(psubchild, cct_clip_cfg->cri_bound_low, subTag.Size()); DCT_ASSERT((no == subTag.Size())); cri_bound_low_num = no; } psubchild = psubchild->NextSibling(); } if((cct_num != cri_bound_up_num) || (cct_num != cri_bound_low_num)) { LOGE("para error in AWB section tag:%s number of cct should be equal to cri_bound_up and cri_bound_low", pelement->Name()); return ( false ); } cct_clip_cfg->grid_num = cct_num; autoTabBackward(); XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbwbGainDaylightClipV201 ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_WBGAINDAYLIGHTCLIP_TAG_ID, CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID); CalibDb_Awb_Cct_Clip_Cfg_t *cct_clip_cfg = (CalibDb_Awb_Cct_Clip_Cfg_t *)param; const XMLNode* psubchild = pelement->FirstChild(); autoTabForward(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_OUTDOORCCTMIN_TAG_ID)) { int no = ParseFloatArray(psubchild, &cct_clip_cfg->outdoor_cct_min, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } psubchild = psubchild->NextSibling(); } autoTabBackward(); XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbwbGainClipV201 ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_WBGAINCLIP_TAG_ID, CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID); CalibDb_Awb_Cct_Clip_Cfg_t *cct_clip_cfg = (CalibDb_Awb_Cct_Clip_Cfg_t *)param; const XMLNode* psubchild = pelement->FirstChild(); autoTabForward(); int cct_num = 0; int cri_bound_up_num = 0; int cri_bound_low_num = 0; while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CCT_TAG_ID)) { int no = ParseFloatArray(psubchild, cct_clip_cfg->cct, subTag.Size()); DCT_ASSERT((no == subTag.Size())); cct_num = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CRIBOUNDUP_TAG_ID)) { int no = ParseFloatArray(psubchild, cct_clip_cfg->cri_bound_up, subTag.Size()); DCT_ASSERT((no == subTag.Size())); cri_bound_up_num = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CRIBOUNDLOW_TAG_ID)) { int no = ParseFloatArray(psubchild, cct_clip_cfg->cri_bound_low, subTag.Size()); DCT_ASSERT((no == subTag.Size())); cri_bound_low_num = no; } psubchild = psubchild->NextSibling(); } if((cct_num != cri_bound_up_num) || (cct_num != cri_bound_low_num)) { LOGE("para error in AWB section tag:%s number of cct should be equal to cri_bound_up and cri_bound_low", pelement->Name()); return ( false ); } cct_clip_cfg->grid_num = cct_num; autoTabBackward(); XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbCctLutAll ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_LUTALL_TAG_ID, CALIB_SENSOR_AWB_WBGAINADJUST_TAG_ID); CalibDb_Awb_Adjust_Para_t *adjust_para = (CalibDb_Awb_Adjust_Para_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LVVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, &adjust_para->cct_lut_cfg[index].lv, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CTOUT_TAG_ID)) { int no = ParseFloatArray(pchild, adjust_para->cct_lut_cfg[index].ct_lut_out, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CRIOUT_TAG_ID)) { int no = ParseFloatArray(pchild, adjust_para->cct_lut_cfg[index].cri_lut_out, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbSingleColorV200 ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_SINGLECOLORPROCESS_TAG_ID, CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V200_t *calib_para_v200 = (CalibDb_Awb_Calib_Para_V200_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_COLORBLOCK_TAG_ID)) { calib_para_v200->sSelColorNUM = 0; if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbColBlkV200, param, (uint32_t)CALIB_SENSOR_AWB_COLORBLOCK_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_SINGLECOLORPROCESS_TAG_ID)) { LOGE("parse error in AWB light sources (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCEUSEDFORESTIMIATION_TAG_ID)) { calib_para_v200->sIllEstNum = 0; if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbLsForEstimationV200, param, (uint32_t)CALIB_SENSOR_AWB_LIGHTSOURCEUSEDFORESTIMIATION_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_SINGLECOLORPROCESS_TAG_ID)) { LOGE("parse error in AWB light sources (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_ALPHA_TAG_ID)) { int no = ParseFloatArray(pchild, &calib_para_v200->sAlpha, 1); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbColBlkV200 ( const XMLElement* pelement, void* param, int index ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_COLORBLOCK_TAG_ID, CALIB_SENSOR_AWB_SINGLECOLORPROCESS_TAG_ID); CalibDb_Awb_Calib_Para_V200_t *calib_para_v200 = (CalibDb_Awb_Calib_Para_V200_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_INDEX_TAG_ID)) { int no = ParseUshortArray(pchild, &calib_para_v200->sIndSelColor[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MEANC_TAG_ID)) { int no = ParseFloatArray(pchild, &calib_para_v200->sMeanCh[0][index], tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MEANH_TAG_ID)) { int no = ParseFloatArray(pchild, &calib_para_v200->sMeanCh[1][index], tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_SGC_NUM_MAX)); calib_para_v200->sSelColorNUM++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbLsForEstimationV200 ( const XMLElement* pelement, void* param, int index ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_LIGHTSOURCEUSEDFORESTIMIATION_TAG_ID, CALIB_SENSOR_AWB_SINGLECOLORPROCESS_TAG_ID); CalibDb_Awb_Calib_Para_V200_t *calib_para_v200 = (CalibDb_Awb_Calib_Para_V200_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LSUSEDFORESTIMIATION_NAME_TAG_ID)) { ParseString(pchild, calib_para_v200->sNameIllEst[index], sizeof(calib_para_v200->sNameIllEst[index])); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_RGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, &calib_para_v200->srGain[index], tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_BGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, &calib_para_v200->sbGain[index], tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_LS_NUM_MAX)); calib_para_v200->sIllEstNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbSingleColorV201 ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_SINGLECOLORPROCESS_TAG_ID, CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_V201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_COLORBLOCK_TAG_ID)) { calib_para_V201->sSelColorNUM = 0; if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbColBlkV201, param, (uint32_t)CALIB_SENSOR_AWB_COLORBLOCK_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_SINGLECOLORPROCESS_TAG_ID)) { LOGE("parse error in AWB light sources (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCEUSEDFORESTIMIATION_TAG_ID)) { calib_para_V201->sIllEstNum = 0; if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbLsForEstimationV201, param, (uint32_t)CALIB_SENSOR_AWB_LIGHTSOURCEUSEDFORESTIMIATION_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_SINGLECOLORPROCESS_TAG_ID)) { LOGE("parse error in AWB light sources (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_ALPHA_TAG_ID)) { int no = ParseFloatArray(pchild, &calib_para_V201->sAlpha, 1); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbColBlkV201 ( const XMLElement* pelement, void* param, int index ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_COLORBLOCK_TAG_ID, CALIB_SENSOR_AWB_SINGLECOLORPROCESS_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_V201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_INDEX_TAG_ID)) { int no = ParseUshortArray(pchild, &calib_para_V201->sIndSelColor[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MEANC_TAG_ID)) { int no = ParseFloatArray(pchild, &calib_para_V201->sMeanCh[0][index], tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MEANH_TAG_ID)) { int no = ParseFloatArray(pchild, &calib_para_V201->sMeanCh[1][index], tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_SGC_NUM_MAX)); calib_para_V201->sSelColorNUM++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbLsForEstimationV201 ( const XMLElement* pelement, void* param, int index ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_LIGHTSOURCEUSEDFORESTIMIATION_TAG_ID, CALIB_SENSOR_AWB_SINGLECOLORPROCESS_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_V201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LSUSEDFORESTIMIATION_NAME_TAG_ID)) { ParseString(pchild, calib_para_V201->sNameIllEst[index], sizeof(calib_para_V201->sNameIllEst[index])); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_RGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, &calib_para_V201->srGain[index], tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_BGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, &calib_para_V201->sbGain[index], tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_LS_NUM_MAX)); calib_para_V201->sIllEstNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbGlobalsExclude ( const XMLElement* pelement, void* param, int index ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_EXCLUDERANGE_TAG_ID, CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V200_t *calib_para_v200 = (CalibDb_Awb_Calib_Para_V200_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_EXCLUDERANGE_DOMAIN_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v200->excludeWpRange[index].domain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_EXCLUDE_MODE_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v200->excludeWpRange[index].mode, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_EXCLUDE_WINDOW_TAG_ID)) { int xuyv[4] = { calib_para_v200->excludeWpRange[index].xu[0], calib_para_v200->excludeWpRange[index].xu[1], calib_para_v200->excludeWpRange[index].yv[0], calib_para_v200->excludeWpRange[index].yv[1] }; int no = ParseIntArray(pchild, xuyv, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v200->excludeWpRange[index].xu[0] = xuyv[0]; calib_para_v200->excludeWpRange[index].xu[1] = xuyv[1]; calib_para_v200->excludeWpRange[index].yv[0] = xuyv[2]; calib_para_v200->excludeWpRange[index].yv[1] = xuyv[3]; } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_EXCRANGE_NUM_MAX)); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbLightXYRegion ( const XMLElement* pelement, void* param ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_LIGHTSOURCES_LIGHTXYREGION_TAG_ID, CALIB_SENSOR_AWB_V200_LIGHTSOURCES_TAG_ID); CalibDb_tcs_range_ill_t *xyRangeLight = (CalibDb_tcs_range_ill_t *)param; const XMLNode* pchild = pelement->FirstChild(); autoTabForward(); while (pchild) { XmlTag Tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), Tag.Type(), Tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_NORMAL_TAG_ID)) { float tempVal[4] = {xyRangeLight->NorrangeX[0], xyRangeLight->NorrangeX[1], xyRangeLight->NorrangeY[0], xyRangeLight->NorrangeY[1] }; int no = ParseFloatArray(pchild, tempVal, Tag.Size()); DCT_ASSERT((no == Tag.Size())); xyRangeLight->NorrangeX[0] = tempVal[0]; xyRangeLight->NorrangeX[1] = tempVal[1]; xyRangeLight->NorrangeY[0] = tempVal[2]; xyRangeLight->NorrangeY[1] = tempVal[3]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_BIG_TAG_ID)) { float tempVal[4] = { xyRangeLight->SperangeX[0], xyRangeLight->SperangeX[1], xyRangeLight->SperangeY[0], xyRangeLight->SperangeY[1] }; int no = ParseFloatArray(pchild, tempVal, Tag.Size()); DCT_ASSERT((no == Tag.Size())); xyRangeLight->SperangeX[0] = tempVal[0]; xyRangeLight->SperangeX[1] = tempVal[1]; xyRangeLight->SperangeY[0] = tempVal[2]; xyRangeLight->SperangeY[1] = tempVal[3]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_SMALL_TAG_ID)) { float tempVal[4] = { xyRangeLight->SmalrangeX[0], xyRangeLight->SmalrangeX[1], xyRangeLight->SmalrangeY[0], xyRangeLight->SmalrangeY[1] }; int no = ParseFloatArray(pchild, tempVal, Tag.Size()); DCT_ASSERT((no == Tag.Size())); xyRangeLight->SmalrangeX[0] = tempVal[0]; xyRangeLight->SmalrangeX[1] = tempVal[1]; xyRangeLight->SmalrangeY[0] = tempVal[2]; xyRangeLight->SmalrangeY[1] = tempVal[3]; } pchild = pchild->NextSibling(); } autoTabBackward(); XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbLightYUVRegion ( const XMLElement* pelement, void* param ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_LIGHTSOURCES_YUVREGION_TAG_ID, CALIB_SENSOR_AWB_V200_LIGHTSOURCES_TAG_ID); CalibDb_Yuv3D_Range_Ill_t *yuv3DRange_param = ( CalibDb_Yuv3D_Range_Ill_t *)param; const XMLNode* psubchild = pelement->FirstChild(); autoTabForward(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_K2SET_TAG_ID)) { int no = ParseIntArray(psubchild, &yuv3DRange_param->slope_inv_neg_uv, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_B0SET_TAG_ID)) { int no = ParseIntArray(psubchild, &yuv3DRange_param->b_uv, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_K3SET_TAG_ID)) { int no = ParseIntArray(psubchild, &yuv3DRange_param->slope_factor_uv, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_K_YDISSET_TAG_ID)) { int no = ParseIntArray(psubchild, &yuv3DRange_param->slope_ydis, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_B_YDISSET_TAG_ID)) { int no = ParseIntArray(psubchild, &yuv3DRange_param->b_ydis, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_UREFSET_TAG_ID)) { int no = ParseUcharArray(psubchild, &yuv3DRange_param->ref_u, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_VREFSET_TAG_ID)) { int no = ParseUcharArray(psubchild, &yuv3DRange_param->ref_v, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_DISSET_TAG_ID)) { int no = ParseUshortArray(psubchild, yuv3DRange_param->dis, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_THSET_TAG_ID)) { int no = ParseUcharArray(psubchild, yuv3DRange_param->th, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } psubchild = psubchild->NextSibling(); } autoTabBackward(); XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbMeasureLightSourcesV200 ( const XMLElement* pelement, void* param, int index ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_V200_LIGHTSOURCES_TAG_ID, CALIB_SENSOR_AWB_V200_TAG_ID); CalibDb_Awb_Calib_Para_V200_t *calib_para_v200 = (CalibDb_Awb_Calib_Para_V200_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_NAME_TAG_ID)) { ParseString(pchild, calib_para_v200->lightName[index], sizeof(calib_para_v200->lightName[index])); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_DOORTYPE_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v200->doorType[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_STANDARDGAINVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->standardGainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_LIGHTUREGION_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->uvRange_param[index].pu_region, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_LIGHTVREGION_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->uvRange_param[index].pv_region, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_SMALLUREGION_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->uvRange_param_small[index].pu_region, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_SMALLVREGION_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v200->uvRange_param_small[index].pv_region, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_LIGHTXYREGION_TAG_ID)) { if (!parseEntrySensorAwbLightXYRegion(pchild->ToElement(), &calib_para_v200->xyRangeLight[index])) { LOGE("parse error in AWB LightSources (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_YUVREGION_TAG_ID)) { if (!parseEntrySensorAwbLightYUVRegion(pchild->ToElement(), &calib_para_v200->yuv3DRange_param[index])) { LOGE("parse error in AWB LightSources (%s)", tagname.c_str()); return (false); } } else { LOGW("UNKNOWN tag: %s", tagname.c_str()); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_LS_NUM_MAX)); calib_para_v200->lightNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbStrategyLightSources ( const XMLElement* pelement, void* param, int index ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_ADJUSTPARA_LIGHTSOURCES_TAG_ID, CALIB_SENSOR_AWB_ADJUSTPARA_TAG_ID); CalibDb_Awb_Adjust_Para_t *adjust_para = (CalibDb_Awb_Adjust_Para_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_NAME_TAG_ID)) { ParseString(pchild, adjust_para->awb_light_info[index].light_name, sizeof(adjust_para->awb_light_info[index].light_name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_STAWEIGTHSET_TAG_ID)) { int no = ParseUcharArray(pchild, adjust_para->awb_light_info[index].staWeight, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_SPATIALGAIN_LV_THSET_TAG_ID)) { unsigned int tempVal[2] = { adjust_para->awb_light_info[index].spatialGain_LV_THL, adjust_para->awb_light_info[index].spatialGain_LV_THH}; int no = ParseUintArray(pchild, tempVal, tag.Size()); DCT_ASSERT((no == tag.Size())); adjust_para->awb_light_info[index].spatialGain_LV_THL = tempVal[0]; adjust_para->awb_light_info[index].spatialGain_LV_THH = tempVal[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_XYTYPE2ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &adjust_para->awb_light_info[index].xyType2Enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_WEIGHTCURVE_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, adjust_para->awb_light_info[index].weightCurve_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_WEIGHTCURVE_WEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, adjust_para->awb_light_info[index].weightCurve_weight, tag.Size()); DCT_ASSERT((no == tag.Size())); } else { LOGW("UNKNOWN tag: %s", tagname.c_str()); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_LS_NUM_MAX)); adjust_para->lightNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbCalibParaV201 ( const XMLElement* pelement, void* param, int index ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_V201_TAG_ID, CALIB_SENSOR_AWB_TAG_ID); list_head* calib_para_v201_list = (list_head* )param; CalibDb_Awb_Calib_Para_V201_t calib_para_v201; memset(&calib_para_v201, 0, sizeof(calib_para_v201)); CALIBDB_MODULE_PTR_HELPER_RET(list_head, awb_calib_para_v201); bool ret; if (xmlParseReadWrite == XML_PARSER_WRITE) { const CalibDb_Awb_Calib_Para_V201_t *calib_para_v201_2 = NULL; ret = GetAwbProfileFromAwbCalibV201ListByIdx(awb_calib_para_v201, index, &calib_para_v201_2); DCT_ASSERT(ret == true); DCT_ASSERT(calib_para_v201_2 != NULL); memcpy(&calib_para_v201, calib_para_v201_2, sizeof(CalibDb_Awb_Calib_Para_V201_t)); } const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIIB_SCENE_TAG_ID)) { ParseString(pchild, calib_para_v201.scene, sizeof(calib_para_v201.scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID)) { if (!parseEntrySensorAwbMeasureGlobalsV201(pchild->ToElement(), &calib_para_v201)) { LOGE("parse error in AWB globals (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_V201_LIGHTSOURCES_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbMeasureLightSourcesV201, &calib_para_v201, (uint32_t)CALIB_SENSOR_AWB_V201_LIGHTSOURCES_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_V201_TAG_ID)) { LOGE("parse error in AWB light sources (%s)", tagname.c_str()); return (false); } } else { LOGW("parse error in AWB section (unknow tag:%s)", tagname.c_str()); //return (false); } pchild = pchild->NextSibling(); } XML_CHECK_END(); if (xmlParseReadWrite == XML_PARSER_READ) { ret = AddAwbCalibV201Profile2AwbCalibV201List(calib_para_v201_list, &calib_para_v201); DCT_ASSERT(ret == true); } LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbMeasureGlobalsV201 ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID, CALIB_SENSOR_AWB_V201_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_HDRFRAMECHOOSE_TAG_ID)) { if (!parseEntrySensorAwbFrameChooseV201(pchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LSCBYPASSENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v201->lscBypEnable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v201->lscBypEnable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_UVDETECTIONENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v201->uvDetectionEnable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v201->uvDetectionEnable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_XYDETECTIONENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v201->xyDetectionEnable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v201->xyDetectionEnable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_YUVDETECTIONENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v201->yuvDetectionEnable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v201->yuvDetectionEnable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINDAYLIGHTCLIPENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v201->wbGainDaylightClipEn; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v201->wbGainDaylightClipEn = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINCLIPEANBLE_TAG_ID)) { unsigned char tempVal = calib_para_v201->wbGainClipEn; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v201->wbGainClipEn = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LSUSEDFORYUVDET_TAG_ID)) { calib_para_v201->lsUsedForYuvDetNum = 0; if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbLsForYuvDetV201, param, (uint32_t)CALIB_SENSOR_AWB_LSUSEDFORYUVDET_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPDIFFWEIENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v201->wpDiffWeiEnable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v201->wpDiffWeiEnable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPDIFFBLKWEIENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v201->blkWeightEnable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v201->blkWeightEnable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_BLKSTATISTICSENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v201->blkStatisticsEnable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v201->blkStatisticsEnable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_DOWNSCALEMODE_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v201->dsMode, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_BLCKMEASUREMODE_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v201->blkMeasureMode, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MULTIWINDOWENABLE_TAG_ID)) { unsigned char tempVal = calib_para_v201->multiwindow_en; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); calib_para_v201->multiwindow_en = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MEASUREWINDOW_TAG_ID)) { if (!parseEntrySensorAwbMeasureWindowV201(pchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_TAG_ID)) { if (!parseEntrySensorAwbLimitRangeV201(pchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_CELL_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbLimitRangeV201Cell, param, (uint32_t)CALIB_SENSOR_AWB_LIMITRANGE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_V200_GLOBALS_TAG_ID)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_PSEUDOLUMWEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->rgb2tcs_param.pseudoLuminanceWeight, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_ROTATIONMAT_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->rgb2tcs_param.rotationMat, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_RGB2ROTATIONYUVMAT_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->rgb2RYuv_matrix, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no == 16)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MULTIWINDOW_TAG_ID)) { //unsigned short tempVal[32]; int no = ParseUshortArray(pchild, calib_para_v201->multiwindow[0], tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no <= CALD_AWB_WINDOW_NUM_MAX * 4)); //MEMCPY(calib_para_v201->multiwindow, tempVal, sizeof(short)*no); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_EXCLUDERANGE_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbGlobalsExcludeV201, param, (uint32_t)CALIB_SENSOR_AWB_EXCLUDERANGE_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID)) { LOGE("parse error in AWB globals excluderange (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_SPATIALGAIN_L_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->spatialGain_L, tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no == 4)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_SPATIALGAIN_H_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->spatialGain_H, tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no == 4)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_TEMPORALDEFAULTGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->temporalDefaultGain, tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no == 4)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_CA_TARGETGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->ca_targetGain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_SINGLECOLORPROCESS_TAG_ID)) { if (!parseEntrySensorAwbSingleColorV201(pchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LINERGBG_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->lineRgBg, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LINERGBGPROJCCT_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->lineRgProjCCT, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINDAYLIGHTCLIP_TAG_ID)) { if (!parseEntrySensorAwbwbGainDaylightClipV201(pchild->ToElement(), &calib_para_v201->cct_clip_cfg)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WBGAINCLIP_TAG_ID)) { if (!parseEntrySensorAwbwbGainClipV201(pchild->ToElement(), &calib_para_v201->cct_clip_cfg)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPDIFFWEIGHT_TAG_ID)) { if (!parseEntrySensorAwbWpDiffLumaWeight(pchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPDIFFBLKWEIGHT_TAG_ID)) { int no = ParseUshortArray(pchild, calib_para_v201->blkWeight, tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no == CALD_AWB_GRID_NUM_TOTAL)); } else { LOGW("parse error in AWB section (unknow tag:%s)", tagname.c_str()); //return ( false ); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbLightXYRegionV201 ( const XMLElement* pelement, void* param ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_LIGHTSOURCES_LIGHTXYREGION_TAG_ID, CALIB_SENSOR_AWB_V201_LIGHTSOURCES_TAG_ID); CalibDb_tcs_range_ill_t *xyRangeLight = (CalibDb_tcs_range_ill_t *)param; const XMLNode* psubchild = pelement->FirstChild(); autoTabForward(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_NORMAL_TAG_ID)) { float tempVal[4] = {xyRangeLight->NorrangeX[0], xyRangeLight->NorrangeX[1], xyRangeLight->NorrangeY[0], xyRangeLight->NorrangeY[1] }; int no = ParseFloatArray(psubchild, tempVal, subTag.Size()); DCT_ASSERT((no == subTag.Size())); xyRangeLight->NorrangeX[0] = tempVal[0]; xyRangeLight->NorrangeX[1] = tempVal[1]; xyRangeLight->NorrangeY[0] = tempVal[2]; xyRangeLight->NorrangeY[1] = tempVal[3]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_BIG_TAG_ID)) { float tempVal[4] = { xyRangeLight->SperangeX[0], xyRangeLight->SperangeX[1], xyRangeLight->SperangeY[0], xyRangeLight->SperangeY[1] }; int no = ParseFloatArray(psubchild, tempVal, subTag.Size()); DCT_ASSERT((no == subTag.Size())); xyRangeLight->SperangeX[0] = tempVal[0]; xyRangeLight->SperangeX[1] = tempVal[1]; xyRangeLight->SperangeY[0] = tempVal[2]; xyRangeLight->SperangeY[1] = tempVal[3]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_SMALL_TAG_ID)) { float tempVal[4] = { xyRangeLight->SmalrangeX[0], xyRangeLight->SmalrangeX[1], xyRangeLight->SmalrangeY[0], xyRangeLight->SmalrangeY[1] }; int no = ParseFloatArray(psubchild, tempVal, subTag.Size()); DCT_ASSERT((no == subTag.Size())); xyRangeLight->SmalrangeX[0] = tempVal[0]; xyRangeLight->SmalrangeX[1] = tempVal[1]; xyRangeLight->SmalrangeY[0] = tempVal[2]; xyRangeLight->SmalrangeY[1] = tempVal[3]; } psubchild = psubchild->NextSibling(); } autoTabBackward(); XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbLightRTYUVRegionV201 ( const XMLElement* pelement, void* param ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_LIGHTSOURCES_RTYUVREGION_TAG_ID, CALIB_SENSOR_AWB_V201_LIGHTSOURCES_TAG_ID); //int index = *((int*)param); CalibDb_Yuv3D_2_Range_Ill_t *yuv3D2Range_param = (CalibDb_Yuv3D_2_Range_Ill_t *)param; const XMLNode* psubchild = pelement->FirstChild(); autoTabForward(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_THCURVE_U_SET_TAG_ID)) { int no = ParseFloatArray(psubchild, yuv3D2Range_param->thcurve_u, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_THCURVE_TH_SET_TAG_ID)) { int no = ParseFloatArray(psubchild, yuv3D2Range_param->thcure_th, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_LINEVECTOR_TAG_ID)) { int no = ParseFloatArray(psubchild, yuv3D2Range_param->line, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } psubchild = psubchild->NextSibling(); } autoTabBackward(); XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbMeasureLightSourcesV201 ( const XMLElement* pelement, void* param, int index ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_V201_LIGHTSOURCES_TAG_ID, CALIB_SENSOR_AWB_V201_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; DCT_ASSERT((index <= CALD_AWB_LS_NUM_MAX)); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_NAME_TAG_ID)) { ParseString(pchild, calib_para_v201->lightName[index], sizeof(calib_para_v201->lightName[index])); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_DOORTYPE_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v201->doorType[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_STANDARDGAINVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->standardGainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_LIGHTUREGION_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->uvRange_param[index].pu_region, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_LIGHTVREGION_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->uvRange_param[index].pv_region, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_SMALLUREGION_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->uvRange_param_small[index].pu_region, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_SMALLVREGION_TAG_ID)) { int no = ParseFloatArray(pchild, calib_para_v201->uvRange_param_small[index].pv_region, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_LIGHTXYREGION_TAG_ID)) { if (!parseEntrySensorAwbLightXYRegionV201(pchild->ToElement(), &calib_para_v201->xyRangeLight[index])) { LOGE("parse error in AWB globals (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIGHTSOURCES_RTYUVREGION_TAG_ID)) { if (!parseEntrySensorAwbLightRTYUVRegionV201(pchild->ToElement(), &calib_para_v201->yuv3D2Range_param[index])) { LOGE("parse error in AWB globals (%s)", tagname.c_str()); return (false); } } else { LOGW("UNKNOWN tag: %s", tagname.c_str()); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_LS_NUM_MAX)); calib_para_v201->lightNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbLsForYuvDetV201 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_LSUSEDFORYUVDET_TAG_ID, CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LSUSEDFORYUVDET_NAME_TAG_ID)) { ParseString(pchild, calib_para_v201->lsUsedForYuvDet[index], sizeof(calib_para_v201->lsUsedForYuvDet[index]));//check } else { LOGW("UNKNOWN tag: %s", tagname.c_str()); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_LS_NUM_MAX)); calib_para_v201->lsUsedForYuvDetNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbMeasureWindowV201 ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_MEASUREWINDOW_TAG_ID, CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MODE_TAG_ID)) { int no = ParseIntArray(pchild, &calib_para_v201->measeureWindow.mode, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_RESALL_TAG_ID)) { calib_para_v201->measeureWindow.resNum = 0; if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAwbWindowV201, param, (uint32_t)CALIB_SENSOR_AWB_RESALL_TAG_ID, (uint32_t)CALIB_SENSOR_AWB_MEASUREWINDOW_TAG_ID)) { LOGE("parse error in AWB light sources (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbLimitRangeV201 ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_LIMITRANGE_TAG_ID, CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_Y_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v201->limitRange.minY[0] , calib_para_v201->limitRange.maxY[0] }; int no = ParseUshortArray(psubchild, tmpValue, subTag.Size()); DCT_ASSERT((no == subTag.Size())); calib_para_v201->limitRange.minY[0] = tmpValue[0]; calib_para_v201->limitRange.maxY[0] = tmpValue[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_R_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v201->limitRange.minR[0], calib_para_v201->limitRange.maxR[0] }; int no = ParseUshortArray(psubchild, tmpValue, subTag.Size()); DCT_ASSERT((no == subTag.Size())); calib_para_v201->limitRange.minR[0] = tmpValue[0]; calib_para_v201->limitRange.maxR[0] = tmpValue[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_G_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v201->limitRange.minG[0] , calib_para_v201->limitRange.maxG[0] }; int no = ParseUshortArray(psubchild, tmpValue, subTag.Size()); DCT_ASSERT((no == subTag.Size())); calib_para_v201->limitRange.minG[0] = tmpValue[0]; calib_para_v201->limitRange.maxG[0] = tmpValue[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_B_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v201->limitRange.minB[0], calib_para_v201->limitRange.maxB[0] }; int no = ParseUshortArray(psubchild, tmpValue, subTag.Size()); DCT_ASSERT((no == subTag.Size())); calib_para_v201->limitRange.minB[0] = tmpValue[0]; calib_para_v201->limitRange.maxB[0] = tmpValue[1]; } else { LOGW("unknown subTag %s", subTagname.c_str()); } psubchild = psubchild->NextSibling(); } calib_para_v201->limitRange.lumaNum = 1; calib_para_v201->limitRange.lumaValue[0]=0; XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbLimitRangeV201Cell ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_LIMITRANGE_CELL_TAG_ID, CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_LV_TAG_ID)) { float tmpValue= calib_para_v201->limitRange.lumaValue[index]; int no = ParseFloatArray(pchild, &tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v201->limitRange.lumaValue[index] = tmpValue; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_Y_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v201->limitRange.minY[index], calib_para_v201->limitRange.maxY[index] }; int no = ParseUshortArray(pchild, tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v201->limitRange.minY[index] = tmpValue[0]; calib_para_v201->limitRange.maxY[index] = tmpValue[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_R_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v201->limitRange.minR[index], calib_para_v201->limitRange.maxR[index] }; int no = ParseUshortArray(pchild, tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v201->limitRange.minR[index]= tmpValue[0]; calib_para_v201->limitRange.maxR[index] = tmpValue[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_G_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v201->limitRange.minG[index], calib_para_v201->limitRange.maxG[index] }; int no = ParseUshortArray(pchild, tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v201->limitRange.minG[index] = tmpValue[0]; calib_para_v201->limitRange.maxG[index] = tmpValue[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LIMITRANGE_B_TAG_ID)) { unsigned short tmpValue[2] = { calib_para_v201->limitRange.minB[index], calib_para_v201->limitRange.maxB[index] }; int no = ParseUshortArray(pchild, tmpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v201->limitRange.minB[index] = tmpValue[0]; calib_para_v201->limitRange.maxB[index] = tmpValue[1]; } else { LOGW("unknown tag %s", tagname.c_str()); } pchild = pchild->NextSibling(); } calib_para_v201->limitRange.lumaNum++; DCT_ASSERT(( calib_para_v201->limitRange.lumaNum <= CALD_AWB_LV_NUM_MAX)); XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbWpDiffWeiEnableTh ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_WPDIFFWEIENABLETH_TAG_ID, CALIB_SENSOR_AWB_WPDIFFWEIGHT_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPNOTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &calib_para_v201->wpDiffNoTh, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_LVVALUETH_TAG_ID)) { int no = ParseUintArray(psubsubchild, &calib_para_v201->wpDiffLvValueTh, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbWpDiffwei_w_HighLV ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_WPDIFFWEI_W_HIGHLV_TAG_ID, CALIB_SENSOR_AWB_WPDIFFWEIGHT_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPRATIO1_TAG_ID)) { int no = ParseFloatArray(psubsubchild, calib_para_v201->wpDiffweiSet_w_HigLV[0], subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPRATIO2_TAG_ID)) { int no = ParseFloatArray(psubsubchild, calib_para_v201->wpDiffweiSet_w_HigLV[1], subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPRATIO3_TAG_ID)) { int no = ParseFloatArray(psubsubchild, calib_para_v201->wpDiffweiSet_w_HigLV[2], subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbWpDiffwei_w_LowLV ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_WPDIFFWEI_W_LOWLV_TAG_ID, CALIB_SENSOR_AWB_WPDIFFWEIGHT_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubsubTag.Type(), subsubsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPRATIO1_TAG_ID)) { int no = ParseFloatArray(psubsubchild, calib_para_v201->wpDiffweiSet_w_LowLV[0], subsubsubTag.Size()); DCT_ASSERT((no == subsubsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPRATIO2_TAG_ID)) { int no = ParseFloatArray(psubsubchild, calib_para_v201->wpDiffweiSet_w_LowLV[1], subsubsubTag.Size()); DCT_ASSERT((no == subsubsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPRATIO3_TAG_ID)) { int no = ParseFloatArray(psubsubchild, calib_para_v201->wpDiffweiSet_w_LowLV[2], subsubsubTag.Size()); DCT_ASSERT((no == subsubsubTag.Size())); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbWpDiffLumaWeight ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_WPDIFFWEIGHT_TAG_ID, CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPDIFFWEIENABLETH_TAG_ID)) { if (!parseEntrySensorAwbWpDiffWeiEnableTh(psubchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPDIFFWEI_Y_TAG_ID)) { int no = ParseUcharArray(psubchild, calib_para_v201->wpDiffwei_y, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_PERFECTBINCONF_TAG_ID)) { int no = ParseUcharArray(psubchild, calib_para_v201->perfectBin, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPDIFFWEILVTH_TAG_ID)) { int no = ParseFloatArray(psubchild, calib_para_v201->wpDiffweiSet_w_LvValueTh, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPDIFFWEIRATIOTH_TAG_ID)) { int no = ParseFloatArray(psubchild, calib_para_v201->wpDiffWeiRatioTh, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPDIFFWEI_W_HIGHLV_TAG_ID)) { if (!parseEntrySensorAwbWpDiffwei_w_HighLV(psubchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_WPDIFFWEI_W_LOWLV_TAG_ID)) { if (!parseEntrySensorAwbWpDiffwei_w_LowLV(psubchild->ToElement(), param)) { LOGE("parse error in AWB (%s)", subTagname.c_str()); return (false); } } else { LOGW("unknown tag %s", subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbWindowV201 ( const XMLElement* pelement, void* param, int index ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_RESALL_TAG_ID, CALIB_SENSOR_AWB_MEASUREWINDOW_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_RESOLUTION_TAG_ID)) { ParseString(pchild, calib_para_v201->measeureWindow.resName[index], sizeof(calib_para_v201->measeureWindow.resName[index])); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_MEASUREWINDOWSIZE_TAG_ID)) { int no = ParseUshortArray(pchild, calib_para_v201->measeureWindow.window[index], tag.Size()); DCT_ASSERT((no == tag.Size())); DCT_ASSERT((no <= 4)); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_RRES_NUM_MAX)); calib_para_v201->measeureWindow.resNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbGlobalsExcludeV201 ( const XMLElement* pelement, void* param, int index ) { if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AWB_EXCLUDERANGE_TAG_ID, CALIB_SENSOR_AWB_V201_GLOBALS_TAG_ID); CalibDb_Awb_Calib_Para_V201_t *calib_para_v201 = (CalibDb_Awb_Calib_Para_V201_t*)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_EXCLUDERANGE_DOMAIN_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v201->excludeWpRange[index].domain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_EXCLUDE_MODE_TAG_ID)) { int no = ParseUcharArray(pchild, &calib_para_v201->excludeWpRange[index].mode, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_EXCLUDE_WINDOW_TAG_ID)) { int xuyv[4] = { calib_para_v201->excludeWpRange[index].xu[0], calib_para_v201->excludeWpRange[index].xu[1], calib_para_v201->excludeWpRange[index].yv[0], calib_para_v201->excludeWpRange[index].yv[1] }; int no = ParseIntArray(pchild, xuyv, tag.Size()); DCT_ASSERT((no == tag.Size())); calib_para_v201->excludeWpRange[index].xu[0] = xuyv[0]; calib_para_v201->excludeWpRange[index].xu[1] = xuyv[1]; calib_para_v201->excludeWpRange[index].yv[0] = xuyv[2]; calib_para_v201->excludeWpRange[index].yv[1] = xuyv[3]; } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((index <= CALD_AWB_EXCRANGE_NUM_MAX)); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAwbRemosaicPara ( const XMLElement* pelement, void* param ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AWB_REMOSAICPARA_TAG_ID, CALIB_SENSOR_AWB_ADJUSTPARA_GLOBALS_TAG_ID); CalibDb_Awb_Remosaic_Para_t *remosaic_cfg = (CalibDb_Awb_Remosaic_Para_t *)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_REMOSAICPARA_ENABLE_TAG_ID)) { unsigned char tempVal = remosaic_cfg->enable; int no = ParseUcharArray(pchild, &tempVal, 1); DCT_ASSERT((no == tag.Size())); remosaic_cfg->enable = (tempVal == 0 ? false : true); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AWB_REMOSAICPARA_WBGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, remosaic_cfg->sensor_awb_gain, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else { LOGW("parse error in AWB section (unknow tag:%s)", tagname.c_str()); //return ( false ); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAecLinAlterExp ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_SYNCTEST_LINALTEREXP_TAG_ID, CALIB_SENSOR_AEC_SYNCTEST_ALTEREXP_TAG_ID); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG redirectOut << "Tagname: " << Tagname << ",index:" << index << std::endl; #endif DCT_ASSERT((index < AEC_ALTER_EXP_MAX_NUM)); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_TIMEVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, &aec->CommCtrl.stSyncTest.LinAlterExp.TimeValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_GAINVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, &aec->CommCtrl.stSyncTest.LinAlterExp.GainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_ISPGAINVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, &aec->CommCtrl.stSyncTest.LinAlterExp.IspgainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_DCGMODE_TAG_ID)) { int no = ParseIntArray(pchild, &aec->CommCtrl.stSyncTest.LinAlterExp.DcgMode[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_PIRISVALUE_TAG_ID)) { int no = ParseIntArray(pchild, &aec->CommCtrl.stSyncTest.LinAlterExp.PIrisGainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else { redirectOut << "parse error in LinAlterExp (unknow tag: " << Tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); aec->CommCtrl.stSyncTest.LinAlterExp.array_size = index + 1; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecHdrAlterExp ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_SYNCTEST_HDRALTEREXP_TAG_ID, CALIB_SENSOR_AEC_SYNCTEST_ALTEREXP_TAG_ID); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG redirectOut << "Tagname: " << Tagname << ",index:" << index << std::endl; #endif DCT_ASSERT((index < AEC_ALTER_EXP_MAX_NUM)); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_TIMEVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stSyncTest.HdrAlterExp.TimeValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_GAINVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stSyncTest.HdrAlterExp.GainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_ISPGAINVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stSyncTest.HdrAlterExp.IspDGainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_DCGMODE_TAG_ID)) { int no = ParseIntArray(pchild, aec->CommCtrl.stSyncTest.HdrAlterExp.DcgMode[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_PIRISVALUE_TAG_ID)) { int no = ParseIntArray(pchild, &aec->CommCtrl.stSyncTest.HdrAlterExp.PIrisGainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else { redirectOut << "parse error in HdrAlterExp (unknow tag: " << Tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); aec->CommCtrl.stSyncTest.HdrAlterExp.array_size = index + 1; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecAlterExp ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_SYNCTEST_ALTEREXP_TAG_ID, CALIB_SENSOR_AEC_SYNCTEST_TAG_ID); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_LINALTEREXP_TAG_ID)) { if (!parseEntryCell(psubchild->ToElement(), subTag.Size(), &RkAiqCalibParser::parseEntrySensorAecLinAlterExp, param, (uint32_t)CALIB_SENSOR_AEC_SYNCTEST_LINALTEREXP_TAG_ID, (uint32_t)CALIB_SENSOR_AEC_SYNCTEST_ALTEREXP_TAG_ID)) { LOGE("parse error in AEC-SyncTest LinAlterExp(%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_HDRALTEREXP_TAG_ID)) { if (!parseEntryCell(psubchild->ToElement(), subTag.Size(), &RkAiqCalibParser::parseEntrySensorAecHdrAlterExp, param, (uint32_t)CALIB_SENSOR_AEC_SYNCTEST_HDRALTEREXP_TAG_ID, (uint32_t)CALIB_SENSOR_AEC_SYNCTEST_ALTEREXP_TAG_ID)) { LOGE("parse error in AEC-SyncTest HdrAlterExp(%s)", subTagname.c_str()); return (false); } } else { LOGW("%s(%d): parse error in AEC-SyncTest AlterExp (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecSyncTest ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_SYNCTEST_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = [%s]\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_ENABLE_TAG_ID)) { int no = ParseUcharArray(psubchild, &aec->CommCtrl.stSyncTest.enable, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_INTERVALFRM_TAG_ID)) { int no = ParseIntArray(psubchild, &aec->CommCtrl.stSyncTest.IntervalFrm, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_ALTEREXP_TAG_ID)) { if (!parseEntrySensorAecAlterExp(psubchild->ToElement(), param)) { LOGE("parse error in Aec-SyncTest AlterExp(%s)", subTagname.c_str()); return (false); } } else { LOGW("%s(%d): parse error in Aec-SyncTest (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecSpeed ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_AECSPEED_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = [%s]\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_DAMPOVER_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->CommCtrl.stAuto.stAeSpeed.DampOver, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_DAMPUNDER_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->CommCtrl.stAuto.stAeSpeed.DampUnder, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_DAMPDARK2BRIGHT_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->CommCtrl.stAuto.stAeSpeed.DampDark2Bright, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_DAMPBRIGHT2DARK_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->CommCtrl.stAuto.stAeSpeed.DampBright2Dark, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else { LOGW("%s(%d): parse error in AeSpeed (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecDelayFrmNum ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_AECDELAYFRMNUM_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubchild = pelement->FirstChild(); autoTabForward(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_BLACKDELAY_TAG_ID)) { int no = ParseUcharArray(psubchild, &aec->CommCtrl.stAuto.BlackDelayFrame, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_WHITEDELAY_TAG_ID)) { int no = ParseUcharArray(psubchild, &aec->CommCtrl.stAuto.WhiteDelayFrame, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else { LOGW("%s(%d): parse error in AeDelayFrame (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecVBNightMode ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_AECDNSWITCH_VBNIGHTMODE_TAG_ID, CALIB_SENSOR_AEC_AECDNSWITCH_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); XmlTag subTag = XmlTag(pelement); const XMLNode* psubsubchild = pelement->FirstChild(); autoTabForward(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_ENABLE_TAG_ID)) { int no = ParseUcharArray(psubsubchild, &aec->CommCtrl.stDNSwitch.stVBNightMode.enable, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_N2DFRMCNT_TAG_ID)) { int no = ParseUcharArray(psubsubchild, &aec->CommCtrl.stDNSwitch.stVBNightMode.Night2DayFrmCnt, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_N2DFACTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stDNSwitch.stVBNightMode.Night2DayFacTh, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { LOGW("%s(%d): parse error in DNSwitch - VBNightMode(unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecIRNightMode ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_AECDNSWITCH_IRNIGHTMODE_TAG_ID, CALIB_SENSOR_AEC_AECDNSWITCH_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); XmlTag subTag = XmlTag(pelement); const XMLNode* psubsubchild = pelement->FirstChild(); autoTabForward(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_ENABLE_TAG_ID)) { int no = ParseUcharArray(psubsubchild, &aec->CommCtrl.stDNSwitch.stIRNightMode.enable, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_N2DFRMCNT_TAG_ID)) { int no = ParseUcharArray(psubsubchild, &aec->CommCtrl.stDNSwitch.stIRNightMode.Night2DayFrmCnt, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_N2DFACTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stDNSwitch.stIRNightMode.Night2DayFacTh, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_IR_RG_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stDNSwitch.stIRNightMode.IRRgain, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_IR_BG_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stDNSwitch.stIRNightMode.IRBgain, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_MAX_DIS_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stDNSwitch.stIRNightMode.MaxWbDis, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_VB_PERCENT_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stDNSwitch.stIRNightMode.VbPercent, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { LOGW("%s(%d): parse error in DNSwitch - IRNightMode(unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecDNSwitch ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_AECDNSWITCH_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubchild = pelement->FirstChild(); autoTabForward(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_DNTRIGGER_TAG_ID)) { int no = ParseUcharArray(psubchild, &aec->CommCtrl.stDNSwitch.DNTrigger, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_DNMODE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_AECDNSWITCH_DNMODE_DAY) { aec->CommCtrl.stDNSwitch.DNMode = AEC_DNMODE_DAY; } else if (s_value == CALIB_SENSOR_AEC_AECDNSWITCH_DNMODE_NIGHT) { aec->CommCtrl.stDNSwitch.DNMode = AEC_DNMODE_NIGHT; } else { aec->CommCtrl.stDNSwitch.DNMode = AEC_DNMODE_MIN; LOGE("%s(%d): invalid AEC DNSwitch-DNMode = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubchild; if (aec->CommCtrl.stDNSwitch.DNMode == AEC_DNMODE_DAY) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_AECDNSWITCH_DNMODE_DAY); } else if (aec->CommCtrl.stDNSwitch.DNMode == AEC_DNMODE_NIGHT) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_AECDNSWITCH_DNMODE_NIGHT); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid AEC DNSwitch-DNMode = %d\n", __FUNCTION__, __LINE__, aec->CommCtrl.stDNSwitch.DNMode); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_FILLLIGHTMODE_TAG_ID)) { int no = ParseUcharArray(psubchild, &aec->CommCtrl.stDNSwitch.FillLightMode, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_D2NFACTH_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->CommCtrl.stDNSwitch.Day2NightFacTh, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_D2NFRMCNT_TAG_ID)) { int no = ParseUcharArray(psubchild, &aec->CommCtrl.stDNSwitch.Day2NightFrmCnt, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_VBNIGHTMODE_TAG_ID)) { if (!parseEntrySensorAecVBNightMode(psubchild->ToElement())) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_IRNIGHTMODE_TAG_ID)) { if (!parseEntrySensorAecIRNightMode(psubchild->ToElement())) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else { LOGW("%s(%d): parse error in DNSwitch (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecAntiFlicker ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_ANTIFLICKER_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_ANTIFLICKER_ENABLE_TAG_ID)) { uint8_t temp = aec->CommCtrl.stAntiFlicker.enable; int no = ParseUcharArray(psubchild, &temp, subTag.Size()); aec->CommCtrl.stAntiFlicker.enable = (temp == 0) ? false : true; DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_ANTIFLICKER_FREQ_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_ANTIFLICKER_FREQ_50HZ) { aec->CommCtrl.stAntiFlicker.Frequency = AEC_FLICKER_FREQUENCY_50HZ; } else if (s_value == CALIB_SENSOR_AEC_ANTIFLICKER_FREQ_60HZ) { aec->CommCtrl.stAntiFlicker.Frequency = AEC_FLICKER_FREQUENCY_60HZ; } else { aec->CommCtrl.stAntiFlicker.Frequency = AEC_FLICKER_FREQUENCY_OFF; LOGE("%s(%d): invalid stAntiFlicker.Frequency = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubchild; if (aec->CommCtrl.stAntiFlicker.Frequency == AEC_FLICKER_FREQUENCY_50HZ) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_ANTIFLICKER_FREQ_50HZ); } else if (aec->CommCtrl.stAntiFlicker.Frequency == AEC_FLICKER_FREQUENCY_60HZ) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_ANTIFLICKER_FREQ_60HZ); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid AEC stAntiFlicker.Frequency = %d\n", __FUNCTION__, __LINE__, aec->CommCtrl.stAntiFlicker.Frequency); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_ANTIFLICKER_MODE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_ANTIFLICKER_MODE_AUTO) { aec->CommCtrl.stAntiFlicker.Mode = AEC_ANTIFLICKER_AUTO_MODE; } else if (s_value == CALIB_SENSOR_AEC_ANTIFLICKER_MODE_NORMAL) { aec->CommCtrl.stAntiFlicker.Mode = AEC_ANTIFLICKER_NORMAL_MODE; } else { aec->CommCtrl.stAntiFlicker.Mode = AEC_ANTIFLICKER_AUTO_MODE; LOGE("%s(%d): invalid stAntiFlicker.Mode = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubchild; if (aec->CommCtrl.stAntiFlicker.Mode == AEC_ANTIFLICKER_AUTO_MODE) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_ANTIFLICKER_MODE_AUTO); } else if (aec->CommCtrl.stAntiFlicker.Mode == AEC_ANTIFLICKER_NORMAL_MODE) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_ANTIFLICKER_MODE_NORMAL); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid AEC stAntiFlicker.Mode = %d\n", __FUNCTION__, __LINE__, aec->CommCtrl.stAntiFlicker.Mode); } } } else { redirectOut << "parse error in stAntiFlicker (unknow tag: " << subTagname << ")" << std::endl; } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecFrameRateMode ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_AECFRAMERATEMODE_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_ISFPSFIX_TAG_ID)) { uint8_t temp = aec->CommCtrl.stAuto.stFrmRate.isFpsFix; int no = ParseUcharArray(psubchild, &temp, subTag.Size()); aec->CommCtrl.stAuto.stFrmRate.isFpsFix = (temp == 0) ? false : true; DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_FPSVALUE_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->CommCtrl.stAuto.stFrmRate.FpsValue, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else { redirectOut << "parse error in stFrmRate (unknow tag: " << subTagname << ")" << std::endl; } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecInitValueLinearAE ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_AECINITVALUE_LINEARAE_TAG_ID, CALIB_SENSOR_AEC_AECINITVALUE_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_INITTIMEVALUE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stInitExp.stLinExpInitExp.InitTimeValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); aec->CommCtrl.stInitExp.stLinExpInitExp.array_size = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_INITGAINVALUE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stInitExp.stLinExpInitExp.InitGainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_INITISPDGAINVALUE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stInitExp.stLinExpInitExp.InitIspDGainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_INITPIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &aec->CommCtrl.stInitExp.stLinExpInitExp.InitPIrisGainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_INITDCIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &aec->CommCtrl.stInitExp.stLinExpInitExp.InitDCIrisDutyValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { LOGW("%s(%d): parse error in stLinExpInitExp (unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecInitValueHdrAE ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_AECINITVALUE_HDRAE_TAG_ID, CALIB_SENSOR_AEC_AECINITVALUE_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_INITTIMEVALUE_TAG_ID)) { float tempVal[3]; for (int i = 0; i < 3; i++) tempVal[i] = aec->CommCtrl.stInitExp.stHdrExpInitExp.InitTimeValue.fCoeff[i]; int no = ParseFloatArray(psubsubchild, tempVal, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); for (int i = 0; i < 3; i++) aec->CommCtrl.stInitExp.stHdrExpInitExp.InitTimeValue.fCoeff[i] = tempVal[i]; aec->CommCtrl.stInitExp.stHdrExpInitExp.array_size = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_INITGAINVALUE_TAG_ID)) { float tempVal[3]; for (int i = 0; i < 3; i++) tempVal[i] = aec->CommCtrl.stInitExp.stHdrExpInitExp.InitGainValue.fCoeff[i]; int no = ParseFloatArray(psubsubchild, tempVal, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); for (int i = 0; i < 3; i++) aec->CommCtrl.stInitExp.stHdrExpInitExp.InitGainValue.fCoeff[i] = tempVal[i]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_INITISPDGAINVALUE_TAG_ID)) { float tempVal[3]; for (int i = 0; i < 3; i++) tempVal[i] = aec->CommCtrl.stInitExp.stHdrExpInitExp.InitIspDGainValue.fCoeff[i]; int no = ParseFloatArray(psubsubchild, tempVal, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); for (int i = 0; i < 3; i++) aec->CommCtrl.stInitExp.stHdrExpInitExp.InitIspDGainValue.fCoeff[i] = tempVal[i]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_INITPIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &aec->CommCtrl.stInitExp.stHdrExpInitExp.InitPIrisGainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_INITDCIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &aec->CommCtrl.stInitExp.stHdrExpInitExp.InitDCIrisDutyValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { LOGW("%s(%d): parse error in stHdrExpInitExp (unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecInitValue ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_AECINITVALUE_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECINITVALUE_LINEARAE_TAG_ID)) { if (!parseEntrySensorAecInitValueLinearAE(psubchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECINITVALUE_HDRAE_TAG_ID)) { if (!parseEntrySensorAecInitValueHdrAE(psubchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else { LOGW("%s(%d): parse error in stInitExp (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecGridWeight ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_AECGRIDWEIGHT_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); XMLNode* psubchild = (XMLNode*)pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_DAYGRIDWEIGHTS_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_WRITE) { char str[20]; if (aec->CommCtrl.DayWeightNum == 25) snprintf(str, sizeof(str), "[5 5]"); else snprintf(str, sizeof(str), "[15 15]"); psubchild->ToElement()->SetAttribute(CALIB_ATTRIBUTE_SIZE, str); } int no = ParseUcharArray(psubchild, aec->CommCtrl.DayGridWeights.uCoeff, subTag.Size()); DCT_ASSERT((no == subTag.Size())); DCT_ASSERT((no == AEC_RAWAEBIG_WIN_NUM || no == AEC_RAWAELITE_WIN_NUM)); aec->CommCtrl.DayWeightNum = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_NIGHTGRIDWEIGHTS_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_WRITE) { char str[20]; if (aec->CommCtrl.NightWeightNum == 25) snprintf(str, sizeof(str), "[5 5]"); else snprintf(str, sizeof(str), "[15 15]"); psubchild->ToElement()->SetAttribute(CALIB_ATTRIBUTE_SIZE, str); } int no = ParseUcharArray(psubchild, aec->CommCtrl.NightGridWeights.uCoeff, subTag.Size()); DCT_ASSERT((no == subTag.Size())); DCT_ASSERT((no == AEC_RAWAEBIG_WIN_NUM || no == AEC_RAWAELITE_WIN_NUM)); aec->CommCtrl.NightWeightNum = no; } else { redirectOut << "parse error in Gridweights (unknow tag: " << subTagname << ")" << std::endl; } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecIrisCtrlPAttr ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_IRISCTRL_P_ATTR_TAG_ID, CALIB_SENSOR_AEC_IRISCTRL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_P_ATTR_TOTALSTEP_TAG_ID)) { int no = ParseUshortArray(psubsubchild, &aec->CommCtrl.stIris.PIrisAttr.TotalStep, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); DCT_ASSERT((no <= AEC_PIRIS_STAP_TABLE_MAX)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_P_ATTR_EFFCSTEP_TAG_ID)) { int no = ParseUshortArray(psubsubchild, &aec->CommCtrl.stIris.PIrisAttr.EffcStep, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); DCT_ASSERT((no <= AEC_PIRIS_STAP_TABLE_MAX)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_P_ATTR_ZEROISMAX_TAG_ID)) { uint8_t temp = aec->CommCtrl.stIris.PIrisAttr.ZeroIsMax; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); aec->CommCtrl.stIris.PIrisAttr.ZeroIsMax = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_P_ATTR_STEPTABLE_TAG_ID)) { int no = ParseUshortArray(psubsubchild, aec->CommCtrl.stIris.PIrisAttr.StepTable, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); DCT_ASSERT((no <= AEC_PIRIS_STAP_TABLE_MAX)); } else { LOGW("%s(%d): parse error in AecIrisCtrl PAttr (unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecIrisCtrlDCAttr ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_IRISCTRL_DC_ATTR_TAG_ID, CALIB_SENSOR_AEC_IRISCTRL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_DC_ATTR_KP_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stIris.DCIrisAttr.Kp, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_DC_ATTR_KI_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stIris.DCIrisAttr.Ki, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_DC_ATTR_KD_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stIris.DCIrisAttr.Kd, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_DC_ATTR_MIN_PWMDUTY_TAG_ID)) { int no = ParseIntArray(psubsubchild, &aec->CommCtrl.stIris.DCIrisAttr.MinPwmDuty, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_DC_ATTR_MAX_PWMDUTY_TAG_ID)) { int no = ParseIntArray(psubsubchild, &aec->CommCtrl.stIris.DCIrisAttr.MaxPwmDuty, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_DC_ATTR_OPEN_PWMDUTY_TAG_ID)) { int no = ParseIntArray(psubsubchild, &aec->CommCtrl.stIris.DCIrisAttr.OpenPwmDuty, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_DC_ATTR_CLOSE_PWMDUTY_TAG_ID)) { int no = ParseIntArray(psubsubchild, &aec->CommCtrl.stIris.DCIrisAttr.ClosePwmDuty, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { LOGW("%s(%d): parse error in AecIrisCtrl DCAttr (unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecIrisCtrl ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_IRISCTRL_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_ENABLE_TAG_ID)) { int no = ParseUcharArray(psubchild, &aec->CommCtrl.stIris.enable, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_TYPE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_IRISCTRL_TYPE_P) { aec->CommCtrl.stIris.IrisType = IRIS_P_TYPE; } else if (s_value == CALIB_SENSOR_AEC_IRISCTRL_TYPE_DC) { aec->CommCtrl.stIris.IrisType = IRIS_DC_TYPE; } else { aec->CommCtrl.stIris.IrisType = IRIS_INVALID_TYPE; LOGE("%s(%d): invalid stIris.IrisType = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubchild; if (aec->CommCtrl.stIris.IrisType == IRIS_P_TYPE) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_IRISCTRL_TYPE_P); } else if (aec->CommCtrl.stIris.IrisType == IRIS_DC_TYPE) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_IRISCTRL_TYPE_DC); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid AEC stAntiFlicker.Frequency = %d\n", __FUNCTION__, __LINE__, aec->CommCtrl.stAntiFlicker.Frequency); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_P_ATTR_TAG_ID)) { if (!parseEntrySensorAecIrisCtrlPAttr(psubchild->ToElement(), param)) { LOGE("parse error in Aec IrisCtrl (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_DC_ATTR_TAG_ID)) { if (!parseEntrySensorAecIrisCtrlDCAttr(psubchild->ToElement(), param)) { LOGE("parse error in Aec IrisCtrl (%s)", subTagname.c_str()); return (false); } } else { LOGW("%s(%d): parse error in Aec IrisCtrl (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecManualCtrlLinearAE ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_MANUALCTRL_LINEARAE_TAG_ID, CALIB_SENSOR_AEC_MANUALCTRL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_TIMEEN_TAG_ID)) { uint8_t temp = aec->CommCtrl.stManual.stLinMe.ManualTimeEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); aec->CommCtrl.stManual.stLinMe.ManualTimeEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_GAINEN_TAG_ID)) { uint8_t temp = aec->CommCtrl.stManual.stLinMe.ManualGainEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); aec->CommCtrl.stManual.stLinMe.ManualGainEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_ISPDGAINEN_TAG_ID)) { uint8_t temp = aec->CommCtrl.stManual.stLinMe.ManualIspDgainEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); aec->CommCtrl.stManual.stLinMe.ManualIspDgainEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_IRISEN_TAG_ID)) { uint8_t temp = aec->CommCtrl.stManual.stLinMe.ManualIrisEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); aec->CommCtrl.stManual.stLinMe.ManualIrisEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_TIMEVALUE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stManual.stLinMe.TimeValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_GAINVALUE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stManual.stLinMe.GainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_ISPDGAINVALUE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->CommCtrl.stManual.stLinMe.IspDGainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_PIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &aec->CommCtrl.stManual.stLinMe.PIrisGainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_DCIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &aec->CommCtrl.stManual.stLinMe.DCIrisValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { LOGW("%s(%d): parse error in stManual.stLinMe (unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecManualCtrlHdrAE ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_MANUALCTRL_HDRAE_TAG_ID, CALIB_SENSOR_AEC_MANUALCTRL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_TIMEEN_TAG_ID)) { uint8_t temp = aec->CommCtrl.stManual.stHdrMe.ManualTimeEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); aec->CommCtrl.stManual.stHdrMe.ManualTimeEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_GAINEN_TAG_ID)) { uint8_t temp = aec->CommCtrl.stManual.stHdrMe.ManualGainEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); aec->CommCtrl.stManual.stHdrMe.ManualGainEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_ISPDGAINEN_TAG_ID)) { uint8_t temp = aec->CommCtrl.stManual.stHdrMe.ManualIspDgainEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); aec->CommCtrl.stManual.stHdrMe.ManualIspDgainEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_IRISEN_TAG_ID)) { uint8_t temp = aec->CommCtrl.stManual.stHdrMe.ManualIrisEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); aec->CommCtrl.stManual.stHdrMe.ManualIrisEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_TIMEVALUE_TAG_ID)) { float tempVal[3]; for (int i = 0; i < 3; i++) tempVal[i] = aec->CommCtrl.stManual.stHdrMe.TimeValue.fCoeff[i]; int no = ParseFloatArray(psubsubchild, tempVal, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); for (int i = 0; i < 3; i++) aec->CommCtrl.stManual.stHdrMe.TimeValue.fCoeff[i] = tempVal[i]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_GAINVALUE_TAG_ID)) { float tempVal[3]; for (int i = 0; i < 3; i++) tempVal[i] = aec->CommCtrl.stManual.stHdrMe.GainValue.fCoeff[i]; int no = ParseFloatArray(psubsubchild, tempVal, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); for (int i = 0; i < 3; i++) aec->CommCtrl.stManual.stHdrMe.GainValue.fCoeff[i] = tempVal[i]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_ISPDGAINVALUE_TAG_ID)) { float tempVal[3]; for (int i = 0; i < 3; i++) tempVal[i] = aec->CommCtrl.stManual.stHdrMe.IspDGainValue.fCoeff[i]; int no = ParseFloatArray(psubsubchild, tempVal, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); for (int i = 0; i < 3; i++) aec->CommCtrl.stManual.stHdrMe.IspDGainValue.fCoeff[i] = tempVal[i]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_PIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &aec->CommCtrl.stManual.stHdrMe.PIrisGainValue, subsubTag.Size()); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_DCIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &aec->CommCtrl.stManual.stHdrMe.DCIrisValue, subsubTag.Size()); } else { LOGW("%s(%d): parse error in stManual.stHdrMe (unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecManualCtrl ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_MANUALCTRL_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_LINEARAE_TAG_ID)) { if (!parseEntrySensorAecManualCtrlLinearAE(psubchild->ToElement(), param)) { LOGE("parse error in Aec ManualCtrl (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_HDRAE_TAG_ID)) { if (!parseEntrySensorAecManualCtrlHdrAE(psubchild->ToElement(), param)) { LOGE("parse error in Aec ManualCtrl (%s)", subTagname.c_str()); return (false); } } else { LOGW("%s(%d): parse error in stManual (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecRoute ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_AECROUTE_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECROUTE_LINEARAE_TAG_ID)) { if (!parseEntryCell(psubchild->ToElement(), subTag.Size(), &RkAiqCalibParser::parseEntrySensorAecLinearAeRoute, param, (uint32_t)CALIB_SENSOR_AEC_AECROUTE_LINEARAE_TAG_ID, (uint32_t)CALIB_SENSOR_AEC_AECROUTE_TAG_ID)) { LOGE("parse error in AEC LinAeRoute(%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECROUTE_HDRAE_TAG_ID)) { if (!parseEntryCell(psubchild->ToElement(), subTag.Size(), &RkAiqCalibParser::parseEntrySensorAecHdrAeRoute, param, (uint32_t)CALIB_SENSOR_AEC_AECROUTE_HDRAE_TAG_ID, (uint32_t)CALIB_SENSOR_AEC_AECROUTE_TAG_ID)) { LOGE("parse error in AEC HdrAeRoute (%s)", subTagname.c_str()); return (false); } } else { LOGW("%s(%d): parse error in AecRoute (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorLinearAECtrlBackLight ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_LINAECTRL_BACKLIGHT_CONFIG_TAG_ID, CALIB_SENSOR_AEC_LINEARAE_CTRL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); #ifdef DEBUG_LOG redirectOut << "secsubTagname: " << secsubTagname << std::endl; #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_BACKLIGHT_ENABLE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &aec->LinearAeCtrl.BackLightConf.enable, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_BACKLIGHT_MEASAREA_TAG_ID)) { char* value = Toupper(secsubtag.Value()); std::string s_value(value); #ifdef DEBUG_LOG redirectOut << "value:" << value << std::endl; redirectOut << s_value << std::endl; #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_MEASAREA_AUTO) { aec->LinearAeCtrl.BackLightConf.MeasArea = AEC_MEASURE_AREA_AUTO; } else if (s_value == CALIB_SENSOR_AEC_MEASAREA_CENTER) { aec->LinearAeCtrl.BackLightConf.MeasArea = AEC_MEASURE_AREA_CENTER; } else if (s_value == CALIB_SENSOR_AEC_MEASAREA_UP) { aec->LinearAeCtrl.BackLightConf.MeasArea = AEC_MEASURE_AREA_UP; } else if (s_value == CALIB_SENSOR_AEC_MEASAREA_BOTTOM) { aec->LinearAeCtrl.BackLightConf.MeasArea = AEC_MEASURE_AREA_BOTTOM; } else if (s_value == CALIB_SENSOR_AEC_MEASAREA_LEFT) { aec->LinearAeCtrl.BackLightConf.MeasArea = AEC_MEASURE_AREA_LEFT; } else if (s_value == CALIB_SENSOR_AEC_MEASAREA_RIGHT) { aec->LinearAeCtrl.BackLightConf.MeasArea = AEC_MEASURE_AREA_RIGHT; } else { aec->LinearAeCtrl.BackLightConf.MeasArea = AEC_MEASURE_AREA_AUTO; redirectOut << "invalid BackLit MeasArea (" << s_value << ")" << std::endl; } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode* pNode = (XMLNode *)psecsubchild; if (aec->LinearAeCtrl.BackLightConf.MeasArea == AEC_MEASURE_AREA_AUTO) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_MEASAREA_AUTO); else if (aec->LinearAeCtrl.BackLightConf.MeasArea == AEC_MEASURE_AREA_CENTER) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_MEASAREA_CENTER); else if (aec->LinearAeCtrl.BackLightConf.MeasArea == AEC_MEASURE_AREA_UP) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_MEASAREA_UP); else if (aec->LinearAeCtrl.BackLightConf.MeasArea == AEC_MEASURE_AREA_BOTTOM) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_MEASAREA_BOTTOM); else if (aec->LinearAeCtrl.BackLightConf.MeasArea == AEC_MEASURE_AREA_LEFT) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_MEASAREA_LEFT); else if (aec->LinearAeCtrl.BackLightConf.MeasArea == AEC_MEASURE_AREA_RIGHT) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_MEASAREA_RIGHT); else { pNode->FirstChild()->SetValue("INVALID"); redirectOut << "(XML Write)invalid BackLit MeasArea (" << aec->LinearAeCtrl.BackLightConf.MeasArea << ")" << std::endl; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_BACKLIGHT_OEROI_LOWTH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &aec->LinearAeCtrl.BackLightConf.OEROILowTh, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_BACKLIGHT_LV_HIGHTH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &aec->LinearAeCtrl.BackLightConf.LvHightTh, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_BACKLIGHT_LV_LOWTH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &aec->LinearAeCtrl.BackLightConf.LvLowTh, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_BACKLIGHT_LUMADISTTH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &aec->LinearAeCtrl.BackLightConf.LumaDistTh, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_BACKLIGHT_LOWLIGHTPDFTH_TAG_ID)) { int i = (sizeof(aec->LinearAeCtrl.BackLightConf.LowLightPdfTh) / sizeof(aec->LinearAeCtrl.BackLightConf.LowLightPdfTh.fCoeff[0])); int no = ParseFloatArray(psecsubchild, aec->LinearAeCtrl.BackLightConf.LowLightPdfTh.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_BACKLIGHT_NONOEPDFTH_TAG_ID)) { int i = (sizeof(aec->LinearAeCtrl.BackLightConf.NonOEPdfTh) / sizeof(aec->LinearAeCtrl.BackLightConf.NonOEPdfTh.fCoeff[0])); int no = ParseFloatArray(psecsubchild, aec->LinearAeCtrl.BackLightConf.NonOEPdfTh.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_BACKLIGHT_EXPLEVEL_TAG_ID)) { int i = (sizeof(aec->LinearAeCtrl.BackLightConf.ExpLevel) / sizeof(aec->LinearAeCtrl.BackLightConf.ExpLevel.fCoeff[0])); int no = ParseFloatArray(psecsubchild, aec->LinearAeCtrl.BackLightConf.ExpLevel.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_BACKLIGHT_TARGETLLLUMA_TAG_ID)) { int i = (sizeof(aec->LinearAeCtrl.BackLightConf.TargetLLLuma) / sizeof(aec->LinearAeCtrl.BackLightConf.TargetLLLuma.fCoeff[0])); int no = ParseFloatArray(psecsubchild, aec->LinearAeCtrl.BackLightConf.TargetLLLuma.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else { redirectOut << "parse error in LINAECTRL backlight section (unknow tag: " << secsubTagname << ")" << std::endl; } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorLinearAECtrlOverExp ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_LINAECTRL_OVEREXP_CONTROL_TAG_ID, CALIB_SENSOR_AEC_LINEARAE_CTRL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); #ifdef DEBUG_LOG redirectOut << "secsubTagname: " << secsubTagname << std::endl; #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_OVEREXP_ENABLE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &aec->LinearAeCtrl.OverExpCtrl.enable, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_OVEREXP_LOWLIGHT_TH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &aec->LinearAeCtrl.OverExpCtrl.LowLightTh, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_OVEREXP_HIGHLIGHT_TH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &aec->LinearAeCtrl.OverExpCtrl.HighLightTh, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_OVEREXP_MAXWEIGHT_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &aec->LinearAeCtrl.OverExpCtrl.MaxWeight, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_OVEREXP_OEPDF_TAG_ID)) { int i = (sizeof(aec->LinearAeCtrl.OverExpCtrl.OEpdf) / sizeof(aec->LinearAeCtrl.OverExpCtrl.OEpdf.fCoeff[0])); int no = ParseFloatArray(psecsubchild, aec->LinearAeCtrl.OverExpCtrl.OEpdf.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_OVEREXP_HIGHLIGHT_WEIGHT_TAG_ID)) { int i = (sizeof(aec->LinearAeCtrl.OverExpCtrl.HighLightWeight) / sizeof(aec->LinearAeCtrl.OverExpCtrl.HighLightWeight.fCoeff[0])); int no = ParseFloatArray(psecsubchild, aec->LinearAeCtrl.OverExpCtrl.HighLightWeight.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_OVEREXP_LOWLIGHT_WEIGHT_TAG_ID)) { int i = (sizeof(aec->LinearAeCtrl.OverExpCtrl.LowLightWeight) / sizeof(aec->LinearAeCtrl.OverExpCtrl.LowLightWeight.fCoeff[0])); int no = ParseFloatArray(psecsubchild, aec->LinearAeCtrl.OverExpCtrl.LowLightWeight.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else { redirectOut << "parse error in LINAECTRL OverExpCtrl section (unknow tag: " << secsubTagname << ")" << std::endl; } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorLinearAECtrl ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_LINEARAE_CTRL_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_RAWSTATS_EN_TAG_ID)) { int no = ParseUcharArray(psubchild, &aec->LinearAeCtrl.RawStatsEn, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if(XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SETPOINT_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->LinearAeCtrl.SetPoint, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_NIGHTSETPOINT_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->LinearAeCtrl.NightSetPoint, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_DYSETPOINTEN_TAG_ID)) { uint8_t temp = aec->LinearAeCtrl.DySetPointEn; ParseUcharArray(psubchild, &temp, subTag.Size()); aec->LinearAeCtrl.DySetPointEn = (temp == 0) ? false : true; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_EVBIAS_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->LinearAeCtrl.Evbias, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_DYNAMICSETPOINT_TAG_ID)) { if (!parseEntryCell(psubchild->ToElement(), subTag.Size(), &RkAiqCalibParser::parseEntrySensorAecLinearAeDynamicPoint, param, (uint32_t)CALIB_SENSOR_AEC_DYNAMICSETPOINT_TAG_ID, (uint32_t)CALIB_SENSOR_AEC_LINEARAE_CTRL_TAG_ID)) { LOGE("parse error in AEC linear dynamic setpoint (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_TOLERANCE_IN_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->LinearAeCtrl.ToleranceIn, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_TOLERANCE_OUT_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->LinearAeCtrl.ToleranceOut, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_STRATEGYMODE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); #ifdef DEBUG_LOG LOGE("%s(%d): s_value = %s\n", __FUNCTION__, __LINE__, s_value); #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_STRATEGYMODE_LOWLIGHT) { aec->LinearAeCtrl.StrategyMode = RKAIQ_AEC_STRATEGY_MODE_LOWLIGHT_PRIOR; } else if (s_value == CALIB_SENSOR_AEC_STRATEGYMODE_HIGHLIGHT) { aec->LinearAeCtrl.StrategyMode = RKAIQ_AEC_STRATEGY_MODE_HIGHLIGHT_PRIOR; } else { aec->LinearAeCtrl.StrategyMode = RKAIQ_AEC_STRATEGY_MODE_AUTO; redirectOut << "invalid AEC LinAe StrategyMode (" << s_value << ")" << std::endl; } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode *)psubchild; if (aec->LinearAeCtrl.StrategyMode == RKAIQ_AEC_STRATEGY_MODE_LOWLIGHT_PRIOR) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_STRATEGYMODE_LOWLIGHT); else if (aec->LinearAeCtrl.StrategyMode == RKAIQ_AEC_STRATEGY_MODE_HIGHLIGHT_PRIOR) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_STRATEGYMODE_HIGHLIGHT); else { pNode->FirstChild()->SetValue("AUTO"); redirectOut << "(XML Wrtie)invalid AEC LinAe StrategyMode (" << aec->LinearAeCtrl.StrategyMode << ")" << std::endl; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_BACKLIGHT_CONFIG_TAG_ID)) { if (!parseEntrySensorLinearAECtrlBackLight(psubchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LINAECTRL_OVEREXP_CONTROL_TAG_ID)) { if (!parseEntrySensorLinearAECtrlOverExp(psubchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHdrAECtrlExpRatioCtrl ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOCTRL_TAG_ID, CALIB_SENSOR_AEC_HDRAECTRL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOTYPE_TAG_ID)) { char* value = Toupper(subsubTag.Value()); std::string s_value(value); #ifdef DEBUG_LOG redirectOut << "value:" << value << std::endl; redirectOut << s_value << std::endl; #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOTYPE_AUTO) { aec->HdrAeCtrl.ExpRatioType = RKAIQ_HDRAE_RATIOTYPE_MODE_AUTO; } else if (s_value == CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOTYPE_FIX) { aec->HdrAeCtrl.ExpRatioType = RKAIQ_HDRAE_RATIOTYPE_MODE_FIX; } else { aec->HdrAeCtrl.ExpRatioType = RKAIQ_HDRAE_RATIOTYPE_MODE_INVALID; redirectOut << "invalid AEC HdrAe ExpRatioType (" << s_value << ")" << std::endl; } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubsubchild; if (aec->HdrAeCtrl.ExpRatioType == RKAIQ_HDRAE_RATIOTYPE_MODE_AUTO) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOTYPE_AUTO); else if (aec->HdrAeCtrl.ExpRatioType == RKAIQ_HDRAE_RATIOTYPE_MODE_FIX) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOTYPE_FIX); else { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOTYPE_AUTO); redirectOut << "(XML Write)invalid AEC HdrAe ExpRatioType (" << aec->HdrAeCtrl.ExpRatioType << ")" << std::endl; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_RATIOEXPDOT_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.RatioExpDot.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_M2SRATIOFIX_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.M2SRatioFix.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_L2MRATIOFIX_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.L2MRatioFix.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_M2SRATIOMAX_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.M2SRatioMax.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_L2MRATIOMAX_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.L2MRatioMax.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { redirectOut << "parse error in AEC HdrAeCtrl (unknow tag: " << subsubTagname << ")" << std::endl; } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHdrAECtrlLframeMode ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_TAG_ID, CALIB_SENSOR_AEC_HDRAECTRL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_MODE_TAG_ID)) { char* value = Toupper(subsubTag.Value()); std::string s_value(value); #ifdef DEBUG_LOG redirectOut << "value:" << value << std::endl; redirectOut << s_value << std::endl; #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_NORMAL) { aec->HdrAeCtrl.LongfrmMode = RKAIQ_AEC_HDR_LONGFRMMODE_NORMAL; } else if (s_value == CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_LONGFRAME) { aec->HdrAeCtrl.LongfrmMode = RKAIQ_AEC_HDR_LONGFRMMODE_LONG_FRAME; } else if (s_value == CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_AUTO_LONGFRAME) { aec->HdrAeCtrl.LongfrmMode = RKAIQ_AEC_HDR_LONGFRMMODE_AUTO_LONG_FRAME; } else { aec->HdrAeCtrl.LongfrmMode = RKAIQ_AEC_HDR_LONGFRMMODE_NORMAL; redirectOut << "invalid AEC HdrAe LongFrmMode (" << s_value << ")" << std::endl; } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubsubchild; if (aec->HdrAeCtrl.LongfrmMode == RKAIQ_AEC_HDR_LONGFRMMODE_NORMAL) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_NORMAL); } else if (aec->HdrAeCtrl.LongfrmMode == RKAIQ_AEC_HDR_LONGFRMMODE_LONG_FRAME) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_LONGFRAME); } else if (aec->HdrAeCtrl.LongfrmMode == RKAIQ_AEC_HDR_LONGFRMMODE_AUTO_LONG_FRAME) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_AUTO_LONGFRAME); } else { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_NORMAL); redirectOut << "(XML Write)invalid AEC HdrAe LongFrmMode (" << aec->HdrAeCtrl.LongfrmMode << ")" << std::endl; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_LFRMMODEEXPTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->HdrAeCtrl.LfrmModeExpTh, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_SFRMMINLINE_TAG_ID)) { int no = ParseUshortArray(psubsubchild, &aec->HdrAeCtrl.SfrmMinLine, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { redirectOut << "parse error in AEC LongFrmMode (unknow tag: " << subsubTagname << ")" << std::endl; } psubsubchild = psubsubchild->NextSibling(); } autoTabBackward(); XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHdrAECtrlLframeCtrl ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_HDRAECTRL_LFRAMECTRL_TAG_ID, CALIB_SENSOR_AEC_HDRAECTRL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubsubchild = pelement->FirstChild(); autoTabForward(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_OEROILOWTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->HdrAeCtrl.LframeCtrl.OEROILowTh, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_LVHIGHTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->HdrAeCtrl.LframeCtrl.LvHighTh, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_LVLOWTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->HdrAeCtrl.LframeCtrl.LvLowTh, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_LEXPLEVEL_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.LframeCtrl.LExpLevel.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_LSETPOINT_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.LframeCtrl.LSetPoint.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_TARGETLLLUMA_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.LframeCtrl.TargetLLLuma.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_NONOEPDFTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.LframeCtrl.NonOEPdfTh.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_LOWLIGHTPDFTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.LframeCtrl.LowLightPdfTh.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { redirectOut << "parse error in AEC HdrAeCtrl LframeCtrl (unknow tag: " << subsubTagname << ")" << std::endl; } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHdrAECtrlMframeCtrl ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_HDRAECTRL_MFRAMECTRL_TAG_ID, CALIB_SENSOR_AEC_HDRAECTRL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_MEXPLEVEL_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.MframeCtrl.MExpLevel.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_MSETPOINT_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.MframeCtrl.MSetPoint.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { redirectOut << "parse error in AEC HdrAeCtrl MframeCtrl (unknow tag: " << subsubTagname << ")" << std::endl; } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHdrAECtrlSframeCtrl ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_HDRAECTRL_SFRAMECTRL_TAG_ID, CALIB_SENSOR_AEC_HDRAECTRL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_SEXPLEVEL_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.SframeCtrl.SExpLevel.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_HLROIEXPANDEN_TAG_ID)) { uint8_t temp = aec->HdrAeCtrl.SframeCtrl.HLROIExpandEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); aec->HdrAeCtrl.SframeCtrl.HLROIExpandEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_TARGETHLLUMA_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.SframeCtrl.TargetHLLuma.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_SSETPOINT_TAG_ID)) { int no = ParseFloatArray(psubsubchild, aec->HdrAeCtrl.SframeCtrl.SSetPoint.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_HLLUMATOLERANCE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &aec->HdrAeCtrl.SframeCtrl.HLLumaTolerance, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { redirectOut << "parse error in AEC HdrAeCtrl SframeCtrl (unknow tag: " << subsubTagname << ")" << std::endl; } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHdrAECtrl ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_HDRAECTRL_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_TOLERANCE_IN_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->HdrAeCtrl.ToleranceIn, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_TOLERANCE_OUT_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->HdrAeCtrl.ToleranceOut, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_EVBIAS_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->HdrAeCtrl.Evbias, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_STRATEGYMODE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); #ifdef DEBUG_LOG redirectOut << "value:" << value << std::endl; redirectOut << s_value << std::endl; #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_STRATEGYMODE_LOWLIGHT) { aec->HdrAeCtrl.StrategyMode = RKAIQ_AEC_STRATEGY_MODE_LOWLIGHT_PRIOR; } else if (s_value == CALIB_SENSOR_AEC_STRATEGYMODE_HIGHLIGHT) { aec->HdrAeCtrl.StrategyMode = RKAIQ_AEC_STRATEGY_MODE_HIGHLIGHT_PRIOR; } else { aec->HdrAeCtrl.StrategyMode = RKAIQ_AEC_STRATEGY_MODE_AUTO; redirectOut << "invalid AEC HdrAe StrategyMode (" << s_value << ")" << std::endl; } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubchild; if (aec->HdrAeCtrl.StrategyMode == RKAIQ_AEC_STRATEGY_MODE_LOWLIGHT_PRIOR) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_STRATEGYMODE_LOWLIGHT); } else if (aec->HdrAeCtrl.StrategyMode == RKAIQ_AEC_STRATEGY_MODE_HIGHLIGHT_PRIOR) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_STRATEGYMODE_HIGHLIGHT); } else { pNode->FirstChild()->SetValue("AUTO"); redirectOut << "(XML Write)invalid AEC HdrAe StrategyMode (" << aec->HdrAeCtrl.StrategyMode << ")" << std::endl; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOCTRL_TAG_ID)) { if (!parseEntrySensorHdrAECtrlExpRatioCtrl(psubchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_LUMADISTTH_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->HdrAeCtrl.LumaDistTh, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_LFRAMECTRL_TAG_ID)) { if (!parseEntrySensorHdrAECtrlLframeCtrl(psubchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_MFRAMECTRL_TAG_ID)) { if (!parseEntrySensorHdrAECtrlMframeCtrl(psubchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_SFRAMECTRL_TAG_ID)) { if (!parseEntrySensorHdrAECtrlSframeCtrl(psubchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_TAG_ID)) { if (!parseEntrySensorHdrAECtrlLframeMode(psubchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else { redirectOut << "parse error in AEC HdrAeCtrl (unknow tag: " << subTagname << ")" << std::endl; } psubchild = psubchild->NextSibling(); } autoTabBackward(); XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecEnvLvCalib ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_ENVLVCALIB_TAG_ID, CALIB_SENSOR_AEC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_ENVLVCALIB_CALIBFNUMBER_TAG_ID)) { int no = ParseFloatArray(psubchild, &aec->CommCtrl.stEnvLvCalib.CalibFN, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_ENVLVCALIB_CURVECOEFF_TAG_ID)) { int no = ParseFloatArray(psubchild, aec->CommCtrl.stEnvLvCalib.Curve.fCoeff, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else { LOGW("%s(%d): parse error in AecEnvLv (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAec ( const XMLElement* pelement, void* param ) { (void)param; LOGI("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): tagname: [%s]\n", __FUNCTION__, __LINE__, tagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_ENABLE_TAG_ID)) { ParseUcharArray(pchild, &aec->CommCtrl.enable, tag.Size()); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HISTSTATSMODE_TAG_ID)) { char* value = Toupper(tag.Value()); char* value2 = Toupper(tag.Value()); char* value3 = value2; int i = 0; while (*value != '\0') { if (*value == 'R') { *value2++ = 'R'; i++; } else if (*value == 'G') { *value2++ = 'G'; i++; } else if (*value == 'B') { *value2++ = 'B'; i++; } else if (*value == 'Y') { *value2++ = 'Y'; i++; } value++; } *value2 = '\0'; std::string s_value(value3); #ifdef DEBUG_LOG LOGE("%s(%d): value: %s\n", __FUNCTION__, __LINE__, s_value.c_str()); #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_HISTSTATSMODE_R) { aec->CommCtrl.HistStatsMode = CAM_HIST_MODE_R; } else if (s_value == CALIB_SENSOR_AEC_HISTSTATSMODE_G) { aec->CommCtrl.HistStatsMode = CAM_HIST_MODE_G; } else if (s_value == CALIB_SENSOR_AEC_HISTSTATSMODE_B) { aec->CommCtrl.HistStatsMode = CAM_HIST_MODE_B; } else if (s_value == CALIB_SENSOR_AEC_HISTSTATSMODE_RGB) { aec->CommCtrl.HistStatsMode = CAM_HIST_MODE_RGB_COMBINED; } else if (s_value == CALIB_SENSOR_AEC_HISTSTATSMODE_Y) { aec->CommCtrl.HistStatsMode = CAM_HIST_MODE_Y; } else { aec->CommCtrl.HistStatsMode = CAM_HIST_MODE_INVALID; LOGE("%s(%d): invalid AEC HistStatsMode = %s end\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)pchild; switch (aec->CommCtrl.HistStatsMode) { case CAM_HIST_MODE_R: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HISTSTATSMODE_R); break; case CAM_HIST_MODE_G: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HISTSTATSMODE_G); break; case CAM_HIST_MODE_B: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HISTSTATSMODE_B); break; case CAM_HIST_MODE_RGB_COMBINED: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HISTSTATSMODE_RGB); break; case CAM_HIST_MODE_Y: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HISTSTATSMODE_Y); break; default: pNode->FirstChild()->SetValue("INVALID"); LOGE("%s(%d): (XML Write)invalid AEC HistStatsMode = %d end\n", __FUNCTION__, __LINE__, aec->CommCtrl.HistStatsMode); break; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_RAWSTATSMODE_TAG_ID)) { char* value = Toupper(tag.Value()); char* value2 = Toupper(tag.Value()); char* value3 = value2; int i = 0; while (*value != '\0') { if (*value == 'R') { *value2++ = 'R'; i++; } else if (*value == 'G') { *value2++ = 'G'; i++; } else if (*value == 'B') { *value2++ = 'B'; i++; } else if (*value == 'Y') { *value2++ = 'Y'; i++; } value++; } *value2 = '\0'; std::string s_value(value3); #ifdef DEBUG_LOG LOGE("%s(%d): value = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_RAWSTATSMODE_R) { aec->CommCtrl.RawStatsMode = CAM_RAWSTATS_MODE_R; } else if (s_value == CALIB_SENSOR_AEC_RAWSTATSMODE_G) { aec->CommCtrl.RawStatsMode = CAM_RAWSTATS_MODE_G; } else if (s_value == CALIB_SENSOR_AEC_RAWSTATSMODE_B) { aec->CommCtrl.RawStatsMode = CAM_RAWSTATS_MODE_B; } else if (s_value == CALIB_SENSOR_AEC_RAWSTATSMODE_Y) { aec->CommCtrl.RawStatsMode = CAM_RAWSTATS_MODE_Y; } else { aec->CommCtrl.RawStatsMode = CAM_RAWSTATS_MODE_INVALID; LOGE("%s(%d): invalid AEC RawStatsMode = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)pchild; switch (aec->CommCtrl.RawStatsMode) { case CAM_RAWSTATS_MODE_R: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_RAWSTATSMODE_R); break; case CAM_RAWSTATS_MODE_G: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_RAWSTATSMODE_G); break; case CAM_RAWSTATS_MODE_B: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_RAWSTATSMODE_B); break; case CAM_RAWSTATS_MODE_Y: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_RAWSTATSMODE_Y); break; default: pNode->FirstChild()->SetValue("INVALID"); LOGE("%s(%d): (XML Write)invalid AEC RawStatsMode = %d end\n", __FUNCTION__, __LINE__, aec->CommCtrl.RawStatsMode); break; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_YRANGEMODE_TAG_ID)) { char* value = Toupper(tag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_YRANGEMODE_FULL) { aec->CommCtrl.YRangeMode = CAM_YRANGE_MODE_FULL; } else if (s_value == CALIB_SENSOR_AEC_YRANGEMODE_LIMITED) { aec->CommCtrl.YRangeMode = CAM_YRANGE_MODE_LIMITED; } else { aec->CommCtrl.YRangeMode = CAM_YRANGE_MODE_INVALID; LOGE("%s(%d): invalid AEC YRangeMode = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)pchild; if (aec->CommCtrl.YRangeMode == CAM_YRANGE_MODE_FULL) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_YRANGEMODE_FULL); } else if (aec->CommCtrl.YRangeMode == CAM_YRANGE_MODE_LIMITED) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_YRANGEMODE_LIMITED); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid AEC YRangeMode = %d\n", __FUNCTION__, __LINE__, aec->CommCtrl.YRangeMode); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECRUNINTERVAL_TAG_ID)) { ParseUcharArray(pchild, &aec->CommCtrl.AecRunInterval, tag.Size()); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECOPTYPE_TAG_ID)) { char* value = Toupper(tag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_AECOPTYPE_AUTO) { aec->CommCtrl.AecOpType = RK_AIQ_OP_MODE_AUTO; } else if (s_value == CALIB_SENSOR_AEC_AECOPTYPE_MANUAL) { aec->CommCtrl.AecOpType = RK_AIQ_OP_MODE_MANUAL; } else { aec->CommCtrl.AecOpType = RK_AIQ_OP_MODE_INVALID; LOGE("%s(%d): invalid AEC AecOpType = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)pchild; if (aec->CommCtrl.AecOpType == RK_AIQ_OP_MODE_AUTO) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_AECOPTYPE_AUTO); } else if (aec->CommCtrl.AecOpType == RK_AIQ_OP_MODE_MANUAL) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_AECOPTYPE_MANUAL); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid AEC AecOpType = %d\n", __FUNCTION__, __LINE__, aec->CommCtrl.AecOpType); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SYNCTEST_TAG_ID)) { if (!parseEntrySensorAecSyncTest(pchild->ToElement()), param) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECSPEED_TAG_ID)) { if (!parseEntrySensorAecSpeed(pchild->ToElement()), param) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDELAYFRMNUM_TAG_ID)) { if (!parseEntrySensorAecDelayFrmNum(pchild->ToElement())) { LOGE("parse error in Aec (%s)", tagname.c_str(), param); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECDNSWITCH_TAG_ID)) { if (!parseEntrySensorAecDNSwitch(pchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_ANTIFLICKER_TAG_ID)) { if (!parseEntrySensorAecAntiFlicker(pchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECFRAMERATEMODE_TAG_ID)) { if (!parseEntrySensorAecFrameRateMode(pchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECINITVALUE_TAG_ID)) { if (!parseEntrySensorAecInitValue(pchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECGRIDWEIGHT_TAG_ID)) { if (!parseEntrySensorAecGridWeight(pchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_IRISCTRL_TAG_ID)) { if (!parseEntrySensorAecIrisCtrl(pchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MANUALCTRL_TAG_ID)) { if (!parseEntrySensorAecManualCtrl(pchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_AECROUTE_TAG_ID)) { if (!parseEntrySensorAecRoute(pchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_ENVLVCALIB_TAG_ID)) { if (!parseEntrySensorAecEnvLvCalib(pchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_LINEARAE_CTRL_TAG_ID)) { if (!parseEntrySensorLinearAECtrl(pchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_HDRAECTRL_TAG_ID)) { if (!parseEntrySensorHdrAECtrl(pchild->ToElement(), param)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else { LOGW("parse error in AEC section (unknow tag:%s)", tagname.c_str()); //return (false); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAecLinearAeRoute ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_AECROUTE_LINEARAE_TAG_ID, CALIB_SENSOR_AEC_AECROUTE_TAG_ID); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); int nTimeDot = 0; int nGainDot = 0; int nIspDGainDot = 0; int nPIrisDot = 0; CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG redirectOut << "Tagname: " << Tagname << ",index:" << index << std::endl; #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_NAME_TAG_ID)) { char* value = Toupper(tag.Value()); ParseString(pchild, aec->CommCtrl.stAeRoute.LinAeSeperate[index].name, sizeof(aec->CommCtrl.stAeRoute.LinAeSeperate[index].name)); #ifdef DEBUG_LOG redirectOut << "value:" << value << std::endl; redirectOut << aec->CommCtrl.stAeRoute.LinAeSeperate[index].name << std::endl; #endif } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_TIMEDOT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stAeRoute.LinAeSeperate[index].TimeDot, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nTimeDot = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_GAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stAeRoute.LinAeSeperate[index].GainDot, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nGainDot = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_ISPDGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stAeRoute.LinAeSeperate[index].IspgainDot, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nIspDGainDot = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_PIRISDOT_TAG_ID)) { int no = ParseIntArray(pchild, aec->CommCtrl.stAeRoute.LinAeSeperate[index].PIrisGainDot, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nPIrisDot = no; } else { redirectOut << "parse error in LinAe Route (unknow tag: " << Tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((nGainDot == nTimeDot)); DCT_ASSERT((nGainDot == nIspDGainDot)); aec->CommCtrl.stAeRoute.LinAeSeperate[index].array_size = nTimeDot; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecHdrAeRoute ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_AECROUTE_HDRAE_TAG_ID, CALIB_SENSOR_AEC_AECROUTE_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); int nTimeDot = 0; int nGainDot = 0; int nIspDGainDot = 0; int nPIrisDot = 0; while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_NAME_TAG_ID)) { char* value = Toupper(tag.Value()); ParseString(pchild, aec->CommCtrl.stAeRoute.HdrAeSeperate[index].name, sizeof(aec->CommCtrl.stAeRoute.HdrAeSeperate[index].name)); #ifdef DEBUG_LOG redirectOut << "value:" << value << std::endl; redirectOut << aec->CommCtrl.stAeRoute.HdrAeSeperate[index].name << std::endl; #endif } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_LTIMEDOT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stAeRoute.HdrAeSeperate[index].HdrTimeDot[2], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nTimeDot = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MTIMEDOT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stAeRoute.HdrAeSeperate[index].HdrTimeDot[1], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } DCT_ASSERT((nTimeDot == no)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_STIMEDOT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stAeRoute.HdrAeSeperate[index].HdrTimeDot[0], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } DCT_ASSERT((nTimeDot == no)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_LGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stAeRoute.HdrAeSeperate[index].HdrGainDot[2], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nGainDot = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stAeRoute.HdrAeSeperate[index].HdrGainDot[1], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } DCT_ASSERT((no == nGainDot)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stAeRoute.HdrAeSeperate[index].HdrGainDot[0], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } DCT_ASSERT((no == nGainDot)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_LISPDGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stAeRoute.HdrAeSeperate[index].HdrIspDGainDot[2], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nIspDGainDot = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_MISPDGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stAeRoute.HdrAeSeperate[index].HdrIspDGainDot[1], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } DCT_ASSERT((nIspDGainDot == no)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_SISPDGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->CommCtrl.stAeRoute.HdrAeSeperate[index].HdrIspDGainDot[0], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } DCT_ASSERT((nIspDGainDot == no)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_PIRISDOT_TAG_ID)) { int no = ParseIntArray(pchild, aec->CommCtrl.stAeRoute.HdrAeSeperate[index].PIrisGainDot, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nPIrisDot = no; } else { redirectOut << "parse error in HdrAe Route (unknow tag: " << Tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((nGainDot == nTimeDot)); DCT_ASSERT((nGainDot == nIspDGainDot)); aec->CommCtrl.stAeRoute.HdrAeSeperate[index].array_size = nTimeDot; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecLinearAeDynamicPoint ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_DYNAMICSETPOINT_TAG_ID, CALIB_SENSOR_AEC_LINEARAE_CTRL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Aec_Para_t, aec); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); int nExpValue = 0; int nDysetpoint = 0; while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); INFO_PRINT(Tagname); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_NAME_TAG_ID)) { char* value = Toupper(tag.Value()); ParseString(pchild, aec->LinearAeCtrl.DySetpoint[index].name, sizeof(aec->LinearAeCtrl.DySetpoint[index].name)); #ifdef DEBUG_LOG redirectOut << "value:" << value << std::endl; redirectOut << aec->LinearAeCtrl.DySetpoint[index].name << std::endl; #endif } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_EXPLEVEL_TAG_ID)) { int no = ParseFloatArray(pchild, aec->LinearAeCtrl.DySetpoint[index].ExpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_SETPOINT_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_SETPOINT_MAX_NODES); return false; } nExpValue = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_DYSETPOINT_TAG_ID)) { int no = ParseFloatArray(pchild, aec->LinearAeCtrl.DySetpoint[index].DySetpoint, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_SETPOINT_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_SETPOINT_MAX_NODES); return false; } nDysetpoint = no; } else { redirectOut << "parse error in DynamicPoint (unknow tag: " << Tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((nDysetpoint == nExpValue)); aec->LinearAeCtrl.DySetpoint[index].array_size = nDysetpoint; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } //aec v21 parser bool RkAiqCalibParser::parseEntrySensorAecLinAlterExpV21 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_V21_SYNCTEST_LINALTEREXP_TAG_ID, CALIB_SENSOR_AEC_V21_SYNCTEST_ALTEREXP_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); CalibDb_AeSyncTest_t* paec_synctest = (CalibDb_AeSyncTest_t*)param; while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG redirectOut << "Tagname: " << Tagname << ",index:" << index << std::endl; #endif DCT_ASSERT((index < AEC_ALTER_EXP_MAX_NUM)); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_TIMEVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, &paec_synctest->LinAlterExp.TimeValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_GAINVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, &paec_synctest->LinAlterExp.GainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_ISPGAINVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, &paec_synctest->LinAlterExp.IspgainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_DCGMODE_TAG_ID)) { int no = ParseIntArray(pchild, &paec_synctest->LinAlterExp.DcgMode[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_PIRISVALUE_TAG_ID)) { int no = ParseIntArray(pchild, &paec_synctest->LinAlterExp.PIrisGainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else { redirectOut << "parse error in LinAlterExp (unknow tag: " << Tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); paec_synctest->LinAlterExp.array_size = index + 1; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecHdrAlterExpV21 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_V21_SYNCTEST_HDRALTEREXP_TAG_ID, CALIB_SENSOR_AEC_V21_SYNCTEST_ALTEREXP_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); CalibDb_AeSyncTest_t* paec_synctest = (CalibDb_AeSyncTest_t*)param; while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG redirectOut << "Tagname: " << Tagname << ",index:" << index << std::endl; #endif DCT_ASSERT((index < AEC_ALTER_EXP_MAX_NUM)); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_TIMEVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, paec_synctest->HdrAlterExp.TimeValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_GAINVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, paec_synctest->HdrAlterExp.GainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_ISPGAINVALUE_TAG_ID)) { int no = ParseFloatArray(pchild, paec_synctest->HdrAlterExp.IspDGainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_DCGMODE_TAG_ID)) { int no = ParseIntArray(pchild, paec_synctest->HdrAlterExp.DcgMode[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_PIRISVALUE_TAG_ID)) { int no = ParseIntArray(pchild, &paec_synctest->HdrAlterExp.PIrisGainValue[index], tag.Size()); DCT_ASSERT((no == tag.Size())); } else { redirectOut << "parse error in HdrAlterExp (unknow tag: " << Tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); paec_synctest->HdrAlterExp.array_size = index + 1; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecAlterExpV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_SYNCTEST_ALTEREXP_TAG_ID, CALIB_SENSOR_AEC_V21_SYNCTEST_TAG_ID); CalibDb_AeSyncTest_t* paec_synctest = (CalibDb_AeSyncTest_t*)param; #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_LINALTEREXP_TAG_ID)) { if (!parseEntryCell2(psubchild->ToElement(), subTag.Size(), &RkAiqCalibParser::parseEntrySensorAecLinAlterExpV21, paec_synctest, (uint32_t)CALIB_SENSOR_AEC_V21_SYNCTEST_LINALTEREXP_TAG_ID, (uint32_t)CALIB_SENSOR_AEC_V21_SYNCTEST_ALTEREXP_TAG_ID)) { LOGE("parse error in AEC-SyncTest LinAlterExp(%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_HDRALTEREXP_TAG_ID)) { if (!parseEntryCell2(psubchild->ToElement(), subTag.Size(), &RkAiqCalibParser::parseEntrySensorAecHdrAlterExpV21, paec_synctest, (uint32_t)CALIB_SENSOR_AEC_V21_SYNCTEST_HDRALTEREXP_TAG_ID, (uint32_t)CALIB_SENSOR_AEC_V21_SYNCTEST_ALTEREXP_TAG_ID)) { LOGE("parse error in AEC-SyncTest HdrAlterExp(%s)", subTagname.c_str()); return (false); } } else { LOGE("%s(%d): parse error in AEC-SyncTest AlterExp (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecSyncTestV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_SYNCTEST_TAG_ID, CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID); CalibDb_AeSyncTest_t* paec_synctest = (CalibDb_AeSyncTest_t*)param; const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = [%s]\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_ENABLE_TAG_ID)) { int no = ParseUcharArray(psubchild, &paec_synctest->enable, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_INTERVALFRM_TAG_ID)) { int no = ParseIntArray(psubchild, &paec_synctest->IntervalFrm, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_ALTEREXP_TAG_ID)) { if (!parseEntrySensorAecAlterExpV21(psubchild->ToElement(), paec_synctest)) { LOGE("parse error in Aec-SyncTest AlterExp(%s)", subTagname.c_str()); return (false); } } else { LOGE("%s(%d): parse error in Aec-SyncTest (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecSpeedV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_AECSPEED_TAG_ID, CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID); CalibDb_AeSpeed_t* paec_speed = (CalibDb_AeSpeed_t*)param; const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = [%s]\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_DAMPOVER_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_speed->DampOver, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_DAMPUNDER_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_speed->DampUnder, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_DAMPDARK2BRIGHT_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_speed->DampDark2Bright, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_DAMPBRIGHT2DARK_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_speed->DampBright2Dark, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else { LOGE("%s(%d): parse error in AeSpeed (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecDelayFrmNumV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_V21_AECDELAYFRMNUM_TAG_ID, CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID); CalibDb_AeAttr_t* paec_auto = (CalibDb_AeAttr_t*)param; const XMLNode* psubchild = pelement->FirstChild(); autoTabForward(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_BLACKDELAY_TAG_ID)) { int no = ParseUcharArray(psubchild, &paec_auto->BlackDelayFrame, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_WHITEDELAY_TAG_ID)) { int no = ParseUcharArray(psubchild, &paec_auto->WhiteDelayFrame, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else { LOGE("%s(%d): parse error in AeDelayFrame (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecVBNightModeV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_V21_AECDNSWITCH_VBNIGHTMODE_TAG_ID, CALIB_SENSOR_AEC_V21_AECDNSWITCH_TAG_ID); XmlTag subTag = XmlTag(pelement); CalibDb_DNSwitch_Attr_t* paec_dnswitch = (CalibDb_DNSwitch_Attr_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); autoTabForward(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_ENABLE_TAG_ID)) { int no = ParseUcharArray(psubsubchild, &paec_dnswitch->stVBNightMode.enable, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_N2DFRMCNT_TAG_ID)) { int no = ParseUcharArray(psubsubchild, &paec_dnswitch->stVBNightMode.Night2DayFrmCnt, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_N2DFACTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_dnswitch->stVBNightMode.Night2DayFacTh, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { LOGE("%s(%d): parse error in DNSwitch - VBNightMode(unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecIRNightModeV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_V21_AECDNSWITCH_IRNIGHTMODE_TAG_ID, CALIB_SENSOR_AEC_V21_AECDNSWITCH_TAG_ID); CalibDb_DNSwitch_Attr_t* paec_dnswitch = (CalibDb_DNSwitch_Attr_t*)param; XmlTag subTag = XmlTag(pelement); const XMLNode* psubsubchild = pelement->FirstChild(); autoTabForward(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_ENABLE_TAG_ID)) { int no = ParseUcharArray(psubsubchild, &paec_dnswitch->stIRNightMode.enable, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_N2DFRMCNT_TAG_ID)) { int no = ParseUcharArray(psubsubchild, &paec_dnswitch->stIRNightMode.Night2DayFrmCnt, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_N2DFACTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_dnswitch->stIRNightMode.Night2DayFacTh, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_IR_RG_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_dnswitch->stIRNightMode.IRRgain, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_IR_BG_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_dnswitch->stIRNightMode.IRBgain, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_MAX_DIS_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_dnswitch->stIRNightMode.MaxWbDis, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_VB_PERCENT_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_dnswitch->stIRNightMode.VbPercent, subTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { LOGE("%s(%d): parse error in DNSwitch - IRNightMode(unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecDNSwitchV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_V21_AECDNSWITCH_TAG_ID, CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID); CalibDb_DNSwitch_Attr_t* paec_dnswitch = (CalibDb_DNSwitch_Attr_t*)param; const XMLNode* psubchild = pelement->FirstChild(); autoTabForward(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_DNTRIGGER_TAG_ID)) { int no = ParseUcharArray(psubchild, &paec_dnswitch->DNTrigger, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_DNMODE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_AECDNSWITCH_DNMODE_DAY) { paec_dnswitch->DNMode = AEC_DNMODE_DAY; } else if (s_value == CALIB_SENSOR_AEC_AECDNSWITCH_DNMODE_NIGHT) { paec_dnswitch->DNMode = AEC_DNMODE_NIGHT; } else { paec_dnswitch->DNMode = AEC_DNMODE_MIN; LOGE("%s(%d): invalid AEC DNSwitch-DNMode = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubchild; if (paec_dnswitch->DNMode == AEC_DNMODE_DAY) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_AECDNSWITCH_DNMODE_DAY); } else if (paec_dnswitch->DNMode == AEC_DNMODE_NIGHT) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_AECDNSWITCH_DNMODE_NIGHT); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid AEC DNSwitch-DNMode = %d\n", __FUNCTION__, __LINE__, paec_dnswitch->DNMode); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_FILLLIGHTMODE_TAG_ID)) { int no = ParseUcharArray(psubchild, &paec_dnswitch->FillLightMode, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_D2NFACTH_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_dnswitch->Day2NightFacTh, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_D2NFRMCNT_TAG_ID)) { int no = ParseUcharArray(psubchild, &paec_dnswitch->Day2NightFrmCnt, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_VBNIGHTMODE_TAG_ID)) { if (!parseEntrySensorAecVBNightModeV21(psubchild->ToElement(), paec_dnswitch)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_IRNIGHTMODE_TAG_ID)) { if (!parseEntrySensorAecIRNightModeV21(psubchild->ToElement(), paec_dnswitch)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else { LOGE("%s(%d): parse error in DNSwitch (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecAntiFlickerV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_ANTIFLICKER_TAG_ID, CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID); CalibDb_AntiFlickerAttr_t* paec_antiflicker = (CalibDb_AntiFlickerAttr_t*)param; const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_ANTIFLICKER_ENABLE_TAG_ID)) { uint8_t temp = paec_antiflicker->enable; int no = ParseUcharArray(psubchild, &temp, subTag.Size()); paec_antiflicker->enable = (temp == 0) ? false : true; DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_ANTIFLICKER_FREQ_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_ANTIFLICKER_FREQ_50HZ) { paec_antiflicker->Frequency = AEC_FLICKER_FREQUENCY_50HZ; } else if (s_value == CALIB_SENSOR_AEC_ANTIFLICKER_FREQ_60HZ) { paec_antiflicker->Frequency = AEC_FLICKER_FREQUENCY_60HZ; } else { paec_antiflicker->Frequency = AEC_FLICKER_FREQUENCY_OFF; LOGE("%s(%d): invalid stAntiFlicker.Frequency = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubchild; if (paec_antiflicker->Frequency == AEC_FLICKER_FREQUENCY_50HZ) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_ANTIFLICKER_FREQ_50HZ); } else if (paec_antiflicker->Frequency == AEC_FLICKER_FREQUENCY_60HZ) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_ANTIFLICKER_FREQ_60HZ); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid AEC stAntiFlicker.Frequency = %d\n", __FUNCTION__, __LINE__, paec_antiflicker->Frequency); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_ANTIFLICKER_MODE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_ANTIFLICKER_MODE_AUTO) { paec_antiflicker->Mode = AEC_ANTIFLICKER_AUTO_MODE; } else if (s_value == CALIB_SENSOR_AEC_ANTIFLICKER_MODE_NORMAL) { paec_antiflicker->Mode = AEC_ANTIFLICKER_NORMAL_MODE; } else { paec_antiflicker->Mode = AEC_ANTIFLICKER_AUTO_MODE; LOGE("%s(%d): invalid stAntiFlicker.Mode = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubchild; if (paec_antiflicker->Mode == AEC_ANTIFLICKER_AUTO_MODE) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_ANTIFLICKER_MODE_AUTO); } else if (paec_antiflicker->Mode == AEC_ANTIFLICKER_NORMAL_MODE) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_ANTIFLICKER_MODE_NORMAL); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid AEC stAntiFlicker.Mode = %d\n", __FUNCTION__, __LINE__, paec_antiflicker->Mode); } } } else { redirectOut << "parse error in stAntiFlicker (unknow tag: " << subTagname << ")" << std::endl; } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecFrameRateModeV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_AECFRAMERATEMODE_TAG_ID, CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID); CalibDb_AeFrmRateAttr_t* paec_frm = (CalibDb_AeFrmRateAttr_t*)param; const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_ISFPSFIX_TAG_ID)) { uint8_t temp = paec_frm->isFpsFix; int no = ParseUcharArray(psubchild, &temp, subTag.Size()); paec_frm->isFpsFix = (temp == 0) ? false : true; DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_FPSVALUE_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_frm->FpsValue, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else { redirectOut << "parse error in stFrmRate (unknow tag: " << subTagname << ")" << std::endl; } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecInitValueLinearAEV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_AECINITVALUE_LINEARAE_TAG_ID, CALIB_SENSOR_AEC_V21_AECINITVALUE_TAG_ID); CalibDb_ExpInitExp_t* paec_init = (CalibDb_ExpInitExp_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_INITTIMEVALUE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_init->stLinExpInitExp.InitTimeValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); paec_init->stLinExpInitExp.array_size = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_INITGAINVALUE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_init->stLinExpInitExp.InitGainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_INITISPDGAINVALUE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_init->stLinExpInitExp.InitIspDGainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_INITPIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &paec_init->stLinExpInitExp.InitPIrisGainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_INITDCIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &paec_init->stLinExpInitExp.InitDCIrisDutyValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { LOGE("%s(%d): parse error in stLinExpInitExp (unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecInitValueHdrAEV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_AECINITVALUE_HDRAE_TAG_ID, CALIB_SENSOR_AEC_V21_AECINITVALUE_TAG_ID); CalibDb_ExpInitExp_t* paec_init = (CalibDb_ExpInitExp_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_INITTIMEVALUE_TAG_ID)) { float tempVal[3]; for (int i = 0; i < 3; i++) tempVal[i] = paec_init->stHdrExpInitExp.InitTimeValue.fCoeff[i]; int no = ParseFloatArray(psubsubchild, tempVal, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); for (int i = 0; i < 3; i++) paec_init->stHdrExpInitExp.InitTimeValue.fCoeff[i] = tempVal[i]; paec_init->stHdrExpInitExp.array_size = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_INITGAINVALUE_TAG_ID)) { float tempVal[3]; for (int i = 0; i < 3; i++) tempVal[i] = paec_init->stHdrExpInitExp.InitGainValue.fCoeff[i]; int no = ParseFloatArray(psubsubchild, tempVal, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); for (int i = 0; i < 3; i++) paec_init->stHdrExpInitExp.InitGainValue.fCoeff[i] = tempVal[i]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_INITISPDGAINVALUE_TAG_ID)) { float tempVal[3]; for (int i = 0; i < 3; i++) tempVal[i] = paec_init->stHdrExpInitExp.InitIspDGainValue.fCoeff[i]; int no = ParseFloatArray(psubsubchild, tempVal, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); for (int i = 0; i < 3; i++) paec_init->stHdrExpInitExp.InitIspDGainValue.fCoeff[i] = tempVal[i]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_INITPIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &paec_init->stHdrExpInitExp.InitPIrisGainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_INITDCIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &paec_init->stHdrExpInitExp.InitDCIrisDutyValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { LOGE("%s(%d): parse error in stHdrExpInitExp (unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecInitValueV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_AECINITVALUE_TAG_ID, CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID); CalibDb_ExpInitExp_t* paec_init = (CalibDb_ExpInitExp_t*)param; const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECINITVALUE_LINEARAE_TAG_ID)) { if (!parseEntrySensorAecInitValueLinearAEV21(psubchild->ToElement(), paec_init)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECINITVALUE_HDRAE_TAG_ID)) { if (!parseEntrySensorAecInitValueHdrAEV21(psubchild->ToElement(), paec_init)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else { LOGE("%s(%d): parse error in stInitExp (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecIrisCtrlPAttrV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_IRISCTRL_P_ATTR_TAG_ID, CALIB_SENSOR_AEC_V21_IRISCTRL_TAG_ID); CalibDb_AecIrisCtrl_t* paec_iris = (CalibDb_AecIrisCtrl_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_P_ATTR_TOTALSTEP_TAG_ID)) { int no = ParseUshortArray(psubsubchild, &paec_iris->PIrisAttr.TotalStep, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); DCT_ASSERT((no <= AEC_PIRIS_STAP_TABLE_MAX)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_P_ATTR_EFFCSTEP_TAG_ID)) { int no = ParseUshortArray(psubsubchild, &paec_iris->PIrisAttr.EffcStep, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); DCT_ASSERT((no <= AEC_PIRIS_STAP_TABLE_MAX)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_P_ATTR_ZEROISMAX_TAG_ID)) { uint8_t temp = paec_iris->PIrisAttr.ZeroIsMax; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); paec_iris->PIrisAttr.ZeroIsMax = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_P_ATTR_STEPTABLE_TAG_ID)) { int no = ParseUshortArray(psubsubchild, paec_iris->PIrisAttr.StepTable, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); DCT_ASSERT((no <= AEC_PIRIS_STAP_TABLE_MAX)); } else { LOGE("%s(%d): parse error in AecIrisCtrl PAttr (unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecIrisCtrlDCAttrV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_IRISCTRL_DC_ATTR_TAG_ID, CALIB_SENSOR_AEC_V21_IRISCTRL_TAG_ID); CalibDb_AecIrisCtrl_t* paec_iris = (CalibDb_AecIrisCtrl_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_DC_ATTR_KP_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_iris->DCIrisAttr.Kp, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_DC_ATTR_KI_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_iris->DCIrisAttr.Ki, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_DC_ATTR_KD_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_iris->DCIrisAttr.Kd, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_DC_ATTR_MIN_PWMDUTY_TAG_ID)) { int no = ParseIntArray(psubsubchild, &paec_iris->DCIrisAttr.MinPwmDuty, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_DC_ATTR_MAX_PWMDUTY_TAG_ID)) { int no = ParseIntArray(psubsubchild, &paec_iris->DCIrisAttr.MaxPwmDuty, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_DC_ATTR_OPEN_PWMDUTY_TAG_ID)) { int no = ParseIntArray(psubsubchild, &paec_iris->DCIrisAttr.OpenPwmDuty, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_DC_ATTR_CLOSE_PWMDUTY_TAG_ID)) { int no = ParseIntArray(psubsubchild, &paec_iris->DCIrisAttr.ClosePwmDuty, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { LOGE("%s(%d): parse error in AecIrisCtrl DCAttr (unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecIrisCtrlV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_IRISCTRL_TAG_ID, CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID); CalibDb_AecIrisCtrl_t* paec_iris = (CalibDb_AecIrisCtrl_t*)param; const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_ENABLE_TAG_ID)) { int no = ParseUcharArray(psubchild, &paec_iris->enable, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_TYPE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_IRISCTRL_TYPE_P) { paec_iris->IrisType = IRIS_P_TYPE; } else if (s_value == CALIB_SENSOR_AEC_IRISCTRL_TYPE_DC) { paec_iris->IrisType = IRIS_DC_TYPE; } else { paec_iris->IrisType = IRIS_INVALID_TYPE; LOGE("%s(%d): invalid stIris.IrisType = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubchild; if (paec_iris->IrisType == IRIS_P_TYPE) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_IRISCTRL_TYPE_P); } else if (paec_iris->IrisType == IRIS_DC_TYPE) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_IRISCTRL_TYPE_DC); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid stIris.IrisType = %d\n", __FUNCTION__, __LINE__, paec_iris->IrisType); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_P_ATTR_TAG_ID)) { if (!parseEntrySensorAecIrisCtrlPAttrV21(psubchild->ToElement(), paec_iris)) { LOGE("parse error in Aec IrisCtrl (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_DC_ATTR_TAG_ID)) { if (!parseEntrySensorAecIrisCtrlDCAttrV21(psubchild->ToElement(), paec_iris)) { LOGE("parse error in Aec IrisCtrl (%s)", subTagname.c_str()); return (false); } } else { LOGE("%s(%d): parse error in Aec IrisCtrl (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecManualCtrlLinearAEV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_MANUALCTRL_LINEARAE_TAG_ID, CALIB_SENSOR_AEC_V21_MANUALCTRL_TAG_ID); CalibDb_MeAttr_t* paec_manual = (CalibDb_MeAttr_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_TIMEEN_TAG_ID)) { uint8_t temp = paec_manual->stLinMe.ManualTimeEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); paec_manual->stLinMe.ManualTimeEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_GAINEN_TAG_ID)) { uint8_t temp = paec_manual->stLinMe.ManualGainEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); paec_manual->stLinMe.ManualGainEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_ISPDGAINEN_TAG_ID)) { uint8_t temp = paec_manual->stLinMe.ManualIspDgainEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); paec_manual->stLinMe.ManualIspDgainEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_IRISEN_TAG_ID)) { uint8_t temp = paec_manual->stLinMe.ManualIrisEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); paec_manual->stLinMe.ManualIrisEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_TIMEVALUE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_manual->stLinMe.TimeValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_GAINVALUE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_manual->stLinMe.GainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_ISPDGAINVALUE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_manual->stLinMe.IspDGainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_PIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &paec_manual->stLinMe.PIrisGainValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_DCIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &paec_manual->stLinMe.DCIrisValue, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { LOGE("%s(%d): parse error in stManual.stLinMe (unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecManualCtrlHdrAEV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_MANUALCTRL_HDRAE_TAG_ID, CALIB_SENSOR_AEC_V21_MANUALCTRL_TAG_ID); CalibDb_MeAttr_t* paec_manual = (CalibDb_MeAttr_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_TIMEEN_TAG_ID)) { uint8_t temp = paec_manual->stHdrMe.ManualTimeEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); paec_manual->stHdrMe.ManualTimeEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_GAINEN_TAG_ID)) { uint8_t temp = paec_manual->stHdrMe.ManualGainEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); paec_manual->stHdrMe.ManualGainEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_ISPDGAINEN_TAG_ID)) { uint8_t temp = paec_manual->stHdrMe.ManualIspDgainEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); paec_manual->stHdrMe.ManualIspDgainEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_IRISEN_TAG_ID)) { uint8_t temp = paec_manual->stHdrMe.ManualIrisEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); paec_manual->stHdrMe.ManualIrisEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_TIMEVALUE_TAG_ID)) { float tempVal[3]; for (int i = 0; i < 3; i++) tempVal[i] = paec_manual->stHdrMe.TimeValue.fCoeff[i]; int no = ParseFloatArray(psubsubchild, tempVal, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); for (int i = 0; i < 3; i++) paec_manual->stHdrMe.TimeValue.fCoeff[i] = tempVal[i]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_GAINVALUE_TAG_ID)) { float tempVal[3]; for (int i = 0; i < 3; i++) tempVal[i] = paec_manual->stHdrMe.GainValue.fCoeff[i]; int no = ParseFloatArray(psubsubchild, tempVal, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); for (int i = 0; i < 3; i++) paec_manual->stHdrMe.GainValue.fCoeff[i] = tempVal[i]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_ISPDGAINVALUE_TAG_ID)) { float tempVal[3]; for (int i = 0; i < 3; i++) tempVal[i] = paec_manual->stHdrMe.IspDGainValue.fCoeff[i]; int no = ParseFloatArray(psubsubchild, tempVal, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); for (int i = 0; i < 3; i++) paec_manual->stHdrMe.IspDGainValue.fCoeff[i] = tempVal[i]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_PIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &paec_manual->stHdrMe.PIrisGainValue, subsubTag.Size()); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_DCIRISVALUE_TAG_ID)) { int no = ParseIntArray(psubsubchild, &paec_manual->stHdrMe.DCIrisValue, subsubTag.Size()); } else { LOGE("%s(%d): parse error in stManual.stHdrMe (unknow tag: %s )\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecManualCtrlV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_MANUALCTRL_TAG_ID, CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID); CalibDb_MeAttr_t* paec_manual = (CalibDb_MeAttr_t*)param; const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_LINEARAE_TAG_ID)) { if (!parseEntrySensorAecManualCtrlLinearAEV21(psubchild->ToElement(), paec_manual)) { LOGE("parse error in Aec ManualCtrl (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_HDRAE_TAG_ID)) { if (!parseEntrySensorAecManualCtrlHdrAEV21(psubchild->ToElement(), paec_manual)) { LOGE("parse error in Aec ManualCtrl (%s)", subTagname.c_str()); return (false); } } else { LOGE("%s(%d): parse error in stManual (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecLinearRouteV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_V21_AECROUTE_LINEARAE_TAG_ID, CALIB_SENSOR_AEC_V21_AECROUTE_TAG_ID); CalibDb_AeRoute_Attr_V21_t* paec_route = (CalibDb_AeRoute_Attr_V21_t*)param; const XMLNode* pchild = pelement->FirstChild(); int nTimeDot = 0; int nGainDot = 0; int nIspDGainDot = 0; int nPIrisDot = 0; while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG redirectOut << "Tagname: " << Tagname << std::endl; #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_TIMEDOT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_route->LinAeSeperate.TimeDot, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nTimeDot = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_GAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_route->LinAeSeperate.GainDot, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nGainDot = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_ISPDGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_route->LinAeSeperate.IspgainDot, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nIspDGainDot = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_PIRISDOT_TAG_ID)) { int no = ParseIntArray(pchild, paec_route->LinAeSeperate.PIrisGainDot, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nPIrisDot = no; } else { redirectOut << "parse error in LinAe Route (unknow tag: " << Tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((nGainDot == nTimeDot)); DCT_ASSERT((nGainDot == nIspDGainDot)); paec_route->LinAeSeperate.array_size = nTimeDot; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecHdrRouteV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_V21_AECROUTE_HDRAE_TAG_ID, CALIB_SENSOR_AEC_V21_AECROUTE_TAG_ID); CalibDb_AeRoute_Attr_V21_t* paec_route = (CalibDb_AeRoute_Attr_V21_t*)param; const XMLNode* pchild = pelement->FirstChild(); int nTimeDot = 0; int nGainDot = 0; int nIspDGainDot = 0; int nPIrisDot = 0; while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LTIMEDOT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_route->HdrAeSeperate.HdrTimeDot[2], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nTimeDot = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MTIMEDOT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_route->HdrAeSeperate.HdrTimeDot[1], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } DCT_ASSERT((nTimeDot == no)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_STIMEDOT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_route->HdrAeSeperate.HdrTimeDot[0], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } DCT_ASSERT((nTimeDot == no)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_route->HdrAeSeperate.HdrGainDot[2], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nGainDot = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_route->HdrAeSeperate.HdrGainDot[1], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } DCT_ASSERT((no == nGainDot)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_route->HdrAeSeperate.HdrGainDot[0], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } DCT_ASSERT((no == nGainDot)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LISPDGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_route->HdrAeSeperate.HdrIspDGainDot[2], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nIspDGainDot = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MISPDGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_route->HdrAeSeperate.HdrIspDGainDot[1], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } DCT_ASSERT((nIspDGainDot == no)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SISPDGAINDOT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_route->HdrAeSeperate.HdrIspDGainDot[0], tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } DCT_ASSERT((nIspDGainDot == no)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_PIRISDOT_TAG_ID)) { int no = ParseIntArray(pchild, paec_route->HdrAeSeperate.PIrisGainDot, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_ROUTE_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_ROUTE_MAX_NODES); return false; } nPIrisDot = no; } else { redirectOut << "parse error in HdrAe Route (unknow tag: " << Tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((nGainDot == nTimeDot)); DCT_ASSERT((nGainDot == nIspDGainDot)); paec_route->HdrAeSeperate.array_size = nTimeDot; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecRouteV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_AECROUTE_TAG_ID, CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID); CalibDb_AeRoute_Attr_V21_t* paec_route = (CalibDb_AeRoute_Attr_V21_t*)param; #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECROUTE_LINEARAE_TAG_ID)) { if (!parseEntrySensorAecLinearRouteV21(psubchild->ToElement(), paec_route)) { LOGE("parse error in Aec LinAeRoute(%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECROUTE_HDRAE_TAG_ID)) { if (!parseEntrySensorAecHdrRouteV21(psubchild->ToElement(), paec_route)) { LOGE("parse error in Aec HdrAeRoute(%s)", subTagname.c_str()); return (false); } } else { LOGE("%s(%d): parse error in AecRoute (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecLinearAeDynamicPointV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AEC_V21_DYNAMICSETPOINT_TAG_ID, CALIB_SENSOR_AEC_V21_LINEARAE_CTRL_TAG_ID); CalibDb_LinearAE_Attr_V21_t* paec_linctrl = (CalibDb_LinearAE_Attr_V21_t*)param; const XMLNode* pchild = pelement->FirstChild(); int nExpValue = 0; int nDysetpoint = 0; while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); INFO_PRINT(Tagname); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_EXPLEVEL_TAG_ID)) { int no = ParseFloatArray(pchild, paec_linctrl->DySetpoint.ExpValue, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_SETPOINT_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_SETPOINT_MAX_NODES); return false; } nExpValue = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_DYSETPOINT_TAG_ID)) { int no = ParseFloatArray(pchild, paec_linctrl->DySetpoint.DySetpoint, tag.Size()); DCT_ASSERT((no == tag.Size())); if(tag.Size() > AEC_SETPOINT_MAX_NODES) { LOGE("array size: %d out of Maximum range(%d)", tag.Size(), AEC_SETPOINT_MAX_NODES); return false; } nDysetpoint = no; } else { redirectOut << "parse error in DynamicPoint (unknow tag: " << Tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT((nDysetpoint == nExpValue)); paec_linctrl->DySetpoint.array_size = nDysetpoint; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorLinearAECtrlBackLightV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_LINAECTRL_BACKLIGHT_CONFIG_TAG_ID, CALIB_SENSOR_AEC_V21_LINEARAE_CTRL_TAG_ID); CalibDb_LinearAE_Attr_V21_t* paec_linctrl = (CalibDb_LinearAE_Attr_V21_t*)param; const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); #ifdef DEBUG_LOG redirectOut << "secsubTagname: " << secsubTagname << std::endl; #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_BACKLIGHT_ENABLE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &paec_linctrl->BackLightConf.enable, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_BACKLIGHT_MEASAREA_TAG_ID)) { char* value = Toupper(secsubtag.Value()); std::string s_value(value); #ifdef DEBUG_LOG redirectOut << "value:" << value << std::endl; redirectOut << s_value << std::endl; #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_MEASAREA_AUTO) { paec_linctrl->BackLightConf.MeasArea = AEC_MEASURE_AREA_AUTO; } else if (s_value == CALIB_SENSOR_AEC_MEASAREA_CENTER) { paec_linctrl->BackLightConf.MeasArea = AEC_MEASURE_AREA_CENTER; } else if (s_value == CALIB_SENSOR_AEC_MEASAREA_UP) { paec_linctrl->BackLightConf.MeasArea = AEC_MEASURE_AREA_UP; } else if (s_value == CALIB_SENSOR_AEC_MEASAREA_BOTTOM) { paec_linctrl->BackLightConf.MeasArea = AEC_MEASURE_AREA_BOTTOM; } else if (s_value == CALIB_SENSOR_AEC_MEASAREA_LEFT) { paec_linctrl->BackLightConf.MeasArea = AEC_MEASURE_AREA_LEFT; } else if (s_value == CALIB_SENSOR_AEC_MEASAREA_RIGHT) { paec_linctrl->BackLightConf.MeasArea = AEC_MEASURE_AREA_RIGHT; } else { paec_linctrl->BackLightConf.MeasArea = AEC_MEASURE_AREA_AUTO; redirectOut << "invalid BackLit MeasArea (" << s_value << ")" << std::endl; } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode* pNode = (XMLNode *)psecsubchild; if (paec_linctrl->BackLightConf.MeasArea == AEC_MEASURE_AREA_AUTO) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_MEASAREA_AUTO); else if (paec_linctrl->BackLightConf.MeasArea == AEC_MEASURE_AREA_CENTER) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_MEASAREA_CENTER); else if (paec_linctrl->BackLightConf.MeasArea == AEC_MEASURE_AREA_UP) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_MEASAREA_UP); else if (paec_linctrl->BackLightConf.MeasArea == AEC_MEASURE_AREA_BOTTOM) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_MEASAREA_BOTTOM); else if (paec_linctrl->BackLightConf.MeasArea == AEC_MEASURE_AREA_LEFT) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_MEASAREA_LEFT); else if (paec_linctrl->BackLightConf.MeasArea == AEC_MEASURE_AREA_RIGHT) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_MEASAREA_RIGHT); else { pNode->FirstChild()->SetValue("INVALID"); redirectOut << "(XML Write)invalid BackLit MeasArea (" << paec_linctrl->BackLightConf.MeasArea << ")" << std::endl; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_BACKLIGHT_OEROI_LOWTH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &paec_linctrl->BackLightConf.OEROILowTh, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_BACKLIGHT_LV_HIGHTH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &paec_linctrl->BackLightConf.LvHightTh, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_BACKLIGHT_LV_LOWTH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &paec_linctrl->BackLightConf.LvLowTh, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_BACKLIGHT_LUMADISTTH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &paec_linctrl->BackLightConf.LumaDistTh, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_BACKLIGHT_LOWLIGHTPDFTH_TAG_ID)) { int i = (sizeof(paec_linctrl->BackLightConf.LowLightPdfTh) / sizeof(paec_linctrl->BackLightConf.LowLightPdfTh.fCoeff[0])); int no = ParseFloatArray(psecsubchild, paec_linctrl->BackLightConf.LowLightPdfTh.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_BACKLIGHT_NONOEPDFTH_TAG_ID)) { int i = (sizeof(paec_linctrl->BackLightConf.NonOEPdfTh) / sizeof(paec_linctrl->BackLightConf.NonOEPdfTh.fCoeff[0])); int no = ParseFloatArray(psecsubchild, paec_linctrl->BackLightConf.NonOEPdfTh.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_BACKLIGHT_EXPLEVEL_TAG_ID)) { int i = (sizeof(paec_linctrl->BackLightConf.ExpLevel) / sizeof(paec_linctrl->BackLightConf.ExpLevel.fCoeff[0])); int no = ParseFloatArray(psecsubchild, paec_linctrl->BackLightConf.ExpLevel.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_BACKLIGHT_TARGETLLLUMA_TAG_ID)) { int i = (sizeof(paec_linctrl->BackLightConf.TargetLLLuma) / sizeof(paec_linctrl->BackLightConf.TargetLLLuma.fCoeff[0])); int no = ParseFloatArray(psecsubchild, paec_linctrl->BackLightConf.TargetLLLuma.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else { redirectOut << "parse error in LINAECTRL backlight section (unknow tag: " << secsubTagname << ")" << std::endl; } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorLinearAECtrlOverExpV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_LINAECTRL_OVEREXP_CONTROL_TAG_ID, CALIB_SENSOR_AEC_V21_LINEARAE_CTRL_TAG_ID); CalibDb_LinearAE_Attr_V21_t* paec_linctrl = (CalibDb_LinearAE_Attr_V21_t*)param; const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); #ifdef DEBUG_LOG redirectOut << "secsubTagname: " << secsubTagname << std::endl; #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_OVEREXP_ENABLE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &paec_linctrl->OverExpCtrl.enable, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_OVEREXP_LOWLIGHT_TH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &paec_linctrl->OverExpCtrl.LowLightTh, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_OVEREXP_HIGHLIGHT_TH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &paec_linctrl->OverExpCtrl.HighLightTh, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_OVEREXP_MAXWEIGHT_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &paec_linctrl->OverExpCtrl.MaxWeight, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_OVEREXP_OEPDF_TAG_ID)) { int i = (sizeof(paec_linctrl->OverExpCtrl.OEpdf) / sizeof(paec_linctrl->OverExpCtrl.OEpdf.fCoeff[0])); int no = ParseFloatArray(psecsubchild, paec_linctrl->OverExpCtrl.OEpdf.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_OVEREXP_HIGHLIGHT_WEIGHT_TAG_ID)) { int i = (sizeof(paec_linctrl->OverExpCtrl.HighLightWeight) / sizeof(paec_linctrl->OverExpCtrl.HighLightWeight.fCoeff[0])); int no = ParseFloatArray(psecsubchild, paec_linctrl->OverExpCtrl.HighLightWeight.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_OVEREXP_LOWLIGHT_WEIGHT_TAG_ID)) { int i = (sizeof(paec_linctrl->OverExpCtrl.LowLightWeight) / sizeof(paec_linctrl->OverExpCtrl.LowLightWeight.fCoeff[0])); int no = ParseFloatArray(psecsubchild, paec_linctrl->OverExpCtrl.LowLightWeight.fCoeff, i); DCT_ASSERT((no == secsubtag.Size())); } else { redirectOut << "parse error in LINAECTRL OverExpCtrl section (unknow tag: " << secsubTagname << ")" << std::endl; } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorLinearAECtrlV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_LINEARAE_CTRL_TAG_ID, CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID); CalibDb_LinearAE_Attr_V21_t* paec_linctrl = (CalibDb_LinearAE_Attr_V21_t*)param; const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_RAWSTATS_EN_TAG_ID)) { int no = ParseUcharArray(psubchild, &paec_linctrl->RawStatsEn, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if(XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SETPOINT_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_linctrl->SetPoint, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_NIGHTSETPOINT_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_linctrl->NightSetPoint, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_DYSETPOINTEN_TAG_ID)) { uint8_t temp = paec_linctrl->DySetPointEn; ParseUcharArray(psubchild, &temp, subTag.Size()); paec_linctrl->DySetPointEn = (temp == 0) ? false : true; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_EVBIAS_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_linctrl->Evbias, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_DYNAMICSETPOINT_TAG_ID)) { if (!parseEntrySensorAecLinearAeDynamicPointV21(psubchild->ToElement(), paec_linctrl)) { LOGE("parse error in Aec dynamic setpoint(%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_TOLERANCE_IN_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_linctrl->ToleranceIn, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_TOLERANCE_OUT_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_linctrl->ToleranceOut, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_STRATEGYMODE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); #ifdef DEBUG_LOG LOGE("%s(%d): s_value = %s\n", __FUNCTION__, __LINE__, s_value); #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_STRATEGYMODE_LOWLIGHT) { paec_linctrl->StrategyMode = RKAIQ_AEC_STRATEGY_MODE_LOWLIGHT_PRIOR; } else if (s_value == CALIB_SENSOR_AEC_STRATEGYMODE_HIGHLIGHT) { paec_linctrl->StrategyMode = RKAIQ_AEC_STRATEGY_MODE_HIGHLIGHT_PRIOR; } else { paec_linctrl->StrategyMode = RKAIQ_AEC_STRATEGY_MODE_AUTO; redirectOut << "invalid AEC LinAe StrategyMode (" << s_value << ")" << std::endl; } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode *)psubchild; if (paec_linctrl->StrategyMode == RKAIQ_AEC_STRATEGY_MODE_LOWLIGHT_PRIOR) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_STRATEGYMODE_LOWLIGHT); else if (paec_linctrl->StrategyMode == RKAIQ_AEC_STRATEGY_MODE_HIGHLIGHT_PRIOR) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_STRATEGYMODE_HIGHLIGHT); else { pNode->FirstChild()->SetValue("AUTO"); redirectOut << "(XML Wrtie)invalid AEC LinAe StrategyMode (" << paec_linctrl->StrategyMode << ")" << std::endl; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_BACKLIGHT_CONFIG_TAG_ID)) { if (!parseEntrySensorLinearAECtrlBackLightV21(psubchild->ToElement(), paec_linctrl)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINAECTRL_OVEREXP_CONTROL_TAG_ID)) { if (!parseEntrySensorLinearAECtrlOverExpV21(psubchild->ToElement(), paec_linctrl)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHdrAECtrlExpRatioCtrlV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_HDRAECTRL_EXPRATIOCTRL_TAG_ID, CALIB_SENSOR_AEC_V21_HDRAECTRL_TAG_ID); CalibDb_HdrAE_Attr_t* paec_hdrctrl = (CalibDb_HdrAE_Attr_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_EXPRATIOTYPE_TAG_ID)) { char* value = Toupper(subsubTag.Value()); std::string s_value(value); #ifdef DEBUG_LOG redirectOut << "value:" << value << std::endl; redirectOut << s_value << std::endl; #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOTYPE_AUTO) { paec_hdrctrl->ExpRatioType = RKAIQ_HDRAE_RATIOTYPE_MODE_AUTO; } else if (s_value == CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOTYPE_FIX) { paec_hdrctrl->ExpRatioType = RKAIQ_HDRAE_RATIOTYPE_MODE_FIX; } else { paec_hdrctrl->ExpRatioType = RKAIQ_HDRAE_RATIOTYPE_MODE_INVALID; redirectOut << "invalid AEC HdrAe ExpRatioType (" << s_value << ")" << std::endl; } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubsubchild; if (paec_hdrctrl->ExpRatioType == RKAIQ_HDRAE_RATIOTYPE_MODE_AUTO) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOTYPE_AUTO); else if (paec_hdrctrl->ExpRatioType == RKAIQ_HDRAE_RATIOTYPE_MODE_FIX) pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOTYPE_FIX); else { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_EXPRATIOTYPE_AUTO); redirectOut << "(XML Write)invalid AEC HdrAe ExpRatioType (" << paec_hdrctrl->ExpRatioType << ")" << std::endl; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_RATIOEXPDOT_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->RatioExpDot.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_M2SRATIOFIX_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->M2SRatioFix.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_L2MRATIOFIX_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->L2MRatioFix.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_M2SRATIOMAX_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->M2SRatioMax.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_L2MRATIOMAX_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->L2MRatioMax.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { redirectOut << "parse error in AEC HdrAeCtrl (unknow tag: " << subsubTagname << ")" << std::endl; } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHdrAECtrlLframeModeV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_HDRAECTRL_LONGFRMMODE_TAG_ID, CALIB_SENSOR_AEC_V21_HDRAECTRL_TAG_ID); CalibDb_HdrAE_Attr_t* paec_hdrctrl = (CalibDb_HdrAE_Attr_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_LONGFRMMODE_MODE_TAG_ID)) { char* value = Toupper(subsubTag.Value()); std::string s_value(value); #ifdef DEBUG_LOG redirectOut << "value:" << value << std::endl; redirectOut << s_value << std::endl; #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_NORMAL) { paec_hdrctrl->LongfrmMode = RKAIQ_AEC_HDR_LONGFRMMODE_NORMAL; } else if (s_value == CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_LONGFRAME) { paec_hdrctrl->LongfrmMode = RKAIQ_AEC_HDR_LONGFRMMODE_LONG_FRAME; } else if (s_value == CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_AUTO_LONGFRAME) { paec_hdrctrl->LongfrmMode = RKAIQ_AEC_HDR_LONGFRMMODE_AUTO_LONG_FRAME; } else { paec_hdrctrl->LongfrmMode = RKAIQ_AEC_HDR_LONGFRMMODE_NORMAL; redirectOut << "invalid AEC HdrAe LongFrmMode (" << s_value << ")" << std::endl; } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubsubchild; if (paec_hdrctrl->LongfrmMode == RKAIQ_AEC_HDR_LONGFRMMODE_NORMAL) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_NORMAL); } else if (paec_hdrctrl->LongfrmMode == RKAIQ_AEC_HDR_LONGFRMMODE_LONG_FRAME) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_LONGFRAME); } else if (paec_hdrctrl->LongfrmMode == RKAIQ_AEC_HDR_LONGFRMMODE_AUTO_LONG_FRAME) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_AUTO_LONGFRAME); } else { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HDRAECTRL_LONGFRMMODE_NORMAL); redirectOut << "(XML Write)invalid AEC HdrAe LongFrmMode (" << paec_hdrctrl->LongfrmMode << ")" << std::endl; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_LONGFRMMODE_LFRMMODEEXPTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_hdrctrl->LfrmModeExpTh, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_LONGFRMMODE_SFRMMINLINE_TAG_ID)) { int no = ParseUshortArray(psubsubchild, &paec_hdrctrl->SfrmMinLine, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { redirectOut << "parse error in AEC LongFrmMode (unknow tag: " << subsubTagname << ")" << std::endl; } psubsubchild = psubsubchild->NextSibling(); } autoTabBackward(); XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHdrAECtrlLframeCtrlV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_HDRAECTRL_LFRAMECTRL_TAG_ID, CALIB_SENSOR_AEC_V21_HDRAECTRL_TAG_ID); CalibDb_HdrAE_Attr_t* paec_hdrctrl = (CalibDb_HdrAE_Attr_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); autoTabForward(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_OEROILOWTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_hdrctrl->LframeCtrl.OEROILowTh, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_LVHIGHTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_hdrctrl->LframeCtrl.LvHighTh, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_LVLOWTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_hdrctrl->LframeCtrl.LvLowTh, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_LEXPLEVEL_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->LframeCtrl.LExpLevel.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_LSETPOINT_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->LframeCtrl.LSetPoint.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_TARGETLLLUMA_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->LframeCtrl.TargetLLLuma.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_NONOEPDFTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->LframeCtrl.NonOEPdfTh.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_LOWLIGHTPDFTH_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->LframeCtrl.LowLightPdfTh.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { redirectOut << "parse error in AEC HdrAeCtrl LframeCtrl (unknow tag: " << subsubTagname << ")" << std::endl; } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHdrAECtrlMframeCtrlV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_HDRAECTRL_MFRAMECTRL_TAG_ID, CALIB_SENSOR_AEC_V21_HDRAECTRL_TAG_ID); CalibDb_HdrAE_Attr_t* paec_hdrctrl = (CalibDb_HdrAE_Attr_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_MEXPLEVEL_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->MframeCtrl.MExpLevel.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_MSETPOINT_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->MframeCtrl.MSetPoint.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { redirectOut << "parse error in AEC HdrAeCtrl MframeCtrl (unknow tag: " << subsubTagname << ")" << std::endl; } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHdrAECtrlSframeCtrlV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_HDRAECTRL_SFRAMECTRL_TAG_ID, CALIB_SENSOR_AEC_V21_HDRAECTRL_TAG_ID); CalibDb_HdrAE_Attr_t* paec_hdrctrl = (CalibDb_HdrAE_Attr_t*)param; const XMLNode* psubsubchild = pelement->FirstChild(); while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subsubTagname = %s\n", __FUNCTION__, __LINE__, subsubTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_SEXPLEVEL_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->SframeCtrl.SExpLevel.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_HLROIEXPANDEN_TAG_ID)) { uint8_t temp = paec_hdrctrl->SframeCtrl.HLROIExpandEn; int no = ParseUcharArray(psubsubchild, &temp, subsubTag.Size()); paec_hdrctrl->SframeCtrl.HLROIExpandEn = (temp == 0) ? false : true; DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_TARGETHLLUMA_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->SframeCtrl.TargetHLLuma.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_SSETPOINT_TAG_ID)) { int no = ParseFloatArray(psubsubchild, paec_hdrctrl->SframeCtrl.SSetPoint.fCoeff, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_HLLUMATOLERANCE_TAG_ID)) { int no = ParseFloatArray(psubsubchild, &paec_hdrctrl->SframeCtrl.HLLumaTolerance, subsubTag.Size()); DCT_ASSERT((no == subsubTag.Size())); } else { redirectOut << "parse error in AEC HdrAeCtrl SframeCtrl (unknow tag: " << subsubTagname << ")" << std::endl; } psubsubchild = psubsubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHdrAECtrlV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_HDRAECTRL_TAG_ID, CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID); CalibDb_HdrAE_Attr_t* paec_hdrctrl = (CalibDb_HdrAE_Attr_t*)param; const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_TOLERANCE_IN_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_hdrctrl->ToleranceIn, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_TOLERANCE_OUT_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_hdrctrl->ToleranceOut, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_EVBIAS_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_hdrctrl->Evbias, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_STRATEGYMODE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); #ifdef DEBUG_LOG redirectOut << "value:" << value << std::endl; redirectOut << s_value << std::endl; #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_STRATEGYMODE_LOWLIGHT) { paec_hdrctrl->StrategyMode = RKAIQ_AEC_STRATEGY_MODE_LOWLIGHT_PRIOR; } else if (s_value == CALIB_SENSOR_AEC_STRATEGYMODE_HIGHLIGHT) { paec_hdrctrl->StrategyMode = RKAIQ_AEC_STRATEGY_MODE_HIGHLIGHT_PRIOR; } else { paec_hdrctrl->StrategyMode = RKAIQ_AEC_STRATEGY_MODE_AUTO; redirectOut << "invalid AEC HdrAe StrategyMode (" << s_value << ")" << std::endl; } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psubchild; if (paec_hdrctrl->StrategyMode == RKAIQ_AEC_STRATEGY_MODE_LOWLIGHT_PRIOR) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_STRATEGYMODE_LOWLIGHT); } else if (paec_hdrctrl->StrategyMode == RKAIQ_AEC_STRATEGY_MODE_HIGHLIGHT_PRIOR) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_STRATEGYMODE_HIGHLIGHT); } else { pNode->FirstChild()->SetValue("AUTO"); redirectOut << "(XML Write)invalid AEC HdrAe StrategyMode (" << paec_hdrctrl->StrategyMode << ")" << std::endl; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_EXPRATIOCTRL_TAG_ID)) { if (!parseEntrySensorHdrAECtrlExpRatioCtrlV21(psubchild->ToElement(), paec_hdrctrl)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_LUMADISTTH_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_hdrctrl->LumaDistTh, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_LFRAMECTRL_TAG_ID)) { if (!parseEntrySensorHdrAECtrlLframeCtrlV21(psubchild->ToElement(), paec_hdrctrl)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_MFRAMECTRL_TAG_ID)) { if (!parseEntrySensorHdrAECtrlMframeCtrlV21(psubchild->ToElement(), paec_hdrctrl)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_SFRAMECTRL_TAG_ID)) { if (!parseEntrySensorHdrAECtrlSframeCtrlV21(psubchild->ToElement(), paec_hdrctrl)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_LONGFRMMODE_TAG_ID)) { if (!parseEntrySensorHdrAECtrlLframeModeV21(psubchild->ToElement(), paec_hdrctrl)) { LOGE("parse error in Aec (%s)", subTagname.c_str()); return (false); } } else { redirectOut << "parse error in AEC HdrAeCtrl (unknow tag: " << subTagname << ")" << std::endl; } psubchild = psubchild->NextSibling(); } autoTabBackward(); XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecWinScaleV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_WINSCALE_TAG_ID, CALIB_SENSOR_AEC_V21_CALIBPARA_TAG_ID); CalibDb_Aec_CalibPara_t *paec_calib = (CalibDb_Aec_CalibPara_t*)param; const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_WINSCALE_INRAW_TAG_ID)) { Cam1x4FloatMatrix_t tmpVal; int no = ParseFloatArray(psubchild, tmpVal.fCoeff, subTag.Size()); DCT_ASSERT((no == subTag.Size())); DCT_ASSERT((tmpVal.fCoeff[0] >= 0)); DCT_ASSERT((tmpVal.fCoeff[1] >= 0)); DCT_ASSERT((tmpVal.fCoeff[2] <= 1)); DCT_ASSERT((tmpVal.fCoeff[3] <= 1)); paec_calib->InRawWinScale.h_offs = tmpVal.fCoeff[0]; paec_calib->InRawWinScale.v_offs = tmpVal.fCoeff[1]; paec_calib->InRawWinScale.h_size = tmpVal.fCoeff[2]; paec_calib->InRawWinScale.v_size = tmpVal.fCoeff[3]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_WINSCALE_TMORAW_TAG_ID)) { Cam1x4FloatMatrix_t tmpVal; int no = ParseFloatArray(psubchild, tmpVal.fCoeff, subTag.Size()); DCT_ASSERT((no == subTag.Size())); DCT_ASSERT((tmpVal.fCoeff[0] >= 0)); DCT_ASSERT((tmpVal.fCoeff[1] >= 0)); DCT_ASSERT((tmpVal.fCoeff[2] <= 1)); DCT_ASSERT((tmpVal.fCoeff[3] <= 1)); paec_calib->TmoRawWinScale.h_offs = tmpVal.fCoeff[0]; paec_calib->TmoRawWinScale.v_offs = tmpVal.fCoeff[1]; paec_calib->TmoRawWinScale.h_size = tmpVal.fCoeff[2]; paec_calib->TmoRawWinScale.v_size = tmpVal.fCoeff[3]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_WINSCALE_YUVRAW_TAG_ID)) { Cam1x4FloatMatrix_t tmpVal; int no = ParseFloatArray(psubchild, tmpVal.fCoeff, subTag.Size()); DCT_ASSERT((no == subTag.Size())); DCT_ASSERT((tmpVal.fCoeff[0] >= 0)); DCT_ASSERT((tmpVal.fCoeff[1] >= 0)); DCT_ASSERT((tmpVal.fCoeff[2] <= 1)); DCT_ASSERT((tmpVal.fCoeff[3] <= 1)); paec_calib->YuvWinScale.h_offs = tmpVal.fCoeff[0]; paec_calib->YuvWinScale.v_offs = tmpVal.fCoeff[1]; paec_calib->YuvWinScale.h_size = tmpVal.fCoeff[2]; paec_calib->YuvWinScale.v_size = tmpVal.fCoeff[3]; } else { LOGE("%s(%d): parse error in AecWinScale (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecEnvLvCalibV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_ENVLVCALIB_TAG_ID, CALIB_SENSOR_AEC_V21_CALIBPARA_TAG_ID); CalibDb_Aec_CalibPara_t *paec_calib = (CalibDb_Aec_CalibPara_t*)param; const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_ENVLVCALIB_CALIBFNUMBER_TAG_ID)) { int no = ParseFloatArray(psubchild, &paec_calib->stEnvLvCalib.CalibFN, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_ENVLVCALIB_CURVECOEFF_TAG_ID)) { int no = ParseFloatArray(psubchild, paec_calib->stEnvLvCalib.Curve.fCoeff, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else { LOGE("%s(%d): parse error in AecEnvLvCalib (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecCalibPara ( const XMLElement* pelement, void* param, int index ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_CALIBPARA_TAG_ID, CALIB_SENSOR_AEC_V21_TAG_ID); bool ret; const XMLNode* pchild = pelement->FirstChild(); list_head* paec_calib_list = (list_head* )param; CalibDb_Aec_CalibPara_t aec_calib; memset(&aec_calib, 0x00, sizeof(aec_calib)); if (xmlParseReadWrite == XML_PARSER_WRITE) { const CalibDb_Aec_CalibPara_t *paec_calib = NULL; ret = GetAecProfileFromAecCalibListByIdx(paec_calib_list, index, &paec_calib); DCT_ASSERT(ret == true); DCT_ASSERT(paec_calib != NULL); memcpy(&aec_calib, paec_calib, sizeof(CalibDb_Aec_CalibPara_t)); } #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, tagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_CALIBSCENE_TAG_ID)) { ParseString(pchild, aec_calib.scene, sizeof(aec_calib.scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_ENVLVCALIB_TAG_ID)) { if (!parseEntrySensorAecEnvLvCalibV21(pchild->ToElement(), &aec_calib)) { LOGE("parse error in AecCalibPara EnvLvCalib (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_WINSCALE_TAG_ID)) { if (!parseEntrySensorAecWinScaleV21(pchild->ToElement(), &aec_calib)) { LOGE("parse error in AecCalibPara EnvLvCalib (%s)", tagname.c_str()); return (false); } } else { LOGE("%s(%d): parse error in AecCalibPara (unknow tag: %s )\n", __FUNCTION__, __LINE__, tagname.c_str()); } pchild = pchild->NextSibling(); } XML_CHECK_END(); if (xmlParseReadWrite == XML_PARSER_READ) { ret = AddAecCalibProfile2AecCalibList(paec_calib_list, &aec_calib); DCT_ASSERT(ret == true); } autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecTunePara ( const XMLElement* pelement, void* param, int index ) { (void)param; if(param == NULL) { LOGE("%s(%d): (enter)\n", __FUNCTION__, __LINE__); } LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID, CALIB_SENSOR_AEC_V21_TAG_ID); bool ret; const XMLNode* pchild = pelement->FirstChild(); list_head* paec_tune_list = (list_head*)param; CalibDb_Aec_TunePara_t aec_tune; memset(&aec_tune, 0x00, sizeof(aec_tune)); if (xmlParseReadWrite == XML_PARSER_WRITE) { const CalibDb_Aec_TunePara_t *paec_tune = NULL; ret = GetAecProfileFromAecTuneListByIdx(paec_tune_list, index, &paec_tune); DCT_ASSERT(ret == true); DCT_ASSERT(paec_tune != NULL); memcpy(&aec_tune, paec_tune, sizeof(CalibDb_Aec_TunePara_t)); } #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): tagname: [%s]\n", __FUNCTION__, __LINE__, tagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_TUNESCENE_TAG_ID)) { ParseString(pchild, aec_tune.scene, sizeof(aec_tune.scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_ENABLE_TAG_ID)) { ParseUcharArray(pchild, &aec_tune.CommCtrl.enable, tag.Size()); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HISTSTATSMODE_TAG_ID)) { char* value = Toupper(tag.Value()); char* value2 = Toupper(tag.Value()); char* value3 = value2; int i = 0; while (*value != '\0') { if (*value == 'R') { *value2++ = 'R'; i++; } else if (*value == 'G') { *value2++ = 'G'; i++; } else if (*value == 'B') { *value2++ = 'B'; i++; } else if (*value == 'Y') { *value2++ = 'Y'; i++; } value++; } *value2 = '\0'; std::string s_value(value3); #ifdef DEBUG_LOG LOGE("%s(%d): value: %s\n", __FUNCTION__, __LINE__, s_value.c_str()); #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_HISTSTATSMODE_R) { aec_tune.CommCtrl.HistStatsMode = CAM_HIST_MODE_R; } else if (s_value == CALIB_SENSOR_AEC_HISTSTATSMODE_G) { aec_tune.CommCtrl.HistStatsMode = CAM_HIST_MODE_G; } else if (s_value == CALIB_SENSOR_AEC_HISTSTATSMODE_B) { aec_tune.CommCtrl.HistStatsMode = CAM_HIST_MODE_B; } else if (s_value == CALIB_SENSOR_AEC_HISTSTATSMODE_RGB) { aec_tune.CommCtrl.HistStatsMode = CAM_HIST_MODE_RGB_COMBINED; } else if (s_value == CALIB_SENSOR_AEC_HISTSTATSMODE_Y) { aec_tune.CommCtrl.HistStatsMode = CAM_HIST_MODE_Y; } else { aec_tune.CommCtrl.HistStatsMode = CAM_HIST_MODE_INVALID; LOGE("%s(%d): invalid AEC HistStatsMode = %s end\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)pchild; switch (aec_tune.CommCtrl.HistStatsMode) { case CAM_HIST_MODE_R: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HISTSTATSMODE_R); break; case CAM_HIST_MODE_G: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HISTSTATSMODE_G); break; case CAM_HIST_MODE_B: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HISTSTATSMODE_B); break; case CAM_HIST_MODE_RGB_COMBINED: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HISTSTATSMODE_RGB); break; case CAM_HIST_MODE_Y: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_HISTSTATSMODE_Y); break; default: pNode->FirstChild()->SetValue("INVALID"); LOGE("%s(%d): (XML Write)invalid AEC HistStatsMode = %d end\n", __FUNCTION__, __LINE__, aec_tune.CommCtrl.HistStatsMode); break; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_RAWSTATSMODE_TAG_ID)) { char* value = Toupper(tag.Value()); char* value2 = Toupper(tag.Value()); char* value3 = value2; int i = 0; while (*value != '\0') { if (*value == 'R') { *value2++ = 'R'; i++; } else if (*value == 'G') { *value2++ = 'G'; i++; } else if (*value == 'B') { *value2++ = 'B'; i++; } else if (*value == 'Y') { *value2++ = 'Y'; i++; } value++; } *value2 = '\0'; std::string s_value(value3); #ifdef DEBUG_LOG LOGE("%s(%d): value = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); #endif if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_RAWSTATSMODE_R) { aec_tune.CommCtrl.RawStatsMode = CAM_RAWSTATS_MODE_R; } else if (s_value == CALIB_SENSOR_AEC_RAWSTATSMODE_G) { aec_tune.CommCtrl.RawStatsMode = CAM_RAWSTATS_MODE_G; } else if (s_value == CALIB_SENSOR_AEC_RAWSTATSMODE_B) { aec_tune.CommCtrl.RawStatsMode = CAM_RAWSTATS_MODE_B; } else if (s_value == CALIB_SENSOR_AEC_RAWSTATSMODE_Y) { aec_tune.CommCtrl.RawStatsMode = CAM_RAWSTATS_MODE_Y; } else { aec_tune.CommCtrl.RawStatsMode = CAM_RAWSTATS_MODE_INVALID; LOGE("%s(%d): invalid AEC RawStatsMode = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)pchild; switch (aec_tune.CommCtrl.RawStatsMode) { case CAM_RAWSTATS_MODE_R: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_RAWSTATSMODE_R); break; case CAM_RAWSTATS_MODE_G: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_RAWSTATSMODE_G); break; case CAM_RAWSTATS_MODE_B: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_RAWSTATSMODE_B); break; case CAM_RAWSTATS_MODE_Y: pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_RAWSTATSMODE_Y); break; default: pNode->FirstChild()->SetValue("INVALID"); LOGE("%s(%d): (XML Write)invalid AEC RawStatsMode = %d end\n", __FUNCTION__, __LINE__, aec_tune.CommCtrl.RawStatsMode); break; } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_YRANGEMODE_TAG_ID)) { char* value = Toupper(tag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_YRANGEMODE_FULL) { aec_tune.CommCtrl.YRangeMode = CAM_YRANGE_MODE_FULL; } else if (s_value == CALIB_SENSOR_AEC_YRANGEMODE_LIMITED) { aec_tune.CommCtrl.YRangeMode = CAM_YRANGE_MODE_LIMITED; } else { aec_tune.CommCtrl.YRangeMode = CAM_YRANGE_MODE_INVALID; LOGE("%s(%d): invalid AEC YRangeMode = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)pchild; if (aec_tune.CommCtrl.YRangeMode == CAM_YRANGE_MODE_FULL) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_YRANGEMODE_FULL); } else if (aec_tune.CommCtrl.YRangeMode == CAM_YRANGE_MODE_LIMITED) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_YRANGEMODE_LIMITED); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid AEC YRangeMode = %d\n", __FUNCTION__, __LINE__, aec_tune.CommCtrl.YRangeMode); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECRUNINTERVAL_TAG_ID)) { ParseUcharArray(pchild, &aec_tune.CommCtrl.AecRunInterval, tag.Size()); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECOPTYPE_TAG_ID)) { char* value = Toupper(tag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_AEC_AECOPTYPE_AUTO) { aec_tune.CommCtrl.AecOpType = RK_AIQ_OP_MODE_AUTO; } else if (s_value == CALIB_SENSOR_AEC_AECOPTYPE_MANUAL) { aec_tune.CommCtrl.AecOpType = RK_AIQ_OP_MODE_MANUAL; } else { aec_tune.CommCtrl.AecOpType = RK_AIQ_OP_MODE_INVALID; LOGE("%s(%d): invalid AEC AecOpType = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)pchild; if (aec_tune.CommCtrl.AecOpType == RK_AIQ_OP_MODE_AUTO) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_AECOPTYPE_AUTO); } else if (aec_tune.CommCtrl.AecOpType == RK_AIQ_OP_MODE_MANUAL) { pNode->FirstChild()->SetValue(CALIB_SENSOR_AEC_AECOPTYPE_MANUAL); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid AEC AecOpType = %d\n", __FUNCTION__, __LINE__, aec_tune.CommCtrl.AecOpType); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_SYNCTEST_TAG_ID)) { if (!parseEntrySensorAecSyncTestV21(pchild->ToElement(), &aec_tune.CommCtrl.stSyncTest)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECSPEED_TAG_ID)) { if (!parseEntrySensorAecSpeedV21(pchild->ToElement(), &aec_tune.CommCtrl.stAuto.stAeSpeed)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDELAYFRMNUM_TAG_ID)) { if (!parseEntrySensorAecDelayFrmNumV21(pchild->ToElement(), &aec_tune.CommCtrl.stAuto)) { LOGE("parse error in Aec (%s)", tagname.c_str(), &aec_tune.CommCtrl.stAuto); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECDNSWITCH_TAG_ID)) { if (!parseEntrySensorAecDNSwitchV21(pchild->ToElement(), &aec_tune.CommCtrl.stDNSwitch)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_ANTIFLICKER_TAG_ID)) { if (!parseEntrySensorAecAntiFlickerV21(pchild->ToElement(), &aec_tune.CommCtrl.stAntiFlicker)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECFRAMERATEMODE_TAG_ID)) { if (!parseEntrySensorAecFrameRateModeV21(pchild->ToElement(), &aec_tune.CommCtrl.stAuto.stFrmRate)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECINITVALUE_TAG_ID)) { if (!parseEntrySensorAecInitValueV21(pchild->ToElement(), &aec_tune.CommCtrl.stInitExp)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECGRIDWEIGHT_TAG_ID)) { int no = ParseUcharArray(pchild, aec_tune.CommCtrl.GridWeights, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_IRISCTRL_TAG_ID)) { if (!parseEntrySensorAecIrisCtrlV21(pchild->ToElement(), &aec_tune.CommCtrl.stIris)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_MANUALCTRL_TAG_ID)) { if (!parseEntrySensorAecManualCtrlV21(pchild->ToElement(), &aec_tune.CommCtrl.stManual)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_AECROUTE_TAG_ID)) { if (!parseEntrySensorAecRouteV21(pchild->ToElement(), &aec_tune.CommCtrl.stAeRoute)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_LINEARAE_CTRL_TAG_ID)) { if (!parseEntrySensorLinearAECtrlV21(pchild->ToElement(), &aec_tune.LinearAeCtrl)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_HDRAECTRL_TAG_ID)) { if (!parseEntrySensorHdrAECtrlV21(pchild->ToElement(), &aec_tune.HdrAeCtrl)) { LOGE("parse error in Aec (%s)", tagname.c_str()); return (false); } } else { LOGE("parse error in AEC section (unknow tag:%s)", tagname.c_str()); return (false); } pchild = pchild->NextSibling(); } if (xmlParseReadWrite == XML_PARSER_READ) { ret = AddAecTuneProfile2AecTuneList(paec_tune_list, &aec_tune); DCT_ASSERT(ret == true); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAecV21 ( const XMLElement* pelement, void* param ) { (void)param; LOGI("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AEC_V21_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): tagname: [%s]\n", __FUNCTION__, __LINE__, tagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_CALIBPARA_TAG_ID)) { CALIBDB_MODULE_PTR_HELPER_CON(list_head, ae_calib_para); if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAecCalibPara, ae_calib_para, (uint32_t)CALIB_SENSOR_AEC_V21_CALIBPARA_TAG_ID, (uint32_t)CALIB_SENSOR_AEC_V21_TAG_ID)) { LOGE("parse error in AEC CalibPara(%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID)) { CALIBDB_MODULE_PTR_HELPER_CON(list_head, ae_tuning_para); if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAecTunePara, ae_tuning_para, (uint32_t)CALIB_SENSOR_AEC_V21_TUNEPARA_TAG_ID, (uint32_t)CALIB_SENSOR_AEC_V21_TAG_ID)) { LOGE("parse error in AEC TunePara(%s)", tagname.c_str()); return (false); } } else { LOGE("parse error in AEC section (unknow tag:%s)", tagname.c_str()); return (false); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } //sensorinfo bool RkAiqCalibParser::parseEntrySensorInfoGainRange ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_SENSORINFO_GAINRANGE_TAG_ID, CALIB_SENSOR_SENSORINFO_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Sensor_Para_t, sensor); const XMLNode* pthrdsubchild = pelement->FirstChild(); while (pthrdsubchild) { XmlTag secsubTag = XmlTag(pthrdsubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(pthrdsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_GAINRANGE_ISLINEAR_TAG_ID)) { uint8_t tempVal = sensor->GainRange.IsLinear; int no = ParseUcharArray(pthrdsubchild, &tempVal, 1); sensor->GainRange.IsLinear = (tempVal == 0 ? false : true); DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_GAINRANGE_LINEAR_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_READ) { int i = secsubTag.Size(); int no = ParseFloatArray(pthrdsubchild, sensor->GainRange.pGainRange, i); DCT_ASSERT((no == secsubTag.Size())); DCT_ASSERT((no <= CALD_AEC_GAIN_RANGE_MAX_LEN)); DCT_ASSERT(((i % 7) == 0)); sensor->GainRange.array_size = i; } else if (xmlParseReadWrite == XML_PARSER_WRITE) { char str[10]; int i = sensor->GainRange.array_size; DCT_ASSERT(((i % 7) == 0)); snprintf(str, sizeof(str), "[%u 7]", (i / 7)); XMLElement* pElement = (((XMLNode*)pthrdsubchild)->ToElement()); pElement->SetAttribute(CALIB_ATTRIBUTE_SIZE, str); int no = ParseFloatArray(pthrdsubchild, sensor->GainRange.pGainRange, i); DCT_ASSERT((no <= CALD_AEC_GAIN_RANGE_MAX_LEN)); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_GAINRANGE_NONLINEAR_TAG_ID)) { char* value = Toupper(secsubTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SENSOR_SENSORINFO_GAINRANGE_NONLINEAR_DB) { sensor->GainRange.GainMode = RKAIQ_EXPGAIN_MODE_NONLINEAR_DB; } else { sensor->GainRange.GainMode = RKAIQ_EXPGAIN_MODE_NONLINEAR_DB; LOGE("%s(%d): invalid GainRange Mode = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)pthrdsubchild; if (sensor->GainRange.GainMode == RKAIQ_EXPGAIN_MODE_NONLINEAR_DB) { pNode->FirstChild()->SetValue(CALIB_SENSOR_SENSORINFO_GAINRANGE_NONLINEAR_DB); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid GainRange Mode = %d\n", __FUNCTION__, __LINE__, sensor->GainRange.GainMode); } } } pthrdsubchild = pthrdsubchild->NextSibling(); } const XMLNode* pchild = pelement->FirstChild(); XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorInfo ( const XMLElement* pelement, void* param ) { (void)param; LOGI("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_SENSORINFO_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Sensor_Para_t, sensor); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, tagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_GAINRANGE_TAG_ID)) { if (!parseEntrySensorInfoGainRange(pchild->ToElement())) { LOGE("parse error in SensorInfo GainRange (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_TIMEFACTOR_TAG_ID)) { int i = (sizeof(sensor->TimeFactor) / sizeof(sensor->TimeFactor[0])); int no = ParseFloatArray(pchild, sensor->TimeFactor, i); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISHDRTIMEREG_SUMFAC_TAG_ID)) { int i = (sizeof(sensor->CISHdrTimeRegSumFac) / sizeof(sensor->CISHdrTimeRegSumFac.fCoeff[0])); int no = ParseFloatArray(pchild, sensor->CISHdrTimeRegSumFac.fCoeff, i); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISLINTIMEREG_MAXFAC_TAG_ID)) { int i = (sizeof(sensor->CISLinTimeRegMaxFac) / sizeof(sensor->CISLinTimeRegMaxFac.fCoeff[0])); int no = ParseFloatArray(pchild, sensor->CISLinTimeRegMaxFac.fCoeff, i); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISTIMEREG_ODEVITY_TAG_ID)) { int i = (sizeof(sensor->CISTimeRegOdevity) / sizeof(sensor->CISTimeRegOdevity.fCoeff[0])); int no = ParseFloatArray(pchild, sensor->CISTimeRegOdevity.fCoeff, i); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISHDRTIMEREG_ODEVITY_TAG_ID)) { int i = (sizeof(sensor->CISHdrTimeRegOdevity) / sizeof(sensor->CISHdrTimeRegOdevity.fCoeff[0])); int no = ParseFloatArray(pchild, sensor->CISHdrTimeRegOdevity.fCoeff, i); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISTIMEREG_MIN_TAG_ID)) { int no = ParseUshortArray(pchild, &sensor->CISTimeRegMin, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISHDRTIMEREG_MIN_TAG_ID)) { int no = ParseUshortArray(pchild, &sensor->CISHdrTimeRegMin, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISHDRTIMEREG_MAX_TAG_ID)) { int i = (sizeof(sensor->CISHdrTimeRegMax) / sizeof(sensor->CISHdrTimeRegMax.Coeff[0])); int no = ParseShortArray(pchild, sensor->CISHdrTimeRegMax.Coeff, i); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISTIMEREG_UNEQUALEN_TAG_ID)) { int no = ParseUcharArray(pchild, &sensor->CISTimeRegUnEqualEn, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISMINFPS_TAG_ID)) { int no = ParseFloatArray(pchild, &sensor->CISMinFps, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISAGAIN_RANGE_TAG_ID)) { float tempVal[2] = { sensor->CISAgainRange.Min, sensor->CISAgainRange.Max }; int no = ParseFloatArray(pchild, tempVal, tag.Size()); DCT_ASSERT((no == tag.Size())); sensor->CISAgainRange.Min = tempVal[0]; sensor->CISAgainRange.Max = tempVal[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISEXTRAAGAIN_RANGE_TAG_ID)) { float tempVal[2] = { sensor->CISExtraAgainRange.Min, sensor->CISExtraAgainRange.Max }; int no = ParseFloatArray(pchild, tempVal, tag.Size()); DCT_ASSERT((no == tag.Size())); sensor->CISExtraAgainRange.Min = tempVal[0]; sensor->CISExtraAgainRange.Max = tempVal[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISDGAIN_RANGE_TAG_ID)) { float tempVal[2] = { sensor->CISDgainRange.Min, sensor->CISDgainRange.Max }; int no = ParseFloatArray(pchild, tempVal, tag.Size()); DCT_ASSERT((no == tag.Size())); sensor->CISDgainRange.Min = tempVal[0]; sensor->CISDgainRange.Max = tempVal[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISISPDGAIN_RANGE_TAG_ID)) { float tempVal[2] = { sensor->CISIspDgainRange.Min, sensor->CISIspDgainRange.Max }; int no = ParseFloatArray(pchild, tempVal, tag.Size()); DCT_ASSERT((no == tag.Size())); sensor->CISIspDgainRange.Min = tempVal[0]; sensor->CISIspDgainRange.Max = tempVal[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORINFO_CISHDRGAININDSETEN_TAG_ID)) { int no = ParseUcharArray(pchild, &sensor->CISHdrGainIndSetEn, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SENSORSETTING_FLIP_ID)) { unsigned char flip = sensor->flip; int no = ParseUcharArray(pchild, &flip, tag.Size()); DCT_ASSERT((no == tag.Size())); sensor->flip = flip; } else { redirectOut << "parse error in SensorInfo section (unknow tag: " << tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorModuleInfo ( const XMLElement* pelement, void* param ) { (void)param; LOGI("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_MODULEINFO_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Module_Info_t, module); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, tagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MODULEINFO_FNUMBER_TAG_ID)) { int no = ParseFloatArray(pchild, &module->FNumber, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MODULEINFO_EFL_TAG_ID)) { int no = ParseFloatArray(pchild, &module->EFL, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MODULEINFO_LENS_TRANSMITTANCE_TAG_ID)) { int no = ParseFloatArray(pchild, &module->LensT, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MODULEINFO_IRCUT_TRANSMITTANCE_TAG_ID)) { int no = ParseFloatArray(pchild, &module->IRCutT, 1); DCT_ASSERT((no == tag.Size())); } else { redirectOut << "parse error in ModuleInfo section (unknow tag: " << tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAhdrMerge ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AHDR_MERGE_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Amerge_Para_t, amerge); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_ENVLV_TAG_ID)) { int no = ParseFloatArray(pchild, amerge->envLevel, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_MERGE_OECURVE_SMOOTH_TAG_ID)) { int no = ParseFloatArray(pchild, amerge->oeCurve_smooth, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_MERGE_OECURVE_OFFSET_TAG_ID)) { int no = ParseFloatArray(pchild, amerge->oeCurve_offset, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_MERGE_MOVECOEF_TAG_ID)) { int no = ParseFloatArray(pchild, amerge->moveCoef, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_MERGE_MDCURVELM_SMOOTH_TAG_ID)) { int no = ParseFloatArray(pchild, amerge->mdCurveLm_smooth, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_MERGE_MDCURVELM_OFFSET_TAG_ID)) { int no = ParseFloatArray(pchild, amerge->mdCurveLm_offset, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_MERGE_MDCURVEMS_SMOOTH_TAG_ID)) { int no = ParseFloatArray(pchild, amerge->mdCurveMs_smooth, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_MERGE_MDCURVEMS_OFFSET_TAG_ID)) { int no = ParseFloatArray(pchild, amerge->mdCurveMs_offset, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_MERGE_OECURVE_DAMP_TAG_ID)) { int no = ParseFloatArray(pchild, &amerge->oeCurve_damp, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_MERGE_MDCURVELM_DAMP_TAG_ID)) { int no = ParseFloatArray(pchild, &amerge->mdCurveLm_damp, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_MERGE_MDCURVEMS_DAMP_TAG_ID)) { int no = ParseFloatArray(pchild, &amerge->mdCurveMs_damp, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAhdrTmo ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AHDR_TMO_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_TMO_EN_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAhdrTmoEn, param, (uint32_t)CALIB_SENSOR_AHDR_TMO_TMO_EN_TAG_ID, (uint32_t)CALIB_SENSOR_AHDR_TMO_TAG_ID)) { LOGE("parse error in TMO GlobalLuma Setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_GLOBALLUMA_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAhdrTmoGlobalLuma, param, (uint32_t)CALIB_SENSOR_AHDR_TMO_GLOBALLUMA_TAG_ID, (uint32_t)CALIB_SENSOR_AHDR_TMO_TAG_ID)) { LOGE("parse error in TMO GlobalLuma Setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_DETAILSHIGHLIGHT_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAhdrTmoDetailsHighLight, param, (uint32_t)CALIB_SENSOR_AHDR_TMO_DETAILSHIGHLIGHT_TAG_ID, (uint32_t)CALIB_SENSOR_AHDR_TMO_TAG_ID)) { LOGE("parse error in TMO DetailsHighLight Setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_DETAILSLOWLIGHT_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAhdrTmoDetailsLowLight, param, (uint32_t)CALIB_SENSOR_AHDR_TMO_DETAILSLOWLIGHT_TAG_ID, (uint32_t)CALIB_SENSOR_AHDR_TMO_TAG_ID)) { LOGE("parse error in TMO DetailsLowLight Setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_GLOBALTMO_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAhdrGlobalTMO, param, (uint32_t)CALIB_SENSOR_AHDR_TMO_GLOBALTMO_TAG_ID, (uint32_t)CALIB_SENSOR_AHDR_TMO_TAG_ID)) { LOGE("parse error in TMO GlobalTMO Setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_LOCALTMO_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAhdrLocalTMO, param, (uint32_t)CALIB_SENSOR_AHDR_TMO_LOCALTMO_TAG_ID, (uint32_t)CALIB_SENSOR_AHDR_TMO_TAG_ID)) { LOGE("parse error in TMO LocalTMO Setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_DAMP_TAG_ID)) { CALIBDB_MODULE_PTR_HELPER_CON(CalibDb_Atmo_Para_t, atmo); int no = ParseFloatArray(pchild, &atmo->damp, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAhdrTmoEn ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AHDR_TMO_TMO_EN_TAG_ID, CALIB_SENSOR_AHDR_TMO_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Atmo_Para_t, atmo); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_NAME_TAG_ID)) { ParseString(pchild, atmo->en[index].name, sizeof(atmo->en[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_TMO_EN_CELL_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->en[index].en, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAhdrTmoGlobalLuma ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AHDR_TMO_GLOBALLUMA_TAG_ID, CALIB_SENSOR_AHDR_TMO_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Atmo_Para_t, atmo); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_NAME_TAG_ID)) { ParseString(pchild, atmo->luma[index].name, sizeof(atmo->luma[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_GLOBALLUMAMODE_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->luma[index].GlobalLumaMode, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_ENVLV_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->luma[index].envLevel, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->luma[index].ISO, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TOLERANCE_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->luma[index].Tolerance, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_GLOBALLUMA_GLOBALLUMA_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->luma[index].globalLuma, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAhdrTmoDetailsHighLight ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AHDR_TMO_DETAILSHIGHLIGHT_TAG_ID, CALIB_SENSOR_AHDR_TMO_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Atmo_Para_t, atmo); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_NAME_TAG_ID)) { ParseString(pchild, atmo->HighLight[index].name, sizeof(atmo->HighLight[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_DETAILSHIGHLIGHTMODE_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->HighLight[index].DetailsHighLightMode, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_OEPDF_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->HighLight[index].OEPdf, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_ENVLV_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->HighLight[index].EnvLv, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TOLERANCE_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->HighLight[index].Tolerance, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_DETAILSHIGHLIGHT_DETAILSHIGHLIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->HighLight[index].detailsHighLight, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAhdrTmoDetailsLowLight ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AHDR_TMO_DETAILSLOWLIGHT_TAG_ID, CALIB_SENSOR_AHDR_TMO_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Atmo_Para_t, atmo); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_NAME_TAG_ID)) { ParseString(pchild, atmo->LowLight[index].name, sizeof(atmo->LowLight[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_DETAILSLOWLIGHTMODE_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->LowLight[index].DetailsLowLightMode, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_FOCUSLUMA_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->LowLight[index].FocusLuma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_DARKPDF_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->LowLight[index].DarkPdf, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->LowLight[index].ISO, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TOLERANCE_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->LowLight[index].Tolerance, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_DETAILSLOWLIGHT_DETAILSLOWLIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->LowLight[index].detailsLowLight, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAhdrLocalTMO ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AHDR_TMO_LOCALTMO_TAG_ID, CALIB_SENSOR_AHDR_TMO_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Atmo_Para_t, atmo); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_NAME_TAG_ID)) { ParseString(pchild, atmo->LocalTMO[index].name, sizeof(atmo->LocalTMO[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_LOCALTMOMODE_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->LocalTMO[index].LocalTMOMode, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_DYNAMICRANGE_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->LocalTMO[index].DynamicRange, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_ENVLV_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->LocalTMO[index].EnvLv, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TOLERANCE_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->LocalTMO[index].Tolerance, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_LOCALTMO_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->LocalTMO[index].Strength, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAhdrGlobalTMO ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AHDR_TMO_GLOBALTMO_TAG_ID, CALIB_SENSOR_AHDR_TMO_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Atmo_Para_t, atmo); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_NAME_TAG_ID)) { ParseString(pchild, atmo->GlobaTMO[index].name, sizeof(atmo->GlobaTMO[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_GLOBALTMO_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->GlobaTMO[index].en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_GLOBALTMO_IIR_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->GlobaTMO[index].iir, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_GLOBALTMO_MODE_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->GlobaTMO[index].mode, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_GLOBALTMO_DYNAMICRANGE_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->GlobaTMO[index].DynamicRange, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_GLOBALTMO_ENVLV_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->GlobaTMO[index].EnvLv, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_GLOBALTMO_TOLERANCE_TAG_ID)) { int no = ParseFloatArray(pchild, &atmo->GlobaTMO[index].Tolerance, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AHDR_TMO_GLOBALTMO_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, atmo->GlobaTMO[index].Strength, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDrc ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_DRC_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Adrc_Para_t, adrc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_CALIBPARA_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorDrcCalibPara, param, (uint32_t)CALIB_SENSOR_DRC_CALIBPARA_TAG_ID, (uint32_t)CALIB_SENSOR_DRC_TAG_ID)) { LOGE("parse error in Drc CalibPara Setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_TUNINGPARA_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorDrcTuningPara, param, (uint32_t)CALIB_SENSOR_DRC_TUNINGPARA_TAG_ID, (uint32_t)CALIB_SENSOR_DRC_TAG_ID)) { LOGE("parse error in Drc TuningPara Setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorDrcCalibPara ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DRC_CALIBPARA_TAG_ID, CALIB_SENSOR_DRC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Adrc_Para_t, adrc); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_SCENE_TAG_ID)) { ParseString(pchild, adrc->calib[index].scene, sizeof(adrc->calib[index].scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_POSITION_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_position, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_OFFSET_POW2_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_offset_pow2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_LPDETAIL_RATIO_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_lpdetail_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_HPDETAIL_RATIO_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_hpdetail_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_WEIPRE_FRAME_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_weipre_frame, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_WEICUR_PIX_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_weicur_pix, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_EDGE_SCL_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_edge_scl, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_MOTION_SCL_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_motion_scl, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_FORCE_SGM_INV0_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_force_sgm_inv0, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_SPACE_SGM_INV0_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_space_sgm_inv0, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_SPACE_SGM_INV1_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_space_sgm_inv1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_RANGE_SGM_INV0_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_range_sgm_inv0, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_RANGE_SGM_INV1_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_range_sgm_inv1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_WEIG_BILAT_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_weig_bilat, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_WEIG_MAXL_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_weig_maxl, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_MIN_OGAIN_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_min_ogain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_IIR_FRAME_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_iir_frame, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_GAIN_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->calib[index].sw_drc_gain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_SCALE_Y0_TAG_ID)) { int no = ParseIntArray(pchild, adrc->calib[index].sw_drc_scale_y, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDrcTuningPara ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DRC_TUNINGPARA_TAG_ID, CALIB_SENSOR_DRC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Adrc_Para_t, adrc); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_SCENE_TAG_ID)) { ParseString(pchild, adrc->tuning[index].scene, sizeof(adrc->tuning[index].scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_POSITION_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_position, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_OFFSET_POW2_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_offset_pow2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_LPDETAIL_RATIO_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_lpdetail_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_HPDETAIL_RATIO_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_hpdetail_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_WEIPRE_FRAME_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_weipre_frame, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_WEICUR_PIX_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_weicur_pix, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_EDGE_SCL_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_edge_scl, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_MOTION_SCL_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_motion_scl, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_FORCE_SGM_INV0_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_force_sgm_inv0, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_SPACE_SGM_INV0_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_space_sgm_inv0, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_SPACE_SGM_INV1_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_space_sgm_inv1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_RANGE_SGM_INV0_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_range_sgm_inv0, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_RANGE_SGM_INV1_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_range_sgm_inv1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_WEIG_BILAT_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_weig_bilat, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_WEIG_MAXL_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_weig_maxl, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_MIN_OGAIN_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_min_ogain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_IIR_FRAME_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_iir_frame, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_GAIN_TAG_ID)) { int no = ParseIntArray(pchild, &adrc->tuning[index].sw_drc_gain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DRC_SCALE_Y0_TAG_ID)) { int no = ParseIntArray(pchild, adrc->tuning[index].sw_drc_scale_y, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorBlcModeCell ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); int index = *((int*)param); XML_CHECK_START(CALIB_SENSOR_BLC_MODE_CELL_TAG_ID, CALIB_SENSOR_BLC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Blc_t, blc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BLC_MODE_NAME_TAG_ID)) { ParseString(pchild, blc->mode_cell[index].name, sizeof(blc->mode_cell[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BLC_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, blc->mode_cell[index].iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BLC_BLACK_LEVEL_TAG_ID)) { int no = ParseFloatArray(pchild, (float *)blc->mode_cell[index].level, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorBlc ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_BLC_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Blc_t, blc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BLC_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &blc->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BLC_MODE_CELL_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorBlcModeCell, param, (uint32_t)CALIB_SENSOR_BLC_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_BLC_TAG_ID)) { LOGE("parse error in blc mode cell (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorLut3d ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_LUT3D_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Lut3d_t, lut3d); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LUT3D_ENABLE_TAG_ID)) { unsigned char enable = lut3d->enable; int no = ParseUcharArray(pchild, &enable, tag.Size()); DCT_ASSERT((no == tag.Size())); lut3d->enable = enable; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LUT3D_R_LUT_TAG_ID)) { int no = ParseUshortArray(pchild, lut3d->look_up_table_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LUT3D_G_LUT_TAG_ID)) { int no = ParseUshortArray(pchild, lut3d->look_up_table_g, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LUT3D_B_LUT_TAG_ID)) { int no = ParseUshortArray(pchild, lut3d->look_up_table_b, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorDpcc ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_DPCC_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dpcc_t, dpcc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &dpcc->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_VERSION_TAG_ID)) { ParseString(pchild, dpcc->version, sizeof(dpcc->version)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_FAST_MODE_TAG_ID)) { if (!parseEntrySensorDpccFastMode(pchild->ToElement())) { LOGE("parse error in dpcc Fast Mode (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_EXPERT_MODE_TAG_ID)) { if (!parseEntrySensorDpccExpertMode(pchild->ToElement())) { LOGE("parse error in dpcc Expert Mode (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_TAG_ID)) { if (!parseEntrySensorDpccPdaf(pchild->ToElement())) { LOGE("parse error in dpcc pdaf (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SENSOR_TAG_ID)) { if (!parseEntrySensorDpccSensor(pchild->ToElement())) { LOGE("parse error in DPCC Sensor (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorDpccFastMode ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_DPCC_FAST_MODE_TAG_ID, CALIB_SENSOR_DPCC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dpcc_t, dpcc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_FAST_MODE_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &dpcc->fast.fast_mode_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_FAST_MODE_ISO_TAG_ID)) { int no = ParseIntArray(pchild, dpcc->fast.ISO, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_FAST_MODE_SINGLE_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &dpcc->fast.fast_mode_single_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_FAST_MODE_SINGLE_LEVEL_TAG_ID)) { int no = ParseIntArray(pchild, dpcc->fast.fast_mode_single_level, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_FAST_MODE_DOUBLE_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &dpcc->fast.fast_mode_double_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_FAST_MODE_DOUBLE_LEVEL_TAG_ID)) { int no = ParseIntArray(pchild, dpcc->fast.fast_mode_double_level, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_FAST_MODE_TRIPLE_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &dpcc->fast.fast_mode_triple_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_FAST_MODE_TRIPLE_LEVEL_TAG_ID)) { int no = ParseIntArray(pchild, dpcc->fast.fast_mode_triple_level, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorDpccExpertMode ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_DPCC_EXPERT_MODE_TAG_ID, CALIB_SENSOR_DPCC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dpcc_t, dpcc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, dpcc->expert.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_STAGE1_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->expert.stage1_Enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_GRAYSCALE_MODE_TAG_ID)) { int no = ParseUcharArray(pchild, &dpcc->expert.grayscale_mode, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RK_OUT_SEL_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->expert.rk_out_sel, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_DPCC_OUT_SEL_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->expert.dpcc_out_sel, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_STAGE1_RB_3X3_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->expert.stage1_rb_3x3, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_STAGE1_G_3X3_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->expert.stage1_g_3x3, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_STAGE1_INC_RB_CENTER_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->expert.stage1_inc_rb_center, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_STAGE1_INC_G_CENTER_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->expert.stage1_inc_g_center, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_STAGE1_USE_FIX_SET_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->expert.stage1_use_fix_set, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_STAGE1_USE_SET1_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->expert.stage1_use_set1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_STAGE1_USE_SET2_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->expert.stage1_use_set2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_STAGE1_USE_SET3_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->expert.stage1_use_set3, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SET_CELL_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorDpccSetCell, param, (uint32_t)CALIB_SENSOR_DPCC_SET_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_DPCC_EXPERT_MODE_TAG_ID)) { LOGE("parse error in dpcc set cell (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_TAG_ID)) { if (!parseEntrySensorDpccPdaf(pchild->ToElement())) { LOGE("parse error in dpcc pdaf (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SENSOR_TAG_ID)) { if (!parseEntrySensorDpccSensor(pchild->ToElement())) { LOGE("parse error in DPCC Sensor (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorDpccSetCell ( const XMLElement* pelement, void* param ) { LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DPCC_SET_CELL_TAG_ID, CALIB_SENSOR_DPCC_EXPERT_MODE_TAG_ID); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SET_CELL_RK_TAG_ID)) { if (!parseEntrySensorDpccSetCellRK(pchild->ToElement(), index)) { LOGE("parse error in dpcc set cell RK (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SET_CELL_LC_TAG_ID)) { if (!parseEntrySensorDpccSetCellLC(pchild->ToElement(), index)) { LOGE("parse error in dpcc set cell LC (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SET_CELL_PG_TAG_ID)) { if (!parseEntrySensorDpccSetCellPG(pchild->ToElement(), index)) { LOGE("parse error in dpcc set cell PG (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SET_CELL_RND_TAG_ID)) { if (!parseEntrySensorDpccSetCellRND(pchild->ToElement(), index)) { LOGE("parse error in dpcc set cell RND (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SET_CELL_RG_TAG_ID)) { if (!parseEntrySensorDpccSetCellRG(pchild->ToElement(), index)) { LOGE("parse error in dpcc set cell RG (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SET_CELL_RO_TAG_ID)) { if (!parseEntrySensorDpccSetCellRO(pchild->ToElement(), index)) { LOGE("parse error in dpcc set cell RO (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDpccSetCellRK ( const XMLElement* pelement, int index ) { LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DPCC_SET_CELL_RK_TAG_ID, CALIB_SENSOR_DPCC_SET_CELL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dpcc_t, dpcc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RK_RED_BLUE_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rk.rb_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RK_GREEN_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rk.g_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RK_RED_BLUE_SW_MINDIS_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rk.rb_sw_mindis, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RK_GREEN_SW_MINDIS_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rk.g_sw_mindis, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RK_SW_DIS_SCALE_MIN_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rk.sw_dis_scale_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RK_SW_DIS_SCALE_MAX_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rk.sw_dis_scale_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDpccSetCellLC ( const XMLElement* pelement, int index ) { LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DPCC_SET_CELL_LC_TAG_ID, CALIB_SENSOR_DPCC_SET_CELL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dpcc_t, dpcc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_LC_RED_BLUE_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].lc.rb_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_LC_GREEN_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].lc.g_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_LC_RED_BLUE_LINE_MAD_FAC_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].lc.rb_line_mad_fac, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_LC_GREEN_LINE_MAD_FAC_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].lc.g_line_mad_fac, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_LC_RED_BLUE_LINE_THR_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].lc.rb_line_thr, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_LC_GREEN_LINE_THR_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].lc.g_line_thr, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDpccSetCellPG ( const XMLElement* pelement, int index ) { LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DPCC_SET_CELL_PG_TAG_ID, CALIB_SENSOR_DPCC_SET_CELL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dpcc_t, dpcc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PG_RED_BLUE_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].pg.rb_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PG_GREEN_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].pg.g_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PG_RED_BLUE_FAC_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].pg.rb_pg_fac, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PG_GREEN_FAC_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].pg.g_pg_fac, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDpccSetCellRND ( const XMLElement* pelement, int index ) { LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DPCC_SET_CELL_RND_TAG_ID, CALIB_SENSOR_DPCC_SET_CELL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dpcc_t, dpcc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RND_RED_BLUE_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rnd.rb_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RND_GREEN_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rnd.g_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RND_RED_BLUE_THR_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rnd.rb_rnd_thr, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RND_GREEN_THR_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rnd.g_rnd_thr, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RND_RED_BLUE_OFFS_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rnd.rb_rnd_offs, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RND_GREEN_OFFS_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rnd.g_rnd_offs, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDpccSetCellRG ( const XMLElement* pelement, int index ) { LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DPCC_SET_CELL_RG_TAG_ID, CALIB_SENSOR_DPCC_SET_CELL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dpcc_t, dpcc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RG_RED_BLUE_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rg.rb_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RG_GREEN_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rg.g_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RG_RED_BLUE_FAC_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rg.rb_rg_fac, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RG_GREEN_FAC_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].rg.g_rg_fac, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDpccSetCellRO ( const XMLElement* pelement, int index ) { LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DPCC_SET_CELL_RO_TAG_ID, CALIB_SENSOR_DPCC_SET_CELL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dpcc_t, dpcc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RO_RED_BLUE_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].ro.rb_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RO_GREEN_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].ro.g_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RO_RED_BLUE_LIM_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].ro.rb_ro_lim, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_RO_GREEN_LIM_TAG_ID)) { int no = ParseUcharArray(pchild, (uint8_t *)dpcc->expert.set[index].ro.g_ro_lim, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDpccPdaf ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_DPCC_PDAF_TAG_ID, CALIB_SENSOR_DPCC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dpcc_t, dpcc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &dpcc->pdaf.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_POINT_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->pdaf.point_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_OFFSETX_TAG_ID)) { int no = ParseUshortArray(pchild, &dpcc->pdaf.offsetx, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_OFFSETY_TAG_ID)) { int no = ParseUshortArray(pchild, &dpcc->pdaf.offsety, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_WRAPX_TAG_ID)) { int no = ParseUcharArray(pchild, &dpcc->pdaf.wrapx, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_WRAPY_TAG_ID)) { int no = ParseUcharArray(pchild, &dpcc->pdaf.wrapy, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_WRAPX_NUM_TAG_ID)) { int no = ParseUshortArray(pchild, &dpcc->pdaf.wrapx_num, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_WRAPY_NUM_TAG_ID)) { int no = ParseUshortArray(pchild, &dpcc->pdaf.wrapy_num, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_POINT_X_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->pdaf.point_x, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_POINT_Y_TAG_ID)) { int no = ParseUcharArray(pchild, dpcc->pdaf.point_y, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_PDAF_POINT_FORWARD_MED_TAG_ID)) { int no = ParseUcharArray(pchild, &dpcc->pdaf.forward_med, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorDpccSensor ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_DPCC_SENSOR_TAG_ID, CALIB_SENSOR_DPCC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dpcc_t, dpcc); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string Tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(Tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SENSOR_AUTO_ENABLE_TAG_ID)) { int no = ParseFloatArray(pchild, &dpcc->sensor_dpcc.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SENSOR_MAX_LEVEL_TAG_ID)) { int no = ParseFloatArray(pchild, &dpcc->sensor_dpcc.max_level, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, dpcc->sensor_dpcc.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SENSOR_LEVEL_SINGLE_TAG_ID)) { int no = ParseFloatArray(pchild, dpcc->sensor_dpcc.level_single, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DPCC_SENSOR_LEVEL_MULTIPLE_TAG_ID)) { int no = ParseFloatArray(pchild, dpcc->sensor_dpcc.level_multiple, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorBayerNrSetting ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_BayerNr_ModeCell_t *pModeCell = (CalibDb_BayerNr_ModeCell_t *)param; XML_CHECK_START(CALIB_SENSOR_BAYERNR_SETTING_TAG_ID, CALIB_SENSOR_BAYERNR_MODE_CELL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_BayerNr_2_t, bayerNr); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_SETTING_SNR_MODE_TAG_ID)) { ParseString(pchild, pModeCell->setting[index].snr_mode, sizeof(pModeCell->setting[index].snr_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_SETTING_SENSOR_MODE_TAG_ID)) { ParseString(pchild, pModeCell->setting[index].sensor_mode, sizeof(pModeCell->setting[index].sensor_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_FILTPARA_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].filtPara, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_LURATIO_TAG_ID)) { int no = ParseFloatArray(pchild, (float*)pModeCell->setting[index].luRatio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_FIXW_TAG_ID)) { int no = ParseFloatArray(pchild, (float*)pModeCell->setting[index].fixW, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_LULEVEL_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].luLevel, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_LULEVELVAL_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].luLevelVal, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_LAMDA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].lamda, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_GAUSS_EN_TAG_ID)) { int no = ParseUcharArray(pchild, &pModeCell->setting[index].gauss_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_RGAINOFF_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].RGainOff, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_RGAINFILP_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].RGainFilp, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_BGAINOFF_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].BGainOff, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_BGAINFILP_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].BGainFilp, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_EDGESOFTNESS_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].edgeSoftness, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_GAUSSWEIGHT0_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].gaussWeight0, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_GAUSSWEIGHT1_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].gaussWeight1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_BILEDGEFILTER_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].bilEdgeFilter, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_BILFILTERSTRENG_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].bilFilterStreng, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_BILEDGESOFTRATIO_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].bilEdgeSoftRatio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_BILREGWGT_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].bilRegWgt, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_BILEDGESOFT_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].bilEdgeSoft, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorBayerNrModeCell ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); int index = *((int*)param); XML_CHECK_START(CALIB_SENSOR_BAYERNR_MODE_CELL_TAG_ID, CALIB_SENSOR_BAYERNR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_BayerNr_2_t, bayerNr); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_MODE_NAME_TAG_ID)) { ParseString(pchild, bayerNr->mode_cell[index].name, sizeof(bayerNr->mode_cell[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_SETTING_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorBayerNrSetting, &bayerNr->mode_cell[index], (uint32_t)CALIB_SENSOR_BAYERNR_SETTING_TAG_ID, (uint32_t)CALIB_SENSOR_BAYERNR_MODE_CELL_TAG_ID)) { LOGE("parse error in BayerNR setting (%s)\n", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorBayerNr ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_BAYERNR_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_BayerNr_2_t, bayerNr); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &bayerNr->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_VERSION_TAG_ID)) { ParseString(pchild, bayerNr->version, sizeof(bayerNr->version)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_MODE_CELL_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_READ) { int cell_size = 0; parseCellNoElement(pchild->ToElement(), tag.Size(), cell_size); bayerNr->mode_num = cell_size; bayerNr->mode_cell = (CalibDb_BayerNr_ModeCell_t *)malloc(cell_size * sizeof(CalibDb_BayerNr_ModeCell_t)); memset(bayerNr->mode_cell, 0x00, cell_size * sizeof(CalibDb_BayerNr_ModeCell_t)); if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorBayerNrModeCell, param, (uint32_t)CALIB_SENSOR_BAYERNR_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_BAYERNR_TAG_ID)) { LOGE("parse error in BayerNR Mode cell (%s)\n", tagname.c_str()); return (false); } } else { if (!parseEntryCell3((XMLElement *)pchild->ToElement(), tag.Size(), bayerNr->mode_num, &RkAiqCalibParser::parseEntrySensorBayerNrModeCell, param, (uint32_t)CALIB_SENSOR_BAYERNR_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_BAYERNR_TAG_ID)) { LOGE("parse error in BayerNR Mode cell (%s)\n", tagname.c_str()); return (false); } } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorLsc ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_LSC_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Lsc_t, lsc); unsigned char tableNum = lsc->tableAllNum; lsc->tableAllNum = 0; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_ENABLE_TAG_ID)) { uint8_t enable = lsc->enable; int no = ParseUcharArray(pchild, &enable, tag.Size()); DCT_ASSERT((no == tag.Size())); lsc->enable = bool(enable); //lsc->damp_enable = damp_enable; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_DAMP_ENABLE_TAG_ID)) { uint8_t damp_enable = lsc->damp_enable; int no = ParseUcharArray(pchild, &damp_enable, tag.Size()); DCT_ASSERT((no == tag.Size())); lsc->damp_enable = bool(damp_enable); //lsc->damp_enable = damp_enable; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_ALSCCOF_TAG_ID)) { if (!parseEntrySensorLscAlscCof(pchild->ToElement())) { return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_READ) // read { lsc->tableAll = (CalibDb_LscTableProfile_t*)malloc(sizeof(CalibDb_LscTableProfile_t) * tag.Size()); memset(lsc->tableAll, 0, sizeof(CalibDb_LscTableProfile_t) * tag.Size()); if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorLscTableAll, param, (uint32_t)CALIB_SENSOR_LSC_TABLEALL_TAG_ID, (uint32_t)CALIB_SENSOR_LSC_TAG_ID)) { LOGE("parse error in LSC tableAll (%s)", tagname.c_str()); return (false); } } else { if (!parseEntryCell3((XMLElement *)pchild->ToElement(), tag.Size(), tableNum, &RkAiqCalibParser::parseEntrySensorLscTableAll, param, (uint32_t)CALIB_SENSOR_LSC_TABLEALL_TAG_ID, (uint32_t)CALIB_SENSOR_LSC_TAG_ID)) { LOGE("parse error in LSC tableAll (%s)", tagname.c_str()); return (false); } } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorLscAlscCof ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_LSC_ALSCCOF_TAG_ID, CALIB_SENSOR_LSC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Lsc_t, lsc); unsigned char lightNum = 0; for (int i = 0; i < USED_FOR_CASE_MAX; i++) lightNum += lsc->aLscCof.illuNum[i]; memset(lsc->aLscCof.illuNum, 0, sizeof(lsc->aLscCof.illuNum)); unsigned char resNum = lsc->aLscCof.lscResNum; lsc->aLscCof.lscResNum = 0; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_ALSCCOF_IllALL_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_READ) // read { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorLscAlscCofIllAll, param, (uint32_t)CALIB_SENSOR_LSC_ALSCCOF_IllALL_TAG_ID, (uint32_t)CALIB_SENSOR_LSC_ALSCCOF_TAG_ID)) { LOGE("parse error in LSC aLscCof illAll (%s)", tagname.c_str()); return (false); } } else { if (!parseEntryCell3((XMLElement *)pchild->ToElement(), tag.Size(), lightNum, &RkAiqCalibParser::parseEntrySensorLscAlscCofIllAll, param, (uint32_t)CALIB_SENSOR_LSC_ALSCCOF_IllALL_TAG_ID, (uint32_t)CALIB_SENSOR_LSC_ALSCCOF_TAG_ID)) { LOGE("parse error in LSC aLscCof illAll (%s)", tagname.c_str()); return (false); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_ALSCCOF_RESALL_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_READ) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorLscAlscCofResAll, param, (uint32_t)CALIB_SENSOR_LSC_ALSCCOF_RESALL_TAG_ID, (uint32_t)CALIB_SENSOR_LSC_ALSCCOF_TAG_ID)) { LOGE("parse error in LSC aLscCof resolutionAll(%s)", tagname.c_str()); return (false); } } else { if (!parseEntryCell3((XMLElement *)pchild->ToElement(), tag.Size(), resNum, &RkAiqCalibParser::parseEntrySensorLscAlscCofResAll, param, (uint32_t)CALIB_SENSOR_LSC_ALSCCOF_RESALL_TAG_ID, (uint32_t)CALIB_SENSOR_LSC_ALSCCOF_TAG_ID)) { LOGE("parse error in LSC aLscCof resolutionAll(%s)", tagname.c_str()); return (false); } } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorLscAlscCofResAll ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_LSC_ALSCCOF_RESALL_TAG_ID, CALIB_SENSOR_LSC_ALSCCOF_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Lsc_t, lsc); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_ALSCCOF_RESALL_NAME_TAG_ID)) { ParseString(pchild, lsc->aLscCof.lscResName[index], sizeof(lsc->aLscCof.lscResName[index]));//check } pchild = pchild->NextSibling(); } XML_CHECK_END(); lsc->aLscCof.lscResNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorLscAlscCofIllAll ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_LSC_ALSCCOF_IllALL_TAG_ID, CALIB_SENSOR_LSC_ALSCCOF_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Lsc_t, lsc); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); int no1 = 0; int no2 = 0; int usedForCase = 0; while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_ALSCCOF_CASE_TAG_ID)) { usedForCase = lsc->aLscCof.usedForCaseAll[index]; int no = ParseIntArray(pchild, &usedForCase, tag.Size()); lsc->aLscCof.usedForCaseAll[index] = usedForCase; index = lsc->aLscCof.illuNum[usedForCase]; DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_ALSCCOF_NAME_TAG_ID)) { ParseString(pchild, lsc->aLscCof.illAll[usedForCase][index].illuName, sizeof(lsc->aLscCof.illAll[usedForCase][index].illuName)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_ALSCCOF_WBGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, lsc->aLscCof.illAll[usedForCase][index].awbGain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_ALSCCOF_TABLEUSED_TAG_ID)) { char* lsc_profiles = Toupper(value); int no = ParseLscProfileArray(pchild, lsc->aLscCof.illAll[usedForCase][index].tableUsed, LSC_PROFILES_NUM_MAX); DCT_ASSERT((no <= LSC_PROFILES_NUM_MAX)); lsc->aLscCof.illAll[usedForCase][index].tableUsedNO = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_ALSCCOF_GAINS_TAG_ID)) { no1 = ParseFloatArray(pchild, lsc->aLscCof.illAll[usedForCase][index].vignettingCurve.pSensorGain, tag.Size()); lsc->aLscCof.illAll[usedForCase][index].vignettingCurve.arraySize = no1; DCT_ASSERT((no1 == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_ALSCCOF_VIG_TAG_ID)) { no2 = ParseFloatArray(pchild, lsc->aLscCof.illAll[usedForCase][index].vignettingCurve.pVignetting, tag.Size()); lsc->aLscCof.illAll[usedForCase][index].vignettingCurve.arraySize = no2; DCT_ASSERT((no2 == tag.Size())); } else { LOGW("UNKNOWN tag: %s", tagname.c_str()); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT(no1 == no2); lsc->aLscCof.illuNum[usedForCase]++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } static int AwbLscGradientCheck ( CalibDb_LscTableProfile_t* pLscProfile ) { uint32_t i; LOGI("%s: (enter)\n", __FUNCTION__); if (NULL == pLscProfile) { return (1); } if (0 < pLscProfile->LscYo) { for (i = 0; i < (sizeof(pLscProfile->LscYGradTbl) / sizeof(pLscProfile->LscYGradTbl[0])); ++i) { if (0 < pLscProfile->LscYSizeTbl[i]) { pLscProfile->LscYGradTbl[i] = (uint16_t)((double)(1UL << pLscProfile->LscYo) / pLscProfile->LscYSizeTbl[i] + 0.5); } else { return (2); } } } else { memset(pLscProfile->LscYGradTbl, 0, sizeof(pLscProfile->LscYGradTbl)); } if (0 < pLscProfile->LscXo) { for (i = 0; i < (sizeof(pLscProfile->LscXGradTbl) / sizeof(pLscProfile->LscXGradTbl[0])); ++i) { if (0 < pLscProfile->LscXSizeTbl[i]) { pLscProfile->LscXGradTbl[i] = (uint16_t)((double)(1UL << pLscProfile->LscXo) / pLscProfile->LscXSizeTbl[i] + 0.5); } else { return (2); } } } else { memset(pLscProfile->LscXGradTbl, 0, sizeof(pLscProfile->LscXGradTbl)); } LOGI("%s: (exit)\n", __FUNCTION__); return (0); } bool RkAiqCalibParser::parseEntrySensorLscTableAll ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_LSC_TABLEALL_TAG_ID, CALIB_SENSOR_LSC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Lsc_t, lsc); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_NAME_TAG_ID)) { ParseString(pchild, lsc->tableAll[index].name, sizeof(lsc->tableAll[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_RESOLUTION_TAG_ID)) { ParseString(pchild, lsc->tableAll[index].resolution, sizeof(lsc->tableAll[index].resolution)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_ILLUMINATION_TAG_ID)) { ParseString(pchild, lsc->tableAll[index].illumination, sizeof(lsc->tableAll[index].illumination)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_LSC_SECTORS_TAG_ID)) { int no = ParseUshortArray(pchild, &lsc->tableAll[index].LscSectors, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_LSC_NO_TAG_ID)) { int no = ParseUshortArray(pchild, &lsc->tableAll[index].LscNo, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_LSC_XO_TAG_ID)) { int no = ParseUshortArray(pchild, &lsc->tableAll[index].LscXo, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_LSC_YO_TAG_ID)) { int no = ParseUshortArray(pchild, &lsc->tableAll[index].LscYo, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_LSC_SECTOR_SIZE_X_TAG_ID)) { int no = ParseUshortArray(pchild, lsc->tableAll[index].LscXSizeTbl, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_LSC_SECTOR_SIZE_Y_TAG_ID)) { int no = ParseUshortArray(pchild, lsc->tableAll[index].LscYSizeTbl, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_LSC_VIGNETTING_TAG_ID)) { int no = ParseFloatArray(pchild, &lsc->tableAll[index].vignetting, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_LSC_SAMPLES_RED_TAG_ID)) { int no = ParseUshortArray(pchild, lsc->tableAll[index].LscMatrix[0].uCoeff, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_LSC_SAMPLES_GREENR_TAG_ID)) { int no = ParseUshortArray(pchild, lsc->tableAll[index].LscMatrix[1].uCoeff, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_LSC_SAMPLES_GREENB_TAG_ID)) { int no = ParseUshortArray(pchild, lsc->tableAll[index].LscMatrix[2].uCoeff, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LSC_TABLEALL_LSC_SAMPLES_BLUE_TAG_ID)) { int no = ParseUshortArray(pchild, lsc->tableAll[index].LscMatrix[3].uCoeff, tag.Size()); DCT_ASSERT((no == tag.Size())); } else { LOGW("UNKNOWN tag: %s", tagname.c_str()); } pchild = pchild->NextSibling(); } XML_CHECK_END(); int ret = AwbLscGradientCheck(&lsc->tableAll[index]); DCT_ASSERT(ret == 0); lsc->tableAllNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorRKDM ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_RKDM_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_RKDM_t, dm); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &dm->debayer_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_FILTER1_TAG_ID)) { int no = ParseCharArray(pchild, dm->debayer_filter1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_FILTER2_TAG_ID)) { int no = ParseCharArray(pchild, dm->debayer_filter2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_GAIN_OFFSET_TAG_ID)) { int no = ParseUcharArray(pchild, &dm->debayer_gain_offset, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_ISO_TAG_ID)) { int no = ParseIntArray(pchild, dm->ISO, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_SHARP_STRENGTH_TAG_ID)) { int no = ParseUcharArray(pchild, dm->sharp_strength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_HF_OFFSET_TAG_ID)) { int no = ParseUshortArray(pchild, dm->debayer_hf_offset, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_OFFSET_TAG_ID)) { int no = ParseUcharArray(pchild, &dm->debayer_offset, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_CLIP_EN_TAG_ID)) { int no = ParseUcharArray(pchild, &dm->debayer_clip_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_FILTER_G_EN_TAG_ID)) { int no = ParseUcharArray(pchild, &dm->debayer_filter_g_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_FILTER_C_EN_TAG_ID)) { int no = ParseUcharArray(pchild, &dm->debayer_filter_c_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_THED0_TAG_ID)) { int no = ParseUcharArray(pchild, &dm->debayer_thed0, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_THED1_TAG_ID)) { int no = ParseUcharArray(pchild, &dm->debayer_thed1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_DIST_SCALE_TAG_ID)) { int no = ParseUcharArray(pchild, &dm->debayer_dist_scale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_CNR_STRENGTH_TAG_ID)) { int no = ParseUcharArray(pchild, &dm->debayer_cnr_strength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_RKDM_DEBAYER_SHIFT_NUM_TAG_ID)) { int no = ParseUcharArray(pchild, &dm->debayer_shift_num, tag.Size()); DCT_ASSERT((no == tag.Size())); } else { LOGW("UNKNOWN tag: %s", tagname.c_str()); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorlumaCCMGAC ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_CCM_LUMA_CCM_GAIN_ALPHASCALE_CURVE_TAG_ID, CALIB_SENSOR_CCM_LUMA_CCM_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Ccm_t, ccm); const XMLNode* psubsubchild = pelement->FirstChild(); int no1 = 0, no2 = 0; while (psubsubchild) { XmlTag subsubTag = XmlTag(psubsubchild->ToElement()); std::string subsubTagname(psubsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subsubTagname.c_str()), subsubTag.Type(), subsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_LUMA_CCM_GAIN_TAG_ID)) { no1 = ParseFloatArray(psubsubchild, ccm->mode_cell[index].luma_ccm.alpha_gain, subsubTag.Size()); DCT_ASSERT((no1 == subsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_LUMA_CCM_SCALE_TAG_ID)) { no2 = ParseFloatArray(psubsubchild, ccm->mode_cell[index].luma_ccm.alpha_scale, subsubTag.Size()); DCT_ASSERT((no2 == subsubTag.Size())); } psubsubchild = psubsubchild->NextSibling(); } DCT_ASSERT(no1 == no2); ccm->mode_cell[index].luma_ccm.gain_scale_cure_size = no1; XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorlumaCCM ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_CCM_LUMA_CCM_TAG_ID, CALIB_SENSOR_CCM_MODE_CELL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Ccm_t, ccm); const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_LUMA_CCM_RGB2Y_PARA_TAG_ID)) { int no = ParseFloatArray(psubchild, ccm->mode_cell[index].luma_ccm.rgb2y_para, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_LUMA_CCM_LOW_BOUND_POS_BIT_TAG_ID)) { int no = ParseFloatArray(psubchild, &ccm->mode_cell[index].luma_ccm.low_bound_pos_bit, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_LUMA_CCM_Y_ALPHA_CURVE_TAG_ID)) { int no = ParseFloatArray(psubchild, ccm->mode_cell[index].luma_ccm.y_alpha_curve, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_LUMA_CCM_GAIN_ALPHASCALE_CURVE_TAG_ID)) { if (!parseEntrySensorlumaCCMGAC(psubchild->ToElement(), param, index)) { LOGE("parse error in CCM lumaCCM (%s)\n", subTagname.c_str()); return (false); } } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorCCMModeCell ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_CCM_MODE_CELL_TAG_ID, CALIB_SENSOR_CCM_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Ccm_t, ccm); int index = *((int*)param); bool indexValid = false; unsigned int allNum = ccm->mode_cell[index].matrixAllNum; ccm->mode_cell[index].matrixAllNum = 0; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_MODE_NAME_TAG_ID)) { char mode[CCM_PROFILE_NAME]; //ParseString(pchild, mode, sizeof(mode)); ParseString(pchild, ccm->mode_cell[index].name, sizeof(ccm->mode_cell[index].name)); indexValid = true; if (0 == strcmp(ccm->mode_cell[index].name, "normal")) { index = CCM_FOR_MODE_NORMAL; } else if (0 == strcmp(ccm->mode_cell[index].name, "hdr")) { index = CCM_FOR_MODE_HDR; } else { LOGE("mode: %s in CCM ModeCell is invalid. instead normal or hdr\n", ccm->mode_cell[index].name); return(false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_DAMP_ENABLE_TAG_ID) && indexValid) { uint8_t uValue = ccm->mode_cell[index].damp_enable; int no = ParseUcharArray(pchild, &uValue, tag.Size()); DCT_ASSERT((no == tag.Size())); ccm->mode_cell[index].damp_enable = (bool)uValue; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_LUMA_CCM_TAG_ID) && indexValid) { INFO_PRINT(tagname.c_str()); if (!parseEntrySensorlumaCCM(pchild->ToElement(), param, index)) { LOGE("parse error in CCM lumaCCM (%s)\n", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_ACCMCOF_TAG_ID) && indexValid) { if (!parseEntrySensorCcmAccmCof(pchild->ToElement(), param, index)) { LOGE("parse error in CCM aCCmCof (%s)\n", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_MATRIXALL_TAG_ID) && indexValid) { if (xmlParseReadWrite == XML_PARSER_READ) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorCcmMatrixAll, &ccm->mode_cell[index], (uint32_t)CALIB_SENSOR_CCM_MATRIXALL_TAG_ID, (uint32_t)CALIB_SENSOR_CCM_MODE_CELL_TAG_ID)) { LOGE("parse error in CCM matrixall (%s)\n", tagname.c_str()); return (false); } } else { if (!parseEntryCell4((XMLElement*)pchild->ToElement(), tag.Size(), allNum, &RkAiqCalibParser::parseEntrySensorCcmMatrixAll, &ccm->mode_cell[index], (uint32_t)CALIB_SENSOR_CCM_MATRIXALL_TAG_ID, (uint32_t)CALIB_SENSOR_CCM_MODE_CELL_TAG_ID)) { LOGE("parse error in CCM matrixall (%s)\n", tagname.c_str()); return (false); } } } pchild = pchild->NextSibling(); } DCT_ASSERT((indexValid == true)); XML_CHECK_END(); ccm->modecellNum++; ccm->mode_cell[index].valid = true; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorCCM ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_CCM_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Ccm_t, ccm); unsigned char cellNum = ccm->modecellNum; ccm->modecellNum = 0; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_ENABLE_TAG_ID)) { uint8_t uValue = ccm->enable; int no = ParseUcharArray(pchild, &uValue, tag.Size()); DCT_ASSERT((no == tag.Size())); ccm->enable = (bool)uValue; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_MODE_CELL_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorCCMModeCell, param, (uint32_t)CALIB_SENSOR_CCM_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_CCM_TAG_ID)) { LOGE("parse error in ccm mode cell (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorCcmAccmCof ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_CCM_ACCMCOF_TAG_ID, CALIB_SENSOR_CCM_MODE_CELL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Ccm_t, ccm); //ccm->mode_cell[index].aCcmCof.illuNum = 0; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_ACCMCOF_IllALL_TAG_ID)) { unsigned char lightNum = ccm->mode_cell[index].aCcmCof.illuNum; ccm->mode_cell[index].aCcmCof.illuNum = 0; if (xmlParseReadWrite == XML_PARSER_READ) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorCcmAccmCofIllAll, &ccm->mode_cell[index], (uint32_t)CALIB_SENSOR_CCM_ACCMCOF_IllALL_TAG_ID, (uint32_t)CALIB_SENSOR_CCM_ACCMCOF_TAG_ID)) { LOGE("parse error in LSC aCcmCof illAll (%s)", tagname.c_str()); return (false); } } else { if (!parseEntryCell4((XMLElement*)pchild->ToElement(), tag.Size(), lightNum, &RkAiqCalibParser::parseEntrySensorCcmAccmCofIllAll, &ccm->mode_cell[index], (uint32_t)CALIB_SENSOR_CCM_ACCMCOF_IllALL_TAG_ID, (uint32_t)CALIB_SENSOR_CCM_ACCMCOF_TAG_ID)) { LOGE("parse error in LSC aCcmCof illAll (%s)", tagname.c_str()); return (false); } } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorCcmAccmCofIllAll ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Ccm_ModeCell_t *pModeCell = (CalibDb_Ccm_ModeCell_t *)param; XML_CHECK_START(CALIB_SENSOR_CCM_ACCMCOF_IllALL_TAG_ID, CALIB_SENSOR_CCM_ACCMCOF_TAG_ID); //int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); int no1 = 0; int no2 = 0; while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_ACCMCOF_NAME_TAG_ID)) { ParseString(pchild, pModeCell->aCcmCof.illAll[index].illuName, sizeof(pModeCell->aCcmCof.illAll[index].illuName)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_ACCMCOF_WBGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->aCcmCof.illAll[index].awbGain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_ACCMCOF_MATRIXUSED_TAG_ID)) { char* ccm_profiles = Toupper(value); int no = ParseLscProfileArray(pchild, pModeCell->aCcmCof.illAll[index].matrixUsed, CCM_PROFILES_NUM_MAX); DCT_ASSERT((no <= CCM_PROFILES_NUM_MAX)); pModeCell->aCcmCof.illAll[index].matrixUsedNO = no; } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_ACCMCOF_GAINS_TAG_ID)) { no1 = ParseFloatArray(pchild, pModeCell->aCcmCof.illAll[index].saturationCurve.pSensorGain, tag.Size()); pModeCell->aCcmCof.illAll[index].saturationCurve.arraySize = no1; DCT_ASSERT((no1 == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_ACCMCOF_SAT_TAG_ID)) { no2 = ParseFloatArray(pchild, pModeCell->aCcmCof.illAll[index].saturationCurve.pSaturation, tag.Size()); pModeCell->aCcmCof.illAll[index].saturationCurve.arraySize = no2; DCT_ASSERT((no2 == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); DCT_ASSERT(no1 == no2); pModeCell->aCcmCof.illuNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorCcmMatrixAll ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Ccm_ModeCell_t *pModeCell = (CalibDb_Ccm_ModeCell_t *)param; XML_CHECK_START(CALIB_SENSOR_CCM_MATRIXALL_TAG_ID, CALIB_SENSOR_CCM_MODE_CELL_TAG_ID); // int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_MATRIXALL_NAME_TAG_ID)) { ParseString(pchild, pModeCell->matrixAll[index].name, sizeof(pModeCell->matrixAll[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_MATRIXALL_ILLUMINATION_TAG_ID)) { ParseString(pchild, pModeCell->matrixAll[index].illumination, sizeof(pModeCell->matrixAll[index].illumination)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_MATRIXALL_SAT_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->matrixAll[index].saturation, 1); DCT_ASSERT((no == 1)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_MATRIXALL_MATRIX_TAG_ID)) { int i = (sizeof(pModeCell->matrixAll[index].CrossTalkCoeff) / sizeof(pModeCell->matrixAll[index].CrossTalkCoeff.fCoeff[0])); int no = ParseFloatArray(pchild, pModeCell->matrixAll[index].CrossTalkCoeff.fCoeff, i); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CCM_MATRIXALL_OFFSET_TAG_ID)) { int i = (sizeof(pModeCell->matrixAll[index].CrossTalkOffset) / sizeof(pModeCell->matrixAll[index].CrossTalkOffset.fCoeff[0])); int no = ParseFloatArray(pchild, pModeCell->matrixAll[index].CrossTalkOffset.fCoeff, i); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); pModeCell->matrixAllNum++; LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorUVNRSetting ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_UVNR_ModeCell_t * pModeCell = (CalibDb_UVNR_ModeCell_t *)param; XML_CHECK_START(CALIB_SENSOR_UVNR_SETTING_TAG_ID, CALIB_SENSOR_UVNR_MODE_CELL_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_SETTING_SNR_MODE_TAG_ID)) { ParseString(pchild, pModeCell->setting[index].snr_mode, sizeof(pModeCell->setting[index].snr_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_SETTING_SENSOR_MODE_TAG_ID)) { ParseString(pchild, pModeCell->setting[index].sensor_mode, sizeof(pModeCell->setting[index].sensor_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].ISO, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP0_UVGRAD_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step0_uvgrad_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP0_UVGRAD_OFFSET_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step0_uvgrad_offset, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_NONMED1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_nonMed1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_NONBF1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_nonBf1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_DOWNSAMPLE_W_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_downSample_w, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_DOWNSAMPLE_H_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_downSample_h, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_DOWNSAMPLE_MEANSIZE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_downSample_meansize, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_MEDIAN_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_median_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_MEDIAN_SIZE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_median_size, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_MEDIAN_IIR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_median_IIR, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_BF_SIGMAR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_bf_sigmaR, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_BF_UVGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_bf_uvgain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_BF_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_bf_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_BF_SIZE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_bf_size, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_BF_SIGMAD_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_bf_sigmaD, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_BF_ISROWIIR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_bf_isRowIIR, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP1_BF_ISYCOPY_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step1_bf_isYcopy, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_NONEXT_BLOCK_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_nonExt_block, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_NONMED_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_nonMed, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_NONBF_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_nonBf, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_DOWNSAMPLE_W_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_downSample_w, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_DOWNSAMPLE_H_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_downSample_h, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_DOWNSAMPLE_MEANSIZE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_downSample_meansize, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_MEDIAN_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_median_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_MEDIAN_SIZE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_median_size, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_MEDIAN_IIR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_median_IIR, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_BF_SIGMAR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_bf_sigmaR, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_BF_UVGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_bf_uvgain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_BF_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_bf_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_BF_SIZE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_bf_size, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_BF_SIGMAD_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_bf_sigmaD, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_BF_ISROWIIR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_bf_isRowIIR, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP2_BF_ISYCOPY_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step2_bf_isYcopy, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP3_NONBF3_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step3_nonBf3, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP3_BF_SIGMAR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step3_bf_sigmaR, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP3_BF_UVGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step3_bf_uvgain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP3_BF_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step3_bf_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP3_BF_SIZE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step3_bf_size, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP3_BF_SIGMAD_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step3_bf_sigmaD, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP3_BF_ISROWIIR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step3_bf_isRowIIR, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_STEP3_BF_ISYCOPY_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].step3_bf_isYcopy, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_KERNEL_3X3_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].kernel_3x3, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_KERNEL_5X5_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].kernel_5x5, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_KERNEL_9X9_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].kernel_9x9, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_KERNEL_9X9_NUM_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->setting[index].kernel_9x9_num, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_SIGMA_ADJ_LUMA_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].sigma_adj_luma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_SIGMA_ADJ_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].sigma_adj_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_THRESHOLD_ADJ_LUMA_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].threshold_adj_luma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_THRESHOLD_ADJ_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting[index].threshold_adj_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorUVNRModeCell ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); int index = *((int*)param); XML_CHECK_START(CALIB_SENSOR_UVNR_MODE_CELL_TAG_ID, CALIB_SENSOR_UVNR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_UVNR_2_t, uvnr); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_MODE_NAME_TAG_ID)) { ParseString(pchild, uvnr->mode_cell[index].name, sizeof(uvnr->mode_cell[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_SETTING_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorUVNRSetting, &uvnr->mode_cell[index], (uint32_t)CALIB_SENSOR_UVNR_SETTING_TAG_ID, (uint32_t)CALIB_SENSOR_UVNR_MODE_CELL_TAG_ID)) { LOGE("parse error in BayerNR setting (%s)\n", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorUVNR ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_UVNR_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_UVNR_2_t, uvnr); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &uvnr->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_VERSION_TAG_ID)) { ParseString(pchild, uvnr->version, sizeof(uvnr->version)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_UVNR_MODE_CELL_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_READ) { int cell_size = 0; parseCellNoElement(pchild->ToElement(), tag.Size(), cell_size); uvnr->mode_num = cell_size; uvnr->mode_cell = (CalibDb_UVNR_ModeCell_t *)malloc(cell_size * sizeof(CalibDb_UVNR_ModeCell_t)); memset(uvnr->mode_cell, 0x00, cell_size * sizeof(CalibDb_UVNR_ModeCell_t)); if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorUVNRModeCell, param, (uint32_t)CALIB_SENSOR_UVNR_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_UVNR_TAG_ID)) { LOGE("parse error in BayerNR setting (%s)\n", tagname.c_str()); return (false); } } else { if (!parseEntryCell3((XMLElement *)pchild->ToElement(), tag.Size(), uvnr->mode_num, &RkAiqCalibParser::parseEntrySensorUVNRModeCell, param, (uint32_t)CALIB_SENSOR_UVNR_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_UVNR_TAG_ID)) { LOGE("parse error in BayerNR setting (%s)\n", tagname.c_str()); return (false); } } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorGamma ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_GAMMA_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Gamma_t, gamma); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GAMMA_GAMMA_EN_TAG_ID)) { int no = ParseUcharArray(pchild, &gamma->gamma_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GAMMA_GAMMA_OUT_SEGNUM_TAG_ID)) { int no = ParseUcharArray(pchild, &gamma->gamma_out_segnum, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GAMMA_GAMMA_OUT_OFFSET_TAG_ID)) { int no = ParseUcharArray(pchild, &gamma->gamma_out_offset, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GAMMA_CURVE_NORMAL_TAG_ID)) { int no = ParseFloatArray(pchild, gamma->curve_normal, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GAMMA_CURVE_HDR_TAG_ID)) { int no = ParseFloatArray(pchild, gamma->curve_hdr, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GAMMA_CURVE_NIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, gamma->curve_night, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorDegamma ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_DEGAMMA_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Degamma_t, degamma); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEGAMMA_EN_TAG_ID)) { int no = ParseUcharArray(pchild, °amma->degamma_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEGAMMA_MODE_CELL_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorDegammaModeCell, param, (uint32_t)CALIB_SENSOR_DEGAMMA_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_DEGAMMA_TAG_ID)) { LOGE("parse error in degamma mode cell (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorDegammaModeCell ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); int index = *((int*)param); XML_CHECK_START(CALIB_SENSOR_DEGAMMA_MODE_CELL_TAG_ID, CALIB_SENSOR_DEGAMMA_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Degamma_t, degamma); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEGAMMA_MODE_NAME_TAG_ID)) { ParseString(pchild, degamma->mode[index].name, sizeof(degamma->mode[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEGAMMA_SCENE_EN_TAG_ID)) { int no = ParseUcharArray(pchild, °amma->mode[index].degamma_scene_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEGAMMA_CURVE_X_TAG_ID)) { int no = ParseFloatArray(pchild, degamma->mode[index].X_axis, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEGAMMA_CURVE_R_TAG_ID)) { int no = ParseFloatArray(pchild, degamma->mode[index].curve_R, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEGAMMA_CURVE_G_TAG_ID)) { int no = ParseFloatArray(pchild, degamma->mode[index].curve_G, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEGAMMA_CURVE_B_TAG_ID)) { int no = ParseFloatArray(pchild, degamma->mode[index].curve_B, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorYnr ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_YNR_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_YNR_2_t, ynr); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &ynr->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_VERSION_TAG_ID)) { ParseString(pchild, ynr->version, sizeof(ynr->version)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_MODE_CELL_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_READ) { int cell_size = 0; parseCellNoElement(pchild->ToElement(), tag.Size(), cell_size); ynr->mode_num = cell_size; ynr->mode_cell = (CalibDb_YNR_ModeCell_t *)malloc(cell_size * sizeof(CalibDb_YNR_ModeCell_t)); memset(ynr->mode_cell, 0x00, cell_size * sizeof(CalibDb_YNR_ModeCell_t)); if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorYnrModeCell, param, (uint32_t)CALIB_SENSOR_YNR_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_YNR_TAG_ID)) { LOGE("parse error in YNR mode cell (%s)", tagname.c_str()); return (false); } } else { if (!parseEntryCell3((XMLElement *)pchild->ToElement(), tag.Size(), ynr->mode_num, &RkAiqCalibParser::parseEntrySensorYnrModeCell, param, (uint32_t)CALIB_SENSOR_YNR_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_YNR_TAG_ID)) { LOGE("parse error in YNR mode cell (%s)", tagname.c_str()); return (false); } } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorYnrModeCell ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); int index = *((int*)param); XML_CHECK_START(CALIB_SENSOR_YNR_MODE_CELL_TAG_ID, CALIB_SENSOR_YNR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_YNR_2_t, ynr); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_MODE_NAME_TAG_ID)) { ParseString(pchild, ynr->mode_cell[index].name, sizeof(ynr->mode_cell[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_SETTING_CELL_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorYnrSetting, (void *)&ynr->mode_cell[index], (uint32_t)CALIB_SENSOR_YNR_SETTING_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_YNR_MODE_CELL_TAG_ID)) { LOGE("parse error in YNR setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorYnrSetting ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_YNR_ModeCell_t *pModeCell = (CalibDb_YNR_ModeCell_t *)param; XML_CHECK_START(CALIB_SENSOR_YNR_SETTING_CELL_TAG_ID, CALIB_SENSOR_YNR_MODE_CELL_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_SETTING_SNR_MODE_TAG_ID)) { ParseString(pchild, pModeCell->setting[index].snr_mode, sizeof(pModeCell->setting[index].snr_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_SETTING_SENSOR_MODE_TAG_ID)) { ParseString(pchild, pModeCell->setting[index].sensor_mode, sizeof(pModeCell->setting[index].sensor_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_ISO_CELL_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorYnrISO, (void*)&pModeCell->setting[index], (uint32_t)CALIB_SENSOR_YNR_ISO_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_YNR_SETTING_CELL_TAG_ID)) { LOGE("parse error in YNR iso (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorYnrISO ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_YNR_ISO_CELL_TAG_ID, CALIB_SENSOR_YNR_SETTING_CELL_TAG_ID); CalibDb_YNR_Setting_t *pSetting = (CalibDb_YNR_Setting_t *)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->ynr_iso[index].iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_SIGMA_CURVE_TAG_ID)) { int no = ParseDoubleArray(pchild, pSetting->ynr_iso[index].sigma_curve, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_YNR_LCI_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].ynr_lci, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_YNR_LHCI_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].ynr_lhci, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_YNR_HLCI_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].ynr_hlci, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_YNR_HHCI_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].ynr_hhci, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_LO_LUMAPOINT_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].lo_lumaPoint, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_LO_LUMARATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].lo_lumaRatio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_LO_DIRECTIONSTRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->ynr_iso[index].lo_directionStrength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_LO_BFSCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].lo_bfScale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_IMERGE_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->ynr_iso[index].imerge_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_IMERGE_BOUND_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->ynr_iso[index].imerge_bound, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_DENOISE_WEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].denoise_weight, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_HI_LUMAPOINT_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].hi_lumaPoint, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_HI_LUMARATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].hi_lumaRatio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_HI_BFSCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].hi_bfScale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_HWITH_D_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].hwith_d, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_HI_DENOISESTRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->ynr_iso[index].hi_denoiseStrength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_HI_DETAILMINADJDNW_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->ynr_iso[index].hi_detailMinAdjDnW, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_HI_DENOISEWEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].hi_denoiseWeight, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_Y_LUMA_POINT_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].y_luma_point, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_HGRAD_Y_LEVEL1_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].hgrad_y_level1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_HGRAD_Y_LEVEL2_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].hgrad_y_level2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_HGRAD_Y_LEVEL3_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].hgrad_y_level3, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_HGRAD_Y_LEVEL4_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].hgrad_y_level4, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_HI_SOFT_THRESH_SCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->ynr_iso[index].hi_soft_thresh_scale, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorGic ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_GIC_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (CHECK_ISP_HW_V20()) { if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_CALIBPARA_V20_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorGicCalibParaV20, param, (uint32_t)CALIB_SENSOR_GIC_CALIBPARA_V20_TAG_ID, (uint32_t)CALIB_SENSOR_GIC_TAG_ID)) { LOGE("parse error in Gic CalibPara v20 Setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_TUNINGPARA_V20_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorGicTuningParaV20, param, (uint32_t)CALIB_SENSOR_GIC_TUNINGPARA_V20_TAG_ID, (uint32_t)CALIB_SENSOR_GIC_TAG_ID)) { LOGE("parse error in Gic TuningPara v20 Setting (%s)", tagname.c_str()); return (false); } } } if (CHECK_ISP_HW_V21()) { if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_CALIBPARA_V21_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorGicCalibParaV21, param, (uint32_t)CALIB_SENSOR_GIC_CALIBPARA_V21_TAG_ID, (uint32_t)CALIB_SENSOR_GIC_TAG_ID)) { LOGE("parse error in Gic CalibPara v21 Setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_TUNINGPARA_V21_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorGicTuningParaV21, param, (uint32_t)CALIB_SENSOR_GIC_TUNINGPARA_V21_TAG_ID, (uint32_t)CALIB_SENSOR_GIC_TAG_ID)) { LOGE("parse error in Gic TuningPara v21 Setting (%s)", tagname.c_str()); return (false); } } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorGicCalibParaV20 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_GIC_CALIBPARA_V20_TAG_ID, CALIB_SENSOR_GIC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Gic_t, gic); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SCENE_TAG_ID)) { ParseString(pchild, gic->calib_v20[index].scene, sizeof(gic->calib_v20[index].scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &gic->calib_v20[index].gic_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_EDGE_EN_TAG_ID)) { int no = ParseUcharArray(pchild, &gic->calib_v20[index].edge_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GR_RATION_TAG_ID)) { int no = ParseUcharArray(pchild, &gic->calib_v20[index].gr_ration, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISE_CUT_EN_TAG_ID)) { int no = ParseUcharArray(pchild, &gic->calib_v20[index].noise_cut_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SETTING_TAG_ID)) { if (!parseEntrySensorGicCalibSettingV20(pchild->ToElement(), &gic->calib_v20[index], index)) { LOGE("parse error in Gic Calib setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorGicTuningParaV20 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_GIC_TUNINGPARA_V20_TAG_ID, CALIB_SENSOR_GIC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Gic_t, gic); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SCENE_TAG_ID)) { ParseString(pchild, gic->tuning_v20[index].scene, sizeof(gic->calib_v20[index].scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &gic->tuning_v20[index].gic_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_EDGE_EN_TAG_ID)) { int no = ParseUcharArray(pchild, &gic->tuning_v20[index].edge_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GR_RATION_TAG_ID)) { int no = ParseUcharArray(pchild, &gic->tuning_v20[index].gr_ration, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISE_CUT_EN_TAG_ID)) { int no = ParseUcharArray(pchild, &gic->tuning_v20[index].noise_cut_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SETTING_TAG_ID)) { if (!parseEntrySensorGicTuningSettingV20(pchild->ToElement(), &gic->tuning_v20[index], index)) { LOGE("parse error in Gic Tuning setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorGicCalibSettingV20 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Gic_ModeCell_v20_t *pModeCell = (CalibDb_Gic_ModeCell_v20_t *)param; XML_CHECK_START(CALIB_SENSOR_GIC_SETTING_TAG_ID, CALIB_SENSOR_GIC_CALIBPARA_V20_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_BUSY_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_busy_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR2_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD2_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GB_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.gb_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MAXCORV_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.maxCorV, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MAXCORVBOTH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.maxCorVboth, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_DARK_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.dark_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_DARK_THREHI_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.dark_threHi, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD1_DARK_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad1_dark, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD2_DARK_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad2_dark, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR_DARK1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr_dark1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR_DARK2_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr_dark2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISECURVE0_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.noiseCurve_0, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISECURVE1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.noiseCurve_1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GVALUELIMITLO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.GValueLimitLo, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GVALUELIMITHI_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.GValueLimitHi, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_TEXTURESTRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.textureStrength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SCALELO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.ScaleLo, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SCALEHI_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.ScaleHi, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GLOBALSTRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.globalStrength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISE_COEA_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.noise_coea, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISE_COEB_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.noise_coeb, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_DIFF_CLIP_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.diff_clip, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorGicTuningSettingV20 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Gic_ModeCell_v20_t *pModeCell = (CalibDb_Gic_ModeCell_v20_t *)param; XML_CHECK_START(CALIB_SENSOR_GIC_SETTING_TAG_ID, CALIB_SENSOR_GIC_TUNINGPARA_V20_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_BUSY_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_busy_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR2_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD2_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GB_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.gb_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MAXCORV_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.maxCorV, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MAXCORVBOTH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.maxCorVboth, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_DARK_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.dark_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_DARK_THREHI_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.dark_threHi, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD1_DARK_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad1_dark, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD2_DARK_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad2_dark, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR_DARK1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr_dark1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR_DARK2_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr_dark2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISECURVE0_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.noiseCurve_0, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISECURVE1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.noiseCurve_1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GVALUELIMITLO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.GValueLimitLo, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GVALUELIMITHI_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.GValueLimitHi, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_TEXTURESTRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.textureStrength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SCALELO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.ScaleLo, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SCALEHI_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.ScaleHi, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GLOBALSTRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.globalStrength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISE_COEA_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.noise_coea, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISE_COEB_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.noise_coeb, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_DIFF_CLIP_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.diff_clip, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorGicCalibParaV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_GIC_CALIBPARA_V21_TAG_ID, CALIB_SENSOR_GIC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Gic_Isp21_t, gic); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SCENE_TAG_ID)) { ParseString(pchild, gic->calib_v21[index].scene, sizeof(gic->calib_v21[index].scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &gic->calib_v21[index].gic_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GR_RATION_TAG_ID)) { int no = ParseUcharArray(pchild, &gic->calib_v21[index].gr_ration, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SETTING_V21_TAG_ID)) { if (!parseEntrySensorGicCalibSettingV21(pchild->ToElement(), &gic->calib_v21[index], index)) { LOGE("parse error in Gic Calib V21 setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorGicTuningParaV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_GIC_TUNINGPARA_V21_TAG_ID, CALIB_SENSOR_GIC_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Gic_Isp21_t, gic); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SCENE_TAG_ID)) { ParseString(pchild, gic->tuning_v21[index].scene, sizeof(gic->tuning_v21[index].scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &gic->tuning_v21[index].gic_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GR_RATION_TAG_ID)) { int no = ParseUcharArray(pchild, &gic->tuning_v21[index].gr_ration, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SETTING_V21_TAG_ID)) { if (!parseEntrySensorGicTuningSettingV21(pchild->ToElement(), &gic->tuning_v21[index], index)) { LOGE("parse error in Gic Tuning V21 setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorGicCalibSettingV21 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Gic_ModeCell_v21_t *pModeCell = (CalibDb_Gic_ModeCell_v21_t *)param; XML_CHECK_START(CALIB_SENSOR_GIC_SETTING_V21_TAG_ID, CALIB_SENSOR_GIC_CALIBPARA_V21_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_BUSY_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_busy_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR2_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD2_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GB_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.gb_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MAXCORV_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.maxCorV, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MAXCORVBOTH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.maxCorVboth, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_DARK_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.dark_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_DARK_THREHI_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.dark_threHi, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD1_DARK_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad1_dark, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD2_DARK_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad2_dark, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR_DARK1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr_dark1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR_DARK2_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr_dark2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISECURVE0_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.noiseCurve_0, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISECURVE1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.noiseCurve_1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISESCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.NoiseScale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISEBASE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.NoiseBase, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GLOBALSTRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.globalStrength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_DIFF_CLIP_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.diff_clip, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorGicTuningSettingV21 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Gic_ModeCell_v21_t *pModeCell = (CalibDb_Gic_ModeCell_v21_t *)param; XML_CHECK_START(CALIB_SENSOR_GIC_SETTING_V21_TAG_ID, CALIB_SENSOR_GIC_TUNINGPARA_V21_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_BUSY_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_busy_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR2_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD2_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GB_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.gb_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MAXCORV_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.maxCorV, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MAXCORVBOTH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.maxCorVboth, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_DARK_THRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.dark_thre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_DARK_THREHI_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.dark_threHi, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD1_DARK_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad1_dark, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_K_GRAD2_DARK_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.k_grad2_dark, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR_DARK1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr_dark1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_MIN_GRAD_THR_DARK2_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.min_grad_thr_dark2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISECURVE0_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.noiseCurve_0, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISECURVE1_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.noiseCurve_1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISESCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.NoiseScale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_NOISEBASE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.NoiseBase, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_GLOBALSTRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.globalStrength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_GIC_DIFF_CLIP_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->setting.diff_clip, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorMFNR ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_MFNR_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_MFNR_2_t, mfnr); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &mfnr->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_VERSION_TAG_ID)) { ParseString(pchild, mfnr->version, sizeof(mfnr->version)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_LOCAL_GAIN_EN_TAG_ID)) { int no = ParseUcharArray(pchild, &mfnr->local_gain_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECT_EN_TAG_ID)) { int no = ParseUcharArray(pchild, &mfnr->motion_detect_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MODE_3TO1_TAG_ID)) { int no = ParseUcharArray(pchild, &mfnr->mode_3to1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MAX_LEVEL_TAG_ID)) { int no = ParseUcharArray(pchild, &mfnr->max_level, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MAX_LEVEL_UV_TAG_ID)) { int no = ParseUcharArray(pchild, &mfnr->max_level_uv, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_BACK_REF_NUM_TAG_ID)) { int no = ParseUcharArray(pchild, &mfnr->back_ref_num, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_AWB_UV_RATIO_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorMFNRAwbUvRatio, param, (uint32_t)CALIB_SENSOR_MFNR_AWB_UV_RATIO_TAG_ID, (uint32_t)CALIB_SENSOR_MFNR_TAG_ID)) { LOGE("parse error in MFNR awb_uv_ratio (%s)\n", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MODE_CELL_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_READ) { int cell_size = 0; parseCellNoElement(pchild->ToElement(), tag.Size(), cell_size); mfnr->mode_num = cell_size; mfnr->mode_cell = (CalibDb_MFNR_ModeCell_t *)malloc(cell_size * sizeof(CalibDb_MFNR_ModeCell_t)); memset(mfnr->mode_cell, 0x00, cell_size * sizeof(CalibDb_MFNR_ModeCell_t)); if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorMFNRModeCell, param, (uint32_t)CALIB_SENSOR_MFNR_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_MFNR_TAG_ID)) { LOGE("parse error in MFNR MFNR_ISO (%s)\n", tagname.c_str()); return (false); } } else { if (!parseEntryCell3((XMLElement *)pchild->ToElement(), tag.Size(), mfnr->mode_num, &RkAiqCalibParser::parseEntrySensorMFNRModeCell, param, (uint32_t)CALIB_SENSOR_MFNR_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_MFNR_TAG_ID)) { LOGE("parse error in MFNR MFNR_ISO (%s)\n", tagname.c_str()); return (false); } } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorMFNRAwbUvRatio ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_MFNR_AWB_UV_RATIO_TAG_ID, CALIB_SENSOR_MFNR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_MFNR_2_t, mfnr); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_AWB_UV_RATIO_NAME_TAG_ID)) { ParseString(pchild, mfnr->uv_ratio[index].illum, sizeof(mfnr->uv_ratio[index].illum)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_AWB_UV_RATIO_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, mfnr->uv_ratio[index].ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorMFNRDynamic ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_MFNR_DYNAMIC_TAG_ID, CALIB_SENSOR_MFNR_MODE_CELL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_MFNR_2_t, mfnr); const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = [%s]\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_DYNAMIC_ENABLE_TAG_ID)) { int no = ParseIntArray(psubchild, &mfnr->mode_cell[index].dynamic.enable, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_DYNAMIC_LOWTH_ISO_TAG_ID)) { int no = ParseFloatArray(psubchild, &mfnr->mode_cell[index].dynamic.lowth_iso, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_DYNAMIC_LOWTH_TIME_TAG_ID)) { int no = ParseFloatArray(psubchild, &mfnr->mode_cell[index].dynamic.lowth_time, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_DYNAMIC_HIGHTH_ISO_TAG_ID)) { int no = ParseFloatArray(psubchild, &mfnr->mode_cell[index].dynamic.highth_iso, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_DYNAMIC_HIGHTH_TIME_TAG_ID)) { int no = ParseFloatArray(psubchild, &mfnr->mode_cell[index].dynamic.highth_time, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else { LOGW("%s(%d): parse error in mfnr dynamic (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorMFNRMotionDetection ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_MFNR_MOTION_DETECTION_TAG_ID, CALIB_SENSOR_MFNR_MODE_CELL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_MFNR_2_t, mfnr); const XMLNode* psubchild = pelement->FirstChild(); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = [%s]\n", __FUNCTION__, __LINE__, pelement->Name()); #endif while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_ENABLE_TAG_ID)) { int no = ParseIntArray(psubchild, &mfnr->mode_cell[index].motion.enable, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_ISO_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.iso, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_SIGMAHSCALE_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.sigmaHScale, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_SIGMALSCALE_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.sigmaLScale, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_LIGHT_CLP_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.lightClp, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_UV_WEIGHT_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.uvWeight, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_MFNR_SIGMA_SCALE_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.mfnrSigmaScale, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_YUVNR_GAIN_SCALE0_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.yuvnrGainScale0, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_YUVNR_GAIN_SCALE1_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.yuvnrGainScale1, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_YUVNR_GAIN_SCALE2_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.yuvnrGainScale2, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_RESERVED0_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.reserved0, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_RESERVED1_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.reserved1, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_RESERVED2_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.reserved2, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_RESERVED3_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.reserved3, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_RESERVED4_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.reserved4, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_RESERVED5_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.reserved5, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_RESERVED6_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.reserved6, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_RESERVED7_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.reserved7, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_RESERVED8_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.frame_limit_uv, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_RESERVED9_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.frame_limit_y, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_FRAME_LIMIT_Y_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.frame_limit_y, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_FRAME_LIMIT_UV_TAG_ID)) { int no = ParseFloatArray(psubchild, mfnr->mode_cell[index].motion.frame_limit_uv, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else { LOGE("%s(%d): parse error in mfnr dynamic (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorMFNRModeCell ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); int index = *((int*)param); XML_CHECK_START(CALIB_SENSOR_MFNR_MODE_CELL_TAG_ID, CALIB_SENSOR_MFNR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_MFNR_2_t, mfnr); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MODE_NAME_TAG_ID)) { ParseString(pchild, mfnr->mode_cell[index].name, sizeof(mfnr->mode_cell[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_DYNAMIC_TAG_ID)) { if (!parseEntrySensorMFNRDynamic(pchild->ToElement(), param, index)) { LOGE("parse error in MFNR dynamic(%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_SETTING_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorMFNRSetting, (void *)&mfnr->mode_cell[index], (uint32_t)CALIB_SENSOR_MFNR_SETTING_TAG_ID, (uint32_t)CALIB_SENSOR_MFNR_MODE_CELL_TAG_ID)) { LOGE("parse error in MFNR MFNR_ISO (%s)\n", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_MOTION_DETECTION_TAG_ID)) { if (!parseEntrySensorMFNRMotionDetection(pchild->ToElement(), param, index)) { LOGE("parse error in MFNR motion detection(%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorMFNRSetting ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_MFNR_ModeCell_t *pModeCell = (CalibDb_MFNR_ModeCell_t *)param; XML_CHECK_START(CALIB_SENSOR_MFNR_SETTING_TAG_ID, CALIB_SENSOR_MFNR_MODE_CELL_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_SETTING_SNR_MODE_TAG_ID)) { ParseString(pchild, pModeCell->setting[index].snr_mode, sizeof(pModeCell->setting[index].snr_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_SETTING_SENSOR_MODE_TAG_ID)) { ParseString(pchild, pModeCell->setting[index].sensor_mode, sizeof(pModeCell->setting[index].sensor_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorMFNRISO, (void *)&pModeCell->setting[index], (uint32_t)CALIB_SENSOR_MFNR_ISO_TAG_ID, (uint32_t)CALIB_SENSOR_MFNR_SETTING_TAG_ID)) { LOGE("parse error in MFNR MFNR_ISO (%s)\n", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorMFNRISO ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_MFNR_ISO_TAG_ID, CALIB_SENSOR_MFNR_SETTING_TAG_ID); CalibDb_MFNR_Setting_t * pSetting = (CalibDb_MFNR_Setting_t *)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->mfnr_iso[index].iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_WEIGHT_LIMIT_Y_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].weight_limit_y, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_WEIGHT_LIMIT_UV_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].weight_limit_uv, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_RATIO_FRQ_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].ratio_frq, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_LUMA_W_IN_CHROMA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].luma_w_in_chroma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_NOISE_CURVE_TAG_ID)) { int no = ParseDoubleArray(pchild, pSetting->mfnr_iso[index].noise_curve, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_NOISE_CURVE_X00_TAG_ID)) { int no = ParseDoubleArray(pchild, &pSetting->mfnr_iso[index].noise_curve_x00, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_LO_NOISEPROFILE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_lo_noiseprofile, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_HI_NOISEPROFILE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_hi_noiseprofile, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_LO_DENOISEWEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_lo_denoiseweight, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_HI_DENOISEWEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_hi_denoiseweight, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_LO_BFSCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_lo_bfscale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_HI_BFSCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_hi_bfscale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_LUMANRPOINT_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_lumanrpoint, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_LUMANRCURVE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_lumanrcurve, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_DENOISESTRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->mfnr_iso[index].y_denoisestrength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_LO_LVL0_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_lo_lvl0_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_HI_LVL0_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_hi_lvl0_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_LO_LVL1_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_lo_lvl1_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_HI_LVL1_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_hi_lvl1_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_LO_LVL2_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_lo_lvl2_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_HI_LVL2_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_hi_lvl2_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_LO_LVL3_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_lo_lvl3_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_Y_HI_LVL3_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].y_hi_lvl3_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_LO_NOISEPROFILE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_lo_noiseprofile, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_HI_NOISEPROFILE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_hi_noiseprofile, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_LO_DENOISEWEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_lo_denoiseweight, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_HI_DENOISEWEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_hi_denoiseweight, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_LO_BFSCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_lo_bfscale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_HI_BFSCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_hi_bfscale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_LUMANRPOINT_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_lumanrpoint, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_LUMANRCURVE_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_lumanrcurve, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_DENOISESTRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->mfnr_iso[index].uv_denoisestrength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_LO_LVL0_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_lo_lvl0_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_HI_LVL0_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_hi_lvl0_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_LO_LVL1_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_lo_lvl1_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_HI_LVL1_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_hi_lvl1_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_LO_LVL2_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_lo_lvl2_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_UV_HI_LVL2_GFDELTA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].uv_hi_lvl2_gfdelta, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_LVL0_GFSIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].lvl0_gfsigma, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_LVL1_GFSIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].lvl1_gfsigma, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_LVL2_GFSIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].lvl2_gfsigma, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_MFNR_ISO_LVL3_GFSIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->mfnr_iso[index].lvl3_gfsigma, tag.Size(), 5); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorSharp ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Sharp_2_t, sharp); autoTabForward(); if (xmlParseReadWrite == XML_PARSER_READ) // write { memset(sharp, 0x00, sizeof(CalibDb_Sharp_2_t)); } XML_CHECK_START(CALIB_SENSOR_SHARP_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &sharp->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_VERSION_TAG_ID)) { ParseString(pchild, sharp->version, sizeof(sharp->version)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_LUMA_POINT_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->luma_point, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_MODE_CELL_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_READ) { int cell_size = 0; parseCellNoElement(pchild->ToElement(), tag.Size(), cell_size); sharp->mode_num = cell_size; sharp->mode_cell = (CalibDb_Sharp_ModeCell_t *)malloc(cell_size * sizeof(CalibDb_Sharp_ModeCell_t)); memset(sharp->mode_cell, 0x00, cell_size * sizeof(CalibDb_Sharp_ModeCell_t)); if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorSharpModeCell, param, (uint32_t)CALIB_SENSOR_SHARP_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_SHARP_TAG_ID)) { LOGE("parse error in SHARP mode cell (%s)", tagname.c_str()); return (false); } } else { if (!parseEntryCell3((XMLElement *)pchild->ToElement(), tag.Size(), sharp->mode_num, &RkAiqCalibParser::parseEntrySensorSharpModeCell, param, (uint32_t)CALIB_SENSOR_SHARP_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_SHARP_TAG_ID)) { LOGE("parse error in SHARP mode cell (%s)", tagname.c_str()); return (false); } } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorSharpModeCell ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); int index = *((int*)param); XML_CHECK_START(CALIB_SENSOR_SHARP_MODE_CELL_TAG_ID, CALIB_SENSOR_SHARP_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Sharp_2_t, sharp); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_MODE_NAME_TAG_ID)) { ParseString(pchild, sharp->mode_cell[index].name, sizeof(sharp->mode_cell[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_GAUSS_LUMA_COEFF_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].gauss_luma_coeff, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_MBF_COEFF_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].mbf_coeff, tag.Size()); DCT_ASSERT((no == tag.Size())); } #if 1 else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_PBF_COEFF_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].pbf_coeff_l, tag.Size()); DCT_ASSERT((no == tag.Size())); memcpy(sharp->mode_cell[index].pbf_coeff_h, sharp->mode_cell[index].pbf_coeff_l, sizeof(sharp->mode_cell[index].pbf_coeff_l)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_RF_M_COEFF_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].rf_m_coeff_l, tag.Size()); DCT_ASSERT((no == tag.Size())); memcpy(sharp->mode_cell[index].rf_m_coeff_h, sharp->mode_cell[index].rf_m_coeff_l, sizeof(sharp->mode_cell[index].rf_m_coeff_l)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_RF_H_COEFF_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].rf_h_coeff_l, tag.Size()); DCT_ASSERT((no == tag.Size())); memcpy(sharp->mode_cell[index].rf_h_coeff_h, sharp->mode_cell[index].rf_h_coeff_l, sizeof(sharp->mode_cell[index].rf_h_coeff_l)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_HBF_COEFF_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].hbf_coeff_l, tag.Size()); DCT_ASSERT((no == tag.Size())); memcpy(sharp->mode_cell[index].hbf_coeff_h, sharp->mode_cell[index].hbf_coeff_l, sizeof(sharp->mode_cell[index].hbf_coeff_l)); } #endif else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_PBF_COEFF_L_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].pbf_coeff_l, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_PBF_COEFF_H_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].pbf_coeff_h, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_RF_M_COEFF_L_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].rf_m_coeff_l, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_RF_M_COEFF_H_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].rf_m_coeff_h, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_RF_H_COEFF_L_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].rf_h_coeff_l, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_RF_H_COEFF_H_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].rf_h_coeff_h, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_HBF_COEFF_L_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].hbf_coeff_l, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_HBF_COEFF_H_TAG_ID)) { int no = ParseFloatArray(pchild, sharp->mode_cell[index].hbf_coeff_h, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SETTING_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorSharpSetting, (void *)&sharp->mode_cell[index], (uint32_t)CALIB_SENSOR_SHARP_SETTING_TAG_ID, (uint32_t)CALIB_SENSOR_SHARP_MODE_CELL_TAG_ID)) { LOGE("parse error in SHARP SHARP_Setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorSharpSetting ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Sharp_ModeCell_t *pModeCell = (CalibDb_Sharp_ModeCell_t *)param; XML_CHECK_START(CALIB_SENSOR_SHARP_SETTING_TAG_ID, CALIB_SENSOR_SHARP_MODE_CELL_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SETTING_SNR_MODE_TAG_ID)) { ParseString(pchild, pModeCell->setting[index].snr_mode, sizeof(pModeCell->setting[index].snr_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SETTING_SENSOR_MODE_TAG_ID)) { ParseString(pchild, pModeCell->setting[index].sensor_mode, sizeof(pModeCell->setting[index].sensor_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorSharpISO, (void *)&pModeCell->setting[index], (uint32_t)CALIB_SENSOR_SHARP_SHARP_ISO_TAG_ID, (uint32_t)CALIB_SENSOR_SHARP_SETTING_TAG_ID)) { LOGE("parse error in SHARP SHARP_ISO (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorSharpISO ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_SHARP_SHARP_ISO_TAG_ID, CALIB_SENSOR_SHARP_SETTING_TAG_ID); CalibDb_Sharp_Setting_t *pSetting = (CalibDb_Sharp_Setting_t *)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_HRATIO_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].hratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_LRATIO_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].lratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_MF_SHARP_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].mf_sharp_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_HF_SHARP_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].hf_sharp_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_LUMA_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->sharp_iso[index].luma_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_PBF_GAIN_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].pbf_gain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_PBF_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].pbf_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_PBF_ADD_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].pbf_add, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_MF_CLIP_POS_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->sharp_iso[index].mf_clip_pos, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_MF_CLIP_NEG_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->sharp_iso[index].mf_clip_neg, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_HF_CLIP_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->sharp_iso[index].hf_clip, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_MBF_GAIN_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].mbf_gain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_HBF_GAIN_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].hbf_gain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_HBF_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].hbf_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_MBF_ADD_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].mbf_add, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_HBF_ADD_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].hbf_add, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_ISO_LOCAL_SHARP_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].local_sharp_strength, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_PBF_COEFF_PERCENT_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].pbf_coeff_percent, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_RF_M_COEFF_PERCENT_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].rf_m_coeff_percent, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_RF_H_COEFF_PERCENT_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].rf_h_coeff_percent, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_SHARP_HBF_COEFF_PERCENT_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->sharp_iso[index].hbf_coeff_percent, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorEdgeFilter ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_EDGEFILTER_TAG_ID, CALIB_SENSOR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_EdgeFilter_2_t, edgeFilter); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &edgeFilter->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_VERSION_TAG_ID)) { ParseString(pchild, edgeFilter->version, sizeof(edgeFilter->version)); } if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_LUMA_POINT_TAG_ID)) { int no = ParseFloatArray(pchild, edgeFilter->luma_point, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_MODE_CELL_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_READ) { int cell_size = 0; parseCellNoElement(pchild->ToElement(), tag.Size(), cell_size); edgeFilter->mode_num = cell_size; edgeFilter->mode_cell = (CalibDb_EdgeFilter_ModeCell_t *)malloc(cell_size * sizeof(CalibDb_EdgeFilter_ModeCell_t)); memset(edgeFilter->mode_cell, 0x00, cell_size * sizeof(CalibDb_EdgeFilter_ModeCell_t)); if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorEdgeFilterModeCell, param, (uint32_t)CALIB_SENSOR_EDGEFILTER_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_EDGEFILTER_TAG_ID)) { LOGE("parse error in EDGEFILTER mode cell (%s)", tagname.c_str()); return (false); } } else { if (!parseEntryCell3((XMLElement *)pchild->ToElement(), tag.Size(), edgeFilter->mode_num, &RkAiqCalibParser::parseEntrySensorEdgeFilterModeCell, param, (uint32_t)CALIB_SENSOR_EDGEFILTER_MODE_CELL_TAG_ID, (uint32_t)CALIB_SENSOR_EDGEFILTER_TAG_ID)) { LOGE("parse error in EDGEFILTER mode cell (%s)", tagname.c_str()); return (false); } } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorEdgeFilterModeCell ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); int index = *((int*)param); XML_CHECK_START(CALIB_SENSOR_EDGEFILTER_MODE_CELL_TAG_ID, CALIB_SENSOR_EDGEFILTER_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_EdgeFilter_2_t, edgeFilter); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_MODE_NAME_TAG_ID)) { ParseString(pchild, edgeFilter->mode_cell[index].name, sizeof(edgeFilter->mode_cell[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_DOG_KERNEL_L_TAG_ID)) { int no = ParseFloatArray(pchild, edgeFilter->mode_cell[index].dog_kernel_l, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_DOG_KERNEL_H_TAG_ID)) { int no = ParseFloatArray(pchild, edgeFilter->mode_cell[index].dog_kernel_h, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_SETTING_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorEdgeFilterSetting, (void *)&edgeFilter->mode_cell[index], (uint32_t)CALIB_SENSOR_EDGEFILTER_SETTING_TAG_ID, (uint32_t)CALIB_SENSOR_EDGEFILTER_MODE_CELL_TAG_ID)) { LOGE("parse error in EDGEFILTER setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorEdgeFilterSetting ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_EdgeFilter_ModeCell_t *pModeCell = (CalibDb_EdgeFilter_ModeCell_t *)param; XML_CHECK_START(CALIB_SENSOR_EDGEFILTER_SETTING_TAG_ID, CALIB_SENSOR_EDGEFILTER_MODE_CELL_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_SETTING_SNR_MODE_TAG_ID)) { ParseString(pchild, pModeCell->setting[index].snr_mode, sizeof(pModeCell->setting[index].snr_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_SETTING_SENSOR_MODE_TAG_ID)) { ParseString(pchild, pModeCell->setting[index].sensor_mode, sizeof(pModeCell->setting[index].sensor_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorEdgeFilterISO, (void *)&pModeCell->setting[index], (uint32_t)CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_TAG_ID, (uint32_t)CALIB_SENSOR_EDGEFILTER_SETTING_TAG_ID)) { LOGE("parse error in EDGEFILTER EDGEFILTER_ISO (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorEdgeFilterISO ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_TAG_ID, CALIB_SENSOR_EDGEFILTER_SETTING_TAG_ID); CalibDb_EdgeFilter_Setting_t *pSetting = (CalibDb_EdgeFilter_Setting_t *)param; const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->edgeFilter_iso[index].iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_EDGE_THED_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->edgeFilter_iso[index].edge_thed, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_SRC_WGT_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->edgeFilter_iso[index].src_wgt, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_ALPHA_ADP_EN_TAG_ID)) { int no = ParseUcharArray(pchild, &pSetting->edgeFilter_iso[index].alpha_adp_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_LOCAL_ALPHA_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->edgeFilter_iso[index].local_alpha, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_GLOBAL_ALPHA_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->edgeFilter_iso[index].global_alpha, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_NOISE_CLIP_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->edgeFilter_iso[index].noise_clip, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_DOG_CLIP_POS_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->edgeFilter_iso[index].dog_clip_pos, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_DOG_CLIP_NEG_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->edgeFilter_iso[index].dog_clip_neg, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_DOG_ALPHA_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->edgeFilter_iso[index].dog_alpha, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_DIRECT_FILTER_COEFF_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->edgeFilter_iso[index].direct_filter_coeff, tag.Size()); DCT_ASSERT((no == tag.Size())); } #if 1 else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_DOG_KERNEL_ROW0_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->edgeFilter_iso[index].dog_kernel_row0, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_DOG_KERNEL_ROW1_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->edgeFilter_iso[index].dog_kernel_row1, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_DOG_KERNEL_ROW2_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->edgeFilter_iso[index].dog_kernel_row2, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_DOG_KERNEL_ROW3_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->edgeFilter_iso[index].dog_kernel_row3, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_DOG_KERNEL_ROW4_TAG_ID)) { int no = ParseFloatArray(pchild, pSetting->edgeFilter_iso[index].dog_kernel_row4, tag.Size(), 6); DCT_ASSERT((no == tag.Size())); } #endif else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EDGEFILTER_EDGEFILTER_ISO_DOG_KERNEL_PERCENT_TAG_ID)) { int no = ParseFloatArray(pchild, &pSetting->edgeFilter_iso[index].dog_kernel_percent, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDehaze ( const XMLElement* pelement, void* param ) { (void)param; LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_DEHAZE_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (CHECK_ISP_HW_V20()) { if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_CALIBPARA_V20_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorDehazeCalibParaV20, param, (uint32_t)CALIB_SENSOR_DEHAZE_CALIBPARA_V20_TAG_ID, (uint32_t)CALIB_SENSOR_DEHAZE_TAG_ID)) { LOGE("parse error in Dehaze CalibPara v20 Setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_TUNINGPARA_V20_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorDehazeTuningParaV20, param, (uint32_t)CALIB_SENSOR_DEHAZE_TUNINGPARA_V20_TAG_ID, (uint32_t)CALIB_SENSOR_DEHAZE_TAG_ID)) { LOGE("parse error in Dehaze TuningPara v20 Setting (%s)", tagname.c_str()); return (false); } } } if (CHECK_ISP_HW_V21()) { if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_CALIBPARA_V21_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorDehazeCalibParaV21, param, (uint32_t)CALIB_SENSOR_DEHAZE_CALIBPARA_V21_TAG_ID, (uint32_t)CALIB_SENSOR_DEHAZE_TAG_ID)) { LOGE("parse error in Dehaze CalibPara v21 Setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_TUNINGPARA_V21_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorDehazeTuningParaV21, param, (uint32_t)CALIB_SENSOR_DEHAZE_TUNINGPARA_V21_TAG_ID, (uint32_t)CALIB_SENSOR_DEHAZE_TAG_ID)) { LOGE("parse error in Dehaze TuningPara v21 Setting (%s)", tagname.c_str()); return (false); } } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorDehazeCalibParaV20 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DEHAZE_CALIBPARA_V20_TAG_ID, CALIB_SENSOR_DEHAZE_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dehaze_t, dehaze); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SCENE_TAG_ID)) { ParseString(pchild, dehaze->calib_v20[index].scene, sizeof(dehaze->calib_v20[index].scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &dehaze->calib_v20[index].en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_CFG_ALPHA_TAG_ID)) { int no = ParseFloatArray(pchild, &dehaze->calib_v20[index].cfg_alpha, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TAG_ID)) { if (!parseEntrySensorDehazeSettingV20(pchild->ToElement(), &dehaze->calib_v20[index], index)) { LOGE("parse error in Dehaze setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_TAG_ID)) { if (!parseEntrySensorEnhanceSettingV20(pchild->ToElement(), &dehaze->calib_v20[index], index)) { LOGE("parse error in Enhance setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_TAG_ID)) { if (!parseEntrySensorHistSettingV20(pchild->ToElement(), &dehaze->calib_v20[index], index)) { LOGE("parse error in Hist setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDehazeTuningParaV20 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DEHAZE_TUNINGPARA_V20_TAG_ID, CALIB_SENSOR_DEHAZE_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dehaze_t, dehaze); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SCENE_TAG_ID)) { ParseString(pchild, dehaze->tuning_v20[index].scene, sizeof(dehaze->tuning_v20[index].scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &dehaze->tuning_v20[index].en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_CFG_ALPHA_TAG_ID)) { int no = ParseFloatArray(pchild, &dehaze->tuning_v20[index].cfg_alpha, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TAG_ID)) { if (!parseEntrySensorDehazeTuningSettingV20(pchild->ToElement(), &dehaze->tuning_v20[index], index)) { LOGE("parse error in Dehaze setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_TAG_ID)) { if (!parseEntrySensorEnhanceTuningSettingV20(pchild->ToElement(), &dehaze->tuning_v20[index], index)) { LOGE("parse error in Enhance setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_TAG_ID)) { if (!parseEntrySensorHistTuningSettingV20(pchild->ToElement(), &dehaze->tuning_v20[index], index)) { LOGE("parse error in Hist setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDehazeCalibParaV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DEHAZE_CALIBPARA_V21_TAG_ID, CALIB_SENSOR_DEHAZE_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dehaze_Isp21_t, dehaze); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SCENE_TAG_ID)) { ParseString(pchild, dehaze->calib_v21[index].scene, sizeof(dehaze->calib_v21[index].scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &dehaze->calib_v21[index].en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_CFG_ALPHA_TAG_ID)) { int no = ParseFloatArray(pchild, &dehaze->calib_v21[index].cfg_alpha, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_V21_SETTING_TAG_ID)) { if (!parseEntrySensorDehazeSettingV21(pchild->ToElement(), &dehaze->calib_v21[index], index)) { LOGE("parse error in Dehaze V21 setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_V21_SETTING_TAG_ID)) { if (!parseEntrySensorEnhanceSettingV21(pchild->ToElement(), &dehaze->calib_v21[index], index)) { LOGE("parse error in Enhance V21 setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_V21_SETTING_TAG_ID)) { if (!parseEntrySensorHistSettingV21(pchild->ToElement(), &dehaze->calib_v21[index], index)) { LOGE("parse error in Hist V21 setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDehazeTuningParaV21 ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_DEHAZE_TUNINGPARA_V21_TAG_ID, CALIB_SENSOR_DEHAZE_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Dehaze_Isp21_t, dehaze); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SCENE_TAG_ID)) { ParseString(pchild, dehaze->tuning_v21[index].scene, sizeof(dehaze->tuning_v21[index].scene)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &dehaze->tuning_v21[index].en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_CFG_ALPHA_TAG_ID)) { int no = ParseFloatArray(pchild, &dehaze->tuning_v21[index].cfg_alpha, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_V21_SETTING_TAG_ID)) { if (!parseEntrySensorDehazeTuningSettingV21(pchild->ToElement(), &dehaze->tuning_v21[index], index)) { LOGE("parse error in Dehaze V21 setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_V21_SETTING_TAG_ID)) { if (!parseEntrySensorEnhanceTuningSettingV21(pchild->ToElement(), &dehaze->tuning_v21[index], index)) { LOGE("parse error in Enhance V21 setting (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_V21_SETTING_TAG_ID)) { if (!parseEntrySensorHistTuningSettingV21(pchild->ToElement(), &dehaze->tuning_v21[index], index)) { LOGE("parse error in Hist V21 setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDehazeSettingV20 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Dehaze_ModeCell_v20_t *pModeCell = (CalibDb_Dehaze_ModeCell_v20_t *)param; XML_CHECK_START(CALIB_SENSOR_DEHAZE_SETTING_TAG_ID, CALIB_SENSOR_DEHAZE_CALIBPARA_V20_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_MIN_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_min_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_MAX_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_max_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_YHIST_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.yhist_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_YBLK_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.yblk_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DARK_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dark_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_BRIGHT_MIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.bright_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_BRIGHT_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.bright_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_WT_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.wt_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_MIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TMAX_BASE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.tmax_base, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TMAX_OFF_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.tmax_off, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TMAX_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.tmax_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_CFG_WT_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.cfg_wt, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_CFG_AIR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.cfg_air, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_CFG_TMAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.cfg_tmax, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_THED_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_thed, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_WEITCUR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_weitcur, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_THED_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_thed, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_WEITCUR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_weitcur, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_STAB_FNUM_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.stab_fnum, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_WT_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.wt_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_AIR_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.air_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_TMAX_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.tmax_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDehazeTuningSettingV20 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Dehaze_ModeCell_v20_t *pModeCell = (CalibDb_Dehaze_ModeCell_v20_t *)param; XML_CHECK_START(CALIB_SENSOR_DEHAZE_SETTING_TAG_ID, CALIB_SENSOR_DEHAZE_TUNINGPARA_V20_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_MIN_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_min_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_MAX_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_max_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_YHIST_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.yhist_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_YBLK_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.yblk_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DARK_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dark_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_BRIGHT_MIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.bright_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_BRIGHT_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.bright_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_WT_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.wt_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_MIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TMAX_BASE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.tmax_base, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TMAX_OFF_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.tmax_off, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TMAX_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.tmax_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_CFG_WT_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.cfg_wt, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_CFG_AIR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.cfg_air, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_CFG_TMAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.cfg_tmax, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_THED_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_thed, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_WEITCUR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_weitcur, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_THED_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_thed, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_WEITCUR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_weitcur, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_STAB_FNUM_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.stab_fnum, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_WT_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.wt_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_AIR_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.air_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_TMAX_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.tmax_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDehazeSettingV21 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Dehaze_ModeCell_v21_t *pModeCell = (CalibDb_Dehaze_ModeCell_v21_t *)param; XML_CHECK_START(CALIB_SENSOR_DEHAZE_V21_SETTING_TAG_ID, CALIB_SENSOR_DEHAZE_CALIBPARA_V21_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_LC_EN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_lc_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_MIN_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_min_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_MAX_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_max_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_YHIST_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.yhist_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_YBLK_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.yblk_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DARK_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dark_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_BRIGHT_MIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.bright_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_BRIGHT_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.bright_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_WT_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.wt_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_MIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TMAX_BASE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.tmax_base, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TMAX_OFF_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.tmax_off, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TMAX_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.tmax_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_CFG_WT_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.cfg_wt, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_CFG_AIR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.cfg_air, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_CFG_TMAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.cfg_tmax, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_WEITCUR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_weitcur, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_BF_WEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.bf_weight, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_RANGE_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.range_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_SPACE_SIGMA_PRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.space_sigma_pre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_SPACE_SIGMA_CUR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.space_sigma_cur, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_STAB_FNUM_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.stab_fnum, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_WT_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.wt_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_AIR_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.air_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_TMAX_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.tmax_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_PRE_WET_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.pre_wet, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorDehazeTuningSettingV21 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Dehaze_ModeCell_v21_t *pModeCell = (CalibDb_Dehaze_ModeCell_v21_t *)param; XML_CHECK_START(CALIB_SENSOR_DEHAZE_V21_SETTING_TAG_ID, CALIB_SENSOR_DEHAZE_TUNINGPARA_V21_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_LC_EN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_lc_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_MIN_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_min_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_MAX_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_max_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_YHIST_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.yhist_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_YBLK_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.yblk_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DARK_TH_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dark_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_BRIGHT_MIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.bright_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_BRIGHT_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.bright_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_WT_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.wt_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_MIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_AIR_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.air_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TMAX_BASE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.tmax_base, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TMAX_OFF_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.tmax_off, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_TMAX_MAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.tmax_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_CFG_WT_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.cfg_wt, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_CFG_AIR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.cfg_air, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_CFG_TMAX_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.cfg_tmax, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_DC_WEITCUR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.dc_weitcur, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_BF_WEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.bf_weight, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_RANGE_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.range_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_SPACE_SIGMA_PRE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.space_sigma_pre, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_DEHAZE_SETTING_SPACE_SIGMA_CUR_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->dehaze_setting.space_sigma_cur, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_STAB_FNUM_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.stab_fnum, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_WT_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.wt_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_AIR_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.air_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_TMAX_SIGMA_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.tmax_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IIR_SETTING_PRE_WET_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->dehaze_setting.IIR_setting.pre_wet, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorEnhanceSettingV20 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Dehaze_ModeCell_v20_t *pModeCell = (CalibDb_Dehaze_ModeCell_v20_t *)param; XML_CHECK_START(CALIB_SENSOR_ENHANCE_SETTING_TAG_ID, CALIB_SENSOR_DEHAZE_CALIBPARA_V20_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->enhance_setting.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->enhance_setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_ENHANCE_VALUE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->enhance_setting.enhance_value, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorEnhanceTuningSettingV20 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Dehaze_ModeCell_v20_t *pModeCell = (CalibDb_Dehaze_ModeCell_v20_t *)param; XML_CHECK_START(CALIB_SENSOR_ENHANCE_SETTING_TAG_ID, CALIB_SENSOR_DEHAZE_TUNINGPARA_V20_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->enhance_setting.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->enhance_setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_ENHANCE_VALUE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->enhance_setting.enhance_value, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorEnhanceSettingV21 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Dehaze_ModeCell_v21_t *pModeCell = (CalibDb_Dehaze_ModeCell_v21_t *)param; XML_CHECK_START(CALIB_SENSOR_ENHANCE_V21_SETTING_TAG_ID, CALIB_SENSOR_DEHAZE_CALIBPARA_V21_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->enhance_setting.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->enhance_setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_ENHANCE_VALUE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->enhance_setting.enhance_value, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_ENHANCE_CHROMA_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->enhance_setting.enhance_chroma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_ENHANCE_CURVE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->enhance_setting.enhance_curve, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorEnhanceTuningSettingV21 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Dehaze_ModeCell_v21_t *pModeCell = (CalibDb_Dehaze_ModeCell_v21_t *)param; XML_CHECK_START(CALIB_SENSOR_ENHANCE_V21_SETTING_TAG_ID, CALIB_SENSOR_DEHAZE_TUNINGPARA_V21_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->enhance_setting.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->enhance_setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_ENHANCE_VALUE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->enhance_setting.enhance_value, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_ENHANCE_CHROMA_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->enhance_setting.enhance_chroma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ENHANCE_SETTING_ENHANCE_CURVE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->enhance_setting.enhance_curve, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHistSettingV20 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Dehaze_ModeCell_v20_t *pModeCell = (CalibDb_Dehaze_ModeCell_v20_t *)param; XML_CHECK_START(CALIB_SENSOR_HIST_SETTING_TAG_ID, CALIB_SENSOR_DEHAZE_CALIBPARA_V20_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->hist_setting.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_CHANNEL_TAG_ID)) { int no = ParseUcharArray(pchild, pModeCell->hist_setting.hist_channel, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_PARA_EN_TAG_ID)) { int no = ParseUcharArray(pchild, pModeCell->hist_setting.hist_para_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_GRATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_gratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_TH_OFF_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_th_off, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_K_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_k, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_MIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_SCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_scale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_CFG_GRATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.cfg_gratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHistTuningSettingV20 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Dehaze_ModeCell_v20_t *pModeCell = (CalibDb_Dehaze_ModeCell_v20_t *)param; XML_CHECK_START(CALIB_SENSOR_HIST_SETTING_TAG_ID, CALIB_SENSOR_DEHAZE_TUNINGPARA_V20_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->hist_setting.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_CHANNEL_TAG_ID)) { int no = ParseUcharArray(pchild, pModeCell->hist_setting.hist_channel, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_PARA_EN_TAG_ID)) { int no = ParseUcharArray(pchild, pModeCell->hist_setting.hist_para_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_GRATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_gratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_TH_OFF_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_th_off, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_K_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_k, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_MIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_SCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_scale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_CFG_GRATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.cfg_gratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHistSettingV21 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Dehaze_ModeCell_v21_t *pModeCell = (CalibDb_Dehaze_ModeCell_v21_t *)param; XML_CHECK_START(CALIB_SENSOR_HIST_V21_SETTING_TAG_ID, CALIB_SENSOR_DEHAZE_CALIBPARA_V21_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->hist_setting.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_PARA_EN_TAG_ID)) { int no = ParseUcharArray(pchild, pModeCell->hist_setting.hist_para_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_GRATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_gratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_TH_OFF_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_th_off, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_K_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_k, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_MIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_SCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_scale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_CFG_GRATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.cfg_gratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorHistTuningSettingV21 ( const XMLElement* pelement, void* param, int index ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); CalibDb_Dehaze_ModeCell_v21_t *pModeCell = (CalibDb_Dehaze_ModeCell_v21_t *)param; XML_CHECK_START(CALIB_SENSOR_HIST_V21_SETTING_TAG_ID, CALIB_SENSOR_DEHAZE_TUNINGPARA_V21_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_EN_TAG_ID)) { int no = ParseFloatArray(pchild, &pModeCell->hist_setting.en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_PARA_EN_TAG_ID)) { int no = ParseUcharArray(pchild, pModeCell->hist_setting.hist_para_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_GRATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_gratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_TH_OFF_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_th_off, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_K_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_k, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_MIN_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_min, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_HIST_SCALE_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.hist_scale, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_HIST_SETTING_CFG_GRATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pModeCell->hist_setting.cfg_gratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAfWindow ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AF_WINDOW_TAG_ID, CALIB_SENSOR_AF_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_AF_t, af); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_H_OFFS_TAG_ID)) { int no = ParseUshortArray(psecsubchild, &af->win_h_offs, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_V_OFFS_TAG_ID)) { int no = ParseUshortArray(psecsubchild, &af->win_v_offs, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_H_SIZE_TAG_ID)) { int no = ParseUshortArray(psecsubchild, &af->win_h_size, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_V_SIZE_TAG_ID)) { int no = ParseUshortArray(psecsubchild, &af->win_v_size, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAfFixedMode ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AF_FIXED_MODE_TAG_ID, CALIB_SENSOR_AF_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_AF_t, af); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_DEF_CODE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &af->fixed_mode.code, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAfMacroMode ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AF_MACRO_MODE_TAG_ID, CALIB_SENSOR_AF_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_AF_t, af); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_DEF_CODE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &af->macro_mode.code, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAfInfinityMode ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AF_INFINITY_MODE_TAG_ID, CALIB_SENSOR_AF_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_AF_t, af); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_DEF_CODE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &af->infinity_mode.code, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAfContrastAf ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_AF_t, af); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AF_CONTRAST_AF_TAG_ID, CALIB_SENSOR_AF_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_CONTRAST_ENABLE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &af->contrast_af.enable, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_SEARCH_STRATEGY_TAG_ID)) { char* value = Toupper(secsubtag.Value()); std::string s_value(value); if (s_value == CALIB_SENSOR_AF_SEARCH_STRATEGY_ADAPTIVE) { af->contrast_af.Afss = CAM_AFM_FSS_ADAPTIVE_RANGE; } else if (s_value == CALIB_SENSOR_AF_SEARCH_STRATEGY_HILLCLIMB) { af->contrast_af.Afss = CAM_AFM_FSS_HILLCLIMBING; } else if (s_value == CALIB_SENSOR_AF_SEARCH_STRATEGY_FULL) { af->contrast_af.Afss = CAM_AFM_FSS_FULLRANGE; } else if (s_value == CALIB_SENSOR_AF_SEARCH_STRATEGY_MUTIWIN) { af->contrast_af.Afss = CAM_AFM_FSS_MUTIWINDOW; } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_FULL_DIR_TAG_ID)) { char* value = Toupper(secsubtag.Value()); std::string s_value(value); if (s_value == CALIB_SENSOR_AF_DIR_POSITIVE) { af->contrast_af.FullDir = CAM_AFM_POSITIVE_SEARCH; } else if (s_value == CALIB_SENSOR_AF_DIR_NEGATIVE) { af->contrast_af.FullDir = CAM_AFM_NEGATIVE_SEARCH; } else if (s_value == CALIB_SENSOR_AF_DIR_ADAPTIVE) { af->contrast_af.FullDir = CAM_AFM_ADAPTIVE_SEARCH; } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_FULL_RANGE_TBL_TAG_ID)) { int ArraySize = secsubtag.Size(); af->contrast_af.FullSteps = ArraySize; int no = ParseUshortArray(psecsubchild, af->contrast_af.FullRangeTbl, ArraySize); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_ADAPTIVE_DIR_TAG_ID)) { char* value = Toupper(secsubtag.Value()); std::string s_value(value); if (s_value == CALIB_SENSOR_AF_DIR_POSITIVE) { af->contrast_af.AdaptiveDir = CAM_AFM_POSITIVE_SEARCH; } else if (s_value == CALIB_SENSOR_AF_DIR_NEGATIVE) { af->contrast_af.AdaptiveDir = CAM_AFM_NEGATIVE_SEARCH; } else if (s_value == CALIB_SENSOR_AF_DIR_ADAPTIVE) { af->contrast_af.AdaptiveDir = CAM_AFM_ADAPTIVE_SEARCH; } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_ADAPTIVE_RANGE_TBL_TAG_ID)) { int ArraySize = secsubtag.Size(); af->contrast_af.AdaptiveSteps = ArraySize; int no = ParseUshortArray(psecsubchild, af->contrast_af.AdaptRangeTbl, ArraySize); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_TRIG_THERS_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &af->contrast_af.TrigThers, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_LUMA_TRIG_THERS_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &af->contrast_af.LumaTrigThers, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_STABLE_THERS_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &af->contrast_af.StableThers, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_STABLE_FRAMES_TAG_ID)) { int no = ParseUshortArray(psecsubchild, &af->contrast_af.StableFrames, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_STABLE_TIME_TAG_ID)) { int no = ParseUshortArray(psecsubchild, &af->contrast_af.StableTime, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_SCENE_DIFF_ENABLE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &af->contrast_af.SceneDiffEnable, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_SCENE_DIFF_THERS_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &af->contrast_af.SceneDiffThers, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_SCENE_DIFF_BLK_THERS_TAG_ID)) { int no = ParseUshortArray(psecsubchild, &af->contrast_af.SceneDiffBlkThers, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_CENTER_SCENE_DIFF_THERS_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &af->contrast_af.CenterSceneDiffThers, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_VALID_MAX_MIN_RATIO_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &af->contrast_af.ValidMaxMinRatio, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_VALID_VALUE_THERS_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &af->contrast_af.ValidValueThers, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_OUT_FOCUS_VALUE_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &af->contrast_af.OutFocusValue, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_OUT_FOCUS_POS_TAG_ID)) { int no = ParseUshortArray(psecsubchild, &af->contrast_af.OutFocusPos, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_FLAT_VALUE_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &af->contrast_af.FlatValue, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_WEIGHT_ENABLE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &af->contrast_af.WeightEnable, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_WEIGHT_MATRIX_TAG_ID)) { int no = ParseUshortArray(psecsubchild, af->contrast_af.Weight, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_SEARCH_PAUSE_LUMA_ENABLE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &af->contrast_af.SearchPauseLumaEnable, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_SEARCH_PAUSE_LUMA_THERS_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &af->contrast_af.SearchPauseLumaThers, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_SEARCH_PAUSE_LUMA_STABLE_FRAMES_TAG_ID)) { int no = ParseUshortArray(psecsubchild, &af->contrast_af.SearchLumaStableFrames, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_SEARCH_PAUSE_LUMA_STABLE_THERS_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &af->contrast_af.SearchLumaStableThers, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAfLaserAf ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_AF_t, af); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AF_LASER_AF_TAG_ID, CALIB_SENSOR_AF_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_LASERAF_ENABLE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &af->laser_af.enable, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_LASER_AF_VCMDOT_TAG_ID)) { int no = ParseFloatArray(psecsubchild, af->laser_af.vcmDot, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_LASER_AF_DISTANCEDOT_TAG_ID)) { int no = ParseFloatArray(psecsubchild, af->laser_af.distanceDot, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAfPdaf ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_AF_t, af); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AF_PDAF_TAG_ID, CALIB_SENSOR_AF_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_PDAF_ENABLE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &af->pdaf.enable, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAfVcmCfg ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_AF_t, af); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AF_VCM_TAG_ID, CALIB_SENSOR_AF_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_VCM_START_CURRENT_TAG_ID)) { int no = ParseIntArray(psecsubchild, &af->vcmcfg.start_current, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_VCM_RATED_CURRENT_TAG_ID)) { int no = ParseIntArray(psecsubchild, &af->vcmcfg.rated_current, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_VCM_STEP_MODE_TAG_ID)) { int no = ParseIntArray(psecsubchild, &af->vcmcfg.step_mode, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_EXTRA_DELAY_TAG_ID)) { int no = ParseIntArray(psecsubchild, &af->vcmcfg.extra_delay, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAfMeasISO ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_AF_MEAS_ISO_TAG_ID, CALIB_SENSOR_AF_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_AF_t, af); int index = *((int*)param); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); const char* value = tag.Value(); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_MEAS_ISO_ISO_TAG_ID)) { int no = ParseIntArray(pchild, &af->measiso_cfg[index].iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_MEAS_ISO_AFMTHRES_TAG_ID)) { int no = ParseUshortArray(pchild, &af->measiso_cfg[index].afmThres, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_MEAS_ISO_GAMMA_Y_TAG_ID)) { int no = ParseUshortArray(pchild, af->measiso_cfg[index].gammaY, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_MEAS_ISO_GAUSS_WEIGHT_TAG_ID)) { int no = ParseUcharArray(pchild, af->measiso_cfg[index].gaussWeight, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorAfZoomFocusTbl ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_AF_t, af); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AF_ZOOM_FOCUS_TBL_TAG_ID, CALIB_SENSOR_AF_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag secsubtag = XmlTag(psecsubchild->ToElement()); std::string secsubTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubtag.Type(), secsubtag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_ZOOM_FOCUS_FOCUS_LENGTH_TAG_ID)) { int no = ParseFloatArray(psecsubchild, af->zoomfocus_tbl.focal_length, secsubtag.Size()); af->zoomfocus_tbl.tbl_len = no; DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_ZOOM_FOCUS_ZOOMPOS_TAG_ID)) { int no = ParseIntArray(psecsubchild, af->zoomfocus_tbl.zoom_pos, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_ZOOM_FOCUS_FOCUSINFPOS_TAG_ID)) { int no = ParseIntArray(psecsubchild, af->zoomfocus_tbl.focus_infpos, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_ZOOM_FOCUS_FOCUSMACROPOS_TAG_ID)) { int no = ParseIntArray(psecsubchild, af->zoomfocus_tbl.focus_macropos, secsubtag.Size()); DCT_ASSERT((no == secsubtag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorAf ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_AF_t, af); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_AF_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); af->af_mode = -1; while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_MODE_TAG_ID)) { int no = ParseCharArray(pchild, &af->af_mode, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_WINDOW_TAG_ID)) { if (!parseEntrySensorAfWindow(pchild->ToElement())) { LOGE("parse error in Af (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_FIXED_MODE_TAG_ID)) { if (!parseEntrySensorAfFixedMode(pchild->ToElement())) { LOGE("parse error in Af (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_MACRO_MODE_TAG_ID)) { if (!parseEntrySensorAfMacroMode(pchild->ToElement())) { LOGE("parse error in Af (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_INFINITY_MODE_TAG_ID)) { if (!parseEntrySensorAfInfinityMode(pchild->ToElement())) { LOGE("parse error in Af (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_CONTRAST_AF_TAG_ID)) { if (!parseEntrySensorAfContrastAf(pchild->ToElement())) { LOGE("parse error in Af (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_LASER_AF_TAG_ID)) { if (!parseEntrySensorAfLaserAf(pchild->ToElement())) { LOGE("parse error in Af (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_PDAF_TAG_ID)) { if (!parseEntrySensorAfPdaf(pchild->ToElement())) { LOGE("parse error in Af (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_VCM_TAG_ID)) { if (!parseEntrySensorAfVcmCfg(pchild->ToElement())) { LOGE("parse error in Af (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_MEAS_ISO_TAG_ID)) { if (!parseEntryCell(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySensorAfMeasISO, param, (uint32_t)CALIB_SENSOR_AF_MEAS_ISO_TAG_ID, (uint32_t)CALIB_SENSOR_AF_TAG_ID)) { LOGE("parse error in Af meas_iso (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_AF_ZOOM_FOCUS_TBL_TAG_ID)) { if (!parseEntrySensorAfZoomFocusTbl(pchild->ToElement())) { LOGE("parse error in Af (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorLdch ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_LDCH_t, aldch); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_LDCH_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LDCH_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &aldch->ldch_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LDCH_MESH_FILE_TAG_ID)) { char mesh_filename[256]; ParseString(pchild, aldch->meshfile, sizeof(mesh_filename)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LDCH_CORRECT_LEVEL_TAG_ID)) { int no = ParseIntArray(pchild, &aldch->correct_level, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LDCH_CORRECT_LEVEL_MAX_TAG_ID)) { int no = ParseIntArray(pchild, &aldch->correct_level_max, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LDCH_LIGHT_CENTER_TAG_ID)) { int no = ParseDoubleArray(pchild, aldch->light_center, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LDCH_DISTORTION_COEFF_ID)) { int no = ParseDoubleArray(pchild, aldch->coefficient, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorLumaDetect ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_LUMA_DETECT_t, lumaDetect); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_LUMA_DETECT_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LUMA_DETECT_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &lumaDetect->luma_detect_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LUMA_DETECT_FIXED_TIMES_TAG_ID)) { int no = ParseIntArray(pchild, &lumaDetect->fixed_times, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LUMA_DETECT_THRESHOLD_TAG_ID)) { int no = ParseFloatArray(pchild, &lumaDetect->mutation_threshold, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_LUMA_DETECT_THRESHOLD_LEVEL2_TAG_ID)) { int no = ParseFloatArray(pchild, &lumaDetect->mutation_threshold_level2, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorFec ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_FEC_t, afec); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_FEC_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_FEC_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &afec->fec_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_FEC_MESH_FILE_TAG_ID)) { char mesh_filename[256]; ParseString(pchild, afec->meshfile, sizeof(mesh_filename)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_FEC_CORRECT_LEVEL_TAG_ID)) { int no = ParseIntArray(pchild, &afec->correct_level, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_FEC_LIGHT_CENTER_TAG_ID)) { int no = ParseDoubleArray(pchild, afec->light_center, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_FEC_DISTORTION_COEFF_ID)) { int no = ParseDoubleArray(pchild, afec->coefficient, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorEis ( const XMLElement* pelement, void* param ) { (void)pelement; (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_EIS_t, aeis); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_EIS_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_EIS_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &aeis->eis_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorOrb ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ORB_t, orb); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_ORB_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_ORB_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &orb->orb_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorCpsl ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Cpsl_t, cpsl); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_CPSL_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPSL_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &cpsl->support_en, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPSL_MODE_TAG_ID)) { int no = ParseIntArray(pchild, &cpsl->mode, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPSL_FORCE_GRAY_TAG_ID)) { int no = ParseUcharArray(pchild, &cpsl->gray, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPSL_LGHT_SRC_TAG_ID)) { int no = ParseIntArray(pchild, &cpsl->lght_src, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPSL_AUTO_ADJUST_SENS_TAG_ID)) { int no = ParseFloatArray(pchild, &cpsl->ajust_sens, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPSL_AUTO_ON2OFF_TH_TAG_ID)) { int no = ParseUintArray(pchild, &cpsl->on2off_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPSL_AUTO_OFF2ON_TH_TAG_ID)) { int no = ParseUintArray(pchild, &cpsl->off2on_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPSL_AUTO_SW_INTERVAL_TAG_ID)) { int no = ParseUintArray(pchild, &cpsl->sw_interval, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPSL_MANUAL_ON_TAG_ID)) { int no = ParseUcharArray(pchild, &cpsl->cpsl_on, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPSL_MANUAL_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, &cpsl->strength, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorColorAsGrey ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ColorAsGrey_t, colorAsGrey); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_COLOR_AS_GREY_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_COLOR_AS_GREY_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &colorAsGrey->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryBayernrV2Setting_2D ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_SETTING_TAG_ID, CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(list_head, list_bayernr_v2); CalibDb_Bayernr_V2_t *pProfile = (CalibDb_Bayernr_V2_t *)param; Calibdb_Bayernr_2Dparams_V2_t *pParam = (Calibdb_Bayernr_2Dparams_V2_t *)malloc(sizeof(Calibdb_Bayernr_2Dparams_V2_t)); if(NULL == pParam) { LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__); return false; } memset(pParam, 0x00, sizeof(Calibdb_Bayernr_2Dparams_V2_t)); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_SNR_MODE_TAG_ID)) { ParseString(pchild, pParam->snr_mode, sizeof(pParam->snr_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_SENSOR_MODE_TAG_ID)) { ParseString(pchild, pParam->sensor_mode, sizeof(pParam->sensor_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_FILTER_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bayernrv2_filter_strength_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_GAUSS_GUIDE_TAG_ID)) { int no = ParseIntArray(pchild, pParam->bayernrv2_gauss_guide_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_LUMA_POINT_TAG_ID)) { int no = ParseIntArray(pchild, pParam->bayernrv2_filter_lumapoint_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_SIGMA_TAG_ID)) { int no = ParseIntArray(pchild, (int *)pParam->bayernrv2_filter_sigma_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_EDGESOFTS_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bayernrv2_filter_edgesofts_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bayernrv2_filter_soft_threshold_ratio_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_WEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bayernrv2_filter_out_wgt_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); if (pParam) { list_prepare_item(&pParam->listItem); list_add_tail(&pParam->listItem, &pProfile->st2DParams.listHead); } LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntryBayernrV2Setting_3D ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_SETTING_TAG_ID, CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_TAG_ID); CalibDb_Bayernr_V2_t *pProfile = (CalibDb_Bayernr_V2_t *)param; CalibDb_Bayernr_3DParams_V2_t *pParam = (CalibDb_Bayernr_3DParams_V2_t *)malloc(sizeof(CalibDb_Bayernr_3DParams_V2_t)); if(NULL == pParam) { LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__); return false; } memset(pParam, 0x00, sizeof(CalibDb_Bayernr_3DParams_V2_t)); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_SNR_MODE_TAG_ID)) { ParseString(pchild, pParam->snr_mode, sizeof(pParam->snr_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_SENSOR_MODE_TAG_ID)) { ParseString(pchild, pParam->sensor_mode, sizeof(pParam->sensor_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_FILTER_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bayernrv2_tnr_filter_strength_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_SP_FILTER_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bayernrv2_tnr_sp_filter_strength_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_LO_CLIPWGT_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bayernrv2_tnr_lo_clipwgt_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_HI_CLIPWGT_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bayernrv2_tnr_hi_clipwgt_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_SOFTWGT_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bayernrv2_tnr_softwgt_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_LUMA_POINT_TAG_ID)) { int no = ParseIntArray(pchild, pParam->bayernrv2_lumapoint_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_SIGMA_TAG_ID)) { int no = ParseIntArray(pchild, (int *)pParam->bayernrv2_sigma_r, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); if (pParam) { list_prepare_item(&pParam->listItem); list_add_tail(&pParam->listItem, &pProfile->st3DParams.listHead); } LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorBayernrV2Setting2D ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_TAG_ID, CALIB_SENSOR_BAYERNR_V2_TAG_ID); CalibDb_Bayernr_V2_t *pBayernrProfile = (CalibDb_Bayernr_V2_t *)param; const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_ENABLE_TAG_ID)) { int no = ParseIntArray(psubchild, &pBayernrProfile->st2DParams.bayernrv2_2dnr_enable, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_SETTING_TAG_ID)) { if (!parseEntryCell2(psubchild->ToElement(), subTag.Size(), &RkAiqCalibParser::parseEntryBayernrV2Setting_2D, param, (uint32_t)CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_SETTING_TAG_ID, (uint32_t)CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_TAG_ID)) { LOGE("parse error in bayernrV2 setting (%s)", subTagname.c_str()); return (false); } } else { LOGE("%s(%d): parse error in stManual (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorBayernrV2Setting3D ( const XMLElement* pelement, void* param ) { LOGD("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_TAG_ID, CALIB_SENSOR_BAYERNR_V2_TAG_ID); CalibDb_Bayernr_V2_t *pBayernrProfile = (CalibDb_Bayernr_V2_t *)param; const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag subTag = XmlTag(psubchild->ToElement()); std::string subTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): subTagname = %s\n", __FUNCTION__, __LINE__, subTagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_ENABLE_TAG_ID)) { int no = ParseIntArray(psubchild, &pBayernrProfile->st3DParams.bayernrv2_tnr_enable, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_SETTING_TAG_ID)) { if (!parseEntryCell2(psubchild->ToElement(), subTag.Size(), &RkAiqCalibParser::parseEntryBayernrV2Setting_3D, param, (uint32_t)CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_SETTING_TAG_ID, (uint32_t)CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_TAG_ID)) { LOGE("parse error in bayernrV2 setting (%s)", subTagname.c_str()); return (false); } } else { LOGE("%s(%d): parse error in stManual (unknow tag: %s )\n", __FUNCTION__, __LINE__, subTagname.c_str()); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorBayernrV2 ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(list_head, list_bayernr_v2); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_BAYERNR_V2_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); CalibDb_Bayernr_V2_t *pBayernrProfile = (CalibDb_Bayernr_V2_t *)malloc(sizeof(CalibDb_Bayernr_V2_t)); if(NULL == pBayernrProfile) { LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__); return false; } memset(pBayernrProfile, 0x00, sizeof(CalibDb_Bayernr_V2_t)); INIT_LIST_HEAD(&pBayernrProfile->st2DParams.listHead); INIT_LIST_HEAD(&pBayernrProfile->st3DParams.listHead); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_MODE_NAME_TAG_ID)) { ParseString(pchild, pBayernrProfile->modeName, sizeof(pBayernrProfile->modeName)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR2D_TAG_ID)) { if (!parseEntrySensorBayernrV2Setting2D(pchild->ToElement(), (void *)pBayernrProfile)) { LOGE("parse error in bayernr 2D param (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_BAYERNR_V2_BAYERNR3D_TAG_ID)) { if (!parseEntrySensorBayernrV2Setting3D(pchild->ToElement(), (void *)pBayernrProfile)) { LOGE("parse error in bayernr 3D param (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); bool result = CamCalibdbAddBayernrV2Profile(list_bayernr_v2, pBayernrProfile); DCT_ASSERT(result == true); // free linked ecm_schemes struct list_head* l_2d = pBayernrProfile->st2DParams.listHead.next; while (l_2d != &pBayernrProfile->st2DParams.listHead) { struct list_head* temp = l_2d->next; Calibdb_Bayernr_2Dparams_V2_t *pTempParam = container_of(l_2d, Calibdb_Bayernr_2Dparams_V2_t, listItem); list_del(l_2d); free(pTempParam); l_2d = temp; } struct list_head* l_3d = pBayernrProfile->st3DParams.listHead.next; while (l_3d != &pBayernrProfile->st3DParams.listHead) { struct list_head* temp = l_3d->next; CalibDb_Bayernr_3DParams_V2_t *pTempParam = container_of(l_3d, CalibDb_Bayernr_3DParams_V2_t, listItem); list_del(l_3d); free(pTempParam); l_3d = temp; } LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryYnrV2Setting ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_YNR_V2_SETTING_TAG_ID, CALIB_SENSOR_YNR_V2_TAG_ID); Calibdb_Ynr_V2_t *pProfile = (Calibdb_Ynr_V2_t *)param; Calibdb_Ynr_params_V2_t *pParam = (Calibdb_Ynr_params_V2_t *)malloc(sizeof(Calibdb_Ynr_params_V2_t)); if(NULL == pParam) { LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__); return false; } memset(pParam, 0x00, sizeof(Calibdb_Ynr_params_V2_t)); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_SNR_MODE_TAG_ID)) { ParseString(pchild, pParam->snr_mode, sizeof(pParam->snr_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_SENSOR_MODE_TAG_ID)) { ParseString(pchild, pParam->sensor_mode, sizeof(pParam->sensor_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_BFT3X3_BYPASS_TAG_ID)) { int no = ParseIntArray(pchild, pParam->ynr_bft3x3_bypass_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_LBFT5X5_BYPASS_TAG_ID)) { int no = ParseIntArray(pchild, pParam->ynr_lbft5x5_bypass_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_LGFT3X3_BYPASS_TAG_ID)) { int no = ParseIntArray(pchild, pParam->ynr_lgft3x3_bypass_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_FLT1X1_BYPASS_TAG_ID)) { int no = ParseIntArray(pchild, pParam->ynr_flt1x1_bypass_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_SFT5X5_BYPASS_TAG_ID)) { int no = ParseIntArray(pchild, pParam->ynr_sft5x5_bypass_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_RNR_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, (float *)pParam->ynr_rnr_strength_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_SIGMA_CURVE_TAG_ID)) { int no = ParseFloatArray(pchild, (float *)pParam->sigmaCurve, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_YNR_CI_TAG_ID)) { int no = ParseFloatArray(pchild, (float *)pParam->ciISO_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_LOW_BF_TAG_ID)) { int no = ParseFloatArray(pchild, (float *)pParam->ynr_low_bf_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_LOW_THRED_ADJ_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->ynr_low_thred_adj_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_LOW_PEAK_SUPRESS_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->ynr_low_peak_supress_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_LOW_EDGE_ADJ_THRESH_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->ynr_low_edge_adj_thresh_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_LOW_CENTRE_WEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->ynr_low_center_weight_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_LOW_DIST_ADJ_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->ynr_low_dist_adj_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_LOW_WEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->ynr_low_weight_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_LOW_FILT_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, (float *)pParam->ynr_low_filt_strength_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_LOW_BI_WEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->ynr_low_bi_weight_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_BASE_FILT_WEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, (float *)pParam->ynr_base_filter_weight_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_HIGH_THRED_ADJ_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->ynr_high_thred_adj_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_HIGH_WEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->ynr_high_weight_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_HIGH_DIRECTION_WEIGHT_TAG_ID)) { int no = ParseFloatArray(pchild, (float *)pParam->ynr_direction_weight_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_HI_MIN_ADJ_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->ynr_hi_min_adj_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_HI_EDGE_THRED_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->ynr_hi_edge_thed_V2, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); if (pParam) { list_prepare_item(&pParam->listItem); list_add_tail(&pParam->listItem, &pProfile->listHead); } LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorYnrV2 ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(list_head, list_ynr_v2); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_YNR_V2_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); Calibdb_Ynr_V2_t *pYnrProfile = (Calibdb_Ynr_V2_t *)malloc(sizeof(Calibdb_Ynr_V2_t)); if(NULL == pYnrProfile) { LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__); return false; } memset(pYnrProfile, 0x00, sizeof(Calibdb_Ynr_V2_t)); INIT_LIST_HEAD(&pYnrProfile->listHead); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_MODE_NAME_TAG_ID)) { ParseString(pchild, pYnrProfile->modeName, sizeof(pYnrProfile->modeName)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &pYnrProfile->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_YNR_V2_SETTING_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntryYnrV2Setting, pYnrProfile, (uint32_t)CALIB_SENSOR_YNR_V2_SETTING_TAG_ID, (uint32_t)CALIB_SENSOR_YNR_V2_TAG_ID)) { LOGE("parse error in ynrV2 setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); bool result = CamCalibdbAddYnrV2Profile(list_ynr_v2, pYnrProfile); DCT_ASSERT(result == true); // free linked ecm_schemes struct list_head* l_item = pYnrProfile->listHead.next; while (l_item != &pYnrProfile->listHead) { struct list_head* temp = l_item->next; Calibdb_Ynr_params_V2_t *pTempParam = container_of(l_item, Calibdb_Ynr_params_V2_t, listItem); list_del(l_item); free(pTempParam); l_item = temp; } LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryCnrV1Setting ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_CNR_V1_SETTING_TAG_ID, CALIB_SENSOR_CNR_V1_TAG_ID); Calibdb_Cnr_V1_t *pProfile = (Calibdb_Cnr_V1_t *)param; Calibdb_Cnr_params_V1_t *pParam = (Calibdb_Cnr_params_V1_t *)malloc(sizeof(Calibdb_Cnr_params_V1_t)); if(NULL == pParam) { LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__); return false; } memset(pParam, 0x00, sizeof(Calibdb_Cnr_params_V1_t)); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_SNR_MODE_TAG_ID)) { ParseString(pchild, pParam->snr_mode, sizeof(pParam->snr_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_SENSOR_MODE_TAG_ID)) { ParseString(pchild, pParam->sensor_mode, sizeof(pParam->sensor_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_HF_BYPASS_TAG_ID)) { int no = ParseIntArray(pchild, pParam->rkcnr_hq_bila_bypass, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_LF_BYPASS_TAG_ID)) { int no = ParseIntArray(pchild, pParam->rkcnr_lq_bila_bypass, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_CNR_EXGAIN_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->rkcnr_exgain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_CNR_G_GAIN_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->rkcnr_g_gain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_COLOR_SAT_ADJ_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_COLOR_SAT_ADJ_ALPHA_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->offset, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_HF_SPIKERS_REDUCION_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->medRatio1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_HF_DENOISE_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->sigmaR1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_HF_COLOR_SAT_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->uvgain1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_HF_DENOISE_ALPHA_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bfRatio1, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_HF_BF_WGT_CLIP_TAG_ID)) { int no = ParseIntArray(pchild, pParam->hbf_wgt_clip, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_THUMB_SPIKERS_REDUCION_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->medRatio2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_THUMB_DENOISE_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->sigmaR2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_THUMB_COLOR_SAT_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->uvgain2, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_LF_DENOISE_STRENGTH_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->sigmaR3, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_LF_COLOR_SAT_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->uvgain3, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_LF_DENOISE_ALPHA_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bfRatio3, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_KERNEL_5X5_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->kernel_5x5_table, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); if (pParam) { list_prepare_item(&pParam->listItem); list_add_tail(&pParam->listItem, &pProfile->listHead); } LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorCnrV1 ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(list_head, list_cnr_v1); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_CNR_V1_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); Calibdb_Cnr_V1_t *pCnrProfile = (Calibdb_Cnr_V1_t *)malloc(sizeof(Calibdb_Cnr_V1_t)); if(NULL == pCnrProfile) { LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__); return false; } memset(pCnrProfile, 0x00, sizeof(Calibdb_Cnr_V1_t)); INIT_LIST_HEAD(&pCnrProfile->listHead); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_MODE_NAME_TAG_ID)) { ParseString(pchild, pCnrProfile->modeName, sizeof(pCnrProfile->modeName)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &pCnrProfile->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CNR_V1_SETTING_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntryCnrV1Setting, pCnrProfile, (uint32_t)CALIB_SENSOR_CNR_V1_SETTING_TAG_ID, (uint32_t)CALIB_SENSOR_CNR_V1_TAG_ID)) { LOGE("parse error in sharpV3 setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); bool result = CamCalibdbAddCnrV1Profile(list_cnr_v1, pCnrProfile); DCT_ASSERT(result == true); // free linked ecm_schemes struct list_head* l_item = pCnrProfile->listHead.next; while (l_item != &pCnrProfile->listHead) { struct list_head* temp = l_item->next; Calibdb_Cnr_params_V1_t *pTempParam = container_of(l_item, Calibdb_Cnr_params_V1_t, listItem); list_del(l_item); free(pTempParam); l_item = temp; } LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySharpV3Setting ( const XMLElement* pelement, void* param, int index ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); XML_CHECK_START(CALIB_SENSOR_SHARP_V3_SETTING_TAG_ID, CALIB_SENSOR_SHARP_V3_TAG_ID); Calibdb_Sharp_V3_t *pProfile = (Calibdb_Sharp_V3_t *)param; Calibdb_Sharp_params_V3_t *pParam = (Calibdb_Sharp_params_V3_t *)malloc(sizeof(Calibdb_Sharp_params_V3_t)); if(NULL == pParam) { LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__); return false; } memset(pParam, 0x00, sizeof(Calibdb_Sharp_params_V3_t)); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_SNR_MODE_TAG_ID)) { ParseString(pchild, pParam->snr_mode, sizeof(pParam->snr_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_SENSOR_MODE_TAG_ID)) { ParseString(pchild, pParam->sensor_mode, sizeof(pParam->sensor_mode)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_ISO_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->iso, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_LUMA_POINT_TAG_ID)) { int no = ParseShortArray(pchild, pParam->luma_point, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_LUMA_SIGMA_TAG_ID)) { int no = ParseShortArray(pchild, (short *)pParam->luma_sigma, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_PBF_GAIN_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->pbf_gain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_PBF_ADD_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->pbf_add, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_PBF_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->pbf_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_GAUSS_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->gaus_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_SHARP_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->sharp_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_HF_CLIP_TAG_ID)) { int no = ParseShortArray(pchild, (short *)pParam->lum_clip_h, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_BF_GAIN_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bf_gain, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_BF_ADD_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bf_add, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_BF_RATIO_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->bf_ratio, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_LOCAL_STRENGTH_TAG_ID)) { int no = ParseShortArray(pchild, (short *)pParam->ehf_th, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_PREFILTER_COEFF_TAG_ID)) { int no = ParseFloatArray(pchild, (float *)pParam->kernel_pre_bila_filter, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_GAUSSFILTER_COEFF_TAG_ID)) { int no = ParseFloatArray(pchild, (float *)pParam->kernel_bila_filter, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_HBFFILTER_COEFF_TAG_ID)) { int no = ParseFloatArray(pchild, (float *)pParam->kernel_range_filter, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_SHARP_RATIO_H_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->sharp_ratio_h, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_SHARP_RATIO_M_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->sharp_ratio_m, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_SHARP_RATIO_L_TAG_ID)) { int no = ParseFloatArray(pchild, pParam->sharp_ratio_l, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_CLIP_HF_TAG_ID)) { int no = ParseShortArray(pchild, (short *)pParam->clip_hf, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_CLIP_MF_TAG_ID)) { int no = ParseShortArray(pchild, (short *)pParam->clip_mf, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_CLIP_LF_TAG_ID)) { int no = ParseShortArray(pchild, (short *)pParam->clip_lf, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_LOCAL_WGT_TAG_ID)) { int no = ParseShortArray(pchild, (short *)pParam->local_wgt, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); if (pParam) { list_prepare_item(&pParam->listItem); list_add_tail(&pParam->listItem, &pProfile->listHead); } LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntrySensorSharpV3 ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(list_head, list_sharp_v3); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_SHARP_V3_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); Calibdb_Sharp_V3_t *pSharpProfile = (Calibdb_Sharp_V3_t *)malloc(sizeof(Calibdb_Sharp_V3_t)); if(NULL == pSharpProfile) { LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__); return false; } memset(pSharpProfile, 0x00, sizeof(Calibdb_Sharp_V3_t)); INIT_LIST_HEAD(&pSharpProfile->listHead); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_MODE_NAME_TAG_ID)) { ParseString(pchild, pSharpProfile->modeName, sizeof(pSharpProfile->modeName)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &pSharpProfile->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_SHARP_V3_SETTING_TAG_ID)) { if (!parseEntryCell2(pchild->ToElement(), tag.Size(), &RkAiqCalibParser::parseEntrySharpV3Setting, pSharpProfile, (uint32_t)CALIB_SENSOR_SHARP_V3_SETTING_TAG_ID, (uint32_t)CALIB_SENSOR_SHARP_V3_TAG_ID)) { LOGE("parse error in SharpV3 setting (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); bool result = CamCalibdbAddSharpV3Profile(list_sharp_v3, pSharpProfile); DCT_ASSERT(result == true); // free linked ecm_schemes struct list_head* l_item = pSharpProfile->listHead.next; while (l_item != &pSharpProfile->listHead) { struct list_head* temp = l_item->next; Calibdb_Sharp_params_V3_t *pTempParam = container_of(l_item, Calibdb_Sharp_params_V3_t, listItem); list_del(l_item); free(pTempParam); l_item = temp; } LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorIE ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_IE_t, ie); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_IE_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IE_ENABLE_TAG_ID)) { int no = ParseIntArray(pchild, &ie->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_IE_MODE_TAG_ID)) { int no = ParseIntArray(pchild, &ie->mode, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySensorCproc ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_cProc_t, cProc); autoTabForward(); XML_CHECK_START(CALIB_SENSOR_CPROC_TAG_ID, CALIB_SENSOR_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPROC_ENABLE_TAG_ID)) { int no = ParseUcharArray(pchild, &cProc->enable, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPROC_BRIGHTNESS_TAG_ID)) { int no = ParseUcharArray(pchild, &cProc->brightness, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPROC_CONTRAST_TAG_ID)) { int no = ParseUcharArray(pchild, &cProc->contrast, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPROC_SATURATION_TAG_ID)) { int no = ParseUcharArray(pchild, &cProc->saturation, tag.Size()); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SENSOR_CPROC_HUE_TAG_ID)) { int no = ParseUcharArray(pchild, &cProc->hue, tag.Size()); DCT_ASSERT((no == tag.Size())); } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySystemHDR ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_System_t, sysContrl); autoTabForward(); XML_CHECK_START(CALIB_SYSTEM_HDR_TAG_ID, CALIB_SYSTEM_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_HDR_ENABLE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &sysContrl->hdr_en, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_HDR_SUPPORT_MODE_TAG_ID)) { char hdr_mode[32]; ParseString(psecsubchild, hdr_mode, sizeof(hdr_mode)); if (xmlParseReadWrite == XML_PARSER_READ) { if (0 == strcasecmp(hdr_mode, HDR_MODE_2_FRAME_STR)) sysContrl->hdr_mode = RK_AIQ_ISP_HDR_MODE_2_FRAME_HDR; else if (0 == strcasecmp(hdr_mode, HDR_MODE_2_LINE_STR)) sysContrl->hdr_mode = RK_AIQ_ISP_HDR_MODE_2_LINE_HDR; else if (0 == strcasecmp(hdr_mode, HDR_MODE_3_FRAME_STR)) sysContrl->hdr_mode = RK_AIQ_ISP_HDR_MODE_3_FRAME_HDR; else if (0 == strcasecmp(hdr_mode, HDR_MODE_3_LINE_STR)) sysContrl->hdr_mode = RK_AIQ_ISP_HDR_MODE_3_LINE_HDR; } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psecsubchild; char tmpStr[64]; memset(tmpStr, 0, 64); if (sysContrl->hdr_mode == RK_AIQ_ISP_HDR_MODE_2_FRAME_HDR) strcpy(tmpStr, HDR_MODE_2_FRAME_STR); else if (sysContrl->hdr_mode == RK_AIQ_ISP_HDR_MODE_2_LINE_HDR) strcpy(tmpStr, HDR_MODE_2_LINE_STR); else if (sysContrl->hdr_mode == RK_AIQ_ISP_HDR_MODE_3_FRAME_HDR) strcpy(tmpStr, HDR_MODE_3_FRAME_STR); else if (sysContrl->hdr_mode == RK_AIQ_ISP_HDR_MODE_3_LINE_HDR) strcpy(tmpStr, HDR_MODE_3_LINE_STR); ParseString(psecsubchild, tmpStr, strlen(tmpStr)); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_HDR_LINE_MODE_TAG_ID)) { char line_mode[16]; ParseString(psecsubchild, line_mode, sizeof(line_mode)); if (xmlParseReadWrite == XML_PARSER_READ) { if (0 == strcasecmp(line_mode, HDR_LINE_MODE_DCG_STR)) sysContrl->line_mode = RK_AIQ_SENSOR_HDR_LINE_MODE_DCG; else if (0 == strcasecmp(line_mode, HDR_LINE_MODE_STAGGER_STR)) sysContrl->line_mode = RK_AIQ_SENSOR_HDR_LINE_MODE_STAGGER; } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psecsubchild; if (sysContrl->line_mode == RK_AIQ_SENSOR_HDR_LINE_MODE_DCG) pNode->FirstChild()->SetValue(HDR_LINE_MODE_DCG_STR); else if (sysContrl->line_mode == RK_AIQ_SENSOR_HDR_LINE_MODE_STAGGER) pNode->FirstChild()->SetValue(HDR_LINE_MODE_STAGGER_STR); } } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySystemDcgNormalGainCtrl ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_System_t, sysContrl); autoTabForward(); XML_CHECK_START(CALIB_SYSTEM_DCG_GAINCTRL_TAG_ID, CALIB_SYSTEM_DCG_SETTING_NORMAL_TAG_ID); const XMLNode* pthrdsubchild = pelement->FirstChild(); while (pthrdsubchild) { XmlTag secsubTag = XmlTag(pthrdsubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(pthrdsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_ENABLE_TAG_ID)) { uint8_t tmp = sysContrl->dcg.Normal.gainCtrl_en; int no = ParseUcharArray(pthrdsubchild, &tmp, secsubTag.Size()); sysContrl->dcg.Normal.gainCtrl_en = (tmp == 1) ? true : false; DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_LCG2HCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &sysContrl->dcg.Normal.lcg2hcg_gain_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } else if(XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_HCG2LCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &sysContrl->dcg.Normal.hcg2lcg_gain_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } pthrdsubchild = pthrdsubchild->NextSibling(); } const XMLNode* pchild = pelement->FirstChild(); XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySystemDcgHdrGainCtrl ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_System_t, sysContrl); autoTabForward(); XML_CHECK_START(CALIB_SYSTEM_DCG_GAINCTRL_TAG_ID, CALIB_SYSTEM_DCG_SETTING_HDR_TAG_ID); const XMLNode* pthrdsubchild = pelement->FirstChild(); while (pthrdsubchild) { XmlTag secsubTag = XmlTag(pthrdsubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(pthrdsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_ENABLE_TAG_ID)) { uint8_t tmp = sysContrl->dcg.Hdr.gainCtrl_en; int no = ParseUcharArray(pthrdsubchild, &tmp, secsubTag.Size()); sysContrl->dcg.Hdr.gainCtrl_en = (tmp == 1) ? true : false; DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_LCG2HCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &sysContrl->dcg.Hdr.lcg2hcg_gain_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } else if(XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_HCG2LCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &sysContrl->dcg.Hdr.hcg2lcg_gain_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } pthrdsubchild = pthrdsubchild->NextSibling(); } const XMLNode* pchild = pelement->FirstChild(); XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySystemDcgHdrEnvCtrl ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_System_t, sysContrl); autoTabForward(); XML_CHECK_START(CALIB_SYSTEM_DCG_ENVCTRL_TAG_ID, CALIB_SYSTEM_DCG_SETTING_HDR_TAG_ID); const XMLNode* pthrdsubchild = pelement->FirstChild(); while (pthrdsubchild) { XmlTag secsubTag = XmlTag(pthrdsubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(pthrdsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_ENABLE_TAG_ID)) { uint8_t tmp = sysContrl->dcg.Hdr.envCtrl_en; int no = ParseUcharArray(pthrdsubchild, &tmp, secsubTag.Size()); sysContrl->dcg.Hdr.envCtrl_en = (tmp == 1) ? true : false; DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_LCG2HCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &sysContrl->dcg.Hdr.lcg2hcg_env_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } else if(XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_HCG2LCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &sysContrl->dcg.Hdr.hcg2lcg_env_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } pthrdsubchild = pthrdsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySystemDcgNormalEnvCtrl ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_System_t, sysContrl); autoTabForward(); XML_CHECK_START(CALIB_SYSTEM_DCG_ENVCTRL_TAG_ID, CALIB_SYSTEM_DCG_SETTING_NORMAL_TAG_ID); const XMLNode* pthrdsubchild = pelement->FirstChild(); while (pthrdsubchild) { XmlTag secsubTag = XmlTag(pthrdsubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(pthrdsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_ENABLE_TAG_ID)) { uint8_t tmp = sysContrl->dcg.Normal.envCtrl_en; int no = ParseUcharArray(pthrdsubchild, &tmp, secsubTag.Size()); sysContrl->dcg.Normal.envCtrl_en = (tmp == 1) ? true : false; DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_LCG2HCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &sysContrl->dcg.Normal.lcg2hcg_env_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } else if(XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_HCG2LCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &sysContrl->dcg.Normal.hcg2lcg_env_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } pthrdsubchild = pthrdsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySystemDcgHdrSetting ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_System_t, sysContrl); autoTabForward(); XML_CHECK_START(CALIB_SYSTEM_DCG_SETTING_HDR_TAG_ID, CALIB_SYSTEM_DCG_SETTING_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_SUPPORT_EN_TAG_ID)) { uint8_t tmp = sysContrl->dcg.Hdr.support_en; int no = ParseUcharArray(psecsubchild, &tmp, subTag.Size()); sysContrl->dcg.Hdr.support_en = (tmp == 1) ? true : false; DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_OPTYPE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SYSTEM_DCG_OPTYPE_AUTO) { sysContrl->dcg.Hdr.dcg_optype = RK_AIQ_OP_MODE_AUTO; } else if (s_value == CALIB_SYSTEM_DCG_OPTYPE_MANUAL) { sysContrl->dcg.Hdr.dcg_optype = RK_AIQ_OP_MODE_MANUAL; } else { sysContrl->dcg.Hdr.dcg_optype = RK_AIQ_OP_MODE_INVALID; LOGE("%s(%d): invalid dcg Hdr.OpType = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psecsubchild; if (sysContrl->dcg.Hdr.dcg_optype == RK_AIQ_OP_MODE_AUTO) { pNode->FirstChild()->SetValue(CALIB_SYSTEM_DCG_OPTYPE_AUTO); } else if (sysContrl->dcg.Hdr.dcg_optype == RK_AIQ_OP_MODE_MANUAL) { pNode->FirstChild()->SetValue(CALIB_SYSTEM_DCG_OPTYPE_MANUAL); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid dcg Hdr.OpType = %d\n", __FUNCTION__, __LINE__, sysContrl->dcg.Hdr.dcg_optype); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_MODE_INIT_TAG_ID)) { int no = ParseIntArray(psecsubchild, sysContrl->dcg.Hdr.dcg_mode.Coeff, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_RATIO_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &sysContrl->dcg.Hdr.dcg_ratio, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_SYNC_SWITCH_TAG_ID)) { uint8_t tmp = sysContrl->dcg.Hdr.sync_switch; int no = ParseUcharArray(psecsubchild, &tmp, subTag.Size()); sysContrl->dcg.Hdr.sync_switch = (tmp == 1) ? true : false; DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_GAINCTRL_TAG_ID)) { if (!parseEntrySystemDcgHdrGainCtrl(psecsubchild->ToElement())) { LOGE("parse error in System DCG HdrGainCtrl (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_ENVCTRL_TAG_ID)) { if (!parseEntrySystemDcgHdrEnvCtrl(psecsubchild->ToElement())) { LOGE("parse error in System DCG HdrEnvCtrl (%s)", subTagname.c_str()); return (false); } } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySystemDcgNormalSetting ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_System_t, sysContrl); autoTabForward(); XML_CHECK_START(CALIB_SYSTEM_DCG_SETTING_NORMAL_TAG_ID, CALIB_SYSTEM_DCG_SETTING_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_SUPPORT_EN_TAG_ID)) { uint8_t tmp = sysContrl->dcg.Normal.support_en; int no = ParseUcharArray(psecsubchild, &tmp, subTag.Size()); sysContrl->dcg.Normal.support_en = (tmp == 1) ? true : false; DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_OPTYPE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_SYSTEM_DCG_OPTYPE_AUTO) { sysContrl->dcg.Normal.dcg_optype = RK_AIQ_OP_MODE_AUTO; } else if (s_value == CALIB_SYSTEM_DCG_OPTYPE_MANUAL) { sysContrl->dcg.Normal.dcg_optype = RK_AIQ_OP_MODE_MANUAL; } else { sysContrl->dcg.Normal.dcg_optype = RK_AIQ_OP_MODE_INVALID; LOGE("%s(%d): invalid dcg OpType = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psecsubchild; if (sysContrl->dcg.Normal.dcg_optype == RK_AIQ_OP_MODE_AUTO) { pNode->FirstChild()->SetValue(CALIB_SYSTEM_DCG_OPTYPE_AUTO); } else if (sysContrl->dcg.Normal.dcg_optype == RK_AIQ_OP_MODE_MANUAL) { pNode->FirstChild()->SetValue(CALIB_SYSTEM_DCG_OPTYPE_MANUAL); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid dcg OpType = %d\n", __FUNCTION__, __LINE__, sysContrl->dcg.Normal.dcg_optype); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_MODE_INIT_TAG_ID)) { int no = ParseIntArray(psecsubchild, sysContrl->dcg.Normal.dcg_mode.Coeff, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_RATIO_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &sysContrl->dcg.Normal.dcg_ratio, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_GAINCTRL_TAG_ID)) { if (!parseEntrySystemDcgNormalGainCtrl(psecsubchild->ToElement())) { LOGE("parse error in System DCG NormalGainCtrl(%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_ENVCTRL_TAG_ID)) { if (!parseEntrySystemDcgNormalEnvCtrl(psecsubchild->ToElement())) { LOGE("parse error in System DCG NormalEnvCtrl(%s)", subTagname.c_str()); return (false); } } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySystemDcgSetting ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SYSTEM_DCG_SETTING_TAG_ID, CALIB_SYSTEM_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_SETTING_NORMAL_TAG_ID)) { if (!parseEntrySystemDcgNormalSetting(psecsubchild->ToElement())) { LOGE("parse error in Dcg NormalSetting (%s)", subTagname.c_str()); return (false); } } else if(XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_SETTING_HDR_TAG_ID)) { if (!parseEntrySystemDcgHdrSetting(psecsubchild->ToElement())) { LOGE("parse error in Dcg HdrSetting (%s)", subTagname.c_str()); return (false); } } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySystemExpDelayHdr ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_System_t, sysContrl); autoTabForward(); XML_CHECK_START(CALIB_SYSTEM_EXP_DELAY_HDR_TAG_ID, CALIB_SYSTEM_EXP_DELAY_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_EXP_DELAY_TIME_TAG_ID)) { int no = ParseIntArray(psecsubchild, &sysContrl->exp_delay.Hdr.time_delay, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_EXP_DELAY_GAIN_TAG_ID)) { int no = ParseIntArray(psecsubchild, &sysContrl->exp_delay.Hdr.gain_delay, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_EXP_DELAY_DCG_TAG_ID)) { int no = ParseIntArray(psecsubchild, &sysContrl->exp_delay.Hdr.dcg_delay, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySystemExpDelayNormal ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_System_t, sysContrl); autoTabForward(); XML_CHECK_START(CALIB_SYSTEM_EXP_DELAY_NORMAL_TAG_ID, CALIB_SYSTEM_EXP_DELAY_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_EXP_DELAY_TIME_TAG_ID)) { int no = ParseIntArray(psecsubchild, &sysContrl->exp_delay.Normal.time_delay, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_EXP_DELAY_GAIN_TAG_ID)) { int no = ParseIntArray(psecsubchild, &sysContrl->exp_delay.Normal.gain_delay, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_EXP_DELAY_DCG_TAG_ID)) { int no = ParseIntArray(psecsubchild, &sysContrl->exp_delay.Normal.dcg_delay, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySystemExpDelay ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SYSTEM_EXP_DELAY_TAG_ID, CALIB_SYSTEM_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_EXP_DELAY_NORMAL_TAG_ID)) { if (!parseEntrySystemExpDelayNormal(psecsubchild->ToElement())) { LOGE("parse error in ExpDelay Normal setting (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_EXP_DELAY_HDR_TAG_ID)) { if (!parseEntrySystemExpDelayHdr(psecsubchild->ToElement())) { LOGE("parse error in ExpDelay Hdr setting (%s)", subTagname.c_str()); return (false); } } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntrySystem ( const XMLElement* pelement, void* param ) { LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_SYSTEM_TAG_ID, CALIB_FILESTART_TAG_ID); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_HDR_TAG_ID)) { if (!parseEntrySystemHDR(pchild->ToElement())) { LOGE("parse error in System (%s)", tagname.c_str()); return (false); } } else if(XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_DCG_SETTING_TAG_ID)) { if (!parseEntrySystemDcgSetting(pchild->ToElement())) { LOGE("parse error in System (%s)", tagname.c_str()); return (false); } } else if(XML_CHECK_TAGID_COMPARE(CALIB_SYSTEM_EXP_DELAY_TAG_ID)) { if (!parseEntrySystemExpDelay(pchild->ToElement())) { LOGE("parse error in System (%s)", tagname.c_str()); return (false); } } pchild = pchild->NextSibling(); } XML_CHECK_END(); autoTabBackward(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); return (true); } bool RkAiqCalibParser::parseEntryExpSetGain2Reg ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_GAIN2REG_TAG_ID, CALIB_EXPSET_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* pthrdsubchild = pelement->FirstChild(); while (pthrdsubchild) { XmlTag secsubTag = XmlTag(pthrdsubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(pthrdsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_GAIN2REG_ISLINEAR_TAG_ID)) { uint8_t tempVal = expset->Gain2Reg.IsLinear; int no = ParseUcharArray(pthrdsubchild, &tempVal, 1); expset->Gain2Reg.IsLinear = (tempVal == 0 ? false : true); DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_GAIN2REG_LINEAR_TAG_ID)) { if (xmlParseReadWrite == XML_PARSER_READ) { int i = secsubTag.Size(); int no = ParseFloatArray(pthrdsubchild, expset->Gain2Reg.pGainRange, i); DCT_ASSERT((no == secsubTag.Size())); DCT_ASSERT((no <= CALD_AEC_GAIN_RANGE_MAX_LEN)); DCT_ASSERT(((i % 7) == 0)); expset->Gain2Reg.array_size = i; } else if (xmlParseReadWrite == XML_PARSER_WRITE) { char str[10]; int i = expset->Gain2Reg.array_size; DCT_ASSERT(((i % 7) == 0)); snprintf(str, sizeof(str), "[%u 7]", (i / 7)); XMLElement* pElement = (((XMLNode*)pthrdsubchild)->ToElement()); pElement->SetAttribute(CALIB_ATTRIBUTE_SIZE, str); int no = ParseFloatArray(pthrdsubchild, expset->Gain2Reg.pGainRange, i); DCT_ASSERT((no <= CALD_AEC_GAIN_RANGE_MAX_LEN)); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_GAIN2REG_NONLINEAR_TAG_ID)) { char* value = Toupper(secsubTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_EXPSET_GAINRANGE_NONLINEAR_DB) { expset->Gain2Reg.GainMode = RKAIQ_EXPGAIN_MODE_NONLINEAR_DB; } else { expset->Gain2Reg.GainMode = RKAIQ_EXPGAIN_MODE_NONLINEAR_DB; LOGE("%s(%d): invalid GainRange Mode = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)pthrdsubchild; if (expset->Gain2Reg.GainMode == RKAIQ_EXPGAIN_MODE_NONLINEAR_DB) { pNode->FirstChild()->SetValue(CALIB_EXPSET_GAINRANGE_NONLINEAR_DB); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid GainRange Mode = %d\n", __FUNCTION__, __LINE__, expset->Gain2Reg.GainMode); } } } pthrdsubchild = pthrdsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetGainSet ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_GAINSET_TAG_ID, CALIB_EXPSET_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag secsubTag = XmlTag(psubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISAGAIN_RANGE_TAG_ID)) { float tempVal[2] = { expset->CISGainSet.CISAgainRange.Min, expset->CISGainSet.CISAgainRange.Max }; int no = ParseFloatArray(psubchild, tempVal, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); expset->CISGainSet.CISAgainRange.Min = tempVal[0]; expset->CISGainSet.CISAgainRange.Max = tempVal[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISEXTRAAGAIN_RANGE_TAG_ID)) { float tempVal[2] = { expset->CISGainSet.CISExtraAgainRange.Min, expset->CISGainSet.CISExtraAgainRange.Max }; int no = ParseFloatArray(psubchild, tempVal, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); expset->CISGainSet.CISExtraAgainRange.Min = tempVal[0]; expset->CISGainSet.CISExtraAgainRange.Max = tempVal[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISDGAIN_RANGE_TAG_ID)) { float tempVal[2] = { expset->CISGainSet.CISDgainRange.Min, expset->CISGainSet.CISDgainRange.Max }; int no = ParseFloatArray(psubchild, tempVal, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); expset->CISGainSet.CISDgainRange.Min = tempVal[0]; expset->CISGainSet.CISDgainRange.Max = tempVal[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISISPDGAIN_RANGE_TAG_ID)) { float tempVal[2] = { expset->CISGainSet.CISIspDgainRange.Min, expset->CISGainSet.CISIspDgainRange.Max }; int no = ParseFloatArray(psubchild, tempVal, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); expset->CISGainSet.CISIspDgainRange.Min = tempVal[0]; expset->CISGainSet.CISIspDgainRange.Max = tempVal[1]; } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISHDRGAININDSETEN_TAG_ID)) { int no = ParseUcharArray(psubchild, &expset->CISGainSet.CISHdrGainIndSetEn, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetTimeSet ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_TIMESET_TAG_ID, CALIB_EXPSET_TAG_ID); const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag secsubTag = XmlTag(psubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_TIMESET_NORMAL_TAG_ID)) { if (!parseEntryExpSetNormalTimeSet(psubchild->ToElement())) { LOGE("parse error in SensorInfo TIMESET (%s)", secsubTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_TIMESET_HDR_TAG_ID)) { if (!parseEntryCell(psubchild->ToElement(), secsubTag.Size(), &RkAiqCalibParser::parseEntryExpSetHdrTimeSet, param, (uint32_t)CALIB_EXPSET_TIMESET_HDR_TAG_ID, (uint32_t)CALIB_EXPSET_TIMESET_TAG_ID)) { LOGE("parse error in SensorInfo Hdr TIMESET (%s)", secsubTagname.c_str()); return (false); } } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetNormalTimeSet ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_TIMESET_NORMAL_TAG_ID, CALIB_EXPSET_TIMESET_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* psubchild = pelement->FirstChild(); while (psubchild) { XmlTag secsubTag = XmlTag(psubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISLINTIMEREG_MAXFAC_TAG_ID)) { int i = (sizeof(expset->CISTimeSet.Normal.CISLinTimeRegMaxFac) / sizeof(expset->CISTimeSet.Normal.CISLinTimeRegMaxFac.fCoeff[0])); int no = ParseFloatArray(psubchild, expset->CISTimeSet.Normal.CISLinTimeRegMaxFac.fCoeff, i); DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISTIMEREG_ODEVITY_TAG_ID)) { int i = (sizeof(expset->CISTimeSet.Normal.CISTimeRegOdevity) / sizeof(expset->CISTimeSet.Normal.CISTimeRegOdevity.fCoeff[0])); int no = ParseFloatArray(psubchild, expset->CISTimeSet.Normal.CISTimeRegOdevity.fCoeff, i); DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISTIMEREG_UNEQUALEN_TAG_ID)) { int no = ParseUcharArray(psubchild, &expset->CISTimeSet.Normal.CISTimeRegUnEqualEn, 1); DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISTIMEREG_MIN_TAG_ID)) { int no = ParseUshortArray(psubchild, &expset->CISTimeSet.Normal.CISTimeRegMin, 1); DCT_ASSERT((no == secsubTag.Size())); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetHdrTimeSet ( const XMLElement* pelement, void* param ) { LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); XML_CHECK_START(CALIB_EXPSET_TIMESET_HDR_TAG_ID, CALIB_EXPSET_TIMESET_TAG_ID); int index = *((int*)param); const XMLNode* psubchild = pelement->FirstChild(); bool indexValid = false; while (psubchild) { XmlTag secsubTag = XmlTag(psubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(psubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_NAME_TAG_ID)) { char name[20]; ParseString(psubchild, name, sizeof(name)); if (0 == strcmp(name, "2frame")) { index = EXPSET_HDR_TWO_FRAME; } else if (0 == strcmp(name, "3frame")) { index = EXPSET_HDR_THREE_FRAME; } else { LOGE("name: %s in expset HdrTimeSet is invalid\n", name); return(false); } indexValid = true; ParseString(psubchild, expset->CISTimeSet.Hdr[index].name, sizeof(expset->CISTimeSet.Hdr[index].name)); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISHDRTIMEREG_SUMFAC_TAG_ID) && indexValid) { int i = (sizeof(expset->CISTimeSet.Hdr[index].CISHdrTimeRegSumFac) / sizeof(expset->CISTimeSet.Hdr[index].CISHdrTimeRegSumFac.fCoeff[0])); int no = ParseFloatArray(psubchild, expset->CISTimeSet.Hdr[index].CISHdrTimeRegSumFac.fCoeff, i); DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISTIMEREG_ODEVITY_TAG_ID) && indexValid) { int i = (sizeof(expset->CISTimeSet.Hdr[index].CISTimeRegOdevity) / sizeof(expset->CISTimeSet.Hdr[index].CISTimeRegOdevity.fCoeff[0])); int no = ParseFloatArray(psubchild, expset->CISTimeSet.Hdr[index].CISTimeRegOdevity.fCoeff, i); DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISTIMEREG_UNEQUALEN_TAG_ID) && indexValid) { int no = ParseUcharArray(psubchild, &expset->CISTimeSet.Hdr[index].CISTimeRegUnEqualEn, 1); DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISTIMEREG_MIN_TAG_ID) && indexValid) { int no = ParseUshortArray(psubchild, &expset->CISTimeSet.Hdr[index].CISTimeRegMin, 1); DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISTIMEREG_MAX_TAG_ID) && indexValid) { int i = (sizeof(expset->CISTimeSet.Hdr[index].CISTimeRegMax) / sizeof(expset->CISTimeSet.Hdr[index].CISTimeRegMax.Coeff[0])); int no = ParseShortArray(psubchild, expset->CISTimeSet.Hdr[index].CISTimeRegMax.Coeff, i); DCT_ASSERT((no == secsubTag.Size())); } psubchild = psubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetHdrSet ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_HDRSET_TAG_ID, CALIB_EXPSET_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_HDRSET_ENABLE_TAG_ID)) { int no = ParseUcharArray(psecsubchild, &expset->CISHdrSet.hdr_en, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_HDRSET_SUPPORT_MODE_TAG_ID)) { char hdr_mode[32]; ParseString(psecsubchild, hdr_mode, sizeof(hdr_mode)); if (xmlParseReadWrite == XML_PARSER_READ) { if (0 == strcasecmp(hdr_mode, CALIB_EXPSET_HDRSET_MODE_2_FRAME)) expset->CISHdrSet.hdr_mode = RK_AIQ_ISP_HDR_MODE_2_FRAME_HDR; else if (0 == strcasecmp(hdr_mode, CALIB_EXPSET_HDRSET_MODE_2_LINE)) expset->CISHdrSet.hdr_mode = RK_AIQ_ISP_HDR_MODE_2_LINE_HDR; else if (0 == strcasecmp(hdr_mode, CALIB_EXPSET_HDRSET_MODE_3_FRAME)) expset->CISHdrSet.hdr_mode = RK_AIQ_ISP_HDR_MODE_3_FRAME_HDR; else if (0 == strcasecmp(hdr_mode, CALIB_EXPSET_HDRSET_MODE_3_LINE)) expset->CISHdrSet.hdr_mode = RK_AIQ_ISP_HDR_MODE_3_LINE_HDR; } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psecsubchild; char tmpStr[64]; memset(tmpStr, 0, 64); if (expset->CISHdrSet.hdr_mode == RK_AIQ_ISP_HDR_MODE_2_FRAME_HDR) strcpy(tmpStr, CALIB_EXPSET_HDRSET_MODE_2_FRAME); else if (expset->CISHdrSet.hdr_mode == RK_AIQ_ISP_HDR_MODE_2_LINE_HDR) strcpy(tmpStr, CALIB_EXPSET_HDRSET_MODE_2_LINE); else if (expset->CISHdrSet.hdr_mode == RK_AIQ_ISP_HDR_MODE_3_FRAME_HDR) strcpy(tmpStr, CALIB_EXPSET_HDRSET_MODE_3_FRAME); else if (expset->CISHdrSet.hdr_mode == RK_AIQ_ISP_HDR_MODE_3_LINE_HDR) strcpy(tmpStr, CALIB_EXPSET_HDRSET_MODE_3_LINE); ParseString(psecsubchild, tmpStr, strlen(tmpStr)); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_HDRSET_LINE_MODE_TAG_ID)) { char line_mode[16]; ParseString(psecsubchild, line_mode, sizeof(line_mode)); if (xmlParseReadWrite == XML_PARSER_READ) { if (0 == strcasecmp(line_mode, CALIB_EXPSET_HDRSET_LINE_MODE_DCG)) expset->CISHdrSet.line_mode = RK_AIQ_SENSOR_HDR_LINE_MODE_DCG; else if (0 == strcasecmp(line_mode, CALIB_EXPSET_HDRSET_LINE_MODE_STAGGER)) expset->CISHdrSet.line_mode = RK_AIQ_SENSOR_HDR_LINE_MODE_STAGGER; } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psecsubchild; if (expset->CISHdrSet.line_mode == RK_AIQ_SENSOR_HDR_LINE_MODE_DCG) pNode->FirstChild()->SetValue(CALIB_EXPSET_HDRSET_LINE_MODE_DCG); else if (expset->CISHdrSet.line_mode == RK_AIQ_SENSOR_HDR_LINE_MODE_STAGGER) pNode->FirstChild()->SetValue(CALIB_EXPSET_HDRSET_LINE_MODE_STAGGER); } } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetDcgNormalGainCtrl ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_DCGSET_GAINCTRL_TAG_ID, CALIB_EXPSET_DCGSET_NORMAL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* pthrdsubchild = pelement->FirstChild(); while (pthrdsubchild) { XmlTag secsubTag = XmlTag(pthrdsubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(pthrdsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_ENABLE_TAG_ID)) { uint8_t tmp = expset->CISDcgSet.Normal.gainCtrl_en; int no = ParseUcharArray(pthrdsubchild, &tmp, secsubTag.Size()); expset->CISDcgSet.Normal.gainCtrl_en = (tmp == 1) ? true : false; DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_LCG2HCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &expset->CISDcgSet.Normal.lcg2hcg_gain_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } else if(XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_HCG2LCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &expset->CISDcgSet.Normal.hcg2lcg_gain_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } pthrdsubchild = pthrdsubchild->NextSibling(); } const XMLNode* pchild = pelement->FirstChild(); XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetDcgHdrGainCtrl ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_DCGSET_GAINCTRL_TAG_ID, CALIB_EXPSET_DCGSET_HDR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* pthrdsubchild = pelement->FirstChild(); while (pthrdsubchild) { XmlTag secsubTag = XmlTag(pthrdsubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(pthrdsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_ENABLE_TAG_ID)) { uint8_t tmp = expset->CISDcgSet.Hdr.gainCtrl_en; int no = ParseUcharArray(pthrdsubchild, &tmp, secsubTag.Size()); expset->CISDcgSet.Hdr.gainCtrl_en = (tmp == 1) ? true : false; DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_LCG2HCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &expset->CISDcgSet.Hdr.lcg2hcg_gain_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } else if(XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_HCG2LCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &expset->CISDcgSet.Hdr.hcg2lcg_gain_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } pthrdsubchild = pthrdsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetDcgHdrEnvCtrl ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_DCGSET_ENVCTRL_TAG_ID, CALIB_EXPSET_DCGSET_HDR_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* pthrdsubchild = pelement->FirstChild(); while (pthrdsubchild) { XmlTag secsubTag = XmlTag(pthrdsubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(pthrdsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_ENABLE_TAG_ID)) { uint8_t tmp = expset->CISDcgSet.Hdr.envCtrl_en; int no = ParseUcharArray(pthrdsubchild, &tmp, secsubTag.Size()); expset->CISDcgSet.Hdr.envCtrl_en = (tmp == 1) ? true : false; DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_LCG2HCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &expset->CISDcgSet.Hdr.lcg2hcg_env_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } else if(XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_HCG2LCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &expset->CISDcgSet.Hdr.hcg2lcg_env_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } pthrdsubchild = pthrdsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetDcgNormalEnvCtrl ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_DCGSET_ENVCTRL_TAG_ID, CALIB_EXPSET_DCGSET_NORMAL_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* pthrdsubchild = pelement->FirstChild(); while (pthrdsubchild) { XmlTag secsubTag = XmlTag(pthrdsubchild->ToElement()); const char* value = secsubTag.Value(); std::string secsubTagname(pthrdsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(secsubTagname.c_str()), secsubTag.Type(), secsubTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_ENABLE_TAG_ID)) { uint8_t tmp = expset->CISDcgSet.Normal.envCtrl_en; int no = ParseUcharArray(pthrdsubchild, &tmp, secsubTag.Size()); expset->CISDcgSet.Normal.envCtrl_en = (tmp == 1) ? true : false; DCT_ASSERT((no == secsubTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_LCG2HCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &expset->CISDcgSet.Normal.lcg2hcg_env_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } else if(XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_HCG2LCG_TH_TAG_ID)) { int no = ParseFloatArray(pthrdsubchild, &expset->CISDcgSet.Normal.hcg2lcg_env_th, secsubTag.Size()); DCT_ASSERT((no == secsubTag.Size())); } pthrdsubchild = pthrdsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetDcgHdrSet ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_DCGSET_HDR_TAG_ID, CALIB_EXPSET_DCGSET_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_SUPPORT_EN_TAG_ID)) { uint8_t tmp = expset->CISDcgSet.Hdr.support_en; int no = ParseUcharArray(psecsubchild, &tmp, subTag.Size()); expset->CISDcgSet.Hdr.support_en = (tmp == 1) ? true : false; DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_OPTYPE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_EXPSET_DCGSET_OPTYPE_AUTO) { expset->CISDcgSet.Hdr.dcg_optype = RK_AIQ_OP_MODE_AUTO; } else if (s_value == CALIB_EXPSET_DCGSET_OPTYPE_MANUAL) { expset->CISDcgSet.Hdr.dcg_optype = RK_AIQ_OP_MODE_MANUAL; } else { expset->CISDcgSet.Hdr.dcg_optype = RK_AIQ_OP_MODE_INVALID; LOGE("%s(%d): invalid dcg Hdr.OpType = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psecsubchild; if (expset->CISDcgSet.Hdr.dcg_optype == RK_AIQ_OP_MODE_AUTO) { pNode->FirstChild()->SetValue(CALIB_EXPSET_DCGSET_OPTYPE_AUTO); } else if (expset->CISDcgSet.Hdr.dcg_optype == RK_AIQ_OP_MODE_MANUAL) { pNode->FirstChild()->SetValue(CALIB_EXPSET_DCGSET_OPTYPE_MANUAL); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid dcg Hdr.OpType = %d\n", __FUNCTION__, __LINE__, expset->CISDcgSet.Hdr.dcg_optype); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_MODE_INIT_TAG_ID)) { int no = ParseIntArray(psecsubchild, expset->CISDcgSet.Hdr.dcg_mode.Coeff, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_RATIO_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &expset->CISDcgSet.Hdr.dcg_ratio, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_SYNC_SWITCH_TAG_ID)) { uint8_t tmp = expset->CISDcgSet.Hdr.sync_switch; int no = ParseUcharArray(psecsubchild, &tmp, subTag.Size()); expset->CISDcgSet.Hdr.sync_switch = (tmp == 1) ? true : false; DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_GAINCTRL_TAG_ID)) { if (!parseEntryExpSetDcgHdrGainCtrl(psecsubchild->ToElement())) { LOGE("parse error in ExpSet DCG HdrGainCtrl (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_ENVCTRL_TAG_ID)) { if (!parseEntryExpSetDcgHdrEnvCtrl(psecsubchild->ToElement())) { LOGE("parse error in ExpSet DCG HdrEnvCtrl (%s)", subTagname.c_str()); return (false); } } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetDcgNormalSet ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_DCGSET_NORMAL_TAG_ID, CALIB_EXPSET_DCGSET_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_SUPPORT_EN_TAG_ID)) { uint8_t tmp = expset->CISDcgSet.Normal.support_en; int no = ParseUcharArray(psecsubchild, &tmp, subTag.Size()); expset->CISDcgSet.Normal.support_en = (tmp == 1) ? true : false; DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_OPTYPE_TAG_ID)) { char* value = Toupper(subTag.Value()); std::string s_value(value); if (xmlParseReadWrite == XML_PARSER_READ) { if (s_value == CALIB_EXPSET_DCGSET_OPTYPE_AUTO) { expset->CISDcgSet.Normal.dcg_optype = RK_AIQ_OP_MODE_AUTO; } else if (s_value == CALIB_EXPSET_DCGSET_OPTYPE_MANUAL) { expset->CISDcgSet.Normal.dcg_optype = RK_AIQ_OP_MODE_MANUAL; } else { expset->CISDcgSet.Normal.dcg_optype = RK_AIQ_OP_MODE_INVALID; LOGE("%s(%d): invalid dcg OpType = %s\n", __FUNCTION__, __LINE__, s_value.c_str()); } } else if (xmlParseReadWrite == XML_PARSER_WRITE) { XMLNode *pNode = (XMLNode*)psecsubchild; if (expset->CISDcgSet.Normal.dcg_optype == RK_AIQ_OP_MODE_AUTO) { pNode->FirstChild()->SetValue(CALIB_EXPSET_DCGSET_OPTYPE_AUTO); } else if (expset->CISDcgSet.Normal.dcg_optype == RK_AIQ_OP_MODE_MANUAL) { pNode->FirstChild()->SetValue(CALIB_EXPSET_DCGSET_OPTYPE_MANUAL); } else { pNode->FirstChild()->SetValue("Invalid"); LOGE("%s(%d): (XML Write)invalid dcg OpType = %d\n", __FUNCTION__, __LINE__, expset->CISDcgSet.Normal.dcg_optype); } } } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_MODE_INIT_TAG_ID)) { int no = ParseIntArray(psecsubchild, expset->CISDcgSet.Normal.dcg_mode.Coeff, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_RATIO_TAG_ID)) { int no = ParseFloatArray(psecsubchild, &expset->CISDcgSet.Normal.dcg_ratio, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_GAINCTRL_TAG_ID)) { if (!parseEntryExpSetDcgNormalGainCtrl(psecsubchild->ToElement())) { LOGE("parse error in ExpSet DCG NormalGainCtrl(%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_ENVCTRL_TAG_ID)) { if (!parseEntryExpSetDcgNormalEnvCtrl(psecsubchild->ToElement())) { LOGE("parse error in ExpSet DCG NormalEnvCtrl(%s)", subTagname.c_str()); return (false); } } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetDcgSet ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_DCGSET_TAG_ID, CALIB_EXPSET_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_NORMAL_TAG_ID)) { if (!parseEntryExpSetDcgNormalSet(psecsubchild->ToElement())) { LOGE("parse error in Dcg NormalSet (%s)", subTagname.c_str()); return (false); } } else if(XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_HDR_TAG_ID)) { if (!parseEntryExpSetDcgHdrSet(psecsubchild->ToElement())) { LOGE("parse error in Dcg HdrSet (%s)", subTagname.c_str()); return (false); } } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetExpUpdateHdr ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_EXP_UPDATE_HDR_TAG_ID, CALIB_EXPSET_EXP_UPDATE_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_EXP_UPDATE_TIME_TAG_ID)) { int no = ParseIntArray(psecsubchild, &expset->CISExpUpdate.Hdr.time_update, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_EXP_UPDATE_GAIN_TAG_ID)) { int no = ParseIntArray(psecsubchild, &expset->CISExpUpdate.Hdr.gain_update, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_EXP_UPDATE_DCG_TAG_ID)) { int no = ParseIntArray(psecsubchild, &expset->CISExpUpdate.Hdr.dcg_update, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetExpUpdateNormal ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_EXP_UPDATE_NORMAL_TAG_ID, CALIB_EXPSET_EXP_UPDATE_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_EXP_UPDATE_TIME_TAG_ID)) { int no = ParseIntArray(psecsubchild, &expset->CISExpUpdate.Normal.time_update, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_EXP_UPDATE_GAIN_TAG_ID)) { int no = ParseIntArray(psecsubchild, &expset->CISExpUpdate.Normal.gain_update, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_EXP_UPDATE_DCG_TAG_ID)) { int no = ParseIntArray(psecsubchild, &expset->CISExpUpdate.Normal.dcg_update, subTag.Size()); DCT_ASSERT((no == subTag.Size())); } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSetExpUpdate ( const XMLElement* pelement, void* param ) { (void)param; LOGD( "%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_EXP_UPDATE_TAG_ID, CALIB_EXPSET_TAG_ID); const XMLNode* psecsubchild = pelement->FirstChild(); while (psecsubchild) { XmlTag subTag = XmlTag(psecsubchild->ToElement()); const char* value = subTag.Value(); std::string subTagname(psecsubchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(subTagname.c_str()), subTag.Type(), subTag.Size()); if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_EXP_UPDATE_NORMAL_TAG_ID)) { if (!parseEntryExpSetExpUpdateNormal(psecsubchild->ToElement())) { LOGE("parse error in ExpUpdate NormalSet (%s)", subTagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_EXP_UPDATE_HDR_TAG_ID)) { if (!parseEntryExpSetExpUpdateHdr(psecsubchild->ToElement())) { LOGE("parse error in ExpUpdate HdrSet (%s)", subTagname.c_str()); return (false); } } psecsubchild = psecsubchild->NextSibling(); } XML_CHECK_END(); LOGD( "%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryExpSet ( const XMLElement* pelement, void* param ) { (void)param; LOGI("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_EXPSET_TAG_ID, CALIB_FILESTART_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_ExpSet_para_t, expset); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, tagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_GAIN2REG_TAG_ID)) { if (!parseEntryExpSetGain2Reg(pchild->ToElement())) { LOGE("parse error in ExpSet Gain2Reg (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_TIME2REG_TAG_ID)) { int i = (sizeof(expset->Time2Reg) / sizeof(expset->Time2Reg[0])); int no = ParseFloatArray(pchild, expset->Time2Reg, i); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_GAINSET_TAG_ID)) { if (!parseEntryExpSetGainSet(pchild->ToElement())) { LOGE("parse error in ExpSet GainSet (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_TIMESET_TAG_ID)) { if (!parseEntryExpSetTimeSet(pchild->ToElement())) { LOGE("parse error in ExpSet Timeet (%s)", tagname.c_str()); return (false); } } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISMINFPS_TAG_ID)) { int no = ParseFloatArray(pchild, &expset->CISMinFps, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_CISFLIP_TAG_ID)) { int no = ParseUcharArray(pchild, &expset->CISFlip, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_HDRSET_TAG_ID)) { if (!parseEntryExpSetHdrSet(pchild->ToElement())) { LOGE("parse error in ExpSet HdrSet (%s)", tagname.c_str()); return (false); } } else if(XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_DCGSET_TAG_ID)) { if (!parseEntryExpSetDcgSet(pchild->ToElement())) { LOGE("parse error in ExpSet DcgSet (%s)", tagname.c_str()); return (false); } } else if(XML_CHECK_TAGID_COMPARE(CALIB_EXPSET_EXP_UPDATE_TAG_ID)) { if (!parseEntryExpSetExpUpdate(pchild->ToElement())) { LOGE("parse error in ExpSet ExpUpdate(%s)", tagname.c_str()); return (false); } } else { redirectOut << "parse error in ExpSet section (unknow tag: " << tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } bool RkAiqCalibParser::parseEntryModuleInfo ( const XMLElement* pelement, void* param ) { (void)param; LOGI("%s(%d): (enter)\n", __FUNCTION__, __LINE__); autoTabForward(); XML_CHECK_START(CALIB_MODULEINFO_TAG_ID, CALIB_FILESTART_TAG_ID); CALIBDB_MODULE_PTR_HELPER_RET(CalibDb_Module_Info_t, module); const XMLNode* pchild = pelement->FirstChild(); while (pchild) { XmlTag tag = XmlTag(pchild->ToElement()); std::string tagname(pchild->ToElement()->Name()); XML_CHECK_WHILE_SUBTAG_MARK((char *)(tagname.c_str()), tag.Type(), tag.Size()); #ifdef DEBUG_LOG LOGE("%s(%d): Tagname = %s\n", __FUNCTION__, __LINE__, tagname.c_str()); #endif if (XML_CHECK_TAGID_COMPARE(CALIB_MODULEINFO_FNUMBER_TAG_ID)) { int no = ParseFloatArray(pchild, &module->FNumber, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_MODULEINFO_EFL_TAG_ID)) { int no = ParseFloatArray(pchild, &module->EFL, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_MODULEINFO_LENS_TRANSMITTANCE_TAG_ID)) { int no = ParseFloatArray(pchild, &module->LensT, 1); DCT_ASSERT((no == tag.Size())); } else if (XML_CHECK_TAGID_COMPARE(CALIB_MODULEINFO_IRCUT_TRANSMITTANCE_TAG_ID)) { int no = ParseFloatArray(pchild, &module->IRCutT, 1); DCT_ASSERT((no == tag.Size())); } else { redirectOut << "parse error in ModuleInfo section (unknow tag: " << tagname << ")" << std::endl; } pchild = pchild->NextSibling(); } XML_CHECK_END(); LOGD("%s(%d): (exit)\n", __FUNCTION__, __LINE__); autoTabBackward(); return (true); } void RkAiqCalibParser::updateXmlParseReadWriteFlag(int flag) { xmlParseReadWrite = flag; } #undef DCT_ASSERT };