Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ Testing/private/**
**/vc_msw*/**
Developer Defs.props

#build files
out/*

# CMake generated files
CMakeCache.txt
**/CMakeFiles
Expand Down
16 changes: 11 additions & 5 deletions IccProfLib/IccCmm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1051,7 +1051,8 @@ CIccXform *CIccXform::Create(CIccProfile *pProfile,
nMCS = icToMCS;
pTag = pProfile->FindTag(icSigAToM0Tag);
}
else if (pProfile->m_Header.deviceClass==icSigMaterialVisualizationClass) {
else if (pProfile->m_Header.deviceClass==icSigMaterialVisualizationClass ||
pProfile->m_Header.deviceClass==icSigOutputClass) {
bInput = true;
nMCS = icFromMCS;

Expand Down Expand Up @@ -1958,8 +1959,8 @@ icStatusCMM CIccPcsXform::Connect(CIccXform *pFromXform, CIccXform *pToXform)
if (!pFromProfile || !pToProfile) {
return icCmmStatBadSpaceLink;
}
CIccTagArray *pFromChannels = (CIccTagArray*)(pFromProfile->FindTagOfType(icSigMaterialTypeArrayTag, icSigTagArrayType));
CIccTagArray *pToChannels = (CIccTagArray*)(pToProfile->FindTagOfType(icSigMaterialTypeArrayTag, icSigTagArrayType));
CIccTagArray *pFromChannels = (CIccTagArray*)(pFromProfile->FindTagOfType(icSigMultiplexTypeArrayTag, icSigTagArrayType));
CIccTagArray *pToChannels = (CIccTagArray*)(pToProfile->FindTagOfType(icSigMultiplexTypeArrayTag, icSigTagArrayType));

if (!pFromChannels || !pToChannels) {
return icCmmStatBadSpaceLink;
Expand Down Expand Up @@ -2004,7 +2005,7 @@ icStatusCMM CIccPcsXform::Connect(CIccXform *pFromXform, CIccXform *pToXform)
return icCmmStatBadMCSLink;
}
}
CIccTag *pTag = pToProfile->FindTag(icSigMaterialDefaultValuesTag);
CIccTag *pTag = pToProfile->FindTag(icSigMultiplexDefaultValuesTag);
CIccTagNumArray *pDefaults = NULL;
if (pTag && pTag->IsNumArrayType()) {
pDefaults = (CIccTagNumArray *)pTag;
Expand Down Expand Up @@ -8297,7 +8298,8 @@ icStatusCMM CIccCmm::AddXform(CIccProfile *pProfile,
}

nSrcSpace = (icColorSpaceSignature)pProfile->m_Header.mcs;
if (pProfile->m_Header.deviceClass==icSigMaterialVisualizationClass) {
if (pProfile->m_Header.deviceClass==icSigMaterialVisualizationClass ||
pProfile->m_Header.deviceClass==icSigOutputClass) {
if (bUseD2BxB2DxTags && pProfile->m_Header.spectralPCS) {
nDstSpace = (icColorSpaceSignature)pProfile->m_Header.spectralPCS;
}
Expand Down Expand Up @@ -8362,6 +8364,10 @@ icStatusCMM CIccCmm::AddXform(CIccProfile *pProfile,
return icCmmStatBadXform;
}

if (Xform.ptr->IsMCS() && Xform.ptr->IsInput()) {
bInput = true;
}

m_nLastSpace = nDstSpace;
m_nLastParentSpace = nParentSpace;
m_nLastIntent = nIntent;
Expand Down
16 changes: 8 additions & 8 deletions IccProfLib/IccProfile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1470,7 +1470,7 @@ static inline bool compare_float(double x, double y, double eps=0.0000001f) {
* icValidateOK if valid, or other error status.
*****************************************************************************
*/
icValidateStatus CIccProfile::CheckHeader(std::string &sReport) const
icValidateStatus CIccProfile::CheckHeader(std::string &sReport, const CIccProfile *pParentProfile) const
{
icValidateStatus rv = icValidateOK;

Expand Down Expand Up @@ -1519,7 +1519,7 @@ icValidateStatus CIccProfile::CheckHeader(std::string &sReport) const
rv = icMaxStatus(rv, icValidateCriticalError);
}
}
else if (m_Header.mcs != icSigNoMCSData && m_Header.deviceClass != icSigInputClass) {
else if (m_Header.mcs != icSigNoMCSData && m_Header.deviceClass != icSigInputClass && !pParentProfile) {
sReport += icMsgValidateNonCompliant;
sReport += " - Invalid MCS designator for device class\n";
rv = icMaxStatus(rv, icValidateNonCompliant);
Expand Down Expand Up @@ -2475,7 +2475,7 @@ bool CIccProfile::IsTypeValid(icTagSignature tagSig, icTagTypeSignature typeSig,
else return true;
}

case icSigMaterialTypeArrayTag:
case icSigMultiplexTypeArrayTag:
{
if (typeSig!=icSigTagArrayType ||
arraySig!=icSigUtf8TextTypeArray)
Expand All @@ -2484,7 +2484,7 @@ bool CIccProfile::IsTypeValid(icTagSignature tagSig, icTagTypeSignature typeSig,
return true;
}

case icSigMaterialDefaultValuesTag:
case icSigMultiplexDefaultValuesTag:
{
if (typeSig!=icSigUInt8ArrayType &&
typeSig!=icSigUInt16ArrayType &&
Expand Down Expand Up @@ -2887,23 +2887,23 @@ icValidateStatus CIccProfile::CheckRequiredTags(std::string &sReport, const CIcc
break;

case icSigMaterialIdentificationClass:
if (!GetTag(icSigAToM0Tag) && !GetTag(icSigMaterialTypeArrayTag)) {
if (!GetTag(icSigAToM0Tag) && !GetTag(icSigMultiplexTypeArrayTag)) {
sReport += icMsgValidateCriticalError;
sReport += "Critical tag missing.\n";
rv = icMaxStatus(rv, icValidateCriticalError);
}
break;

case icSigMaterialVisualizationClass:
if (!GetTag(icSigMToB0Tag) && !GetTag(icSigMToS0Tag)&& !GetTag(icSigMaterialTypeArrayTag)) {
if (!GetTag(icSigMToB0Tag) && !GetTag(icSigMToS0Tag)&& !GetTag(icSigMultiplexTypeArrayTag)) {
sReport += icMsgValidateCriticalError;
sReport += "Critical tag(s) missing.\n";
rv = icMaxStatus(rv, icValidateCriticalError);
}
break;

case icSigMaterialLinkClass:
if (!GetTag(icSigMToA0Tag)&& !GetTag(icSigMaterialTypeArrayTag)) {
if (!GetTag(icSigMToA0Tag)&& !GetTag(icSigMultiplexTypeArrayTag)) {
sReport += icMsgValidateCriticalError;
sReport += "Critical tag(s) missing.\n";
rv = icMaxStatus(rv, icValidateCriticalError);
Expand Down Expand Up @@ -2985,7 +2985,7 @@ icValidateStatus CIccProfile::Validate(std::string &sReport, std::string sSigPat
icValidateStatus rv = icValidateOK;

//Check header
rv = icMaxStatus(rv, CheckHeader(sReport));
rv = icMaxStatus(rv, CheckHeader(sReport, pParentProfile));

// Check for duplicate tags
if (!AreTagsUnique()) {
Expand Down
2 changes: 1 addition & 1 deletion IccProfLib/IccProfile.h
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ class ICCPROFLIB_API CIccProfile : public IIccProfileConnectionConditions
// Profile Validation functions
icValidateStatus CheckRequiredTags(std::string &sReport, const CIccProfile *pParentProfile = NULL) const;
bool CheckTagExclusion(std::string &sReport) const;
icValidateStatus CheckHeader(std::string &sReport) const;
icValidateStatus CheckHeader(std::string &sReport, const CIccProfile *pParentProfile = NULL) const;
icValidateStatus CheckTagTypes(std::string &sReport) const;
bool IsTypeValid(icTagSignature tagSig, icTagTypeSignature typeSig,
icStructSignature structSig=icSigUndefinedStruct,
Expand Down
28 changes: 6 additions & 22 deletions IccProfLib/IccTagBasic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5984,7 +5984,7 @@ icValidateStatus CIccTagNum<T, Tsig>::Validate(std::string sigPath, std::string
{
icValidateStatus rv = icValidateOK;
//Check # of channels
if (icGetFirstSigPathSig(sigPath) == icSigMaterialDefaultValuesTag &&
if (icGetFirstSigPathSig(sigPath) == icSigMultiplexDefaultValuesTag &&
pProfile &&
m_nSize != icGetMaterialColorSpaceSamples(pProfile->m_Header.mcs)) {
CIccInfo Info;
Expand Down Expand Up @@ -6675,7 +6675,7 @@ icValidateStatus CIccTagFloatNum<T, Tsig>::Validate(std::string sigPath, std::st
{
icValidateStatus rv = icValidateOK;
//Check # of channels
if (icGetFirstSigPathSig(sigPath) == icSigMaterialDefaultValuesTag &&
if (icGetFirstSigPathSig(sigPath) == icSigMultiplexDefaultValuesTag &&
pProfile &&
m_nSize != icGetMaterialColorSpaceSamples(pProfile->m_Header.mcs)) {
CIccInfo Info;
Expand Down Expand Up @@ -8713,27 +8713,11 @@ icValidateStatus CIccTagColorantOrder::Validate(std::string sigPath, std::string
return rv;
}

if (sigPath==icGetSigPath(icSigColorantTableTag)) {
if (m_nCount != icGetSpaceSamples(pProfile->m_Header.colorSpace)) {
sReport += icMsgValidateNonCompliant;
sReport += sSigPathName;
sReport += " - Incorrect number of colorants.\n";
rv = icMaxStatus(rv, icValidateNonCompliant);
}
}
else if (sigPath==icGetSigPath(icSigColorantTableOutTag)) {
if (m_nCount != icGetSpaceSamples(pProfile->m_Header.pcs)) {
sReport += icMsgValidateNonCompliant;
sReport += sSigPathName;
sReport += " - Incorrect number of colorants.\n";
rv = icMaxStatus(rv, icValidateNonCompliant);
}
}
else {
sReport += icMsgValidateWarning;
if (m_nCount != icGetSpaceSamples(pProfile->m_Header.colorSpace)) {
sReport += icMsgValidateNonCompliant;
sReport += sSigPathName;
sReport += " - Unknown number of required colorants.\n";
rv = icMaxStatus(rv, icValidateWarning);
sReport += " - Incorrect number of colorants.\n";
rv = icMaxStatus(rv, icValidateNonCompliant);
}

return rv;
Expand Down
2 changes: 1 addition & 1 deletion IccProfLib/IccTagComposite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1481,7 +1481,7 @@ icValidateStatus CIccTagArray::Validate(std::string sigPath, std::string &sRepor
}
else if (m_sigArrayType==icSigUtf8TextTypeArray) { //UTF8 text arrays are known
//Check # of channels
if (icGetFirstSigPathSig(sigPath) == icSigMaterialTypeArrayTag &&
if (icGetFirstSigPathSig(sigPath) == icSigMultiplexTypeArrayTag &&
pProfile &&
m_nSize != icGetMaterialColorSpaceSamples(pProfile->m_Header.mcs)) {
std::string sSigPathName = Info.GetSigPathName(sigPath);
Expand Down
18 changes: 14 additions & 4 deletions IccProfLib/IccTagFactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,12 @@ static icTagSigToNameMap g_TagSigToNameMap;
typedef std::map<std::string, icTagSignature> icTagNameToSigMap;
static icTagNameToSigMap g_TagNameToSigMap;

struct {
typedef struct {
icTagSignature sig;
const icChar *szName;
} g_icTagNameTable[] = {
} icSigNamePair;

icSigNamePair g_icTagNameTable[] = {
{icSigAToB0Tag, "AToB0Tag"},
{icSigAToB1Tag, "AToB1Tag"},
{icSigAToB2Tag, "AToB2Tag"},
Expand Down Expand Up @@ -210,12 +212,18 @@ struct {
{icSigColorEncodingParamsTag, "colorEncodingParamsTag"},
{icSigColorSpaceNameTag, "colorSpaceNameTag"},
{icSigReferenceNameTag, "referenceNameTag"},
{icSigMaterialTypeArrayTag, "materialTypeArrayTag"},
{icSigMaterialDefaultValuesTag, "materialDefaultValuesTag"},
{icSigMultiplexTypeArrayTag, "multiplexTypeArrayTag"},
{icSigMultiplexDefaultValuesTag, "multiplexDefaultValuesTag"},
{icSigEmbeddedV5ProfileTag, "embeddedV5ProfileTag"},
{(icTagSignature)0,""},
};

icSigNamePair g_icAltTagNameTable[] = {
{icSigMultiplexTypeArrayTag, "materialTypeArrayTag"},
{icSigMultiplexDefaultValuesTag, "materialDefaultValuesTag"},
{(icTagSignature)0,""},
};

typedef std::map<icTagTypeSignature, std::string> icTagTypeSigToNameMap;
static icTagTypeSigToNameMap g_TagTypeSigToNameMap;

Expand Down Expand Up @@ -481,6 +489,8 @@ icTagSignature CIccSpecTagFactory::GetTagNameSig(const icChar *szName)
if (g_TagSigToNameMap.empty()) {
for (int i = 0; g_icTagNameTable[i].sig; i++)
g_TagNameToSigMap[g_icTagNameTable[i].szName] = g_icTagNameTable[i].sig;
for (int i = 0; g_icAltTagNameTable[i].sig; i++)
g_TagNameToSigMap[g_icAltTagNameTable[i].szName] = g_icAltTagNameTable[i].sig;
}
icTagNameToSigMap::iterator sig = g_TagNameToSigMap.find(szName);
if (sig != g_TagNameToSigMap.end())
Expand Down
4 changes: 2 additions & 2 deletions IccProfLib/icProfileHeader.h
Original file line number Diff line number Diff line change
Expand Up @@ -428,8 +428,8 @@ typedef enum {
icSigGreenMatrixColumnTag = 0x6758595A, /* 'gXYZ' */
icSigGreenTRCTag = 0x67545243, /* 'gTRC' */
icSigLuminanceTag = 0x6C756d69, /* 'lumi' */
icSigMaterialDefaultValuesTag = 0x6D647620, /* 'mdv ' */
icSigMaterialTypeArrayTag = 0x6d637461, /* 'mcta' */
icSigMultiplexDefaultValuesTag = 0x6D647620, /* 'mdv ' */
icSigMultiplexTypeArrayTag = 0x6d637461, /* 'mcta' */
icSigMToA0Tag = 0x4d324130, /* 'M2A0' */
icSigMToB0Tag = 0x4d324230, /* 'M2B0' */
icSigMToB1Tag = 0x4d324231, /* 'M2B1' */
Expand Down
1 change: 1 addition & 0 deletions Testing/hybrid/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ ICC/*.icc
Results/*.icc
Results/*.tif
Results/cmykGrays*.txt
config/*.json

Loading
Loading