diff options
author | L. E. Segovia <amy@amyspark.me> | 2023-03-04 15:11:31 +0000 |
---|---|---|
committer | L. E. Segovia <amy@amyspark.me> | 2023-03-04 15:16:48 +0000 |
commit | a3f009c3f55ae9c20122fc2283f23507ad03e505 (patch) | |
tree | e12349874f534d6b9f75d12db2f552549c7e6965 | |
parent | d0752309ff93f62be246ee9bf18338107f30d485 (diff) | |
download | lcms2-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.c | 31 | ||||
-rw-r--r-- | src/lcms2_internal.h | 4 |
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; |