Parse CICP tags, and put the HDR metadata in skcms_Profile

Bug: skia:13735
Bug: chromium:1359081
Change-Id: I8288e129687e2f5c1670e8b7d5a62e4e28dbc72d
Reviewed-on: https://skia-review.googlesource.com/c/skcms/+/580818
Commit-Queue: Christopher Cameron <ccameron@google.com>
Auto-Submit: Brian Osman <brianosman@google.com>
Reviewed-by: Christopher Cameron <ccameron@google.com>
diff --git a/profiles/misc/P3_PQ_cicp.icc b/profiles/misc/P3_PQ_cicp.icc
new file mode 100644
index 0000000..e4306c6
--- /dev/null
+++ b/profiles/misc/P3_PQ_cicp.icc
Binary files differ
diff --git a/profiles/misc/P3_PQ_cicp.icc.txt b/profiles/misc/P3_PQ_cicp.icc.txt
new file mode 100644
index 0000000..71a13bf
--- /dev/null
+++ b/profiles/misc/P3_PQ_cicp.icc.txt
@@ -0,0 +1,81 @@
+                Size : 0x00002204 : 8708
+    Data color space : 0x52474220 : 'RGB '
+                 PCS : 0x58595A20 : 'XYZ '
+           Tag count : 0x0000000B : 11
+
+ Tag    : Type   : Size   : Offset
+ ------ : ------ : ------ : --------
+ 'desc' : 'mluc' :     68 : 264
+ 'cprt' : 'mluc' :     36 : 332
+ 'wtpt' : 'XYZ ' :     20 : 368
+ 'chad' : 'sf32' :     44 : 388
+ 'cicp' : 'cicp' :     12 : 432
+ 'rXYZ' : 'XYZ ' :     20 : 444
+ 'gXYZ' : 'XYZ ' :     20 : 464
+ 'bXYZ' : 'XYZ ' :     20 : 484
+ 'rTRC' : 'curv' :   8204 : 504
+ 'gTRC' : 'curv' :   8204 : 504
+ 'bTRC' : 'curv' :   8204 : 504
+
+rTRC : 16-bit table with 4096 entries
+  ~= : 7.06504, 1, -1.122057e-05, 0.0003810142, 0.1201465, -3.814697e-05, 0 (Max error: 0.150819) (D-gap: -8.361e-05) (f(1) = 0.999878)
+gTRC : 16-bit table with 4096 entries
+  ~= : 7.06504, 1, -1.122057e-05, 0.0003810142, 0.1201465, -3.814697e-05, 0 (Max error: 0.150819) (D-gap: -8.361e-05) (f(1) = 0.999878)
+bTRC : 16-bit table with 4096 entries
+  ~= : 7.06504, 1, -1.122057e-05, 0.0003810142, 0.1201465, -3.814697e-05, 0 (Max error: 0.150819) (D-gap: -8.361e-05) (f(1) = 0.999878)
+Best : 7.06504, 1, -1.122057e-05, 0.0003810142, 0.1201465, -3.814697e-05, 0 (D-gap: -8.361e-05) (f(1) = 0.999878)
+Inv  : 0.141542, 1, 3.814697e-05, 2624.574, 4.577753e-05, 0, -0 (D-gap: 0.144727) (f(1) = 1.00001)
+Best Error: | 0.150819 0.150819 0.150819 |
+ XYZ : | 0.5151062 0.29196167 0.15715026 |
+       | 0.24118042 0.6922302 0.066589355 |
+       | -0.0010375976 0.041885376 0.78437805 |
+CHAD : | 1.0478515 0.022903442 -0.05014038 |
+       | 0.029571533 0.9904785 -0.017044067 |
+       | -0.009231567 0.015060424 0.7519683 |
+WTPT : | 0.9642028 1. 0.8249054 |
+CICP : CP: 12 TF: 16 MC: 0 FR: 1
+252 random bytes transformed to 84 linear XYZD50 pixels:
+     0.02  0.04  0.01     0.35  0.68  0.04     0.03  0.06  0.00     0.00  0.00  0.01
+     0.01  0.00  0.03     0.12  0.06  0.00     0.09  0.21  0.01     0.29  0.13  0.01
+     0.00  0.00  0.00     0.24  0.11  0.00     0.39  0.27  0.01     0.03  0.04  0.00
+     0.01  0.02  0.01     0.07  0.03  0.27     0.33  0.19  0.30     0.06  0.07  0.22
+     0.09  0.10  0.03     0.02  0.03  0.00     0.02  0.01  0.05     0.37  0.19  0.00
+     0.44  0.20  0.37     0.46  0.22  0.00     0.00  0.00  0.02     0.59  0.83  0.08
+     0.37  0.17  0.28     0.19  0.38  0.02     0.03  0.01  0.16     0.04  0.09  0.02
+     0.02  0.02  0.01     0.01  0.01  0.02     0.01  0.00  0.03     0.13  0.12  0.03
+     0.30  0.67  0.10     0.42  0.20  0.11     0.05  0.13  0.01     0.09  0.14  0.16
+     0.01  0.02  0.00     0.17  0.08 -0.00     0.12  0.29  0.02     0.00  0.00  0.00
+     0.02  0.01  0.09     0.01  0.01  0.04     0.04  0.01  0.17     0.01  0.01  0.00
+     0.04  0.07  0.10     0.00  0.00  0.00     0.01  0.01  0.00     0.08  0.04  0.00
+     0.27  0.13  0.23     0.48  0.32  0.04     0.51  0.24  0.63     0.15  0.07  0.00
+     0.04  0.09  0.01     0.08  0.19  0.02     0.00  0.00  0.00     0.25  0.60  0.04
+     0.06  0.14  0.01     0.23  0.12  0.00     0.01  0.00  0.01     0.02  0.01  0.00
+     0.00  0.00  0.01     0.00  0.00  0.00     0.03  0.02  0.00     0.06  0.04  0.08
+     0.06  0.03  0.07     0.03  0.07  0.00     0.08  0.04  0.06     0.02  0.01  0.01
+     0.01  0.01  0.04     0.06  0.06  0.20     0.01  0.02  0.00     0.04  0.02  0.19
+     0.00  0.00  0.01     0.19  0.09 -0.00     0.12  0.28  0.02     0.00  0.00  0.00
+     0.09  0.06  0.40     0.19  0.44  0.03     0.04  0.02  0.01     0.01  0.02  0.01
+     0.12  0.06  0.00     0.10  0.22  0.02     0.08  0.04  0.00     0.05  0.05  0.17
+40 max error transforming back from XYZ:
+      8   6   4   8   1  34   2   7  23  12  37   1  12  34   5   8   6   6   3   7  14
+      5  29   3   8  21  18   6  13   7   3   8   1   2   6  12  29   3   5   2  25   7
+      5   6   6  27   7   7   8   8   4   4   5  18   3   8   7   3   4  12   3  23   5
+      1  27  10  14   6   2   4   0   5   4  10   7   6   5  13  17   6   8  22   8   1
+      3   1   4   0  12   2   9   9   4   8   8   4   1   0   7   2  24   8  32   8   5
+      1   8   8   8   4  18   7   9  38   5   6   8  35  26  28   4  30   8  27   6   6
+     30  11   8   4   9  11  30   7   8  37  26  11  22   0  30   8  20  19   6   1   7
+      2   8   5   3   1   2   7  22  10   7   8   7  28   7   2   7  33  19  33   1  31
+     14   8  15   6   1  40   6  25   5   3  11  26   2  33   0   3   0  10   6  16  11
+      7   3   8   7  15   7  24   8   7   8   7   7   4   1   5  19   5   5   2   6   8
+     23   3  20  12  16   8  25  36   0   6   5  36  15   6   4   2  13  21  17   5   5
+     17   4  32   7  24   3   9   2   0   8  16   8  35   7   2   8  20  14  13   6   8
+81 edge-case pixels transformed to sRGB 8888 (unpremul):
+	00000000 0000001b 000000ff  00001900 00001818 000000ff  0000ff00 0000ff00 0000ffff
+	00190000 0019001b 000000ff  00181900 00181818 000000ff  0000ff00 0000ff00 0000ffff
+	00ff0000 00ff001b 00ff00ff  00ff1900 00ff1818 00ff00ff  00ffff00 00ffff00 00ffffff
+	7f000000 7f00001b 7f0000ff  7f001900 7f001818 7f0000ff  7f00ff00 7f00ff00 7f00ffff
+	7f190000 7f19001b 7f0000ff  7f181900 7f181818 7f0000ff  7f00ff00 7f00ff00 7f00ffff
+	7fff0000 7fff001b 7fff00ff  7fff1900 7fff1818 7fff00ff  7fffff00 7fffff00 7fffffff
+	ff000000 ff00001b ff0000ff  ff001900 ff001818 ff0000ff  ff00ff00 ff00ff00 ff00ffff
+	ff190000 ff19001b ff0000ff  ff181900 ff181818 ff0000ff  ff00ff00 ff00ff00 ff00ffff
+	ffff0000 ffff001b ffff00ff  ffff1900 ffff1818 ffff00ff  ffffff00 ffffff00 ffffffff
diff --git a/profiles/misc/Rec2020_HLG_cicp.icc b/profiles/misc/Rec2020_HLG_cicp.icc
new file mode 100644
index 0000000..2411a0c
--- /dev/null
+++ b/profiles/misc/Rec2020_HLG_cicp.icc
Binary files differ
diff --git a/profiles/misc/Rec2020_HLG_cicp.icc.txt b/profiles/misc/Rec2020_HLG_cicp.icc.txt
new file mode 100644
index 0000000..3f6733d
--- /dev/null
+++ b/profiles/misc/Rec2020_HLG_cicp.icc.txt
@@ -0,0 +1,81 @@
+                Size : 0x00002204 : 8708
+    Data color space : 0x52474220 : 'RGB '
+                 PCS : 0x58595A20 : 'XYZ '
+           Tag count : 0x0000000B : 11
+
+ Tag    : Type   : Size   : Offset
+ ------ : ------ : ------ : --------
+ 'desc' : 'mluc' :     68 : 264
+ 'cprt' : 'mluc' :     36 : 332
+ 'wtpt' : 'XYZ ' :     20 : 368
+ 'chad' : 'sf32' :     44 : 388
+ 'cicp' : 'cicp' :     12 : 432
+ 'rXYZ' : 'XYZ ' :     20 : 444
+ 'gXYZ' : 'XYZ ' :     20 : 464
+ 'bXYZ' : 'XYZ ' :     20 : 484
+ 'rTRC' : 'curv' :   8204 : 504
+ 'gTRC' : 'curv' :   8204 : 504
+ 'bTRC' : 'curv' :   8204 : 504
+
+rTRC : 16-bit table with 4096 entries
+  ~= : 3.924072, 1, -1.443923e-05, 0.05090687, 0.1528694, 0.007171631, 0 (Max error: 0.0850576) (D-gap: 1.89622e-05) (f(1) = 1.00711)
+gTRC : 16-bit table with 4096 entries
+  ~= : 3.924072, 1, -1.443923e-05, 0.05090687, 0.1528694, 0.007171631, 0 (Max error: 0.0850576) (D-gap: 1.89622e-05) (f(1) = 1.00711)
+bTRC : 16-bit table with 4096 entries
+  ~= : 3.924072, 1, -1.443923e-05, 0.05090687, 0.1528694, 0.007171631, 0 (Max error: 0.0850576) (D-gap: 1.89622e-05) (f(1) = 1.00711)
+Best : 3.924072, 1, -1.443923e-05, 0.05090687, 0.1528694, 0.007171631, 0 (D-gap: 1.89622e-05) (f(1) = 1.00711)
+Inv  : 0.2548373, 1, -0.007171631, 19.64371, 0.007782101, 7.629395e-06, -0 (D-gap: -0.00120844) (f(1) = 0.998177)
+Best Error: | 0.0850576 0.0850576 0.0850576 |
+ XYZ : | 0.6734619 0.16566467 0.12510681 |
+       | 0.27903747 0.67533874 0.04562377 |
+       | -0.0019226074 0.02998352 0.7971649 |
+CHAD : | 1.0478515 0.022903442 -0.05014038 |
+       | 0.029571533 0.9904785 -0.017044067 |
+       | -0.009231567 0.015060424 0.7519683 |
+WTPT : | 0.9642028 1. 0.8249054 |
+CICP : CP: 9 TF: 18 MC: 0 FR: 1
+252 random bytes transformed to 84 linear XYZD50 pixels:
+     0.05  0.14  0.07     0.39  0.74  0.03     0.10  0.18  0.03     0.05  0.02  0.08
+     0.06  0.03  0.14     0.30  0.17  0.00     0.09  0.34  0.05     0.49  0.21  0.07
+     0.05  0.04  0.03     0.45  0.21  0.06     0.59  0.46  0.01     0.12  0.16  0.01
+     0.04  0.10  0.07     0.16  0.07  0.43     0.56  0.35  0.46     0.11  0.17  0.39
+     0.24  0.27  0.12     0.09  0.14  0.03     0.09  0.04  0.17     0.57  0.33  0.01
+     0.64  0.28  0.52     0.64  0.28  0.05     0.02  0.01  0.10     0.68  0.89  0.17
+     0.58  0.24  0.44     0.26  0.53  0.06     0.07  0.03  0.32     0.08  0.23  0.10
+     0.12  0.12  0.07     0.10  0.07  0.10     0.06  0.03  0.13     0.32  0.30  0.13
+     0.26  0.70  0.21     0.62  0.27  0.26     0.07  0.26  0.01     0.19  0.30  0.32
+     0.07  0.12  0.03     0.36  0.15  0.00     0.11  0.41  0.07     0.01  0.01  0.01
+     0.04  0.02  0.24     0.05  0.06  0.15     0.06  0.02  0.34     0.07  0.07  0.00
+     0.09  0.18  0.24     0.01  0.02  0.04     0.04  0.08  0.01     0.24  0.12  0.03
+     0.49  0.26  0.40     0.68  0.50  0.14     0.69  0.34  0.70     0.34  0.16  0.05
+     0.06  0.21  0.07     0.10  0.32  0.09     0.05  0.03  0.03     0.16  0.62  0.04
+     0.10  0.29  0.05     0.44  0.25  0.01     0.06  0.04  0.06     0.11  0.08  0.02
+     0.02  0.01  0.09     0.01  0.00  0.05     0.15  0.08  0.04     0.21  0.17  0.22
+     0.21  0.11  0.20     0.06  0.18  0.01     0.23  0.10  0.19     0.11  0.04  0.06
+     0.06  0.07  0.14     0.15  0.17  0.37     0.04  0.10  0.03     0.10  0.06  0.36
+     0.03  0.01  0.08     0.38  0.16  0.00     0.13  0.41  0.02     0.00  0.00  0.02
+     0.14  0.15  0.55     0.15  0.53  0.03     0.17  0.08  0.07     0.08  0.10  0.09
+     0.31  0.15  0.05     0.10  0.36  0.09     0.23  0.11  0.04     0.12  0.16  0.33
+22 max error transforming back from XYZ:
+      6  10   5  11   1   1   2  10  22  14   6   1  15   0   8  10   8   9   3   9  17
+      6  19   3  10  21  20   7  16   9   4  11   7   4   9   8  19   6   7   4  21   9
+      7   9   8  20  10  10  11  11   6   5   8  20   3  10  10   4   7  10   4  22   7
+      2  21  12   9   5   4   6   0   8   5  10   9   9   6  16  19   9  11  22  11   3
+      5   2   5   2  15   4  12  10   7  11  11   7   1   1  10   3  22  11  14  11   4
+      2  11  11  11   7  20   9   7   6   9   8  10   2  21  20   9  18  11  21   8   9
+     17  10  10   4  11   8  18  10  11   4  21  14  21   1  16  11  21  20   8   0   9
+      2  11   7   3   0   3  10  21  13   8  11   9  20  10   2   9   4  20   7   2  15
+     17  11  17   7   3   8   7  22   7   6  13  21   7   9   1   9   0  13   9  19  14
+     10   5  11  11  18  11  22  11  10  11   6  10   6   1   6  21   6   8   3   9  10
+     22   5  21  15  18  10  22   5   0   8   9   4  18   8   4   2   9  21  19   8   6
+     19   5  13  10  22   4  12   3   1  10  19  11   3   9   1  11  21  17  16   9  10
+81 edge-case pixels transformed to sRGB 8888 (unpremul):
+	00000000 00000068 000000ff  00005600 00005254 000000ff  0000ff00 0000ff00 0000ffff
+	00560000 00550065 004d00ff  00525600 00515151 004900ff  0000ff00 0000ff00 0000ffff
+	00ff0000 00ff0048 00ff00ff  00ff5200 00ff4d22 00ff00ff  00ffff00 00ffff00 00ffffff
+	7f000000 7f000068 7f0000ff  7f005600 7f005254 7f0000ff  7f00ff00 7f00ff00 7f00ffff
+	7f560000 7f550065 7f4d00ff  7f525600 7f515151 7f4900ff  7f00ff00 7f00ff00 7f00ffff
+	7fff0000 7fff0048 7fff00ff  7fff5200 7fff4d22 7fff00ff  7fffff00 7fffff00 7fffffff
+	ff000000 ff000068 ff0000ff  ff005600 ff005254 ff0000ff  ff00ff00 ff00ff00 ff00ffff
+	ff560000 ff550065 ff4d00ff  ff525600 ff515151 ff4900ff  ff00ff00 ff00ff00 ff00ffff
+	ffff0000 ffff0048 ffff00ff  ffff5200 ffff4d22 ffff00ff  ffffff00 ffffff00 ffffffff
diff --git a/profiles/misc/Rec2020_PQ_cicp.icc b/profiles/misc/Rec2020_PQ_cicp.icc
new file mode 100644
index 0000000..0fb3f4d
--- /dev/null
+++ b/profiles/misc/Rec2020_PQ_cicp.icc
Binary files differ
diff --git a/profiles/misc/Rec2020_PQ_cicp.icc.txt b/profiles/misc/Rec2020_PQ_cicp.icc.txt
new file mode 100644
index 0000000..acfc56c
--- /dev/null
+++ b/profiles/misc/Rec2020_PQ_cicp.icc.txt
@@ -0,0 +1,81 @@
+                Size : 0x00002204 : 8708
+    Data color space : 0x52474220 : 'RGB '
+                 PCS : 0x58595A20 : 'XYZ '
+           Tag count : 0x0000000B : 11
+
+ Tag    : Type   : Size   : Offset
+ ------ : ------ : ------ : --------
+ 'desc' : 'mluc' :     68 : 264
+ 'cprt' : 'mluc' :     36 : 332
+ 'wtpt' : 'XYZ ' :     20 : 368
+ 'chad' : 'sf32' :     44 : 388
+ 'cicp' : 'cicp' :     12 : 432
+ 'rXYZ' : 'XYZ ' :     20 : 444
+ 'gXYZ' : 'XYZ ' :     20 : 464
+ 'bXYZ' : 'XYZ ' :     20 : 484
+ 'rTRC' : 'curv' :   8204 : 504
+ 'gTRC' : 'curv' :   8204 : 504
+ 'bTRC' : 'curv' :   8204 : 504
+
+rTRC : 16-bit table with 4096 entries
+  ~= : 7.06504, 1, -1.122057e-05, 0.0003810142, 0.1201465, -3.814697e-05, 0 (Max error: 0.150819) (D-gap: -8.361e-05) (f(1) = 0.999878)
+gTRC : 16-bit table with 4096 entries
+  ~= : 7.06504, 1, -1.122057e-05, 0.0003810142, 0.1201465, -3.814697e-05, 0 (Max error: 0.150819) (D-gap: -8.361e-05) (f(1) = 0.999878)
+bTRC : 16-bit table with 4096 entries
+  ~= : 7.06504, 1, -1.122057e-05, 0.0003810142, 0.1201465, -3.814697e-05, 0 (Max error: 0.150819) (D-gap: -8.361e-05) (f(1) = 0.999878)
+Best : 7.06504, 1, -1.122057e-05, 0.0003810142, 0.1201465, -3.814697e-05, 0 (D-gap: -8.361e-05) (f(1) = 0.999878)
+Inv  : 0.141542, 1, 3.814697e-05, 2624.574, 4.577753e-05, 0, -0 (D-gap: 0.144727) (f(1) = 1.00001)
+Best Error: | 0.150819 0.150819 0.150819 |
+ XYZ : | 0.6734619 0.16566467 0.12510681 |
+       | 0.27903747 0.67533874 0.04562377 |
+       | -0.0019226074 0.02998352 0.7971649 |
+CHAD : | 1.0478515 0.022903442 -0.05014038 |
+       | 0.029571533 0.9904785 -0.017044067 |
+       | -0.009231567 0.015060424 0.7519683 |
+WTPT : | 0.9642028 1. 0.8249054 |
+CICP : CP: 9 TF: 16 MC: 0 FR: 1
+252 random bytes transformed to 84 linear XYZD50 pixels:
+     0.01  0.04  0.01     0.26  0.67  0.03     0.02  0.05  0.00     0.00  0.00  0.01
+     0.01  0.00  0.04     0.16  0.07 -0.00     0.05  0.21  0.01     0.37  0.15  0.01
+     0.00  0.00  0.00     0.31  0.13  0.00     0.47  0.29  0.00     0.03  0.04  0.00
+     0.01  0.02  0.01     0.06  0.02  0.27     0.39  0.20  0.31     0.05  0.06  0.22
+     0.09  0.10  0.03     0.01  0.03  0.00     0.02  0.01  0.05     0.47  0.22 -0.00
+     0.54  0.22  0.38     0.60  0.25  0.00     0.00  0.00  0.02     0.56  0.84  0.07
+     0.46  0.19  0.28     0.13  0.38  0.02     0.03  0.01  0.16     0.03  0.09  0.02
+     0.02  0.02  0.01     0.02  0.01  0.02     0.01  0.00  0.03     0.14  0.13  0.03
+     0.18  0.66  0.09     0.54  0.22  0.11     0.03  0.13  0.01     0.07  0.13  0.16
+     0.01  0.02  0.00     0.22  0.09 -0.00     0.07  0.28  0.02     0.00  0.00  0.00
+     0.02  0.01  0.10     0.01  0.01  0.04     0.03  0.01  0.18     0.01  0.01  0.00
+     0.03  0.06  0.10     0.00  0.00  0.00     0.00  0.01  0.00     0.10  0.04  0.00
+     0.33  0.14  0.24     0.59  0.35  0.03     0.60  0.25  0.64     0.19  0.08  0.00
+     0.02  0.09  0.01     0.05  0.18  0.02     0.00  0.00  0.00     0.14  0.58  0.03
+     0.04  0.14  0.01     0.30  0.14 -0.00     0.01  0.00  0.01     0.02  0.01  0.00
+     0.00  0.00  0.01     0.00  0.00  0.00     0.04  0.02  0.00     0.07  0.04  0.08
+     0.07  0.03  0.07     0.02  0.06  0.00     0.09  0.04  0.06     0.02  0.01  0.01
+     0.01  0.01  0.04     0.05  0.05  0.21     0.01  0.02  0.00     0.03  0.01  0.20
+     0.00  0.00  0.01     0.25  0.10 -0.00     0.07  0.27  0.01     0.00  0.00  0.00
+     0.07  0.05  0.41     0.11  0.43  0.02     0.05  0.02  0.01     0.01  0.02  0.01
+     0.16  0.07  0.00     0.05  0.22  0.02     0.10  0.04  0.00     0.04  0.05  0.17
+39 max error transforming back from XYZ:
+      8   6   4   8   1  34   2   7  23  12  37   1  12  34   5   8   6   6   3   7  14
+      5  29   3   8  21  18   6  13   7   3   8   1   2   6  12  29   3   5   2  25   7
+      5   6   6  27   7   7   8   8   4   4   5  18   3   8   7   3   4  12   3  23   5
+      1  27  10  14   6   2   4   0   5   4  10   7   6   5  13  17   6   8  22   8   1
+      3   1   4   0  12   2   9   9   4   8   8   4   1   0   7   2  24   8  32   8   5
+      1   8   8   8   4  18   7   9  38   5   6   8  35  26  28   4  30   8  27   6   6
+     30  11   8   4   9  11  30   7   8  37  26  11  22   0  30   8  20  19   6   1   7
+      2   8   5   3   1   2   7  22  10   7   8   7  28   7   2   7  33  19  33   1  31
+     14   8  15   6   1   3   6  25   5   3  11  26  39  33   0   3   0  10   6  16  11
+      7   3   8   7  15   7  24   8   7   8   7   7   4   1   5  19   5   5   2   6   8
+     23   3  20  12  16   8  25  36   0   6   5  36  15   6   4   2  13  21  17   5   5
+     17   4  32   7  24   3   9   2   0   8  16   8  35   7   2   8  20  14  13   6   8
+81 edge-case pixels transformed to sRGB 8888 (unpremul):
+	00000000 00000021 000000ff  00001a00 00001819 000000ff  0000ff00 0000ff00 0000ffff
+	001a0000 00190020 000000ff  00181a00 00181818 000000ff  0000ff00 0000ff00 0000ffff
+	00ff0000 00ff0000 00ff00ff  00ff0600 00ff0300 00ff00ff  00ffff00 00ffff00 00ffffff
+	7f000000 7f000021 7f0000ff  7f001a00 7f001819 7f0000ff  7f00ff00 7f00ff00 7f00ffff
+	7f1a0000 7f190020 7f0000ff  7f181a00 7f181818 7f0000ff  7f00ff00 7f00ff00 7f00ffff
+	7fff0000 7fff0000 7fff00ff  7fff0600 7fff0300 7fff00ff  7fffff00 7fffff00 7fffffff
+	ff000000 ff000021 ff0000ff  ff001a00 ff001819 ff0000ff  ff00ff00 ff00ff00 ff00ffff
+	ff1a0000 ff190020 ff0000ff  ff181a00 ff181818 ff0000ff  ff00ff00 ff00ff00 ff00ffff
+	ffff0000 ffff0000 ffff00ff  ffff0600 ffff0300 ffff00ff  ffffff00 ffffff00 ffffffff
diff --git a/skcms.cc b/skcms.cc
index 7d3efa5..4db244d 100644
--- a/skcms.cc
+++ b/skcms.cc
@@ -293,6 +293,8 @@
     skcms_Signature_CHAD = 0x63686164,
     skcms_Signature_WTPT = 0x77747074,
 
