summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cmsalpha.c2
-rw-r--r--src/cmscam02.c2
-rw-r--r--src/cmscam16.c342
-rw-r--r--src/cmscgats.c2
-rw-r--r--src/cmscnvrt.c2
-rw-r--r--src/cmserr.c2
-rw-r--r--src/cmsgamma.c2
-rw-r--r--src/cmshalf.c2
-rw-r--r--src/cmsintrp.c2
-rw-r--r--src/cmsio0.c2
-rw-r--r--src/cmsio1.c2
-rw-r--r--src/cmslut.c2
-rw-r--r--src/cmsmd5.c2
-rw-r--r--src/cmsmtrx.c2
-rw-r--r--src/cmsnamed.c2
-rw-r--r--src/cmsopt.c2
-rw-r--r--src/cmspack.c2
-rw-r--r--src/cmspcs.c2
-rw-r--r--src/cmsplugin.c2
-rw-r--r--src/cmsps2.c2
-rw-r--r--src/cmssamp.c2
-rw-r--r--src/cmssm.c2
-rw-r--r--src/cmstypes.c2
-rw-r--r--src/cmsvirt.c2
-rw-r--r--src/cmswtpnt.c2
-rw-r--r--src/cmsxform.c2
-rw-r--r--src/lcms2_internal.h2
27 files changed, 368 insertions, 26 deletions
diff --git a/src/cmsalpha.c b/src/cmsalpha.c
index 5e30172..d0cd189 100644
--- a/src/cmsalpha.c
+++ b/src/cmsalpha.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmscam02.c b/src/cmscam02.c
index 5444b38..f7838ee 100644
--- a/src/cmscam02.c
+++ b/src/cmscam02.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmscam16.c b/src/cmscam16.c
new file mode 100644
index 0000000..c6dcbaa
--- /dev/null
+++ b/src/cmscam16.c
@@ -0,0 +1,342 @@
+//---------------------------------------------------------------------------------
+//
+// Little Color Management System
+// Copyright (c) 1998-2022 Marti Maria Saguer
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the Software
+// is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+//---------------------------------------------------------------------------------
+//
+
+#include "cmscam16.h"
+
+// CIECAM 16 and CIECAM 16 UCS appearance models.
+
+// ---------- Implementation --------------------------------------------
+
+// Some needed constants
+#ifndef M_PI
+# define M_PI 3.14159265358979323846
+#endif
+
+
+typedef struct {
+
+ cmsContext ContextID;
+
+ cmsCIEXYZ XYZ_w;
+ cmsFloat64Number RGB_w[3];
+ cmsFloat64Number D_RGB[3];
+ cmsFloat64Number D_RGB_inv[3];
+ cmsFloat64Number RGB_cw[3];
+ cmsFloat64Number RGB_aw[3];
+
+ cmsFloat64Number LA, Yb, Yw;
+ cmsFloat64Number F, c, Nc;
+ cmsUInt32Number surround;
+ cmsFloat64Number n, Nbb, Ncb, z, FL, FL4, D, k, A_w;
+
+
+} cmsCIECAM16;
+
+
+/**
+* Valid correlates are
+*/
+
+static
+cmsFloat64Number radians(cmsFloat64Number deg)
+{
+ return (fmod(deg, 360.0) * M_PI) / 180.0;
+}
+
+static
+cmsFloat64Number degrees(cmsFloat64Number rad)
+{
+ cmsFloat64Number deg = fmod(rad * 180.0 / M_PI, 360);
+
+ while (deg < 0)
+ {
+ deg += 360.0;
+ }
+
+ return deg;
+}
+
+static
+cmsFloat64Number lerp(cmsFloat64Number l, cmsFloat64Number h, cmsFloat64Number a)
+{
+ return (cmsFloat64Number) l + (h-l) * a;
+}
+
+static
+cmsFloat64Number clip(cmsFloat64Number l, cmsFloat64Number h, cmsFloat64Number a)
+{
+ if (a < l) return l;
+ if (a > h) return h;
+ return a;
+}
+
+static
+cmsFloat64Number sgn(cmsFloat64Number s)
+{
+ if (s < 0.0) return -1.0;
+ if (s > 0.0) return +1.0;
+ return 0.0;
+}
+
+
+static
+void M16(cmsFloat64Number RGB[3], const cmsCIEXYZ* xyz)
+{
+ RGB[0] = +0.401288 * xyz->X + 0.650173 * xyz->Y - 0.051461 * xyz->Z;
+ RGB[1] = -0.250268 * xyz->X + 1.204414 * xyz->Y + 0.045854 * xyz->Z;
+ RGB[2] = -0.002079 * xyz->X + 0.048952 * xyz->Y + 0.953127 * xyz->Z;
+}
+
+static
+void M16_inv(cmsCIEXYZ* xyz, const cmsFloat64Number RGB[3])
+{
+ xyz->X = +1.862067855087233e+0 * RGB[0] - 1.011254630531685e+0 * RGB[1] + 1.491867754444518e-1 * RGB[2];
+ xyz->Y = +3.875265432361372e-1 * RGB[0] + 6.214474419314753e-1 * RGB[1] - 8.973985167612518e-3 * RGB[2];
+ xyz->Z = -1.584149884933386e-2 * RGB[0] - 3.412293802851557e-2 * RGB[1] + 1.049964436877850e+0 * RGB[2];
+}
+
+static
+cmsFloat64Number adapt(cmsFloat64Number F_L, cmsFloat64Number component)
+{
+ cmsFloat64Number x = pow(F_L * fabs(component) * 0.01, 0.42);
+
+ return sgn(component) * 400.0 * x / (x + 27.13);
+}
+
+static
+cmsFloat64Number unadapt(cmsFloat64Number F_L, cmsFloat64Number component)
+{
+ const cmsFloat64Number exponent = 1.0 / 0.42;
+ cmsFloat64Number constant = 100 / F_L * pow(27.13, exponent);
+ cmsFloat64Number cabs;
+
+ cabs = fabs(component);
+
+ return sgn(component) * constant * pow(cabs / (400.0 - cabs), exponent);
+}
+
+
+static
+void elem_mul(cmsFloat64Number res[3], const cmsFloat64Number v0[3], const cmsFloat64Number v1[3])
+{
+ res[0] = v0[0] * v1[0];
+ res[1] = v0[1] * v1[1];
+ res[2] = v0[2] * v1[2];
+}
+
+
+cmsHANDLE CMSEXPORT cmsCIECAM16Init(cmsContext ContextID, const cmsViewingConditions* vc)
+{
+ cmsCIECAM16* p;
+ cmsFloat64Number k4;
+
+ p = (cmsCIECAM16*)_cmsMallocZero(ContextID, sizeof(cmsCIECAM16));
+
+ if (p == NULL) {
+ return NULL;
+ }
+
+ p->ContextID = ContextID;
+
+ p->XYZ_w = vc->whitePoint;
+
+ p->LA = vc->La;
+ p->Yb = vc->Yb;
+ p->Yw = vc->whitePoint.Y;
+
+ p->surround = vc->surround;
+
+ p->c = (p->surround >= 1) ? lerp(0.59, 0.69, p->surround - 1) : lerp(0.525, 0.59, p->surround);
+
+ p->F = (p->c >= 0.59) ? lerp(0.9, 1.0, (p->c - 0.59) / .1) : lerp(0.8, 0.9, (p->c - 0.525) / 0.065);
+
+ p->Nc = p->F;
+ p->k = 1.0 / (5.0 * p->LA + 1.0);
+
+ k4 = p->k * p->k * p->k * p->k;
+
+ p->FL = k4 * p->LA + 0.1 * (1 - k4) * (1 - k4) * pow(5.0 * p->LA, 1.0 / 3.0);
+
+ p->FL4 = pow(p->FL, 0.25);
+
+ p->n = p->Yb / p->Yw;
+
+ p->z = 1.48 + sqrt(p->n); // Lightness non-linearity exponent (modified by c)
+ p->Nbb = 0.725 * pow(p->n, -0.2); // Chromatic induction factors
+ p->Ncb = p->Nbb;
+
+ // CAM16 has discounting for anything but d==1
+ p->D = (vc->D_value < 1.0) ? clip(0, 1, p->F * (1.0 - 1.0 / 3.6 * exp((-p->LA - 42.0) / 92.0))) : 1.0;
+
+ M16(p->RGB_w, &p->XYZ_w); // Cone responses of the white point
+
+ p->D_RGB[0] = lerp(1, p->Yw / p->RGB_w[0], p->D); // p->D * p->Yw / p->RGB_w[0] + 1.0 - p->D;
+ p->D_RGB[1] = lerp(1, p->Yw / p->RGB_w[1], p->D); // p->D * p->Yw / p->RGB_w[1] + 1.0 - p->D;
+ p->D_RGB[2] = lerp(1, p->Yw / p->RGB_w[2], p->D); // p->D * p->Yw / p->RGB_w[2] + 1.0 - p->D;
+
+ p->D_RGB_inv[0] = 1.0 / p->D_RGB[0];
+ p->D_RGB_inv[1] = 1.0 / p->D_RGB[1];
+ p->D_RGB_inv[2] = 1.0 / p->D_RGB[2];
+
+ p->RGB_cw[0] = p-> RGB_w[0] * p->D_RGB[0];
+ p->RGB_cw[1] = p-> RGB_w[1] * p->D_RGB[1];
+ p->RGB_cw[2] = p-> RGB_w[2] * p->D_RGB[2];
+
+ p->RGB_aw[0] = adapt(p->FL, p->RGB_cw[0]);
+ p->RGB_aw[1] = adapt(p->FL, p->RGB_cw[1]);
+ p->RGB_aw[2] = adapt(p->FL, p->RGB_cw[2]);
+
+ p->A_w = p->Nbb * (2.0 * p->RGB_aw[0] + p->RGB_aw[1] + 0.05 * p->RGB_aw[2]);
+
+
+ return (cmsHANDLE)p;
+
+}
+
+void CMSEXPORT cmsCIECAM16Forward(cmsHANDLE hModel, const cmsCIEXYZ* pIn, cmsCIECAM16Color* pOut)
+{
+ cmsFloat64Number RGB[3], RGB_a[3];
+ cmsFloat64Number a, b, h_rad, e_t, A, J_root, t, alpha;
+
+ cmsCIECAM16* p = (cmsCIECAM16*)hModel;
+
+ M16(RGB, pIn);
+
+ RGB_a[0] = adapt(p->FL, RGB[0] * p->D_RGB[0]);
+ RGB_a[1] = adapt(p->FL, RGB[1] * p->D_RGB[1]);
+ RGB_a[2] = adapt(p->FL, RGB[2] * p->D_RGB[2]);
+
+ a = RGB_a[0] + (-12 * RGB_a[1] + RGB_a[2]) / 11; // redness-greenness
+ b = (RGB_a[0] + RGB_a[1] - 2 * RGB_a[2]) / 9; // yellowness-blueness
+
+ h_rad = atan2(b, a); // hue in radians
+ pOut->h = degrees(h_rad); // hue in degrees
+
+ e_t = 0.25 * (cos(h_rad + 2) + 3.8);
+
+ A = p->Nbb * (2.0 * RGB_a[0] + RGB_a[1] + 0.05 * RGB_a[2]);
+
+ J_root = pow(A / p->A_w, 0.5 * p->c * p->z);
+
+ pOut->J = 100 * J_root * J_root; // lightness
+ pOut->Q = (4 / p->c * J_root * (p->A_w + 4) * p->FL4); // brightness
+
+ t = (5e4 / 13.0 * p->Nc * p->Ncb * e_t * sqrt(a * a + b * b) /
+ (RGB_a[0] + RGB_a[1] + 1.05 * RGB_a[2] + 0.305));
+
+ alpha = pow(t, 0.9) * pow(1.64 - pow(0.29, p->n), 0.73);
+
+ pOut->C = alpha * J_root; // chroma
+ pOut->M = pOut->C * p->FL4; // colorfulness
+ pOut->s = 50 * sqrt(p->c * alpha / (p->A_w + 4)); // saturation
+
+}
+
+
+
+void CMSEXPORT cmsCIECAM16Reverse(cmsHANDLE hModel, cmsUInt32Number flags, const cmsCIECAM16Color* pIn, cmsCIEXYZ* pOut)
+{
+ cmsCIECAM16* p = (cmsCIECAM16*)hModel;
+
+ cmsFloat64Number h_rad, sin_h, cos_h;
+ cmsFloat64Number J_root, alpha, t, e_t, A, p_1, p_2, r, a, b, denom;
+ cmsFloat64Number RGB_c[3], RGB_f[3];
+
+ h_rad = radians(pIn->h);
+ sin_h = sin(h_rad);
+ cos_h = cos(h_rad);
+
+ if (flags & cmsCAM16_FROM_Q)
+ {
+ if (pIn->Q == 0.0)
+ {
+ pOut->X = pOut->Y = pOut->Z = 0.0;
+ return;
+ }
+
+ J_root = 0.25 * p->c * pIn->Q / ((p->A_w + 4) * p->FL4);
+ }
+ else
+ {
+ if (pIn->J == 0.0)
+ {
+ pOut->X = pOut->Y = pOut->Z = 0.0;
+ return;
+ }
+
+ J_root = sqrt(pIn->J) * 0.1;
+ }
+
+
+ if (flags & cmsCAM16_FROM_s)
+ {
+ alpha = 0.0004 * pIn->s * pIn->s * (p->A_w + 4.0) / p->c;
+ }
+ else
+ if (flags & cmsCAM16_FROM_M)
+ {
+ alpha = (pIn->M / p->FL4) / J_root;
+ }
+ else
+ {
+ alpha = pIn->C / J_root;
+ }
+
+
+ t = pow(alpha * pow(1.64 - pow(0.29, p->n), -0.73), 10.0 / 9.0);
+
+ e_t = 0.25 * (cos(h_rad + 2) + 3.8);
+
+ A = p->A_w * pow(J_root, 2.0 / p->c / p->z);
+
+ p_1 = 5e4 / 13.0 * p->Nc * p->Ncb * e_t;
+
+ p_2 = A / p->Nbb;
+
+ r = 23 * (p_2 + 0.305) * t / (23 * p_1 + t * (11 * cos_h + 108 * sin_h));
+ a = r * cos_h;
+ b = r * sin_h;
+
+ denom = 1.0 / 1403.0;
+
+ RGB_c[0] = unadapt(p->FL, (460 * p_2 + 451 * a + 288 * b) * denom);
+ RGB_c[1] = unadapt(p->FL, (460 * p_2 - 891 * a - 261 * b) * denom);
+ RGB_c[2] = unadapt(p->FL, (460 * p_2 - 220 * a - 6300 * b) * denom);
+
+ elem_mul(RGB_f, p->D_RGB_inv, RGB_c);
+
+ M16_inv(pOut, RGB_f);
+
+}
+
+
+void CMSEXPORT cmsCIECAM16Done(cmsHANDLE hModel)
+{
+ cmsCIECAM16* lpMod = (cmsCIECAM16*)hModel;
+
+ if (lpMod) _cmsFree(lpMod->ContextID, lpMod);
+}
+
diff --git a/src/cmscgats.c b/src/cmscgats.c
index 051c3dc..e922305 100644
--- a/src/cmscgats.c
+++ b/src/cmscgats.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2021 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmscnvrt.c b/src/cmscnvrt.c
index b471da7..fe25525 100644
--- a/src/cmscnvrt.c
+++ b/src/cmscnvrt.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmserr.c b/src/cmserr.c
index 2483eea..1563b7b 100644
--- a/src/cmserr.c
+++ b/src/cmserr.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmsgamma.c b/src/cmsgamma.c
index 5d4c481..1c4a223 100644
--- a/src/cmsgamma.c
+++ b/src/cmsgamma.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmshalf.c b/src/cmshalf.c
index 292b6fd..7a96959 100644
--- a/src/cmshalf.c
+++ b/src/cmshalf.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmsintrp.c b/src/cmsintrp.c
index 22de3e5..5cd6d16 100644
--- a/src/cmsintrp.c
+++ b/src/cmsintrp.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmsio0.c b/src/cmsio0.c
index 353ddc9..0143efb 100644
--- a/src/cmsio0.c
+++ b/src/cmsio0.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmsio1.c b/src/cmsio1.c
index 28e8c18..db18b9f 100644
--- a/src/cmsio1.c
+++ b/src/cmsio1.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmslut.c b/src/cmslut.c
index 9e67b31..649e2ff 100644
--- a/src/cmslut.c
+++ b/src/cmslut.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmsmd5.c b/src/cmsmd5.c
index 88b2d77..f0af214 100644
--- a/src/cmsmd5.c
+++ b/src/cmsmd5.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmsmtrx.c b/src/cmsmtrx.c
index 9e05355..86a66f7 100644
--- a/src/cmsmtrx.c
+++ b/src/cmsmtrx.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmsnamed.c b/src/cmsnamed.c
index 07eb47c..28e67f2 100644
--- a/src/cmsnamed.c
+++ b/src/cmsnamed.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmsopt.c b/src/cmsopt.c
index 56cdf29..78d2a83 100644
--- a/src/cmsopt.c
+++ b/src/cmsopt.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmspack.c b/src/cmspack.c
index 8f8df9c..955687c 100644
--- a/src/cmspack.c
+++ b/src/cmspack.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2021 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmspcs.c b/src/cmspcs.c
index 9f03fc5..3d6323a 100644
--- a/src/cmspcs.c
+++ b/src/cmspcs.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmsplugin.c b/src/cmsplugin.c
index 8c9e4c8..dbda3fd 100644
--- a/src/cmsplugin.c
+++ b/src/cmsplugin.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmsps2.c b/src/cmsps2.c
index b4bd0c4..4bb17b0 100644
--- a/src/cmsps2.c
+++ b/src/cmsps2.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmssamp.c b/src/cmssamp.c
index 6434d53..868664a 100644
--- a/src/cmssamp.c
+++ b/src/cmssamp.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmssm.c b/src/cmssm.c
index 284c77a..fb6965e 100644
--- a/src/cmssm.c
+++ b/src/cmssm.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmstypes.c b/src/cmstypes.c
index 1a0d874..c05a3ec 100644
--- a/src/cmstypes.c
+++ b/src/cmstypes.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmsvirt.c b/src/cmsvirt.c
index b2adb97..bffb88e 100644
--- a/src/cmsvirt.c
+++ b/src/cmsvirt.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmswtpnt.c b/src/cmswtpnt.c
index 8cfacf2..a8e41b2 100644
--- a/src/cmswtpnt.c
+++ b/src/cmswtpnt.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/cmsxform.c b/src/cmsxform.c
index 3ae15a8..c7183fc 100644
--- a/src/cmsxform.c
+++ b/src/cmsxform.c
@@ -1,7 +1,7 @@
//---------------------------------------------------------------------------------
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),
diff --git a/src/lcms2_internal.h b/src/lcms2_internal.h
index 3e25d92..ecb5baf 100644
--- a/src/lcms2_internal.h
+++ b/src/lcms2_internal.h
@@ -1,7 +1,7 @@
//
// Little Color Management System
-// Copyright (c) 1998-2020 Marti Maria Saguer
+// Copyright (c) 1998-2022 Marti Maria Saguer
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the "Software"),