1 #ifndef SA_CONV_H
2 
3 #ifdef SALONEINSTLIB
4 /*
5  * A very small subset of icclib and numlib for the standalone instrument lib.
6  */
7 
8 /*
9  * Argyll Color Correction System
10  *
11  * Author: Graeme W. Gill
12  * Date:   2008/2/9
13  *
14  * Copyright 1996 - 2013 Graeme W. Gill
15  * All rights reserved.
16  *
17  * This material is licenced under the GNU GENERAL PUBLIC LICENSE Version 2 or later :-
18  * see the License2.txt file for licencing details.
19  *
20  * Derived from icoms.h
21  */
22 
23 #if defined (NT)
24 # if !defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0501
25 #  if defined _WIN32_WINNT
26 #   undef _WIN32_WINNT
27 #  endif
28 #  define _WIN32_WINNT 0x0501
29 # endif
30 # define WIN32_LEAN_AND_MEAN
31 # include <windows.h>
32 # include <io.h>
33 #endif
34 
35 #if defined (UNIX)
36 # include <unistd.h>
37 # include <glob.h>
38 # include <pthread.h>
39 #endif
40 
41 #ifdef __cplusplus
42 	extern "C" {
43 #endif
44 
45 /* - - - - - - - - - - - - - - - - - - - - - - - - - - */
46 /* A subset of icclib */
47 
48 #ifndef MAX_CHAN
49 # define MAX_CHAN 15
50 #endif
51 
52 typedef enum {
53     sa_SigXYZData                        = 0x58595A20L,  /* 'XYZ ' */
54     sa_SigLabData                        = 0x4C616220L,  /* 'Lab ' */
55     sa_SigLuvData                        = 0x4C757620L,  /* 'Luv ' */
56     sa_SigYCbCrData                      = 0x59436272L,  /* 'YCbr' */
57     sa_SigYxyData                        = 0x59787920L,  /* 'Yxy ' */
58     sa_SigRgbData                        = 0x52474220L,  /* 'RGB ' */
59     sa_SigGrayData                       = 0x47524159L,  /* 'GRAY' */
60     sa_SigHsvData                        = 0x48535620L,  /* 'HSV ' */
61     sa_SigHlsData                        = 0x484C5320L,  /* 'HLS ' */
62     sa_SigCmykData                       = 0x434D594BL,  /* 'CMYK' */
63     sa_SigCmyData                        = 0x434D5920L,  /* 'CMY ' */
64 
65     sa_Sig2colorData                     = 0x32434C52L,  /* '2CLR' */
66     sa_Sig3colorData                     = 0x33434C52L,  /* '3CLR' */
67     sa_Sig4colorData                     = 0x34434C52L,  /* '4CLR' */
68     sa_Sig5colorData                     = 0x35434C52L,  /* '5CLR' */
69     sa_Sig6colorData                     = 0x36434C52L,  /* '6CLR' */
70     sa_Sig7colorData                     = 0x37434C52L,  /* '7CLR' */
71     sa_Sig8colorData                     = 0x38434C52L,  /* '8CLR' */
72     sa_Sig9colorData                     = 0x39434C52L,  /* '9CLR' */
73     sa_Sig10colorData                    = 0x41434C52L,  /* 'ACLR' */
74     sa_Sig11colorData                    = 0x42434C52L,  /* 'BCLR' */
75     sa_Sig12colorData                    = 0x43434C52L,  /* 'CCLR' */
76     sa_Sig13colorData                    = 0x44434C52L,  /* 'DCLR' */
77     sa_Sig14colorData                    = 0x45434C52L,  /* 'ECLR' */
78     sa_Sig15colorData                    = 0x46434C52L,  /* 'FCLR' */
79 
80     sa_SigMch5Data                       = 0x4D434835L,  /* 'MCH5' Colorsync ? */
81     sa_SigMch6Data                       = 0x4D434836L,  /* 'MCH6' Hexachrome: CMYKOG */
82     sa_SigMch7Data                       = 0x4D434837L,  /* 'MCH7' Colorsync ? */
83     sa_SigMch8Data                       = 0x4D434838L,  /* 'MCH8' Colorsync ? */
84 	sa_SigNamedData                      = 0x6e6d636cL,  /* 'nmcl' ??? */
85 
86     sa_MaxEnumData                       = -1
87 } sa_ColorSpaceSignature;
88 
89 typedef enum {
90     sa_SigInputClass                     = 0x73636E72L,  /* 'scnr' */
91     sa_SigDisplayClass                   = 0x6D6E7472L,  /* 'mntr' */
92     sa_SigOutputClass                    = 0x70727472L,  /* 'prtr' */
93     sa_SigLinkClass                      = 0x6C696E6BL,  /* 'link' */
94     sa_SigAbstractClass                  = 0x61627374L,  /* 'abst' */
95     sa_SigColorSpaceClass                = 0x73706163L,  /* 'spac' */
96     sa_SigNamedColorClass                = 0x6e6d636cL,  /* 'nmcl' */
97     sa_MaxEnumClass                      = -1
98 } sa_ProfileClassSignature;
99 
100 typedef struct {
101     double  X;
102     double  Y;
103     double  Z;
104 } sa_XYZNumber;
105 
106 unsigned int sa_CSSig2nchan(sa_ColorSpaceSignature sig);
107 extern sa_XYZNumber sa_D50;
108 extern sa_XYZNumber sa_D65;
109 extern sa_XYZNumber sa_D50_100;
110 extern sa_XYZNumber sa_D65_100;
111 void sa_SetUnity3x3(double mat[3][3]);
112 void sa_Cpy3x3(double out[3][3], double mat[3][3]);
113 void sa_MulBy3x3(double out[3], double mat[3][3], double in[3]);
114 void sa_Mul3x3_2(double dst[3][3], double src1[3][3], double src2[3][3]);
115 int sa_Inverse3x3(double out[3][3], double in[3][3]);
116 void sa_Transpose3x3(double out[3][3], double in[3][3]);
117 void sa_Scale3(double out[3], double in[3], double rat);
118 double sa_LabDE(double *in0, double *in1);
119 double sa_CIE94sq(double *in0, double *in1);
120 void sa_Lab2XYZ(sa_XYZNumber *w, double *out, double *in);
121 void sa_XYZ2Lab(sa_XYZNumber *w, double *out, double *in);
122 void sa_Yxy2XYZ(double *out, double *in);
123 
124 #define icColorSpaceSignature sa_ColorSpaceSignature
125 #define icSigXYZData sa_SigXYZData
126 #define icSigLabData sa_SigLabData
127 #define icSigLuvData sa_SigLuvData
128 #define icSigYCbCrData sa_SigYCbCrData
129 #define icSigYxyData sa_SigYxyData
130 #define icSigRgbData sa_SigRgbData
131 #define icSigGrayData sa_SigGrayData
132 #define icSigHsvData sa_SigHsvData
133 #define icSigHlsData sa_SigHlsData
134 #define icSigCmykData sa_SigCmykData
135 #define icSigCmyData sa_SigCmyData
136 #define icSig2colorData sa_Sig2colorData
137 #define icSig3colorData sa_Sig3colorData
138 #define icSig4colorData sa_Sig4colorData
139 #define icSig5colorData sa_Sig5colorData
140 #define icSig6colorData sa_Sig6colorData
141 #define icSig7colorData sa_Sig7colorData
142 #define icSig8colorData sa_Sig8colorData
143 #define icSig9colorData sa_Sig9colorData
144 #define icSig10colorData sa_Sig10colorData
145 #define icSig11colorData sa_Sig11colorData
146 #define icSig12colorData sa_Sig12colorData
147 #define icSig13colorData sa_Sig13colorData
148 #define icSig14colorData sa_Sig14colorData
149 #define icSig15colorData sa_Sig15colorData
150 #define icSigMch5Data sa_SigMch5Data
151 #define icSigMch6Data sa_SigMch6Data
152 #define icSigMch7Data sa_SigMch7Data
153 #define icSigMch8Data sa_SigMch8Data
154 #define icSigNamedData sa_SigNamedData
155 #define icMaxEnumData sa_MaxEnumData
156 
157 #define icProfileClassSignature sa_ProfileClassSignature
158 #define icSigInputClass sa_SigInputClass
159 #define icSigDisplayClass sa_SigDisplayClass
160 #define icSigOutputClass sa_SigOutputClass
161 #define icSigLinkClass sa_SigLinkClass
162 #define icSigAbstractClass sa_SigAbstractClass
163 #define icSigColorSpaceClass sa_SigColorSpaceClass
164 #define icSigNamedColorClass sa_SigNamedColorClass
165 
166 #define icmCSSig2nchan sa_CSSig2nchan
167 
168 #define icmXYZNumber sa_XYZNumber
169 #define icmD50 sa_D50
170 #define icmD65 sa_D65
171 #define icmD50_100 sa_D50_100
172 #define icmD65_100 sa_D65_100
173 
174 #define icmSetUnity3x3 sa_SetUnity3x3
175 #define icmCpy3x3 sa_Cpy3x3
176 #define icmMulBy3x3 sa_MulBy3x3
177 #define icmMul3x3_2 sa_Mul3x3_2
178 #define icmInverse3x3 sa_Inverse3x3
179 #define icmTranspose3x3 sa_Transpose3x3
180 
181 #define icmCpy3(d_ary, s_ary) ((d_ary)[0] = (s_ary)[0], (d_ary)[1] = (s_ary)[1], \
182                               (d_ary)[2] = (s_ary)[2])
183 #define icmScale3 sa_Scale3
184 #define icmClamp3 sa_Clamp3
185 
186 #define icmAry2XYZ(xyz, ary) ((xyz).X = (ary)[0], (xyz).Y = (ary)[1], (xyz).Z = (ary)[2])
187 
188 #define icmLabDE sa_LabDE
189 #define icmCIE94sq sa_CIE94sq
190 #define icmXYZ2Lab sa_XYZ2Lab
191 #define icmLab2XYZ sa_Lab2XYZ
192 #define icmYxy2XYZ sa_Yxy2XYZ
193 
194 /* A helper object that computes MD5 checksums */
195 struct _sa_MD5 {
196   /* Private: */
197 	int fin;				/* Flag, nz if final has been called */
198 	ORD32 sum[4];			/* Current/final checksum */
199 	unsigned int tlen;		/* Total length added in bytes */
200 	ORD8 buf[64];			/* Partial buffer */
201 
202   /* Public: */
203 	void (*reset)(struct _sa_MD5 *p);	/* Reset the checksum */
204 	void (*add)(struct _sa_MD5 *p, ORD8 *buf, unsigned int len);	/* Add some bytes */
205 	void (*get)(struct _sa_MD5 *p, ORD8 chsum[16]);		/* Finalise and get the checksum */
206 	void (*del)(struct _sa_MD5 *p);		/* We're done with the object */
207 
208 }; typedef struct _sa_MD5 sa_MD5;
209 
210 /* Create a new MD5 checksumming object, with a reset checksum value */
211 /* Return it or NULL if there is an error. */
212 extern sa_MD5 *new_sa_MD5(void);
213 
214 #define icmMD5 sa_MD5
215 #define new_icmMD5 new_sa_MD5
216 
217 /* - - - - - - - - - - - - - - - - - - - - - - - - - - */
218 /* A subset of numlib */
219 
220 int sa_lu_psinvert(double **out, double **in, int m, int n);
221 
222 #define lu_psinvert sa_lu_psinvert
223 
224 /* - - - - - - - - - - - - - - - - - - - - - - - - - - */
225 
226 #ifdef __cplusplus
227 	}
228 #endif
229 
230 #endif /* SALONEINSTLIB */
231 
232 #define SA_CONV_H
233 #endif /* SA_CONV_H */
234