From d7b593f74fde4b6421b4a5f9cfa083ce25bcf8f1 Mon Sep 17 00:00:00 2001 From: Oliver Duis Date: Sun, 8 Jul 2012 21:43:02 +0200 Subject: [PATCH] Added support for some non-standard Tokina LCPs see issue 1464 --- rtengine/lcp.cc | 12 +++++++++++- rtengine/lcp.h | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/rtengine/lcp.cc b/rtengine/lcp.cc index 4fdecb19a..bd994a735 100644 --- a/rtengine/lcp.cc +++ b/rtengine/lcp.cc @@ -458,12 +458,16 @@ void XMLCALL LCPProfile::XmlStartHandler(void *pLCPProfile, const char *el, cons LCPProfile *pProf=static_cast(pLCPProfile); bool parseAttr=false; + if (*pProf->inInvalidTag) return; // We ignore everything in dirty tag till it's gone + // clean up tagname const char* src=strrchr(el,':'); if (src==NULL) src=const_cast(el); else src++; strcpy(pProf->lastTag,src); + if (!strcmp("VignetteModelPiecewiseParam",src)) strcpy(pProf->inInvalidTag,src); + if (!strcmp("CameraProfiles",src)) pProf->inCamProfiles=true; if (!strcmp("AlternateLensIDs",src)) pProf->inAlternateLensID=true; if (!pProf->inCamProfiles || pProf->inAlternateLensID) return; @@ -516,7 +520,7 @@ void XMLCALL LCPProfile::XmlStartHandler(void *pLCPProfile, const char *el, cons void XMLCALL LCPProfile::XmlTextHandler(void *pLCPProfile, const XML_Char *s, int len) { LCPProfile *pProf=static_cast(pLCPProfile); - if (!pProf->inCamProfiles || pProf->inAlternateLensID) return; + if (!pProf->inCamProfiles || pProf->inAlternateLensID || *pProf->inInvalidTag) return; // Check if it contains non-whitespaces (there are several calls to this for one tag unfortunately) bool onlyWhiteSpace=true; @@ -599,6 +603,12 @@ void XMLCALL LCPProfile::XmlTextHandler(void *pLCPProfile, const XML_Char *s, in void XMLCALL LCPProfile::XmlEndHandler(void *pLCPProfile, const char *el) { LCPProfile *pProf=static_cast(pLCPProfile); + // We ignore everything in dirty tag till it's gone + if (*pProf->inInvalidTag) { + if (strstr(el,pProf->inInvalidTag)) *pProf->inInvalidTag=0; + return; + } + if (strstr(el,":CameraProfiles")) pProf->inCamProfiles=false; if (strstr(el,":AlternateLensIDs")) pProf->inAlternateLensID=false; diff --git a/rtengine/lcp.h b/rtengine/lcp.h index e17db1b78..71d71c3e5 100644 --- a/rtengine/lcp.h +++ b/rtengine/lcp.h @@ -63,7 +63,7 @@ namespace rtengine { class LCPProfile { // Temporary data for parsing bool inCamProfiles,firstLIDone,inPerspect,inAlternateLensID; - char lastTag[256]; + char lastTag[256],inInvalidTag[256]; LCPPersModel* pCurPersModel; LCPModelCommon* pCurCommon;