summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorL. E. Segovia <amy@amyspark.me>2023-03-04 15:11:31 +0000
committerL. E. Segovia <amy@amyspark.me>2023-03-04 15:16:48 +0000
commita3f009c3f55ae9c20122fc2283f23507ad03e505 (patch)
treee12349874f534d6b9f75d12db2f552549c7e6965
parentd0752309ff93f62be246ee9bf18338107f30d485 (diff)
downloadlcms2-a3f009c3f55ae9c20122fc2283f23507ad03e505.tar.gz
Roundtrip CMM, platform, and creator tags
This fixes generated MD5 checksums of existing profiles not matching between Windows and Unix-based systems.
-rw-r--r--src/cmsio0.c31
-rw-r--r--src/lcms2_internal.h4
2 files changed, 25 insertions, 10 deletions
diff --git a/src/cmsio0.c b/src/cmsio0.c
index 945140a..75442e6 100644
--- a/src/cmsio0.c
+++ b/src/cmsio0.c
@@ -530,7 +530,21 @@ cmsHPROFILE CMSEXPORT cmsCreateProfilePlaceholder(cmsContext ContextID)
// Set default version
Icc ->Version = 0x02100000;
-
+
+ // Set default CMM (that's me!)
+ Icc ->CMM = lcmsSignature;
+
+ // Set default creator
+ // Created by LittleCMS (that's me!)
+ Icc ->creator = lcmsSignature;
+
+ // Set default platform
+#ifdef CMS_IS_WINDOWS_
+ Icc ->platform = cmsSigMicrosoft;
+#else
+ Icc ->platform = cmsSigMacintosh;
+#endif
+
// Set default device class
Icc->DeviceClass = cmsSigDisplayClass;
@@ -784,16 +798,18 @@ cmsBool _cmsReadHeader(_cmsICCPROFILE* Icc)
}
// Adjust endianness of the used parameters
+ Icc -> CMM = _cmsAdjustEndianess32(Header.cmmId);
Icc -> DeviceClass = (cmsProfileClassSignature) _cmsAdjustEndianess32(Header.deviceClass);
Icc -> ColorSpace = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Header.colorSpace);
Icc -> PCS = (cmsColorSpaceSignature) _cmsAdjustEndianess32(Header.pcs);
Icc -> RenderingIntent = _cmsAdjustEndianess32(Header.renderingIntent);
+ Icc -> platform = (cmsPlatformSignature)_cmsAdjustEndianess32(Header.platform);
Icc -> flags = _cmsAdjustEndianess32(Header.flags);
Icc -> manufacturer = _cmsAdjustEndianess32(Header.manufacturer);
Icc -> model = _cmsAdjustEndianess32(Header.model);
Icc -> creator = _cmsAdjustEndianess32(Header.creator);
-
+
_cmsAdjustEndianess64(&Icc -> attributes, &Header.attributes);
Icc -> Version = _cmsAdjustEndianess32(_validatedVersion(Header.version));
@@ -893,7 +909,7 @@ cmsBool _cmsWriteHeader(_cmsICCPROFILE* Icc, cmsUInt32Number UsedSpace)
cmsUInt32Number Count;
Header.size = _cmsAdjustEndianess32(UsedSpace);
- Header.cmmId = _cmsAdjustEndianess32(lcmsSignature);
+ Header.cmmId = _cmsAdjustEndianess32(Icc ->CMM);
Header.version = _cmsAdjustEndianess32(Icc ->Version);
Header.deviceClass = (cmsProfileClassSignature) _cmsAdjustEndianess32(Icc -> DeviceClass);
@@ -905,11 +921,7 @@ cmsBool _cmsWriteHeader(_cmsICCPROFILE* Icc, cmsUInt32Number UsedSpace)
Header.magic = _cmsAdjustEndianess32(cmsMagicNumber);
-#ifdef CMS_IS_WINDOWS_
- Header.platform = (cmsPlatformSignature) _cmsAdjustEndianess32(cmsSigMicrosoft);
-#else
- Header.platform = (cmsPlatformSignature) _cmsAdjustEndianess32(cmsSigMacintosh);
-#endif
+ Header.platform = (cmsPlatformSignature) _cmsAdjustEndianess32(Icc -> platform);
Header.flags = _cmsAdjustEndianess32(Icc -> flags);
Header.manufacturer = _cmsAdjustEndianess32(Icc -> manufacturer);
@@ -925,8 +937,7 @@ cmsBool _cmsWriteHeader(_cmsICCPROFILE* Icc, cmsUInt32Number UsedSpace)
Header.illuminant.Y = (cmsS15Fixed16Number) _cmsAdjustEndianess32((cmsUInt32Number) _cmsDoubleTo15Fixed16(cmsD50_XYZ()->Y));
Header.illuminant.Z = (cmsS15Fixed16Number) _cmsAdjustEndianess32((cmsUInt32Number) _cmsDoubleTo15Fixed16(cmsD50_XYZ()->Z));
- // Created by LittleCMS (that's me!)
- Header.creator = _cmsAdjustEndianess32(lcmsSignature);
+ Header.creator = _cmsAdjustEndianess32(Icc ->creator);
memset(&Header.reserved, 0, sizeof(Header.reserved));
diff --git a/src/lcms2_internal.h b/src/lcms2_internal.h
index 1fc99fb..230a420 100644
--- a/src/lcms2_internal.h
+++ b/src/lcms2_internal.h
@@ -811,6 +811,9 @@ typedef struct _cms_iccprofile_struct {
// Creation time
struct tm Created;
+ // Color management module identification
+ cmsUInt32Number CMM;
+
// Only most important items found in ICC profiles
cmsUInt32Number Version;
cmsProfileClassSignature DeviceClass;
@@ -818,6 +821,7 @@ typedef struct _cms_iccprofile_struct {
cmsColorSpaceSignature PCS;
cmsUInt32Number RenderingIntent;
+ cmsPlatformSignature platform;
cmsUInt32Number flags;
cmsUInt32Number manufacturer, model;
cmsUInt64Number attributes;