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