lcms2.h revision ee451cb395940862dad63c85adfe8f2fd55e864c
1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//  Little Color Management System
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//  Copyright (c) 1998-2014 Marti Maria Saguer
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Permission is hereby granted, free of charge, to any person obtaining
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// a copy of this software and associated documentation files (the "Software"),
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// to deal in the Software without restriction, including without limitation
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// the rights to use, copy, modify, merge, publish, distribute, sublicense,
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// and/or sell copies of the Software, and to permit persons to whom the Software
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// is furnished to do so, subject to the following conditions:
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// The above copyright notice and this permission notice shall be included in
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// all copies or substantial portions of the Software.
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Version 2.6
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _lcms2_H
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ********** Configuration toggles ****************************************
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Uncomment this one if you are using big endian machines
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// #define CMS_USE_BIG_ENDIAN   1
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Uncomment this one if your compiler/machine does NOT support the
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// "long long" type.
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// #define CMS_DONT_USE_INT64        1
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Uncomment this if your compiler doesn't work with fast floor function
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// #define CMS_DONT_USE_FAST_FLOOR 1
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Uncomment this line if you want lcms to use the black point tag in profile,
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// if commented, lcms will compute the black point by its own.
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// It is safer to leave it commented out
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// #define CMS_USE_PROFILE_BLACK_POINT_TAG    1
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Uncomment this line if you are compiling as C++ and want a C++ API
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// #define CMS_USE_CPP_API
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Uncomment this line if you need strict CGATS syntax. Makes CGATS files to
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// require "KEYWORD" on undefined identifiers, keep it comented out unless needed
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// #define CMS_STRICT_CGATS  1
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Uncomment to get rid of the tables for "half" float support
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// #define CMS_NO_HALF_SUPPORT 1
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Uncomment to get rid of pthreads/windows dependency
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// #define CMS_NO_PTHREADS  1
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ********** End of configuration toggles ******************************
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Needed for streams
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <stdio.h>
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Needed for portability (C99 per 7.1.2)
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <limits.h>
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <time.h>
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <stddef.h>
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef CMS_USE_CPP_API
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#   ifdef __cplusplus
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovextern "C" {
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#   endif
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Version/release
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define LCMS_VERSION        2060
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// I will give the chance of redefining basic types for compilers that are not fully C99 compliant
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef CMS_BASIC_TYPES_ALREADY_DEFINED
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Base types
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef unsigned char        cmsUInt8Number;   // That is guaranteed by the C99 spec
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef signed char          cmsInt8Number;    // That is guaranteed by the C99 spec
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if CHAR_BIT != 8
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  error "Unable to find 8 bit type, unsupported compiler"
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// IEEE float storage numbers
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef float                cmsFloat32Number;
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef double               cmsFloat64Number;
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 16-bit base types
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if (USHRT_MAX == 65535U)
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef unsigned short      cmsUInt16Number;
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#elif (UINT_MAX == 65535U)
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef unsigned int        cmsUInt16Number;
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  error "Unable to find 16 bits unsigned type, unsupported compiler"
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if (SHRT_MAX == 32767)
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  typedef  short             cmsInt16Number;
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#elif (INT_MAX == 32767)
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  typedef  int               cmsInt16Number;
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  error "Unable to find 16 bits signed type, unsupported compiler"
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 32-bit base type
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if (UINT_MAX == 4294967295U)
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef unsigned int        cmsUInt32Number;
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#elif (ULONG_MAX == 4294967295U)
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef unsigned long       cmsUInt32Number;
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  error "Unable to find 32 bit unsigned type, unsupported compiler"
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if (INT_MAX == +2147483647)
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef  int                cmsInt32Number;
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#elif (LONG_MAX == +2147483647)
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef  long               cmsInt32Number;
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  error "Unable to find 32 bit signed type, unsupported compiler"
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 64-bit base types
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef CMS_DONT_USE_INT64
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  if (ULONG_MAX  == 18446744073709551615U)
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    typedef unsigned long   cmsUInt64Number;
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  elif (ULLONG_MAX == 18446744073709551615U)
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      typedef unsigned long long   cmsUInt64Number;
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  else
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#     define CMS_DONT_USE_INT64 1
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  endif
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  if (LONG_MAX == +9223372036854775807)
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      typedef  long          cmsInt64Number;
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  elif (LLONG_MAX == +9223372036854775807)
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      typedef  long long     cmsInt64Number;
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  else
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#     define CMS_DONT_USE_INT64 1
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  endif
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// In the case 64 bit numbers are not supported by the compiler
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef CMS_DONT_USE_INT64
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    typedef cmsUInt32Number      cmsUInt64Number[2];
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    typedef cmsInt32Number       cmsInt64Number[2];
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Derivative types
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsUInt32Number      cmsSignature;
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsUInt16Number      cmsU8Fixed8Number;
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsInt32Number       cmsS15Fixed16Number;
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsUInt32Number      cmsU16Fixed16Number;
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Boolean type, which will be using the native integer
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef int                  cmsBool;
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Try to detect windows
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if defined (_WIN32) || defined(_WIN64) || defined(WIN32) || defined(_WIN32_)
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  define CMS_IS_WINDOWS_ 1
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef _MSC_VER
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  define CMS_IS_WINDOWS_ 1
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef __BORLANDC__
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  define CMS_IS_WINDOWS_ 1
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Try to detect big endian platforms. This list can be endless, so only some checks are performed over here.
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// you can pass this toggle to the compiler by using -DCMS_USE_BIG_ENDIAN or something similar
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if defined(__sgi__) || defined(__sgi) || defined(sparc)
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#   define CMS_USE_BIG_ENDIAN      1
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if defined(__s390__) || defined(__s390x__)
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#   define CMS_USE_BIG_ENDIAN   1
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  ifdef TARGET_CPU_PPC
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#    if TARGET_CPU_PPC
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#      define CMS_USE_BIG_ENDIAN   1
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#    endif
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  endif
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if defined(__powerpc__) || defined(__ppc__) || defined(TARGET_CPU_PPC)
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#   define CMS_USE_BIG_ENDIAN   1
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#   if defined (__GNUC__) && defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN)
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#       if __BYTE_ORDER  == __LITTLE_ENDIAN
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//               // Don't use big endian for PowerPC little endian mode
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#                undef CMS_USE_BIG_ENDIAN
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#       endif
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#   endif
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// WORDS_BIGENDIAN takes precedence
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if defined(_HOST_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(WORDS_BIGENDIAN)
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#   define CMS_USE_BIG_ENDIAN      1
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef macintosh
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# ifdef __BIG_ENDIAN__
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#   define CMS_USE_BIG_ENDIAN      1
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# endif
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# ifdef __LITTLE_ENDIAN__
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#   undef CMS_USE_BIG_ENDIAN
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# endif
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Calling convention -- this is hardly platform and compiler dependent
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef CMS_IS_WINDOWS_
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  if defined(CMS_DLL) || defined(CMS_DLL_BUILD)
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#     ifdef __BORLANDC__
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#        define CMSEXPORT       __stdcall _export
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#        define CMSAPI
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#     else
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#        define CMSEXPORT      _stdcall
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#        ifdef CMS_DLL_BUILD
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#            define CMSAPI    __declspec(dllexport)
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#        else
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#           define CMSAPI     __declspec(dllimport)
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#       endif
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#     endif
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  else
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#       define CMSEXPORT
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#       define CMSAPI
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#  endif
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# define CMSEXPORT
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# define CMSAPI
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef HasTHREADS
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# if HasTHREADS == 1
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#    undef CMS_NO_PTHREADS
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# else
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#    define CMS_NO_PTHREADS 1
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# endif
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Some common definitions
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsMAX_PATH     256
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FALSE
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#       define FALSE 0
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef TRUE
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#       define TRUE  1
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// D50 XYZ normalized to Y=1.0
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsD50X             0.9642
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsD50Y             1.0
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsD50Z             0.8249
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// V4 perceptual black
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPERCEPTUAL_BLACK_X  0.00336
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPERCEPTUAL_BLACK_Y  0.0034731
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPERCEPTUAL_BLACK_Z  0.00287
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Definitions in ICC spec
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsMagicNumber      0x61637370     // 'acsp'
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define lcmsSignature       0x6c636d73     // 'lcms'
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Base ICC type definitions
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum {
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigChromaticityType                  = 0x6368726D,  // 'chrm'
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigColorantOrderType                 = 0x636C726F,  // 'clro'
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigColorantTableType                 = 0x636C7274,  // 'clrt'
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigCrdInfoType                       = 0x63726469,  // 'crdi'
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigCurveType                         = 0x63757276,  // 'curv'
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDataType                          = 0x64617461,  // 'data'
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDictType                          = 0x64696374,  // 'dict'
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDateTimeType                      = 0x6474696D,  // 'dtim'
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDeviceSettingsType                = 0x64657673,  // 'devs'
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLut16Type                         = 0x6d667432,  // 'mft2'
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLut8Type                          = 0x6d667431,  // 'mft1'
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLutAtoBType                       = 0x6d414220,  // 'mAB '
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLutBtoAType                       = 0x6d424120,  // 'mBA '
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMeasurementType                   = 0x6D656173,  // 'meas'
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMultiLocalizedUnicodeType         = 0x6D6C7563,  // 'mluc'
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMultiProcessElementType           = 0x6D706574,  // 'mpet'
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigNamedColorType                    = 0x6E636f6C,  // 'ncol' -- DEPRECATED!
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigNamedColor2Type                   = 0x6E636C32,  // 'ncl2'
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigParametricCurveType               = 0x70617261,  // 'para'
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigProfileSequenceDescType           = 0x70736571,  // 'pseq'
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigProfileSequenceIdType             = 0x70736964,  // 'psid'
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigResponseCurveSet16Type            = 0x72637332,  // 'rcs2'
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigS15Fixed16ArrayType               = 0x73663332,  // 'sf32'
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigScreeningType                     = 0x7363726E,  // 'scrn'
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigSignatureType                     = 0x73696720,  // 'sig '
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigTextType                          = 0x74657874,  // 'text'
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigTextDescriptionType               = 0x64657363,  // 'desc'
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigU16Fixed16ArrayType               = 0x75663332,  // 'uf32'
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigUcrBgType                         = 0x62666420,  // 'bfd '
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigUInt16ArrayType                   = 0x75693136,  // 'ui16'
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigUInt32ArrayType                   = 0x75693332,  // 'ui32'
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigUInt64ArrayType                   = 0x75693634,  // 'ui64'
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigUInt8ArrayType                    = 0x75693038,  // 'ui08'
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigVcgtType                          = 0x76636774,  // 'vcgt'
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigViewingConditionsType             = 0x76696577,  // 'view'
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigXYZType                           = 0x58595A20   // 'XYZ '
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsTagTypeSignature;
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Base ICC tag definitions
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum {
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigAToB0Tag                          = 0x41324230,  // 'A2B0'
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigAToB1Tag                          = 0x41324231,  // 'A2B1'
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigAToB2Tag                          = 0x41324232,  // 'A2B2'
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigBlueColorantTag                   = 0x6258595A,  // 'bXYZ'
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigBlueMatrixColumnTag               = 0x6258595A,  // 'bXYZ'
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigBlueTRCTag                        = 0x62545243,  // 'bTRC'
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigBToA0Tag                          = 0x42324130,  // 'B2A0'
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigBToA1Tag                          = 0x42324131,  // 'B2A1'
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigBToA2Tag                          = 0x42324132,  // 'B2A2'
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigCalibrationDateTimeTag            = 0x63616C74,  // 'calt'
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigCharTargetTag                     = 0x74617267,  // 'targ'
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigChromaticAdaptationTag            = 0x63686164,  // 'chad'
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigChromaticityTag                   = 0x6368726D,  // 'chrm'
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigColorantOrderTag                  = 0x636C726F,  // 'clro'
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigColorantTableTag                  = 0x636C7274,  // 'clrt'
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigColorantTableOutTag               = 0x636C6F74,  // 'clot'
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigColorimetricIntentImageStateTag   = 0x63696973,  // 'ciis'
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigCopyrightTag                      = 0x63707274,  // 'cprt'
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigCrdInfoTag                        = 0x63726469,  // 'crdi'
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDataTag                           = 0x64617461,  // 'data'
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDateTimeTag                       = 0x6474696D,  // 'dtim'
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDeviceMfgDescTag                  = 0x646D6E64,  // 'dmnd'
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDeviceModelDescTag                = 0x646D6464,  // 'dmdd'
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDeviceSettingsTag                 = 0x64657673,  // 'devs'
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDToB0Tag                          = 0x44324230,  // 'D2B0'
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDToB1Tag                          = 0x44324231,  // 'D2B1'
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDToB2Tag                          = 0x44324232,  // 'D2B2'
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDToB3Tag                          = 0x44324233,  // 'D2B3'
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigBToD0Tag                          = 0x42324430,  // 'B2D0'
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigBToD1Tag                          = 0x42324431,  // 'B2D1'
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigBToD2Tag                          = 0x42324432,  // 'B2D2'
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigBToD3Tag                          = 0x42324433,  // 'B2D3'
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigGamutTag                          = 0x67616D74,  // 'gamt'
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigGrayTRCTag                        = 0x6b545243,  // 'kTRC'
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigGreenColorantTag                  = 0x6758595A,  // 'gXYZ'
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigGreenMatrixColumnTag              = 0x6758595A,  // 'gXYZ'
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigGreenTRCTag                       = 0x67545243,  // 'gTRC'
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLuminanceTag                      = 0x6C756d69,  // 'lumi'
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMeasurementTag                    = 0x6D656173,  // 'meas'
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMediaBlackPointTag                = 0x626B7074,  // 'bkpt'
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMediaWhitePointTag                = 0x77747074,  // 'wtpt'
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigNamedColorTag                     = 0x6E636f6C,  // 'ncol' // Deprecated by the ICC
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigNamedColor2Tag                    = 0x6E636C32,  // 'ncl2'
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigOutputResponseTag                 = 0x72657370,  // 'resp'
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPerceptualRenderingIntentGamutTag = 0x72696730,  // 'rig0'
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPreview0Tag                       = 0x70726530,  // 'pre0'
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPreview1Tag                       = 0x70726531,  // 'pre1'
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPreview2Tag                       = 0x70726532,  // 'pre2'
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigProfileDescriptionTag             = 0x64657363,  // 'desc'
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigProfileDescriptionMLTag           = 0x6473636d,  // 'dscm'
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigProfileSequenceDescTag            = 0x70736571,  // 'pseq'
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigProfileSequenceIdTag              = 0x70736964,  // 'psid'
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPs2CRD0Tag                        = 0x70736430,  // 'psd0'
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPs2CRD1Tag                        = 0x70736431,  // 'psd1'
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPs2CRD2Tag                        = 0x70736432,  // 'psd2'
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPs2CRD3Tag                        = 0x70736433,  // 'psd3'
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPs2CSATag                         = 0x70733273,  // 'ps2s'
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPs2RenderingIntentTag             = 0x70733269,  // 'ps2i'
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigRedColorantTag                    = 0x7258595A,  // 'rXYZ'
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigRedMatrixColumnTag                = 0x7258595A,  // 'rXYZ'
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigRedTRCTag                         = 0x72545243,  // 'rTRC'
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigSaturationRenderingIntentGamutTag = 0x72696732,  // 'rig2'
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigScreeningDescTag                  = 0x73637264,  // 'scrd'
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigScreeningTag                      = 0x7363726E,  // 'scrn'
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigTechnologyTag                     = 0x74656368,  // 'tech'
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigUcrBgTag                          = 0x62666420,  // 'bfd '
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigViewingCondDescTag                = 0x76756564,  // 'vued'
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigViewingConditionsTag              = 0x76696577,  // 'view'
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigVcgtTag                           = 0x76636774,  // 'vcgt'
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMetaTag                           = 0x6D657461   // 'meta'
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsTagSignature;
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ICC Technology tag
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum {
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDigitalCamera                     = 0x6463616D,  // 'dcam'
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigFilmScanner                       = 0x6673636E,  // 'fscn'
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigReflectiveScanner                 = 0x7273636E,  // 'rscn'
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigInkJetPrinter                     = 0x696A6574,  // 'ijet'
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigThermalWaxPrinter                 = 0x74776178,  // 'twax'
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigElectrophotographicPrinter        = 0x6570686F,  // 'epho'
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigElectrostaticPrinter              = 0x65737461,  // 'esta'
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDyeSublimationPrinter             = 0x64737562,  // 'dsub'
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPhotographicPaperPrinter          = 0x7270686F,  // 'rpho'
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigFilmWriter                        = 0x6670726E,  // 'fprn'
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigVideoMonitor                      = 0x7669646D,  // 'vidm'
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigVideoCamera                       = 0x76696463,  // 'vidc'
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigProjectionTelevision              = 0x706A7476,  // 'pjtv'
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigCRTDisplay                        = 0x43525420,  // 'CRT '
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPMDisplay                         = 0x504D4420,  // 'PMD '
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigAMDisplay                         = 0x414D4420,  // 'AMD '
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPhotoCD                           = 0x4B504344,  // 'KPCD'
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigPhotoImageSetter                  = 0x696D6773,  // 'imgs'
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigGravure                           = 0x67726176,  // 'grav'
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigOffsetLithography                 = 0x6F666673,  // 'offs'
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigSilkscreen                        = 0x73696C6B,  // 'silk'
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigFlexography                       = 0x666C6578,  // 'flex'
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMotionPictureFilmScanner          = 0x6D706673,  // 'mpfs'
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMotionPictureFilmRecorder         = 0x6D706672,  // 'mpfr'
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDigitalMotionPictureCamera        = 0x646D7063,  // 'dmpc'
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDigitalCinemaProjector            = 0x64636A70   // 'dcpj'
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsTechnologySignature;
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ICC Color spaces
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum {
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigXYZData                           = 0x58595A20,  // 'XYZ '
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLabData                           = 0x4C616220,  // 'Lab '
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLuvData                           = 0x4C757620,  // 'Luv '
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigYCbCrData                         = 0x59436272,  // 'YCbr'
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigYxyData                           = 0x59787920,  // 'Yxy '
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigRgbData                           = 0x52474220,  // 'RGB '
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigGrayData                          = 0x47524159,  // 'GRAY'
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigHsvData                           = 0x48535620,  // 'HSV '
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigHlsData                           = 0x484C5320,  // 'HLS '
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigCmykData                          = 0x434D594B,  // 'CMYK'
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigCmyData                           = 0x434D5920,  // 'CMY '
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCH1Data                          = 0x4D434831,  // 'MCH1'
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCH2Data                          = 0x4D434832,  // 'MCH2'
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCH3Data                          = 0x4D434833,  // 'MCH3'
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCH4Data                          = 0x4D434834,  // 'MCH4'
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCH5Data                          = 0x4D434835,  // 'MCH5'
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCH6Data                          = 0x4D434836,  // 'MCH6'
442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCH7Data                          = 0x4D434837,  // 'MCH7'
443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCH8Data                          = 0x4D434838,  // 'MCH8'
444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCH9Data                          = 0x4D434839,  // 'MCH9'
445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCHAData                          = 0x4D434841,  // 'MCHA'
446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCHBData                          = 0x4D434842,  // 'MCHB'
447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCHCData                          = 0x4D434843,  // 'MCHC'
448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCHDData                          = 0x4D434844,  // 'MCHD'
449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCHEData                          = 0x4D434845,  // 'MCHE'
450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMCHFData                          = 0x4D434846,  // 'MCHF'
451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigNamedData                         = 0x6e6d636c,  // 'nmcl'
452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig1colorData                        = 0x31434C52,  // '1CLR'
453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig2colorData                        = 0x32434C52,  // '2CLR'
454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig3colorData                        = 0x33434C52,  // '3CLR'
455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig4colorData                        = 0x34434C52,  // '4CLR'
456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig5colorData                        = 0x35434C52,  // '5CLR'
457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig6colorData                        = 0x36434C52,  // '6CLR'
458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig7colorData                        = 0x37434C52,  // '7CLR'
459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig8colorData                        = 0x38434C52,  // '8CLR'
460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig9colorData                        = 0x39434C52,  // '9CLR'
461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig10colorData                       = 0x41434C52,  // 'ACLR'
462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig11colorData                       = 0x42434C52,  // 'BCLR'
463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig12colorData                       = 0x43434C52,  // 'CCLR'
464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig13colorData                       = 0x44434C52,  // 'DCLR'
465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig14colorData                       = 0x45434C52,  // 'ECLR'
466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSig15colorData                       = 0x46434C52,  // 'FCLR'
467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLuvKData                          = 0x4C75764B   // 'LuvK'
468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsColorSpaceSignature;
470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ICC Profile Class
472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum {
473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigInputClass                        = 0x73636E72,  // 'scnr'
474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigDisplayClass                      = 0x6D6E7472,  // 'mntr'
475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigOutputClass                       = 0x70727472,  // 'prtr'
476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLinkClass                         = 0x6C696E6B,  // 'link'
477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigAbstractClass                     = 0x61627374,  // 'abst'
478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigColorSpaceClass                   = 0x73706163,  // 'spac'
479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigNamedColorClass                   = 0x6e6d636c   // 'nmcl'
480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsProfileClassSignature;
482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ICC Platforms
484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum {
485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMacintosh                         = 0x4150504C,  // 'APPL'
486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMicrosoft                         = 0x4D534654,  // 'MSFT'
487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigSolaris                           = 0x53554E57,  // 'SUNW'
488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigSGI                               = 0x53474920,  // 'SGI '
489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigTaligent                          = 0x54474E54,  // 'TGNT'
490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigUnices                            = 0x2A6E6978   // '*nix'   // From argyll -- Not official
491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPlatformSignature;
493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Reference gamut
495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigPerceptualReferenceMediumGamut         0x70726d67  //'prmg'
496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// For cmsSigColorimetricIntentImageStateTag
498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigSceneColorimetryEstimates              0x73636F65  //'scoe'
499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigSceneAppearanceEstimates               0x73617065  //'sape'
500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigFocalPlaneColorimetryEstimates         0x66706365  //'fpce'
501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigReflectionHardcopyOriginalColorimetry  0x72686F63  //'rhoc'
502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigReflectionPrintOutputColorimetry       0x72706F63  //'rpoc'
503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Multi process elements types
505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum {
506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigCurveSetElemType              = 0x63767374,  //'cvst'
507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigMatrixElemType                = 0x6D617466,  //'matf'
508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigCLutElemType                  = 0x636C7574,  //'clut'
509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigBAcsElemType                  = 0x62414353,  // 'bACS'
511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigEAcsElemType                  = 0x65414353,  // 'eACS'
512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    // Custom from here, not in the ICC Spec
514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigXYZ2LabElemType               = 0x6C327820,  // 'l2x '
515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLab2XYZElemType               = 0x78326C20,  // 'x2l '
516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigNamedColorElemType            = 0x6E636C20,  // 'ncl '
517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLabV2toV4                     = 0x32203420,  // '2 4 '
518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLabV4toV2                     = 0x34203220,  // '4 2 '
519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    // Identities
521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigIdentityElemType              = 0x69646E20,  // 'idn '
522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    // Float to floatPCS
524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigLab2FloatPCS                  = 0x64326C20,  // 'd2l '
525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigFloatPCS2Lab                  = 0x6C326420,  // 'l2d '
526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigXYZ2FloatPCS                  = 0x64327820,  // 'd2x '
527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigFloatPCS2XYZ                  = 0x78326420   // 'x2d '
528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsStageSignature;
530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Types of CurveElements
532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum {
533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigFormulaCurveSeg               = 0x70617266, // 'parf'
535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigSampledCurveSeg               = 0x73616D66, // 'samf'
536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSigSegmentedCurve                = 0x63757266  // 'curf'
537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsCurveSegSignature;
539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Used in ResponseCurveType
541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigStatusA                    0x53746141 //'StaA'
542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigStatusE                    0x53746145 //'StaE'
543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigStatusI                    0x53746149 //'StaI'
544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigStatusT                    0x53746154 //'StaT'
545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigStatusM                    0x5374614D //'StaM'
546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigDN                         0x444E2020 //'DN  '
547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigDNP                        0x444E2050 //'DN P'
548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigDNN                        0x444E4E20 //'DNN '
549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsSigDNNP                       0x444E4E50 //'DNNP'
550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Device attributes, currently defined values correspond to the low 4 bytes
552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// of the 8 byte attribute quantity
553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsReflective     0
554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsTransparency   1
555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsGlossy         0
556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsMatte          2
557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Common structures in ICC tags
559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number len;
561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number flag;
562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt8Number  data[1];
563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsICCData;
565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ICC date time
567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt16Number      year;
569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt16Number      month;
570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt16Number      day;
571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt16Number      hours;
572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt16Number      minutes;
573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt16Number      seconds;
574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsDateTimeNumber;
576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ICC XYZ
578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsS15Fixed16Number  X;
580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsS15Fixed16Number  Y;
581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsS15Fixed16Number  Z;
582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsEncodedXYZNumber;
584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Profile ID as computed by MD5 algorithm
587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef union {
588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt8Number       ID8[16];
589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt16Number      ID16[8];
590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number      ID32[4];
591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsProfileID;
593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ----------------------------------------------------------------------------------------------
596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ICC profile internal base types. Strictly, shouldn't be declared in this header, but maybe
597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// somebody want to use this info for accessing profile header directly, so here it is.
598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Profile header -- it is 32-bit aligned, so no issues are expected on alignment
600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number              size;           // Profile size in bytes
602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSignature                 cmmId;          // CMM for this profile
603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number              version;        // Format version number
604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsProfileClassSignature     deviceClass;    // Type of profile
605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsColorSpaceSignature       colorSpace;     // Color space of data
606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsColorSpaceSignature       pcs;            // PCS, XYZ or Lab only
607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsDateTimeNumber            date;           // Date profile was created
608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSignature                 magic;          // Magic Number to identify an ICC profile
609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsPlatformSignature         platform;       // Primary Platform
610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number              flags;          // Various bit settings
611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSignature                 manufacturer;   // Device manufacturer
612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number              model;          // Device model number
613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt64Number              attributes;     // Device attributes
614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number              renderingIntent;// Rendering intent
615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsEncodedXYZNumber          illuminant;     // Profile illuminant
616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSignature                 creator;        // Profile creator
617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsProfileID                 profileID;      // Profile ID using MD5
618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsInt8Number                reserved[28];   // Reserved for future use
619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsICCHeader;
621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ICC base tag
623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsTagTypeSignature  sig;
625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsInt8Number        reserved[4];
626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsTagBase;
628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// A tag entry in directory
630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsTagSignature      sig;            // The tag signature
632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number      offset;         // Start of tag
633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number      size;           // Size in bytes
634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsTagEntry;
636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ----------------------------------------------------------------------------------------------
638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Little CMS specific typedefs
640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void* cmsHANDLE ;              // Generic handle
642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void* cmsHPROFILE;             // Opaque typedefs to hide internals
643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void* cmsHTRANSFORM;
644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsMAXCHANNELS  16                // Maximum number of channels in ICC profiles
646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Format of pixel is defined by one cmsUInt32Number, using bit fields as follows
648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//
649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//                               2                1          0
650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//                          3 2 10987 6 5 4 3 2 1 098 7654 321
651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//                          A O TTTTT U Y F P X S EEE CCCC BBB
652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//
653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//            A: Floating point -- With this flag we can differentiate 16 bits as float and as int
654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//            O: Optimized -- previous optimization already returns the final 8-bit value
655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//            T: Pixeltype
656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//            F: Flavor  0=MinIsBlack(Chocolate) 1=MinIsWhite(Vanilla)
657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//            P: Planar? 0=Chunky, 1=Planar
658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//            X: swap 16 bps endianess?
659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//            S: Do swap? ie, BGR, KYMC
660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//            E: Extra samples
661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//            C: Channels (Samples per pixel)
662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//            B: bytes per sample
663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//            Y: Swap first - changes ABGR to BGRA and KCMY to CMYK
664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FLOAT_SH(a)            ((a) << 22)
666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define OPTIMIZED_SH(s)        ((s) << 21)
667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define COLORSPACE_SH(s)       ((s) << 16)
668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define SWAPFIRST_SH(s)        ((s) << 14)
669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FLAVOR_SH(s)           ((s) << 13)
670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PLANAR_SH(p)           ((p) << 12)
671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define ENDIAN16_SH(e)         ((e) << 11)
672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define DOSWAP_SH(e)           ((e) << 10)
673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXTRA_SH(e)            ((e) << 7)
674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CHANNELS_SH(c)         ((c) << 3)
675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define BYTES_SH(b)            (b)
676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// These macros unpack format specifiers into integers
678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T_FLOAT(a)            (((a)>>22)&1)
679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T_OPTIMIZED(o)        (((o)>>21)&1)
680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T_COLORSPACE(s)       (((s)>>16)&31)
681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T_SWAPFIRST(s)        (((s)>>14)&1)
682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T_FLAVOR(s)           (((s)>>13)&1)
683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T_PLANAR(p)           (((p)>>12)&1)
684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T_ENDIAN16(e)         (((e)>>11)&1)
685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T_DOSWAP(e)           (((e)>>10)&1)
686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T_EXTRA(e)            (((e)>>7)&7)
687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T_CHANNELS(c)         (((c)>>3)&15)
688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define T_BYTES(b)            ((b)&7)
689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Pixel types
692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_ANY       0    // Don't check colorspace
693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                          // 1 & 2 are reserved
694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_GRAY      3
695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_RGB       4
696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_CMY       5
697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_CMYK      6
698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_YCbCr     7
699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_YUV       8      // Lu'v'
700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_XYZ       9
701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_Lab       10
702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_YUVK      11     // Lu'v'K
703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_HSV       12
704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_HLS       13
705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_Yxy       14
706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH1      15
708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH2      16
709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH3      17
710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH4      18
711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH5      19
712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH6      20
713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH7      21
714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH8      22
715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH9      23
716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH10     24
717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH11     25
718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH12     26
719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH13     27
720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH14     28
721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_MCH15     29
722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PT_LabV2     30     // Identical to PT_Lab, but using the V2 old encoding
724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Some (not all!) representations
726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef TYPE_RGB_8      // TYPE_RGB_8 is a very common identifier, so don't include ours
728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                        // if user has it already defined.
729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAY_8            (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(1))
731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAY_8_REV        (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(1)|FLAVOR_SH(1))
732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAY_16           (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2))
733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAY_16_REV       (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|FLAVOR_SH(1))
734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAY_16_SE        (COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1))
735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAYA_8           (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(1))
736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAYA_16          (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2))
737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAYA_16_SE       (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|ENDIAN16_SH(1))
738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAYA_8_PLANAR    (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(1)|PLANAR_SH(1))
739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAYA_16_PLANAR   (COLORSPACE_SH(PT_GRAY)|EXTRA_SH(1)|CHANNELS_SH(1)|BYTES_SH(2)|PLANAR_SH(1))
740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGB_8             (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1))
742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGB_8_PLANAR      (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1))
743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGR_8             (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1))
744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGR_8_PLANAR      (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|PLANAR_SH(1))
745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGB_16            (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2))
746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGB_16_PLANAR     (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1))
747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGB_16_SE         (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1))
748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGR_16            (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1))
749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGR_16_PLANAR     (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1))
750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGR_16_SE         (COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1))
751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGBA_8            (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1))
753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGBA_8_PLANAR     (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1))
754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGBA_16           (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2))
755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGBA_16_PLANAR    (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1))
756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGBA_16_SE        (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1))
757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ARGB_8            (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|SWAPFIRST_SH(1))
759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ARGB_8_PLANAR     (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|SWAPFIRST_SH(1)|PLANAR_SH(1))
760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ARGB_16           (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1))
761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ABGR_8            (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1))
763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ABGR_8_PLANAR     (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|PLANAR_SH(1))
764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ABGR_16           (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1))
765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ABGR_16_PLANAR    (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|PLANAR_SH(1))
766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ABGR_16_SE        (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1))
767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGRA_8            (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1))
769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGRA_8_PLANAR     (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1)|PLANAR_SH(1))
770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGRA_16           (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1))
771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGRA_16_SE        (COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1)|DOSWAP_SH(1)|SWAPFIRST_SH(1))
772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMY_8             (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(1))
774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMY_8_PLANAR      (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1))
775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMY_16            (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2))
776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMY_16_PLANAR     (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1))
777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMY_16_SE         (COLORSPACE_SH(PT_CMY)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1))
778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK_8            (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1))
780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYKA_8           (COLORSPACE_SH(PT_CMYK)|EXTRA_SH(1)|CHANNELS_SH(4)|BYTES_SH(1))
781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK_8_REV        (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1))
782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_YUVK_8            TYPE_CMYK_8_REV
783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK_8_PLANAR     (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|PLANAR_SH(1))
784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK_16           (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2))
785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK_16_REV       (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1))
786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_YUVK_16           TYPE_CMYK_16_REV
787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK_16_PLANAR    (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|PLANAR_SH(1))
788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK_16_SE        (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1))
789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC_8            (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|DOSWAP_SH(1))
791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC_16           (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1))
792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC_16_SE        (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1))
793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KCMY_8            (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|SWAPFIRST_SH(1))
795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KCMY_8_REV        (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(1)|FLAVOR_SH(1)|SWAPFIRST_SH(1))
796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KCMY_16           (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|SWAPFIRST_SH(1))
797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KCMY_16_REV       (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|FLAVOR_SH(1)|SWAPFIRST_SH(1))
798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KCMY_16_SE        (COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2)|ENDIAN16_SH(1)|SWAPFIRST_SH(1))
799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK5_8           (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(1))
801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK5_16          (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2))
802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK5_16_SE       (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|ENDIAN16_SH(1))
803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC5_8           (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(1)|DOSWAP_SH(1))
804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC5_16          (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|DOSWAP_SH(1))
805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC5_16_SE       (COLORSPACE_SH(PT_MCH5)|CHANNELS_SH(5)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1))
806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK6_8           (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(1))
807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK6_8_PLANAR    (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(1)|PLANAR_SH(1))
808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK6_16          (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2))
809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK6_16_PLANAR   (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)|PLANAR_SH(1))
810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK6_16_SE       (COLORSPACE_SH(PT_MCH6)|CHANNELS_SH(6)|BYTES_SH(2)|ENDIAN16_SH(1))
811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK7_8           (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(1))
812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK7_16          (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2))
813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK7_16_SE       (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|ENDIAN16_SH(1))
814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC7_8           (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(1)|DOSWAP_SH(1))
815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC7_16          (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|DOSWAP_SH(1))
816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC7_16_SE       (COLORSPACE_SH(PT_MCH7)|CHANNELS_SH(7)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1))
817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK8_8           (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(1))
818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK8_16          (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2))
819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK8_16_SE       (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|ENDIAN16_SH(1))
820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC8_8           (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(1)|DOSWAP_SH(1))
821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC8_16          (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|DOSWAP_SH(1))
822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC8_16_SE       (COLORSPACE_SH(PT_MCH8)|CHANNELS_SH(8)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1))
823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK9_8           (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(1))
824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK9_16          (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2))
825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK9_16_SE       (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|ENDIAN16_SH(1))
826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC9_8           (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(1)|DOSWAP_SH(1))
827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC9_16          (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|DOSWAP_SH(1))
828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC9_16_SE       (COLORSPACE_SH(PT_MCH9)|CHANNELS_SH(9)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1))
829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK10_8          (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(1))
830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK10_16         (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2))
831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK10_16_SE      (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|ENDIAN16_SH(1))
832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC10_8          (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(1)|DOSWAP_SH(1))
833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC10_16         (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|DOSWAP_SH(1))
834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC10_16_SE      (COLORSPACE_SH(PT_MCH10)|CHANNELS_SH(10)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1))
835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK11_8          (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(1))
836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK11_16         (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2))
837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK11_16_SE      (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|ENDIAN16_SH(1))
838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC11_8          (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(1)|DOSWAP_SH(1))
839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC11_16         (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|DOSWAP_SH(1))
840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC11_16_SE      (COLORSPACE_SH(PT_MCH11)|CHANNELS_SH(11)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1))
841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK12_8          (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(1))
842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK12_16         (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2))
843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK12_16_SE      (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|ENDIAN16_SH(1))
844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC12_8          (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(1)|DOSWAP_SH(1))
845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC12_16         (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|DOSWAP_SH(1))
846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_KYMC12_16_SE      (COLORSPACE_SH(PT_MCH12)|CHANNELS_SH(12)|BYTES_SH(2)|DOSWAP_SH(1)|ENDIAN16_SH(1))
847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Colorimetric
849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_XYZ_16            (COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(2))
850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_Lab_8             (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(1))
851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_LabV2_8           (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(1))
852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ALab_8            (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|SWAPFIRST_SH(1))
854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ALabV2_8          (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(1)|EXTRA_SH(1)|SWAPFIRST_SH(1))
855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_Lab_16            (COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(2))
856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_LabV2_16          (COLORSPACE_SH(PT_LabV2)|CHANNELS_SH(3)|BYTES_SH(2))
857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_Yxy_16            (COLORSPACE_SH(PT_Yxy)|CHANNELS_SH(3)|BYTES_SH(2))
858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// YCbCr
860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_YCbCr_8           (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(1))
861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_YCbCr_8_PLANAR    (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1))
862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_YCbCr_16          (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2))
863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_YCbCr_16_PLANAR   (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1))
864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_YCbCr_16_SE       (COLORSPACE_SH(PT_YCbCr)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1))
865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// YUV
867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_YUV_8             (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(1))
868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_YUV_8_PLANAR      (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1))
869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_YUV_16            (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2))
870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_YUV_16_PLANAR     (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1))
871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_YUV_16_SE         (COLORSPACE_SH(PT_YUV)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1))
872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// HLS
874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_HLS_8             (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(1))
875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_HLS_8_PLANAR      (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1))
876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_HLS_16            (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2))
877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_HLS_16_PLANAR     (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1))
878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_HLS_16_SE         (COLORSPACE_SH(PT_HLS)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1))
879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// HSV
881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_HSV_8             (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(1))
882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_HSV_8_PLANAR      (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(1)|PLANAR_SH(1))
883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_HSV_16            (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2))
884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_HSV_16_PLANAR     (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)|PLANAR_SH(1))
885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_HSV_16_SE         (COLORSPACE_SH(PT_HSV)|CHANNELS_SH(3)|BYTES_SH(2)|ENDIAN16_SH(1))
886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Named color index. Only 16 bits allowed (don't check colorspace)
888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_NAMED_COLOR_INDEX (CHANNELS_SH(1)|BYTES_SH(2))
889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Float formatters.
891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_XYZ_FLT          (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(4))
892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_Lab_FLT          (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(4))
893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_LabA_FLT         (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4))
894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAY_FLT         (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(4))
895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGB_FLT          (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4))
896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGBA_FLT         (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4))
898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ARGB_FLT         (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)|SWAPFIRST_SH(1))
899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGR_FLT          (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4)|DOSWAP_SH(1))
900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGRA_FLT         (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(4)|DOSWAP_SH(1)|SWAPFIRST_SH(1))
901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ABGR_FLT         (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(4)|DOSWAP_SH(1))
902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK_FLT         (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(4))
904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Floating point formatters.
906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// NOTE THAT 'BYTES' FIELD IS SET TO ZERO ON DLB because 8 bytes overflows the bitfield
907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_XYZ_DBL          (FLOAT_SH(1)|COLORSPACE_SH(PT_XYZ)|CHANNELS_SH(3)|BYTES_SH(0))
908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_Lab_DBL          (FLOAT_SH(1)|COLORSPACE_SH(PT_Lab)|CHANNELS_SH(3)|BYTES_SH(0))
909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAY_DBL         (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(0))
910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGB_DBL          (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(0))
911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGR_DBL          (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(0)|DOSWAP_SH(1))
912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK_DBL         (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(0))
913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// IEEE 754-2008 "half"
915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_GRAY_HALF_FLT    (FLOAT_SH(1)|COLORSPACE_SH(PT_GRAY)|CHANNELS_SH(1)|BYTES_SH(2))
916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGB_HALF_FLT     (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2))
917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGBA_HALF_FLT    (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2))
918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_CMYK_HALF_FLT    (FLOAT_SH(1)|COLORSPACE_SH(PT_CMYK)|CHANNELS_SH(4)|BYTES_SH(2))
919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_RGBA_HALF_FLT    (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2))
921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ARGB_HALF_FLT    (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|SWAPFIRST_SH(1))
922ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGR_HALF_FLT     (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1))
923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_BGRA_HALF_FLT    (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|EXTRA_SH(1)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1)|SWAPFIRST_SH(1))
924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TYPE_ABGR_HALF_FLT    (FLOAT_SH(1)|COLORSPACE_SH(PT_RGB)|CHANNELS_SH(3)|BYTES_SH(2)|DOSWAP_SH(1))
925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Colorspaces
929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number X;
931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number Y;
932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number Z;
933ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } cmsCIEXYZ;
935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number x;
938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number y;
939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number Y;
940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } cmsCIExyY;
942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number L;
945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number a;
946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number b;
947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } cmsCIELab;
949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number L;
952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number C;
953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number h;
954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } cmsCIELCh;
956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number J;
959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number C;
960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number h;
961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } cmsJCh;
963ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
964ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
965ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsCIEXYZ  Red;
966ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsCIEXYZ  Green;
967ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsCIEXYZ  Blue;
968ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
969ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } cmsCIEXYZTRIPLE;
970ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
971ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
972ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsCIExyY  Red;
973ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsCIExyY  Green;
974ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsCIExyY  Blue;
975ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
976ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } cmsCIExyYTRIPLE;
977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
978ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Illuminant types for structs below
979ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsILLUMINANT_TYPE_UNKNOWN 0x0000000
980ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsILLUMINANT_TYPE_D50     0x0000001
981ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsILLUMINANT_TYPE_D65     0x0000002
982ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsILLUMINANT_TYPE_D93     0x0000003
983ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsILLUMINANT_TYPE_F2      0x0000004
984ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsILLUMINANT_TYPE_D55     0x0000005
985ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsILLUMINANT_TYPE_A       0x0000006
986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsILLUMINANT_TYPE_E       0x0000007
987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsILLUMINANT_TYPE_F8      0x0000008
988ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
989ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
990ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsUInt32Number  Observer;    // 0 = unknown, 1=CIE 1931, 2=CIE 1964
991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsCIEXYZ        Backing;     // Value of backing
992ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsUInt32Number  Geometry;    // 0=unknown, 1=45/0, 0/45 2=0d, d/0
993ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsFloat64Number Flare;       // 0..1.0
994ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsUInt32Number  IlluminantType;
995ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
996ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } cmsICCMeasurementConditions;
997ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
998ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
999ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsCIEXYZ       IlluminantXYZ;   // Not the same struct as CAM02,
1000ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsCIEXYZ       SurroundXYZ;     // This is for storing the tag
1001ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsUInt32Number IlluminantType;  // viewing condition
1002ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1003ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } cmsICCViewingConditions;
1004ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1005ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Support of non-standard functions --------------------------------------------------------------------------------------
1006ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1007ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI int               CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2);
1008ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI long int          CMSEXPORT cmsfilelength(FILE* f);
1009ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Context handling --------------------------------------------------------------------------------------------------------
1012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Each context holds its owns globals and its own plug-ins. There is a global context with the id = 0 for lecacy compatibility
1014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// though using the global context is not recomended. Proper context handling makes lcms more thread-safe.
1015ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1016ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct _cmsContext_struct* cmsContext;
1017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1018ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsContext       CMSEXPORT cmsCreateContext(void* Plugin, void* UserData);
1019ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void             CMSEXPORT cmsDeleteContext(cmsContext ContexID);
1020ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsContext       CMSEXPORT cmsDupContext(cmsContext ContextID, void* NewUserData);
1021ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void*            CMSEXPORT cmsGetContextUserData(cmsContext ContextID);
1022ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1023ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Plug-In registering  --------------------------------------------------------------------------------------------------
1024ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1025ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsPlugin(void* Plugin);
1026ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsPluginTHR(cmsContext ContextID, void* Plugin);
1027ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsUnregisterPlugins(void);
1028ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsUnregisterPluginsTHR(cmsContext ContextID);
1029ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1030ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Error logging ----------------------------------------------------------------------------------------------------------
1031ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1032ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// There is no error handling at all. When a function fails, it returns proper value.
1033ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// For example, all create functions does return NULL on failure. Other may return FALSE.
1034ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// It may be interesting, for the developer, to know why the function is failing.
1035ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// for that reason, lcms2 does offer a logging function. This function will get
1036ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// an ENGLISH string with some clues on what is going wrong. You can show this
1037ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// info to the end user if you wish, or just create some sort of log on disk.
1038ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// The logging function should NOT terminate the program, as this obviously can leave
1039ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// unfreed resources. It is the programmer's responsibility to check each function
1040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// return code to make sure it didn't fail.
1041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_UNDEFINED                    0
1043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_FILE                         1
1044ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_RANGE                        2
1045ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_INTERNAL                     3
1046ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_NULL                         4
1047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_READ                         5
1048ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_SEEK                         6
1049ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_WRITE                        7
1050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_UNKNOWN_EXTENSION            8
1051ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_COLORSPACE_CHECK             9
1052ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_ALREADY_DEFINED              10
1053ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_BAD_SIGNATURE                11
1054ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_CORRUPTION_DETECTED          12
1055ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsERROR_NOT_SUITABLE                 13
1056ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1057ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Error logger is called with the ContextID when a message is raised. This gives the
1058ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// chance to know which thread is responsible of the warning and any environment associated
1059ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// with it. Non-multithreading applications may safely ignore this parameter.
1060ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Note that under certain special circumstances, ContextID may be NULL.
1061ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void  (* cmsLogErrorHandlerFunction)(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *Text);
1062ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1063ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Allows user to set any specific logger
1064ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetLogErrorHandler(cmsLogErrorHandlerFunction Fn);
1065ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetLogErrorHandlerTHR(cmsContext ContextID, cmsLogErrorHandlerFunction Fn);
1066ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1067ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Conversions --------------------------------------------------------------------------------------------------------------
1068ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1069ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Returns pointers to constant structs
1070ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI const cmsCIEXYZ*  CMSEXPORT cmsD50_XYZ(void);
1071ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI const cmsCIExyY*  CMSEXPORT cmsD50_xyY(void);
1072ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1073ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Colorimetric space conversions
1074ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsXYZ2xyY(cmsCIExyY* Dest, const cmsCIEXYZ* Source);
1075ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsxyY2XYZ(cmsCIEXYZ* Dest, const cmsCIExyY* Source);
1076ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsXYZ2Lab(const cmsCIEXYZ* WhitePoint, cmsCIELab* Lab, const cmsCIEXYZ* xyz);
1077ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsLab2XYZ(const cmsCIEXYZ* WhitePoint, cmsCIEXYZ* xyz, const cmsCIELab* Lab);
1078ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsLab2LCh(cmsCIELCh*LCh, const cmsCIELab* Lab);
1079ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsLCh2Lab(cmsCIELab* Lab, const cmsCIELCh* LCh);
1080ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1081ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Encoding /Decoding on PCS
1082ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsLabEncoded2Float(cmsCIELab* Lab, const cmsUInt16Number wLab[3]);
1083ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsLabEncoded2FloatV2(cmsCIELab* Lab, const cmsUInt16Number wLab[3]);
1084ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsFloat2LabEncoded(cmsUInt16Number wLab[3], const cmsCIELab* Lab);
1085ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsFloat2LabEncodedV2(cmsUInt16Number wLab[3], const cmsCIELab* Lab);
1086ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsXYZEncoded2Float(cmsCIEXYZ* fxyz, const cmsUInt16Number XYZ[3]);
1087ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsFloat2XYZEncoded(cmsUInt16Number XYZ[3], const cmsCIEXYZ* fXYZ);
1088ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1089ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// DeltaE metrics
1090ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number  CMSEXPORT cmsDeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2);
1091ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number  CMSEXPORT cmsCIE94DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2);
1092ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number  CMSEXPORT cmsBFDdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2);
1093ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number  CMSEXPORT cmsCMCdeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number l, cmsFloat64Number c);
1094ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number  CMSEXPORT cmsCIE2000DeltaE(const cmsCIELab* Lab1, const cmsCIELab* Lab2, cmsFloat64Number Kl, cmsFloat64Number Kc, cmsFloat64Number Kh);
1095ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1096ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Temperature <-> Chromaticity (Black body)
1097ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsWhitePointFromTemp(cmsCIExyY* WhitePoint, cmsFloat64Number  TempK);
1098ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsTempFromWhitePoint(cmsFloat64Number* TempK, const cmsCIExyY* WhitePoint);
1099ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Chromatic adaptation
1101ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsAdaptToIlluminant(cmsCIEXYZ* Result, const cmsCIEXYZ* SourceWhitePt,
1102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                                           const cmsCIEXYZ* Illuminant,
1103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                                           const cmsCIEXYZ* Value);
1104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// CIECAM02 ---------------------------------------------------------------------------------------------------
1106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Viewing conditions. Please note those are CAM model viewing conditions, and not the ICC tag viewing
1108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// conditions, which I'm naming cmsICCViewingConditions to make differences evident. Unfortunately, the tag
1109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// cannot deal with surround La, Yb and D value so is basically useless to store CAM02 viewing conditions.
1110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define AVG_SURROUND       1
1113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define DIM_SURROUND       2
1114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define DARK_SURROUND      3
1115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CUTSHEET_SURROUND  4
1116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define D_CALCULATE        (-1)
1118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
1120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsCIEXYZ        whitePoint;
1121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsFloat64Number Yb;
1122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsFloat64Number La;
1123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int              surround;
1124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsFloat64Number D_value;
1125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    } cmsViewingConditions;
1127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1128ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHANDLE         CMSEXPORT cmsCIECAM02Init(cmsContext ContextID, const cmsViewingConditions* pVC);
1129ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsCIECAM02Done(cmsHANDLE hModel);
1130ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsCIECAM02Forward(cmsHANDLE hModel, const cmsCIEXYZ* pIn, cmsJCh* pOut);
1131ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsCIECAM02Reverse(cmsHANDLE hModel, const cmsJCh* pIn,    cmsCIEXYZ* pOut);
1132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Tone curves -----------------------------------------------------------------------------------------
1135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// This describes a curve segment. For a table of supported types, see the manual. User can increase the number of
1137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// available types by using a proper plug-in. Parametric segments allow 10 parameters at most
1138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
1140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsFloat32Number   x0, x1;           // Domain; for x0 < x <= x1
1141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsInt32Number     Type;             // Parametric type, Type == 0 means sampled segment. Negative values are reserved
1142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsFloat64Number   Params[10];       // Parameters if Type != 0
1143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number    nGridPoints;      // Number of grid points if Type == 0
1144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsFloat32Number*  SampledPoints;    // Points to an array of floats if Type == 0
1145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsCurveSegment;
1147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// The internal representation is none of your business.
1149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct _cms_curve_struct cmsToneCurve;
1150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1151ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsToneCurve*     CMSEXPORT cmsBuildSegmentedToneCurve(cmsContext ContextID, cmsInt32Number nSegments, const cmsCurveSegment Segments[]);
1152ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsToneCurve*     CMSEXPORT cmsBuildParametricToneCurve(cmsContext ContextID, cmsInt32Number Type, const cmsFloat64Number Params[]);
1153ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsToneCurve*     CMSEXPORT cmsBuildGamma(cmsContext ContextID, cmsFloat64Number Gamma);
1154ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsToneCurve*     CMSEXPORT cmsBuildTabulatedToneCurve16(cmsContext ContextID, cmsInt32Number nEntries, const cmsUInt16Number values[]);
1155ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsToneCurve*     CMSEXPORT cmsBuildTabulatedToneCurveFloat(cmsContext ContextID, cmsUInt32Number nEntries, const cmsFloat32Number values[]);
1156ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsFreeToneCurve(cmsToneCurve* Curve);
1157ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsFreeToneCurveTriple(cmsToneCurve* Curve[3]);
1158ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsToneCurve*     CMSEXPORT cmsDupToneCurve(const cmsToneCurve* Src);
1159ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsToneCurve*     CMSEXPORT cmsReverseToneCurve(const cmsToneCurve* InGamma);
1160ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsToneCurve*     CMSEXPORT cmsReverseToneCurveEx(cmsInt32Number nResultSamples, const cmsToneCurve* InGamma);
1161ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsToneCurve*     CMSEXPORT cmsJoinToneCurve(cmsContext ContextID, const cmsToneCurve* X,  const cmsToneCurve* Y, cmsUInt32Number nPoints);
1162ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsSmoothToneCurve(cmsToneCurve* Tab, cmsFloat64Number lambda);
1163ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat32Number  CMSEXPORT cmsEvalToneCurveFloat(const cmsToneCurve* Curve, cmsFloat32Number v);
1164ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt16Number   CMSEXPORT cmsEvalToneCurve16(const cmsToneCurve* Curve, cmsUInt16Number v);
1165ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsIsToneCurveMultisegment(const cmsToneCurve* InGamma);
1166ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsIsToneCurveLinear(const cmsToneCurve* Curve);
1167ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsIsToneCurveMonotonic(const cmsToneCurve* t);
1168ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsIsToneCurveDescending(const cmsToneCurve* t);
1169ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsInt32Number    CMSEXPORT cmsGetToneCurveParametricType(const cmsToneCurve* t);
1170ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number  CMSEXPORT cmsEstimateGamma(const cmsToneCurve* t, cmsFloat64Number Precision);
1171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Tone curve tabular estimation
1173ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number         CMSEXPORT cmsGetToneCurveEstimatedTableEntries(const cmsToneCurve* t);
1174ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI const cmsUInt16Number*  CMSEXPORT cmsGetToneCurveEstimatedTable(const cmsToneCurve* t);
1175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Implements pipelines of multi-processing elements -------------------------------------------------------------
1178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Nothing to see here, move along
1180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct _cmsPipeline_struct cmsPipeline;
1181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct _cmsStage_struct cmsStage;
1182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Those are hi-level pipelines
1184ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsPipeline*      CMSEXPORT cmsPipelineAlloc(cmsContext ContextID, cmsUInt32Number InputChannels, cmsUInt32Number OutputChannels);
1185ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsPipelineFree(cmsPipeline* lut);
1186ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsPipeline*      CMSEXPORT cmsPipelineDup(const cmsPipeline* Orig);
1187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1188ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsContext        CMSEXPORT cmsGetPipelineContextID(const cmsPipeline* lut);
1189ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsPipelineInputChannels(const cmsPipeline* lut);
1190ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsPipelineOutputChannels(const cmsPipeline* lut);
1191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1192ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsPipelineStageCount(const cmsPipeline* lut);
1193ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStage*         CMSEXPORT cmsPipelineGetPtrToFirstStage(const cmsPipeline* lut);
1194ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStage*         CMSEXPORT cmsPipelineGetPtrToLastStage(const cmsPipeline* lut);
1195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1196ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsPipelineEval16(const cmsUInt16Number In[], cmsUInt16Number Out[], const cmsPipeline* lut);
1197ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsPipelineEvalFloat(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsPipeline* lut);
1198ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsPipelineEvalReverseFloat(cmsFloat32Number Target[], cmsFloat32Number Result[], cmsFloat32Number Hint[], const cmsPipeline* lut);
1199ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsPipelineCat(cmsPipeline* l1, const cmsPipeline* l2);
1200ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsPipelineSetSaveAs8bitsFlag(cmsPipeline* lut, cmsBool On);
1201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Where to place/locate the stages in the pipeline chain
1203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum { cmsAT_BEGIN, cmsAT_END } cmsStageLoc;
1204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1205ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI int               CMSEXPORT cmsPipelineInsertStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage* mpe);
1206ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsPipelineUnlinkStage(cmsPipeline* lut, cmsStageLoc loc, cmsStage** mpe);
1207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// This function is quite useful to analyze the structure of a Pipeline and retrieve the Stage elements
1209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// that conform the Pipeline. It should be called with the Pipeline, the number of expected elements and
1210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// then a list of expected types followed with a list of double pointers to Stage elements. If
1211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// the function founds a match with current pipeline, it fills the pointers and returns TRUE
1212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// if not, returns FALSE without touching anything.
1213ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsPipelineCheckAndRetreiveStages(const cmsPipeline* Lut, cmsUInt32Number n, ...);
1214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Matrix has double precision and CLUT has only float precision. That is because an ICC profile can encode
1216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// matrices with far more precision that CLUTS
1217ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStage*         CMSEXPORT cmsStageAllocIdentity(cmsContext ContextID, cmsUInt32Number nChannels);
1218ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStage*         CMSEXPORT cmsStageAllocToneCurves(cmsContext ContextID, cmsUInt32Number nChannels, cmsToneCurve* const Curves[]);
1219ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStage*         CMSEXPORT cmsStageAllocMatrix(cmsContext ContextID, cmsUInt32Number Rows, cmsUInt32Number Cols, const cmsFloat64Number* Matrix, const cmsFloat64Number* Offset);
1220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1221ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStage*         CMSEXPORT cmsStageAllocCLut16bit(cmsContext ContextID, cmsUInt32Number nGridPoints, cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsUInt16Number* Table);
1222ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStage*         CMSEXPORT cmsStageAllocCLutFloat(cmsContext ContextID, cmsUInt32Number nGridPoints, cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table);
1223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1224ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStage*         CMSEXPORT cmsStageAllocCLut16bitGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsUInt16Number* Table);
1225ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStage*         CMSEXPORT cmsStageAllocCLutFloatGranular(cmsContext ContextID, const cmsUInt32Number clutPoints[], cmsUInt32Number inputChan, cmsUInt32Number outputChan, const cmsFloat32Number* Table);
1226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1227ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStage*         CMSEXPORT cmsStageDup(cmsStage* mpe);
1228ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsStageFree(cmsStage* mpe);
1229ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStage*         CMSEXPORT cmsStageNext(const cmsStage* mpe);
1230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1231ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsStageInputChannels(const cmsStage* mpe);
1232ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsStageOutputChannels(const cmsStage* mpe);
1233ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStageSignature CMSEXPORT cmsStageType(const cmsStage* mpe);
1234ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void*             CMSEXPORT cmsStageData(const cmsStage* mpe);
1235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Sampling
1237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsInt32Number (* cmsSAMPLER16)   (register const cmsUInt16Number In[],
1238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            register cmsUInt16Number Out[],
1239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            register void * Cargo);
1240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsInt32Number (* cmsSAMPLERFLOAT)(register const cmsFloat32Number In[],
1242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            register cmsFloat32Number Out[],
1243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                            register void * Cargo);
1244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use this flag to prevent changes being written to destination
1246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define SAMPLER_INSPECT     0x01000000
1247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// For CLUT only
1249ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsStageSampleCLut16bit(cmsStage* mpe,    cmsSAMPLER16 Sampler, void* Cargo, cmsUInt32Number dwFlags);
1250ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsStageSampleCLutFloat(cmsStage* mpe, cmsSAMPLERFLOAT Sampler, void* Cargo, cmsUInt32Number dwFlags);
1251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Slicers
1253ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsSliceSpace16(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[],
1254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsSAMPLER16 Sampler, void * Cargo);
1255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1256ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsSliceSpaceFloat(cmsUInt32Number nInputs, const cmsUInt32Number clutPoints[],
1257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsSAMPLERFLOAT Sampler, void * Cargo);
1258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Multilocalized Unicode management ---------------------------------------------------------------------------------------
1260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct _cms_MLU_struct cmsMLU;
1262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsNoLanguage "\0\0"
1264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define  cmsNoCountry  "\0\0"
1265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1266ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsMLU*           CMSEXPORT cmsMLUalloc(cmsContext ContextID, cmsUInt32Number nItems);
1267ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsMLUfree(cmsMLU* mlu);
1268ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsMLU*           CMSEXPORT cmsMLUdup(const cmsMLU* mlu);
1269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1270ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsMLUsetASCII(cmsMLU* mlu,
1271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  const char LanguageCode[3], const char CountryCode[3],
1272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  const char* ASCIIString);
1273ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsMLUsetWide(cmsMLU* mlu,
1274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  const char LanguageCode[3], const char CountryCode[3],
1275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  const wchar_t* WideString);
1276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1277ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsMLUgetASCII(const cmsMLU* mlu,
1278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  const char LanguageCode[3], const char CountryCode[3],
1279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  char* Buffer,    cmsUInt32Number BufferSize);
1280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1281ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsMLUgetWide(const cmsMLU* mlu,
1282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                 const char LanguageCode[3], const char CountryCode[3],
1283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                 wchar_t* Buffer, cmsUInt32Number BufferSize);
1284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1285ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsMLUgetTranslation(const cmsMLU* mlu,
1286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                         const char LanguageCode[3], const char CountryCode[3],
1287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                         char ObtainedLanguage[3], char ObtainedCountry[3]);
1288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1289ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsMLUtranslationsCount(const cmsMLU* mlu);
1290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1291ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsMLUtranslationsCodes(const cmsMLU* mlu,
1292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             cmsUInt32Number idx,
1293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             char LanguageCode[3],
1294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             char CountryCode[3]);
1295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Undercolorremoval & black generation -------------------------------------------------------------------------------------
1297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
1299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsToneCurve* Ucr;
1300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsToneCurve* Bg;
1301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        cmsMLU*       Desc;
1302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsUcrBg;
1304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Screening ----------------------------------------------------------------------------------------------------------------
1306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPRINTER_DEFAULT_SCREENS     0x0001
1308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFREQUENCE_UNITS_LINES_CM    0x0000
1309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFREQUENCE_UNITS_LINES_INCH  0x0002
1310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsSPOT_UNKNOWN         0
1312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsSPOT_PRINTER_DEFAULT 1
1313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsSPOT_ROUND           2
1314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsSPOT_DIAMOND         3
1315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsSPOT_ELLIPSE         4
1316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsSPOT_LINE            5
1317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsSPOT_SQUARE          6
1318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsSPOT_CROSS           7
1319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
1321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsFloat64Number  Frequency;
1322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsFloat64Number  ScreenAngle;
1323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number   SpotShape;
1324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsScreeningChannel;
1326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
1328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number Flag;
1329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number nChannels;
1330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsScreeningChannel Channels[cmsMAXCHANNELS];
1331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsScreening;
1333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Named color -----------------------------------------------------------------------------------------------------------------
1336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct _cms_NAMEDCOLORLIST_struct cmsNAMEDCOLORLIST;
1338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1339ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsAllocNamedColorList(cmsContext ContextID,
1340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                           cmsUInt32Number n,
1341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                           cmsUInt32Number ColorantCount,
1342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                           const char* Prefix, const char* Suffix);
1343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1344ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void               CMSEXPORT cmsFreeNamedColorList(cmsNAMEDCOLORLIST* v);
1345ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsDupNamedColorList(const cmsNAMEDCOLORLIST* v);
1346ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool            CMSEXPORT cmsAppendNamedColor(cmsNAMEDCOLORLIST* v, const char* Name,
1347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                            cmsUInt16Number PCS[3],
1348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                            cmsUInt16Number Colorant[cmsMAXCHANNELS]);
1349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1350ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number    CMSEXPORT cmsNamedColorCount(const cmsNAMEDCOLORLIST* v);
1351ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsInt32Number     CMSEXPORT cmsNamedColorIndex(const cmsNAMEDCOLORLIST* v, const char* Name);
1352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1353ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool            CMSEXPORT cmsNamedColorInfo(const cmsNAMEDCOLORLIST* NamedColorList, cmsUInt32Number nColor,
1354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                      char* Name,
1355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                      char* Prefix,
1356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                      char* Suffix,
1357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                      cmsUInt16Number* PCS,
1358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                      cmsUInt16Number* Colorant);
1359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Retrieve named color list from transform
1361ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsNAMEDCOLORLIST* CMSEXPORT cmsGetNamedColorList(cmsHTRANSFORM xform);
1362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Profile sequence -----------------------------------------------------------------------------------------------------
1364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Profile sequence descriptor. Some fields come from profile sequence descriptor tag, others
1366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// come from Profile Sequence Identifier Tag
1367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
1368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSignature           deviceMfg;
1370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsSignature           deviceModel;
1371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt64Number        attributes;
1372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsTechnologySignature technology;
1373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsProfileID           ProfileID;
1374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsMLU*                Manufacturer;
1375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsMLU*                Model;
1376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsMLU*                Description;
1377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPSEQDESC;
1379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct {
1381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsUInt32Number n;
1383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsContext     ContextID;
1384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsPSEQDESC*    seq;
1385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsSEQ;
1387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1388ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsSEQ*           CMSEXPORT cmsAllocProfileSequenceDescription(cmsContext ContextID, cmsUInt32Number n);
1389ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsSEQ*           CMSEXPORT cmsDupProfileSequenceDescription(const cmsSEQ* pseq);
1390ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsFreeProfileSequenceDescription(cmsSEQ* pseq);
1391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Dictionaries --------------------------------------------------------------------------------------------------------
1393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct _cmsDICTentry_struct {
1395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    struct _cmsDICTentry_struct* Next;
1397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsMLU *DisplayName;
1399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    cmsMLU *DisplayValue;
1400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    wchar_t* Name;
1401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    wchar_t* Value;
1402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsDICTentry;
1404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1405ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHANDLE           CMSEXPORT cmsDictAlloc(cmsContext ContextID);
1406ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void                CMSEXPORT cmsDictFree(cmsHANDLE hDict);
1407ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHANDLE           CMSEXPORT cmsDictDup(cmsHANDLE hDict);
1408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1409ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool             CMSEXPORT cmsDictAddEntry(cmsHANDLE hDict, const wchar_t* Name, const wchar_t* Value, const cmsMLU *DisplayName, const cmsMLU *DisplayValue);
1410ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI const cmsDICTentry* CMSEXPORT cmsDictGetEntryList(cmsHANDLE hDict);
1411ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI const cmsDICTentry* CMSEXPORT cmsDictNextEntry(const cmsDICTentry* e);
1412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Access to Profile data ----------------------------------------------------------------------------------------------
1414ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE       CMSEXPORT cmsCreateProfilePlaceholder(cmsContext ContextID);
1415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1416ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsContext        CMSEXPORT cmsGetProfileContextID(cmsHPROFILE hProfile);
1417ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsInt32Number    CMSEXPORT cmsGetTagCount(cmsHPROFILE hProfile);
1418ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsTagSignature   CMSEXPORT cmsGetTagSignature(cmsHPROFILE hProfile, cmsUInt32Number n);
1419ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsIsTag(cmsHPROFILE hProfile, cmsTagSignature sig);
1420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Read and write pre-formatted data
1422ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void*             CMSEXPORT cmsReadTag(cmsHPROFILE hProfile, cmsTagSignature sig);
1423ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsWriteTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data);
1424ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsLinkTag(cmsHPROFILE hProfile, cmsTagSignature sig, cmsTagSignature dest);
1425ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsTagSignature   CMSEXPORT cmsTagLinkedTo(cmsHPROFILE hProfile, cmsTagSignature sig);
1426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Read and write raw data
1428ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsInt32Number    CMSEXPORT cmsReadRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, void* Buffer, cmsUInt32Number BufferSize);
1429ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsWriteRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data, cmsUInt32Number Size);
1430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Access header data
1432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsEmbeddedProfileFalse    0x00000000
1433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsEmbeddedProfileTrue     0x00000001
1434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsUseAnywhere             0x00000000
1435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsUseWithEmbeddedDataOnly 0x00000002
1436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1437ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsGetHeaderFlags(cmsHPROFILE hProfile);
1438ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsGetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number* Flags);
1439ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsGetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID);
1440ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsGetHeaderCreationDateTime(cmsHPROFILE hProfile, struct tm *Dest);
1441ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsGetHeaderRenderingIntent(cmsHPROFILE hProfile);
1442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1443ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetHeaderFlags(cmsHPROFILE hProfile, cmsUInt32Number Flags);
1444ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsGetHeaderManufacturer(cmsHPROFILE hProfile);
1445ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetHeaderManufacturer(cmsHPROFILE hProfile, cmsUInt32Number manufacturer);
1446ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsGetHeaderCreator(cmsHPROFILE hProfile);
1447ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsGetHeaderModel(cmsHPROFILE hProfile);
1448ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetHeaderModel(cmsHPROFILE hProfile, cmsUInt32Number model);
1449ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number Flags);
1450ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetHeaderProfileID(cmsHPROFILE hProfile, cmsUInt8Number* ProfileID);
1451ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetHeaderRenderingIntent(cmsHPROFILE hProfile, cmsUInt32Number RenderingIntent);
1452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1453ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsColorSpaceSignature
1454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                         CMSEXPORT cmsGetPCS(cmsHPROFILE hProfile);
1455ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetPCS(cmsHPROFILE hProfile, cmsColorSpaceSignature pcs);
1456ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsColorSpaceSignature
1457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                         CMSEXPORT cmsGetColorSpace(cmsHPROFILE hProfile);
1458ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetColorSpace(cmsHPROFILE hProfile, cmsColorSpaceSignature sig);
1459ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsProfileClassSignature
1460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                         CMSEXPORT cmsGetDeviceClass(cmsHPROFILE hProfile);
1461ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetDeviceClass(cmsHPROFILE hProfile, cmsProfileClassSignature sig);
1462ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetProfileVersion(cmsHPROFILE hProfile, cmsFloat64Number Version);
1463ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number  CMSEXPORT cmsGetProfileVersion(cmsHPROFILE hProfile);
1464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1465ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsGetEncodedICCversion(cmsHPROFILE hProfile);
1466ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void              CMSEXPORT cmsSetEncodedICCversion(cmsHPROFILE hProfile, cmsUInt32Number Version);
1467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// How profiles may be used
1469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define LCMS_USED_AS_INPUT      0
1470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define LCMS_USED_AS_OUTPUT     1
1471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define LCMS_USED_AS_PROOF      2
1472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1473ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsIsIntentSupported(cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number UsedDirection);
1474ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsIsMatrixShaper(cmsHPROFILE hProfile);
1475ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsIsCLUT(cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number UsedDirection);
1476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Translate form/to our notation to ICC
1478ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsColorSpaceSignature   CMSEXPORT _cmsICCcolorSpace(int OurNotation);
1479ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI int                      CMSEXPORT _cmsLCMScolorSpace(cmsColorSpaceSignature ProfileSpace);
1480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1481ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace);
1482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Build a suitable formatter for the colorspace of this profile
1484ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsFormatterForColorspaceOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat);
1485ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsFormatterForPCSOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat);
1486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Localized info
1489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum {
1490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov             cmsInfoDescription  = 0,
1491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov             cmsInfoManufacturer = 1,
1492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov             cmsInfoModel        = 2,
1493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov             cmsInfoCopyright    = 3
1494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsInfoType;
1495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1496ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsGetProfileInfo(cmsHPROFILE hProfile, cmsInfoType Info,
1497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                            const char LanguageCode[3], const char CountryCode[3],
1498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                            wchar_t* Buffer, cmsUInt32Number BufferSize);
1499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1500ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number   CMSEXPORT cmsGetProfileInfoASCII(cmsHPROFILE hProfile, cmsInfoType Info,
1501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                            const char LanguageCode[3], const char CountryCode[3],
1502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                            char* Buffer, cmsUInt32Number BufferSize);
1503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// IO handlers ----------------------------------------------------------------------------------------------------------
1505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct _cms_io_handler cmsIOHANDLER;
1507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1508ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsIOHANDLER*     CMSEXPORT cmsOpenIOhandlerFromFile(cmsContext ContextID, const char* FileName, const char* AccessMode);
1509ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsIOHANDLER*     CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* Stream);
1510ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsIOHANDLER*     CMSEXPORT cmsOpenIOhandlerFromMem(cmsContext ContextID, void *Buffer, cmsUInt32Number size, const char* AccessMode);
1511ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsIOHANDLER*     CMSEXPORT cmsOpenIOhandlerFromNULL(cmsContext ContextID);
1512ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsCloseIOhandler(cmsIOHANDLER* io);
1513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// MD5 message digest --------------------------------------------------------------------------------------------------
1515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1516ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool           CMSEXPORT cmsMD5computeID(cmsHPROFILE hProfile);
1517ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool			 CMSEXPORT cmsMD5computeIDExt(const void* buf, unsigned long size, unsigned char ProfileID[16]);
1518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Profile high level funtions ------------------------------------------------------------------------------------------
1520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1521ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsOpenProfileFromFile(const char *ICCProfile, const char *sAccess);
1522ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsOpenProfileFromFileTHR(cmsContext ContextID, const char *ICCProfile, const char *sAccess);
1523ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsOpenProfileFromStream(FILE* ICCProfile, const char* sAccess);
1524ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsOpenProfileFromStreamTHR(cmsContext ContextID, FILE* ICCProfile, const char* sAccess);
1525ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsOpenProfileFromMem(const void * MemPtr, cmsUInt32Number dwSize);
1526ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsOpenProfileFromMemTHR(cmsContext ContextID, const void * MemPtr, cmsUInt32Number dwSize);
1527ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsOpenProfileFromIOhandlerTHR(cmsContext ContextID, cmsIOHANDLER* io);
1528ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsOpenProfileFromIOhandler2THR(cmsContext ContextID, cmsIOHANDLER* io, cmsBool write);
1529ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsCloseProfile(cmsHPROFILE hProfile);
1530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1531ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsSaveProfileToFile(cmsHPROFILE hProfile, const char* FileName);
1532ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsSaveProfileToStream(cmsHPROFILE hProfile, FILE* Stream);
1533ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsSaveProfileToMem(cmsHPROFILE hProfile, void *MemPtr, cmsUInt32Number* BytesNeeded);
1534ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number  CMSEXPORT cmsSaveProfileToIOhandler(cmsHPROFILE hProfile, cmsIOHANDLER* io);
1535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Predefined virtual profiles ------------------------------------------------------------------------------------------
1537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1538ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateRGBProfileTHR(cmsContext ContextID,
1539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   const cmsCIExyY* WhitePoint,
1540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   const cmsCIExyYTRIPLE* Primaries,
1541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsToneCurve* const TransferFunction[3]);
1542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1543ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateRGBProfile(const cmsCIExyY* WhitePoint,
1544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   const cmsCIExyYTRIPLE* Primaries,
1545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsToneCurve* const TransferFunction[3]);
1546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1547ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateGrayProfileTHR(cmsContext ContextID,
1548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                    const cmsCIExyY* WhitePoint,
1549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                    const cmsToneCurve* TransferFunction);
1550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1551ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateGrayProfile(const cmsCIExyY* WhitePoint,
1552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                    const cmsToneCurve* TransferFunction);
1553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1554ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateLinearizationDeviceLinkTHR(cmsContext ContextID,
1555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                                cmsColorSpaceSignature ColorSpace,
1556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                                cmsToneCurve* const TransferFunctions[]);
1557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1558ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateLinearizationDeviceLink(cmsColorSpaceSignature ColorSpace,
1559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                                cmsToneCurve* const TransferFunctions[]);
1560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1561ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateInkLimitingDeviceLinkTHR(cmsContext ContextID,
1562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                              cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit);
1563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1564ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateInkLimitingDeviceLink(cmsColorSpaceSignature ColorSpace, cmsFloat64Number Limit);
1565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1567ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateLab2ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint);
1568ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateLab2Profile(const cmsCIExyY* WhitePoint);
1569ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateLab4ProfileTHR(cmsContext ContextID, const cmsCIExyY* WhitePoint);
1570ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateLab4Profile(const cmsCIExyY* WhitePoint);
1571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1572ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateXYZProfileTHR(cmsContext ContextID);
1573ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateXYZProfile(void);
1574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1575ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreate_sRGBProfileTHR(cmsContext ContextID);
1576ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreate_sRGBProfile(void);
1577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1578ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateBCHSWabstractProfileTHR(cmsContext ContextID,
1579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             int nLUTPoints,
1580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             cmsFloat64Number Bright,
1581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             cmsFloat64Number Contrast,
1582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             cmsFloat64Number Hue,
1583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             cmsFloat64Number Saturation,
1584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             int TempSrc,
1585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             int TempDest);
1586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1587ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateBCHSWabstractProfile(int nLUTPoints,
1588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             cmsFloat64Number Bright,
1589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             cmsFloat64Number Contrast,
1590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             cmsFloat64Number Hue,
1591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             cmsFloat64Number Saturation,
1592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             int TempSrc,
1593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                             int TempDest);
1594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1595ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateNULLProfileTHR(cmsContext ContextID);
1596ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsCreateNULLProfile(void);
1597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Converts a transform to a devicelink profile
1599ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHPROFILE      CMSEXPORT cmsTransform2DeviceLink(cmsHTRANSFORM hTransform, cmsFloat64Number Version, cmsUInt32Number dwFlags);
1600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Intents ----------------------------------------------------------------------------------------------
1602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ICC Intents
1604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define INTENT_PERCEPTUAL                              0
1605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define INTENT_RELATIVE_COLORIMETRIC                   1
1606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define INTENT_SATURATION                              2
1607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define INTENT_ABSOLUTE_COLORIMETRIC                   3
1608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Non-ICC intents
1610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define INTENT_PRESERVE_K_ONLY_PERCEPTUAL             10
1611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define INTENT_PRESERVE_K_ONLY_RELATIVE_COLORIMETRIC  11
1612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define INTENT_PRESERVE_K_ONLY_SATURATION             12
1613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define INTENT_PRESERVE_K_PLANE_PERCEPTUAL            13
1614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define INTENT_PRESERVE_K_PLANE_RELATIVE_COLORIMETRIC 14
1615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define INTENT_PRESERVE_K_PLANE_SATURATION            15
1616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Call with NULL as parameters to get the intent count
1618ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number  CMSEXPORT cmsGetSupportedIntents(cmsUInt32Number nMax, cmsUInt32Number* Codes, char** Descriptions);
1619ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number  CMSEXPORT cmsGetSupportedIntentsTHR(cmsContext ContextID, cmsUInt32Number nMax, cmsUInt32Number* Codes, char** Descriptions);
1620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Flags
1622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_NOCACHE                  0x0040    // Inhibit 1-pixel cache
1624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_NOOPTIMIZE               0x0100    // Inhibit optimizations
1625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_NULLTRANSFORM            0x0200    // Don't transform anyway
1626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Proofing flags
1628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_GAMUTCHECK               0x1000    // Out of Gamut alarm
1629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_SOFTPROOFING             0x4000    // Do softproofing
1630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Misc
1632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_BLACKPOINTCOMPENSATION   0x2000
1633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_NOWHITEONWHITEFIXUP      0x0004    // Don't fix scum dot
1634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_HIGHRESPRECALC           0x0400    // Use more memory to give better accurancy
1635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_LOWRESPRECALC            0x0800    // Use less memory to minimize resouces
1636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// For devicelink creation
1638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_8BITS_DEVICELINK         0x0008   // Create 8 bits devicelinks
1639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_GUESSDEVICECLASS         0x0020   // Guess device class (for transform2devicelink)
1640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_KEEP_SEQUENCE            0x0080   // Keep profile sequence for devicelink creation
1641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Specific to a particular optimizations
1643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_FORCE_CLUT               0x0002    // Force CLUT optimization
1644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_CLUT_POST_LINEARIZATION  0x0001    // create postlinearization tables if possible
1645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_CLUT_PRE_LINEARIZATION   0x0010    // create prelinearization tables if possible
1646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Fine-tune control over number of gridpoints
1648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_GRIDPOINTS(n)           (((n) & 0xFF) << 16)
1649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// CRD special
1651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsFLAGS_NODEFAULTRESOURCEDEF     0x01000000
1652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Transforms ---------------------------------------------------------------------------------------------------
1654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1655ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHTRANSFORM    CMSEXPORT cmsCreateTransformTHR(cmsContext ContextID,
1656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsHPROFILE Input,
1657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number InputFormat,
1658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsHPROFILE Output,
1659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number OutputFormat,
1660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number Intent,
1661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number dwFlags);
1662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1663ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHTRANSFORM    CMSEXPORT cmsCreateTransform(cmsHPROFILE Input,
1664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number InputFormat,
1665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsHPROFILE Output,
1666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number OutputFormat,
1667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number Intent,
1668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number dwFlags);
1669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1670ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHTRANSFORM    CMSEXPORT cmsCreateProofingTransformTHR(cmsContext ContextID,
1671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsHPROFILE Input,
1672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number InputFormat,
1673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsHPROFILE Output,
1674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number OutputFormat,
1675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsHPROFILE Proofing,
1676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number Intent,
1677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number ProofingIntent,
1678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number dwFlags);
1679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1680ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHTRANSFORM    CMSEXPORT cmsCreateProofingTransform(cmsHPROFILE Input,
1681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number InputFormat,
1682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsHPROFILE Output,
1683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number OutputFormat,
1684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsHPROFILE Proofing,
1685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number Intent,
1686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number ProofingIntent,
1687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number dwFlags);
1688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1689ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHTRANSFORM    CMSEXPORT cmsCreateMultiprofileTransformTHR(cmsContext ContextID,
1690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsHPROFILE hProfiles[],
1691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number nProfiles,
1692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number InputFormat,
1693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number OutputFormat,
1694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number Intent,
1695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number dwFlags);
1696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1698ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHTRANSFORM    CMSEXPORT cmsCreateMultiprofileTransform(cmsHPROFILE hProfiles[],
1699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number nProfiles,
1700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number InputFormat,
1701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number OutputFormat,
1702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number Intent,
1703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                  cmsUInt32Number dwFlags);
1704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1706ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHTRANSFORM    CMSEXPORT cmsCreateExtendedTransform(cmsContext ContextID,
1707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsUInt32Number nProfiles, cmsHPROFILE hProfiles[],
1708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsBool  BPC[],
1709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsUInt32Number Intents[],
1710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsFloat64Number AdaptationStates[],
1711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsHPROFILE hGamutProfile,
1712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsUInt32Number nGamutPCSposition,
1713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsUInt32Number InputFormat,
1714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsUInt32Number OutputFormat,
1715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   cmsUInt32Number dwFlags);
1716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1717ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void             CMSEXPORT cmsDeleteTransform(cmsHTRANSFORM hTransform);
1718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1719ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void             CMSEXPORT cmsDoTransform(cmsHTRANSFORM Transform,
1720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                 const void * InputBuffer,
1721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                 void * OutputBuffer,
1722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                 cmsUInt32Number Size);
1723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1724ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void             CMSEXPORT cmsDoTransformStride(cmsHTRANSFORM Transform,
1725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                 const void * InputBuffer,
1726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                 void * OutputBuffer,
1727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                 cmsUInt32Number Size,
1728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                 cmsUInt32Number Stride);
1729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1731ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void             CMSEXPORT cmsSetAlarmCodes(const cmsUInt16Number NewAlarm[cmsMAXCHANNELS]);
1732ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void             CMSEXPORT cmsGetAlarmCodes(cmsUInt16Number NewAlarm[cmsMAXCHANNELS]);
1733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1735ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void             CMSEXPORT cmsSetAlarmCodesTHR(cmsContext ContextID,
1736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                          const cmsUInt16Number AlarmCodes[cmsMAXCHANNELS]);
1737ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void             CMSEXPORT cmsGetAlarmCodesTHR(cmsContext ContextID,
1738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                          cmsUInt16Number AlarmCodes[cmsMAXCHANNELS]);
1739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Adaptation state for absolute colorimetric intent
1743ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number CMSEXPORT cmsSetAdaptationState(cmsFloat64Number d);
1744ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number CMSEXPORT cmsSetAdaptationStateTHR(cmsContext ContextID, cmsFloat64Number d);
1745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Grab the ContextID from an open transform. Returns NULL if a NULL transform is passed
1749ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsContext       CMSEXPORT cmsGetTransformContextID(cmsHTRANSFORM hTransform);
1750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Grab the input/output formats
1752ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number CMSEXPORT cmsGetTransformInputFormat(cmsHTRANSFORM hTransform);
1753ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number CMSEXPORT cmsGetTransformOutputFormat(cmsHTRANSFORM hTransform);
1754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// For backwards compatibility
1756ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsChangeBuffersFormat(cmsHTRANSFORM hTransform,
1757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                         cmsUInt32Number InputFormat,
1758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                         cmsUInt32Number OutputFormat);
1759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// PostScript ColorRenderingDictionary and ColorSpaceArray ----------------------------------------------------
1763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum { cmsPS_RESOURCE_CSA, cmsPS_RESOURCE_CRD } cmsPSResourceType;
1765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// lcms2 unified method to access postscript color resources
1767ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number  CMSEXPORT cmsGetPostScriptColorResource(cmsContext ContextID,
1768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                                cmsPSResourceType Type,
1769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                                cmsHPROFILE hProfile,
1770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                                cmsUInt32Number Intent,
1771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                                cmsUInt32Number dwFlags,
1772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                                cmsIOHANDLER* io);
1773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1774ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number  CMSEXPORT cmsGetPostScriptCSA(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, void* Buffer, cmsUInt32Number dwBufferLen);
1775ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number  CMSEXPORT cmsGetPostScriptCRD(cmsContext ContextID, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags, void* Buffer, cmsUInt32Number dwBufferLen);
1776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// IT8.7 / CGATS.17-200x handling -----------------------------------------------------------------------------
1779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1780ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHANDLE        CMSEXPORT cmsIT8Alloc(cmsContext ContextID);
1781ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void             CMSEXPORT cmsIT8Free(cmsHANDLE hIT8);
1782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Tables
1784ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number  CMSEXPORT cmsIT8TableCount(cmsHANDLE hIT8);
1785ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsInt32Number   CMSEXPORT cmsIT8SetTable(cmsHANDLE hIT8, cmsUInt32Number nTable);
1786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Persistence
1788ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHANDLE        CMSEXPORT cmsIT8LoadFromFile(cmsContext ContextID, const char* cFileName);
1789ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHANDLE        CMSEXPORT cmsIT8LoadFromMem(cmsContext ContextID, void *Ptr, cmsUInt32Number len);
1790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// CMSAPI cmsHANDLE        CMSEXPORT cmsIT8LoadFromIOhandler(cmsContext ContextID, cmsIOHANDLER* io);
1791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1792ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SaveToFile(cmsHANDLE hIT8, const char* cFileName);
1793ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SaveToMem(cmsHANDLE hIT8, void *MemPtr, cmsUInt32Number* BytesNeeded);
1794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Properties
1796ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI const char*      CMSEXPORT cmsIT8GetSheetType(cmsHANDLE hIT8);
1797ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetSheetType(cmsHANDLE hIT8, const char* Type);
1798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1799ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetComment(cmsHANDLE hIT8, const char* cComment);
1800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1801ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetPropertyStr(cmsHANDLE hIT8, const char* cProp, const char *Str);
1802ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetPropertyDbl(cmsHANDLE hIT8, const char* cProp, cmsFloat64Number Val);
1803ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetPropertyHex(cmsHANDLE hIT8, const char* cProp, cmsUInt32Number Val);
1804ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetPropertyMulti(cmsHANDLE hIT8, const char* Key, const char* SubKey, const char *Buffer);
1805ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetPropertyUncooked(cmsHANDLE hIT8, const char* Key, const char* Buffer);
1806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1808ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI const char*      CMSEXPORT cmsIT8GetProperty(cmsHANDLE hIT8, const char* cProp);
1809ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetPropertyDbl(cmsHANDLE hIT8, const char* cProp);
1810ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI const char*      CMSEXPORT cmsIT8GetPropertyMulti(cmsHANDLE hIT8, const char* Key, const char *SubKey);
1811ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number  CMSEXPORT cmsIT8EnumProperties(cmsHANDLE hIT8, char ***PropertyNames);
1812ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number  CMSEXPORT cmsIT8EnumPropertyMulti(cmsHANDLE hIT8, const char* cProp, const char ***SubpropertyNames);
1813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Datasets
1815ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI const char*      CMSEXPORT cmsIT8GetDataRowCol(cmsHANDLE hIT8, int row, int col);
1816ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetDataRowColDbl(cmsHANDLE hIT8, int row, int col);
1817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1818ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetDataRowCol(cmsHANDLE hIT8, int row, int col,
1819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                const char* Val);
1820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1821ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetDataRowColDbl(cmsHANDLE hIT8, int row, int col,
1822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                cmsFloat64Number Val);
1823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1824ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI const char*      CMSEXPORT cmsIT8GetData(cmsHANDLE hIT8, const char* cPatch, const char* cSample);
1825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1827ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number CMSEXPORT cmsIT8GetDataDbl(cmsHANDLE hIT8, const char* cPatch, const char* cSample);
1828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1829ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetData(cmsHANDLE hIT8, const char* cPatch,
1830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                const char* cSample,
1831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                const char *Val);
1832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1833ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetDataDbl(cmsHANDLE hIT8, const char* cPatch,
1834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                const char* cSample,
1835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                cmsFloat64Number Val);
1836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1837ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI int              CMSEXPORT cmsIT8FindDataFormat(cmsHANDLE hIT8, const char* cSample);
1838ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetDataFormat(cmsHANDLE hIT8, int n, const char *Sample);
1839ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI int              CMSEXPORT cmsIT8EnumDataFormat(cmsHANDLE hIT8, char ***SampleNames);
1840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1841ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI const char*      CMSEXPORT cmsIT8GetPatchName(cmsHANDLE hIT8, int nPatch, char* buffer);
1842ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI int              CMSEXPORT cmsIT8GetPatchByName(cmsHANDLE hIT8, const char *cPatch);
1843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// The LABEL extension
1845ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI int              CMSEXPORT cmsIT8SetTableByLabel(cmsHANDLE hIT8, const char* cSet, const char* cField, const char* ExpectedType);
1846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1847ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsIT8SetIndexColumn(cmsHANDLE hIT8, const char* cSample);
1848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Formatter for double
1850ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void             CMSEXPORT cmsIT8DefineDblFormat(cmsHANDLE hIT8, const char* Formatter);
1851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Gamut boundary description routines ------------------------------------------------------------------------------
1853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1854ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsHANDLE        CMSEXPORT cmsGBDAlloc(cmsContext ContextID);
1855ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void             CMSEXPORT cmsGBDFree(cmsHANDLE hGBD);
1856ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsGDBAddPoint(cmsHANDLE hGBD, const cmsCIELab* Lab);
1857ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsGDBCompute(cmsHANDLE  hGDB, cmsUInt32Number dwFlags);
1858ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsGDBCheckPoint(cmsHANDLE hGBD, const cmsCIELab* Lab);
1859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Feature detection  ----------------------------------------------------------------------------------------------
1861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Estimate the black point
1863ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsDetectBlackPoint(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags);
1864ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsDetectDestinationBlackPoint(cmsCIEXYZ* BlackPoint, cmsHPROFILE hProfile, cmsUInt32Number Intent, cmsUInt32Number dwFlags);
1865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Estimate total area coverage
1867ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number CMSEXPORT cmsDetectTAC(cmsHPROFILE hProfile);
1868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Poor man's gamut mapping
1871ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool          CMSEXPORT cmsDesaturateLab(cmsCIELab* Lab,
1872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   double amax, double amin,
1873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                                   double bmax, double bmin);
1874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef CMS_USE_CPP_API
1876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#   ifdef __cplusplus
1877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
1878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#   endif
1879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
1880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _lcms2_H
1882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
1883