Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mm2/Little-CMS.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarti Maria <marti.maria@littlecms.com>2022-09-01 00:28:59 +0300
committerMarti Maria <marti.maria@littlecms.com>2022-09-01 00:28:59 +0300
commite515daaa2259657319eb9f07181d02af24b4e7fe (patch)
tree2a4017058ecf4c21b5c2bb836a4c0f058fc445c3
parent682d84ccdc6d6f33b73557d8c2e2e73fc4c31025 (diff)
An old function was returning a wrong value
It makes no sense that cmsChannelsOf() returns 3 when colorspace is bugus. Added a new function that returns -1 instead. Will document that in 2.15. It is in the API now, but not in docs.
-rw-r--r--Projects/VC2022/testbed/testbed.vcxproj1
-rw-r--r--Projects/VC2022/testbed/testbed.vcxproj.filters3
-rw-r--r--include/lcms2.h4
-rw-r--r--src/cmscnvrt.c2
-rw-r--r--src/cmsgmt.c6
-rw-r--r--src/cmspack.c2
-rw-r--r--src/cmspcs.c14
-rw-r--r--src/cmsvirt.c17
-rw-r--r--src/cmsxform.c4
-rw-r--r--src/lcms2.def1
-rw-r--r--testbed/testcms2.c6
-rw-r--r--utils/transicc/transicc.c24
12 files changed, 51 insertions, 33 deletions
diff --git a/Projects/VC2022/testbed/testbed.vcxproj b/Projects/VC2022/testbed/testbed.vcxproj
index c2b51ba..05cb6a6 100644
--- a/Projects/VC2022/testbed/testbed.vcxproj
+++ b/Projects/VC2022/testbed/testbed.vcxproj
@@ -281,6 +281,7 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
+ <ClCompile Include="..\..\..\testbed\fuzzer.c" />
<ClCompile Include="..\..\..\testbed\testcms2.c" />
<ClCompile Include="..\..\..\testbed\testplugin.c" />
<ClCompile Include="..\..\..\testbed\zoo_icc.c" />
diff --git a/Projects/VC2022/testbed/testbed.vcxproj.filters b/Projects/VC2022/testbed/testbed.vcxproj.filters
index 993ee15..ece88ca 100644
--- a/Projects/VC2022/testbed/testbed.vcxproj.filters
+++ b/Projects/VC2022/testbed/testbed.vcxproj.filters
@@ -24,5 +24,8 @@
<ClCompile Include="..\..\..\testbed\zoo_icc.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\..\testbed\fuzzer.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project> \ No newline at end of file
diff --git a/include/lcms2.h b/include/lcms2.h
index 331a16f..b7dc886 100644
--- a/include/lcms2.h
+++ b/include/lcms2.h
@@ -1532,8 +1532,12 @@ CMSAPI cmsBool CMSEXPORT cmsIsCLUT(cmsHPROFILE hProfile, cmsUInt32Numb
CMSAPI cmsColorSpaceSignature CMSEXPORT _cmsICCcolorSpace(int OurNotation);
CMSAPI int CMSEXPORT _cmsLCMScolorSpace(cmsColorSpaceSignature ProfileSpace);
+// Deprecated, use cmsChannelsOfColorSpace instead
CMSAPI cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace);
+// Get number of channels of color space or -1 if color space is not listed/supported
+CMSAPI cmsInt32Number CMSEXPORT cmsChannelsOfColorSpace(cmsColorSpaceSignature ColorSpace);
+
// Build a suitable formatter for the colorspace of this profile. nBytes=1 means 8 bits, nBytes=2 means 16 bits.
CMSAPI cmsUInt32Number CMSEXPORT cmsFormatterForColorspaceOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat);
CMSAPI cmsUInt32Number CMSEXPORT cmsFormatterForPCSOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat);
diff --git a/src/cmscnvrt.c b/src/cmscnvrt.c
index abac021..50e5a1e 100644
--- a/src/cmscnvrt.c
+++ b/src/cmscnvrt.c
@@ -630,7 +630,7 @@ cmsPipeline* DefaultICCintents(cmsContext ContextID,
ColorSpaceOut == cmsSigRgbData ||
ColorSpaceOut == cmsSigCmykData) {
- cmsStage* clip = _cmsStageClipNegatives(Result->ContextID, cmsChannelsOf(ColorSpaceOut));
+ cmsStage* clip = _cmsStageClipNegatives(Result->ContextID, cmsChannelsOfColorSpace(ColorSpaceOut));
if (clip == NULL) goto Error;
if (!cmsPipelineInsertStage(Result, cmsAT_END, clip))
diff --git a/src/cmsgmt.c b/src/cmsgmt.c
index ddcfb52..e6c27c1 100644
--- a/src/cmsgmt.c
+++ b/src/cmsgmt.c
@@ -297,7 +297,8 @@ cmsPipeline* _cmsCreateGamutCheckPipeline(cmsContext ContextID,
cmsStage* CLUT;
cmsUInt32Number dwFormat;
GAMUTCHAIN Chain;
- cmsUInt32Number nChannels, nGridpoints;
+ cmsUInt32Number nGridpoints;
+ cmsInt32Number nChannels;
cmsColorSpaceSignature ColorSpace;
cmsUInt32Number i;
cmsHPROFILE ProfileList[256];
@@ -346,8 +347,7 @@ cmsPipeline* _cmsCreateGamutCheckPipeline(cmsContext ContextID,
ColorSpace = cmsGetColorSpace(hGamut);
-
- nChannels = cmsChannelsOf(ColorSpace);
+ nChannels = cmsChannelsOfColorSpace(ColorSpace);
nGridpoints = _cmsReasonableGridpointsByColorspace(ColorSpace, cmsFLAGS_HIGHRESPRECALC);
dwFormat = (CHANNELS_SH(nChannels)|BYTES_SH(2));
diff --git a/src/cmspack.c b/src/cmspack.c
index 955687c..5ab4525 100644
--- a/src/cmspack.c
+++ b/src/cmspack.c
@@ -3833,7 +3833,7 @@ cmsUInt32Number CMSEXPORT cmsFormatterForColorspaceOfProfile(cmsHPROFILE hProfil
cmsColorSpaceSignature ColorSpace = cmsGetColorSpace(hProfile);
cmsUInt32Number ColorSpaceBits = (cmsUInt32Number) _cmsLCMScolorSpace(ColorSpace);
- cmsUInt32Number nOutputChans = cmsChannelsOf(ColorSpace);
+ cmsInt32Number nOutputChans = cmsChannelsOfColorSpace(ColorSpace);
cmsUInt32Number Float = lIsFloat ? 1U : 0;
// Create a fake formatter for result
diff --git a/src/cmspcs.c b/src/cmspcs.c
index 3d6323a..a0f1952 100644
--- a/src/cmspcs.c
+++ b/src/cmspcs.c
@@ -874,7 +874,7 @@ int CMSEXPORT _cmsLCMScolorSpace(cmsColorSpaceSignature ProfileSpace)
}
-cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace)
+cmsInt32Number CMSEXPORT cmsChannelsOfColorSpace(cmsColorSpaceSignature ColorSpace)
{
switch (ColorSpace) {
@@ -935,6 +935,16 @@ cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace)
case cmsSigMCHFData:
case cmsSig15colorData: return 15;
- default: return 3;
+ default: return -1;
}
}
+
+/**
+* DEPRECATED: Provided for compatibility only
+*/
+cmsUInt32Number CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace)
+{
+ int n = cmsChannelsOfColorSpace(ColorSpace);
+ if (n < 0) return 3;
+ return (cmsUInt32Number)n;
+} \ No newline at end of file
diff --git a/src/cmsvirt.c b/src/cmsvirt.c
index 4900a83..b8ef607 100644
--- a/src/cmsvirt.c
+++ b/src/cmsvirt.c
@@ -291,7 +291,7 @@ cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLinkTHR(cmsContext ContextID,
{
cmsHPROFILE hICC;
cmsPipeline* Pipeline;
- cmsUInt32Number nChannels;
+ cmsInt32Number nChannels;
hICC = cmsCreateProfilePlaceholder(ContextID);
if (!hICC)
@@ -306,7 +306,7 @@ cmsHPROFILE CMSEXPORT cmsCreateLinearizationDeviceLinkTHR(cmsContext ContextID,
cmsSetHeaderRenderingIntent(hICC, INTENT_PERCEPTUAL);
// Set up channels
- nChannels = cmsChannelsOf(ColorSpace);
+ nChannels = cmsChannelsOfColorSpace(ColorSpace);
// Creates a Pipeline with prelinearization step only
Pipeline = cmsPipelineAlloc(ContextID, nChannels, nChannels);
@@ -397,7 +397,7 @@ cmsHPROFILE CMSEXPORT cmsCreateInkLimitingDeviceLinkTHR(cmsContext ContextID,
cmsHPROFILE hICC;
cmsPipeline* LUT;
cmsStage* CLUT;
- cmsUInt32Number nChannels;
+ cmsInt32Number nChannels;
if (ColorSpace != cmsSigCmykData) {
cmsSignalError(ContextID, cmsERROR_COLORSPACE_CHECK, "InkLimiting: Only CMYK currently supported");
@@ -974,7 +974,7 @@ cmsHPROFILE CreateNamedColorDevicelink(cmsHTRANSFORM xform)
// Make sure we have proper formatters
cmsChangeBuffersFormat(xform, TYPE_NAMED_COLOR_INDEX,
FLOAT_SH(0) | COLORSPACE_SH(_cmsLCMScolorSpace(v ->ExitColorSpace))
- | BYTES_SH(2) | CHANNELS_SH(cmsChannelsOf(v ->ExitColorSpace)));
+ | BYTES_SH(2) | CHANNELS_SH(cmsChannelsOfColorSpace(v ->ExitColorSpace)));
// Apply the transfor to colorants.
for (i=0; i < nColors; i++) {
@@ -1062,8 +1062,9 @@ const cmsAllowedLUT* FindCombination(const cmsPipeline* Lut, cmsBool IsV4, cmsTa
cmsHPROFILE CMSEXPORT cmsTransform2DeviceLink(cmsHTRANSFORM hTransform, cmsFloat64Number Version, cmsUInt32Number dwFlags)
{
cmsHPROFILE hProfile = NULL;
- cmsUInt32Number FrmIn, FrmOut, ChansIn, ChansOut;
- int ColorSpaceBitsIn, ColorSpaceBitsOut;
+ cmsUInt32Number FrmIn, FrmOut;
+ cmsInt32Number ChansIn, ChansOut;
+ int ColorSpaceBitsIn, ColorSpaceBitsOut;
_cmsTRANSFORM* xform = (_cmsTRANSFORM*) hTransform;
cmsPipeline* LUT = NULL;
cmsStage* mpe;
@@ -1114,8 +1115,8 @@ cmsHPROFILE CMSEXPORT cmsTransform2DeviceLink(cmsHTRANSFORM hTransform, cmsFloat
// Optimize the LUT and precalculate a devicelink
- ChansIn = cmsChannelsOf(xform -> EntryColorSpace);
- ChansOut = cmsChannelsOf(xform -> ExitColorSpace);
+ ChansIn = cmsChannelsOfColorSpace(xform -> EntryColorSpace);
+ ChansOut = cmsChannelsOfColorSpace(xform -> ExitColorSpace);
ColorSpaceBitsIn = _cmsLCMScolorSpace(xform -> EntryColorSpace);
ColorSpaceBitsOut = _cmsLCMScolorSpace(xform -> ExitColorSpace);
diff --git a/src/cmsxform.c b/src/cmsxform.c
index 7f6636e..b790388 100644
--- a/src/cmsxform.c
+++ b/src/cmsxform.c
@@ -1137,8 +1137,8 @@ cmsHTRANSFORM CMSEXPORT cmsCreateExtendedTransform(cmsContext ContextID,
}
// Check channel count
- if ((cmsChannelsOf(EntryColorSpace) != cmsPipelineInputChannels(Lut)) ||
- (cmsChannelsOf(ExitColorSpace) != cmsPipelineOutputChannels(Lut))) {
+ if ((cmsChannelsOfColorSpace(EntryColorSpace) != (cmsInt32Number) cmsPipelineInputChannels(Lut)) ||
+ (cmsChannelsOfColorSpace(ExitColorSpace) != (cmsInt32Number) cmsPipelineOutputChannels(Lut))) {
cmsPipelineFree(Lut);
cmsSignalError(ContextID, cmsERROR_NOT_SUITABLE, "Channel count doesn't match. Profile is corrupted");
return NULL;
diff --git a/src/lcms2.def b/src/lcms2.def
index b03943c..f3e4779 100644
--- a/src/lcms2.def
+++ b/src/lcms2.def
@@ -19,6 +19,7 @@ cmsBuildTabulatedToneCurve16 = cmsBuildTabulatedToneCurve16
cmsBuildTabulatedToneCurveFloat = cmsBuildTabulatedToneCurveFloat
_cmsCalloc = _cmsCalloc
cmsChannelsOf = cmsChannelsOf
+cmsChannelsOfColorSpace = cmsChannelsOfColorSpace
cmsCIE2000DeltaE = cmsCIE2000DeltaE
cmsCIE94DeltaE = cmsCIE94DeltaE
cmsCIECAM02Done = cmsCIECAM02Done
diff --git a/testbed/testcms2.c b/testbed/testcms2.c
index de753d2..0513e09 100644
--- a/testbed/testcms2.c
+++ b/testbed/testcms2.c
@@ -8184,7 +8184,7 @@ int CheckForgedMPE(void)
}
srcCS = cmsGetColorSpace(srcProfile);
- nSrcComponents = cmsChannelsOf(srcCS);
+ nSrcComponents = cmsChannelsOfColorSpace(srcCS);
if (srcCS == cmsSigLabData) {
srcFormat =
@@ -9218,8 +9218,6 @@ void PrintSupportedIntents(void)
printf("\n");
}
-
-
// ---------------------------------------------------------------------------------------
int main(int argc, char* argv[])
@@ -9265,7 +9263,7 @@ int main(int argc, char* argv[])
printf("Installing error logger ... ");
cmsSetLogErrorHandler(FatalErrorQuit);
printf("done.\n");
-
+
PrintSupportedIntents();
Check("Base types", CheckBaseTypes);
diff --git a/utils/transicc/transicc.c b/utils/transicc/transicc.c
index 77787d6..5b1304c 100644
--- a/utils/transicc/transicc.c
+++ b/utils/transicc/transicc.c
@@ -399,7 +399,7 @@ cmsNAMEDCOLORLIST* ComponentNames(cmsColorSpaceSignature space, cmsBool IsInput)
SetRange(1, IsInput);
- n = cmsChannelsOf(space);
+ n = cmsChannelsOfColorSpace(space);
for (i=0; i < n; i++) {
@@ -665,7 +665,7 @@ void PrintFloatResults(cmsFloat64Number Value[])
char ChannelName[cmsMAX_PATH];
cmsFloat64Number v;
- n = cmsChannelsOf(OutputColorSpace);
+ n = cmsChannelsOfColorSpace(OutputColorSpace);
for (i=0; i < n; i++) {
if (OutputColorant != NULL) {
@@ -745,7 +745,7 @@ void TakeFloatValues(cmsFloat64Number Float[])
return;
}
- n = cmsChannelsOf(InputColorSpace);
+ n = cmsChannelsOfColorSpace(InputColorSpace);
for (i=0; i < n; i++) {
if (InputColorant) {
@@ -794,7 +794,7 @@ void PrintEncodedResults(cmsUInt16Number Encoded[])
char ChannelName[cmsMAX_PATH];
cmsUInt32Number v;
- n = cmsChannelsOf(OutputColorSpace);
+ n = cmsChannelsOfColorSpace(OutputColorSpace);
for (i=0; i < n; i++) {
if (OutputColorant != NULL) {
@@ -960,7 +960,7 @@ void TakeCGATSValues(int nPatch, cmsFloat64Number Float[])
{
cmsUInt32Number i, n;
- n = cmsChannelsOf(InputColorSpace);
+ n = cmsChannelsOfColorSpace(InputColorSpace);
for (i=0; i < n; i++) {
char Buffer[255];
@@ -976,7 +976,7 @@ void TakeCGATSValues(int nPatch, cmsFloat64Number Float[])
{
cmsUInt32Number i, n;
- n = cmsChannelsOf(InputColorSpace);
+ n = cmsChannelsOfColorSpace(InputColorSpace);
for (i=0; i < n; i++) {
char Buffer[255];
@@ -1067,9 +1067,9 @@ void PutCGATSValues(cmsFloat64Number Float[])
case cmsSig15colorData:
{
- cmsUInt32Number i, n;
+ cmsInt32Number i, n;
- n = cmsChannelsOf(InputColorSpace);
+ n = cmsChannelsOfColorSpace(InputColorSpace);
for (i=0; i < n; i++) {
char Buffer[255];
@@ -1084,9 +1084,9 @@ void PutCGATSValues(cmsFloat64Number Float[])
default:
{
- cmsUInt32Number i, n;
+ cmsInt32Number i, n;
- n = cmsChannelsOf(InputColorSpace);
+ n = cmsChannelsOfColorSpace(InputColorSpace);
for (i=0; i < n; i++) {
char Buffer[255];
@@ -1187,7 +1187,7 @@ void SetOutputDataFormat(void)
int i, n;
char Buffer[255];
- n = cmsChannelsOf(OutputColorSpace);
+ n = cmsChannelsOfColorSpace(OutputColorSpace);
cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", n+1);
cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID");
@@ -1203,7 +1203,7 @@ void SetOutputDataFormat(void)
int i, n;
char Buffer[255];
- n = cmsChannelsOf(OutputColorSpace);
+ n = cmsChannelsOfColorSpace(OutputColorSpace);
cmsIT8SetPropertyDbl(hIT8out, "NUMBER_OF_FIELDS", n+1);
cmsIT8SetDataFormat(hIT8out, 0, "SAMPLE_ID");