+    skcms_Signature_CICP = 0x63696370,
+
     // Type signatures
     skcms_Signature_curv = 0x63757276,
     skcms_Signature_mft1 = 0x6D667431,
@@ -1169,6 +1171,29 @@
     return true;
 }
 
+typedef struct {
+    uint8_t type                     [4];
+    uint8_t reserved                 [4];
+    uint8_t color_primaries          [1];
+    uint8_t transfer_characteristics [1];
+    uint8_t matrix_coefficients      [1];
+    uint8_t video_full_range_flag    [1];
+} CICP_Layout;
+
+static bool read_cicp(const skcms_ICCTag* tag, skcms_CICP* cicp) {
+    if (tag->type != skcms_Signature_CICP || tag->size < SAFE_SIZEOF(CICP_Layout)) {
+        return false;
+    }
+
+    const CICP_Layout* cicpTag = (const CICP_Layout*)tag->buf;
+
+    cicp->color_primaries          = cicpTag->color_primaries[0];
+    cicp->transfer_characteristics = cicpTag->transfer_characteristics[0];
+    cicp->matrix_coefficients      = cicpTag->matrix_coefficients[0];
+    cicp->video_full_range_flag    = cicpTag->video_full_range_flag[0];
+    return true;
+}
+
 void skcms_GetTagByIndex(const skcms_ICCProfile* profile, uint32_t idx, skcms_ICCTag* tag) {
     if (!profile || !profile->buffer || !tag) { return; }
     if (idx > profile->tag_count) { return; }
@@ -1338,6 +1363,15 @@
         }
     }
 
