summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarti Maria <marti.maria@littlecms.com>2023-03-10 16:28:51 +0100
committerGitHub <noreply@github.com>2023-03-10 16:28:51 +0100
commit5fb94dfd2f37496915ebd0a6eb8640f8a501992d (patch)
treebe8f5e1ea08888a836b3321f6c78e1f9dc084433
parent9ca6b591e0af9bebe6412dba907cb077f6291a8c (diff)
parenta3f009c3f55ae9c20122fc2283f23507ad03e505 (diff)
downloadlcms2-5fb94dfd2f37496915ebd0a6eb8640f8a501992d.tar.gz
Merge pull request #364 from amyspark/work/amyspark/roundtrip-header
Roundtrip CMM, platform, and creator tags Checked to work on several computers. Thank you so much!
-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;