blob: 1bcdeb727eed199af142b72bf82f386cac20f740 [file] [log] [blame]
//========================================================================
//
// sanitychecks.cc
//
// This file is licensed under the GPLv2 or later
//
// Copyright (C) 2020 Philipp Knechtges <philipp-dev@knechtges.com>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
//
//========================================================================
#include <cstdio>
#include <cstddef>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include "sanitychecks.h"
#ifdef USE_CMS
bool checkICCProfile(const GfxLCMSProfilePtr &profile, const char *filename, cmsUInt32Number UsedDirection, cmsColorSpaceSignature expectedColorSpace)
{
if (!profile) {
fprintf(stderr, "Could not open the ICC profile \"%s\".\n", filename);
return false;
}
if (!cmsIsIntentSupported(profile.get(), INTENT_RELATIVE_COLORIMETRIC, UsedDirection) && !cmsIsIntentSupported(profile.get(), INTENT_ABSOLUTE_COLORIMETRIC, UsedDirection)
&& !cmsIsIntentSupported(profile.get(), INTENT_SATURATION, UsedDirection) && !cmsIsIntentSupported(profile.get(), INTENT_PERCEPTUAL, LCMS_USED_AS_OUTPUT)) {
if (UsedDirection == LCMS_USED_AS_OUTPUT) {
fprintf(stderr, "ICC profile \"%s\" is not an output profile.\n", filename);
} else if (UsedDirection == LCMS_USED_AS_INPUT) {
fprintf(stderr, "ICC profile \"%s\" is not an input profile.\n", filename);
} else {
fprintf(stderr, "ICC profile \"%s\" is not suitable.\n", filename);
}
return false;
}
auto profilecolorspace = cmsGetColorSpace(profile.get());
if (profilecolorspace != expectedColorSpace) {
if (expectedColorSpace == cmsSigCmykData) {
fprintf(stderr, "Supplied ICC profile \"%s\" is not a CMYK profile.\n", filename);
} else if (expectedColorSpace == cmsSigGrayData) {
fprintf(stderr, "Supplied ICC profile \"%s\" is not a monochrome profile.\n", filename);
} else if (expectedColorSpace == cmsSigRgbData) {
fprintf(stderr, "Supplied ICC profile \"%s\" is not a RGB profile.\n", filename);
}
return false;
}
return true;
}
#endif