+    skcms_ICCTag cicp_tag;
+    if (skcms_GetTagBySignature(profile, skcms_Signature_CICP, &cicp_tag)) {
+        if (!read_cicp(&cicp_tag, &profile->CICP)) {
+            // Malformed CICP tag
+            return false;
+        }
+        profile->has_CICP = true;
+    }
+
     return usable_as_src(profile);
 }
 
@@ -1432,6 +1466,9 @@
                 {{0, {0,0, 0,0,0,0,0}}},
             },
         },
+
+        false, // has_CICP, followed by cicp itself which we don't care about.
+        { 0, 0, 0, 0 },
     };
     return &sRGB_profile;
 }
@@ -1525,6 +1562,9 @@
                 {{0, {0,0, 0,0,0,0,0}}},
             },
         },
+
+        false, // has_CICP, followed by cicp itself which we don't care about.
+        { 0, 0, 0, 0 },
     };
 
     return &XYZD50_profile;
diff --git a/skcms.h b/skcms.h
index 3e02d95..2ee5693 100644
--- a/skcms.h
+++ b/skcms.h
@@ -152,6 +152,12 @@
     skcms_Curve     output_curves[4];
 } skcms_B2A;
 
+typedef struct skcms_CICP {
+    uint8_t color_primaries;
+    uint8_t transfer_characteristics;
+    uint8_t matrix_coefficients;
+    uint8_t video_full_range_flag;
+} skcms_CICP;
 
 typedef struct skcms_ICCProfile {
     const uint8_t* buffer;
@@ -185,6 +191,10 @@
     bool                   has_B2A;
     skcms_B2A              B2A;
 
+    // If the profile has a valid CICP tag, skcms_Parse() sets CICP to that data,
+    // and has_CICP to true.
+    bool                   has_CICP;
+    skcms_CICP             CICP;
 } skcms_ICCProfile;
 
 // The sRGB color profile is so commonly used that we offer a canonical skcms_ICCProfile for it.
diff --git a/test_only.c b/test_only.c
index 992ddbf..c2a00b1 100644
--- a/test_only.c
+++ b/test_only.c
@@ -402,6 +402,12 @@
         print_shortest_float(fp, wtpt[2]); fprintf(fp, " |\n");
     }
 
+    if (profile->has_CICP) {
+        fprintf(fp, "CICP : CP: %u TF: %u MC: %u FR: %u\n",
+                profile->CICP.color_primaries, profile->CICP.transfer_characteristics,
+                profile->CICP.matrix_coefficients, profile->CICP.video_full_range_flag);
+    }
+
     dump_transform_to_XYZD50(fp, profile);
     dump_transform_to_sRGBA (fp, profile);
     if (skcms_ApproximatelyEqualProfiles(profile, skcms_sRGB_profile())) {
diff --git a/tests.c b/tests.c
index 1f0f404..92ea0fa 100644
--- a/tests.c
+++ b/tests.c
@@ -636,6 +636,11 @@
     // User was (rightly) confused & convinced that profile was being ignored.
     "profiles/misc/Calibrated_A2B_XYZ_Mismatch.icc",  // chromium:1055154
 
+    // HDR profiles that include the new 'cicp' tag (from ICC 4.4.0)
+    "profiles/misc/P3_PQ_cicp.icc",
+    "profiles/misc/Rec2020_HLG_cicp.icc",
+    "profiles/misc/Rec2020_PQ_cicp.icc",
+
     // fuzzer generated profiles that found parsing bugs
 
     // Bad tag table data - these should not parse