lcms2_plugin.h revision ee451cb395940862dad63c85adfe8f2fd55e864c
1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//--------------------------------------------------------------------------------- 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Little Color Management System 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright (c) 1998-2011 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// This is the plug-in header file. Normal LittleCMS clients should not use it. 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// It is provided for plug-in writters that may want to access the support 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// functions to do low level operations. All plug-in related structures 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// are defined here. Including this file forces to include the standard API too. 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _lcms_plugin_H 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Deal with Microsoft's attempt at deprecating C standard runtime functions 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef _MSC_VER 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# if (_MSC_VER >= 1400) 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# ifndef _CRT_SECURE_NO_DEPRECATE 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# define _CRT_SECURE_NO_DEPRECATE 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# endif 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# ifndef _CRT_SECURE_NO_WARNINGS 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# define _CRT_SECURE_NO_WARNINGS 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# endif 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# endif 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _lcms2_H 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "lcms2.h" 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// We need some standard C functions. 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <stdlib.h> 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <math.h> 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <stdarg.h> 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <memory.h> 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <string.h> 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef CMS_USE_CPP_API 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# ifdef __cplusplus 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovextern "C" { 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# endif 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Vector & Matrix operations ----------------------------------------------------------------------- 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Axis of the matrix/array. No specific meaning at all. 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define VX 0 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define VY 1 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define VZ 2 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Vectors 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsFloat64Number n[3]; 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } cmsVEC3; 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 3x3 Matrix 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsVEC3 v[3]; 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } cmsMAT3; 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsVEC3init(cmsVEC3* r, cmsFloat64Number x, cmsFloat64Number y, cmsFloat64Number z); 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsVEC3minus(cmsVEC3* r, const cmsVEC3* a, const cmsVEC3* b); 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsVEC3cross(cmsVEC3* r, const cmsVEC3* u, const cmsVEC3* v); 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3dot(const cmsVEC3* u, const cmsVEC3* v); 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3length(const cmsVEC3* a); 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3distance(const cmsVEC3* a, const cmsVEC3* b); 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsMAT3identity(cmsMAT3* a); 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsMAT3isIdentity(const cmsMAT3* a); 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsMAT3per(cmsMAT3* r, const cmsMAT3* a, const cmsMAT3* b); 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsMAT3inverse(const cmsMAT3* a, cmsMAT3* b); 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsMAT3solve(cmsVEC3* x, cmsMAT3* a, cmsVEC3* b); 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsMAT3eval(cmsVEC3* r, const cmsMAT3* a, const cmsVEC3* v); 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Error logging ------------------------------------------------------------------------------------- 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT cmsSignalError(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *ErrorText, ...); 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Memory management ---------------------------------------------------------------------------------- 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size); 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size); 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size); 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize); 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr); 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size); 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// I/O handler ---------------------------------------------------------------------------------- 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct _cms_io_handler { 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* stream; // Associated stream, which is implemented differently depending on media. 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsContext ContextID; 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number UsedSpace; 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number ReportedSize; 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char PhysicalFile[cmsMAX_PATH]; 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number (* Read)(struct _cms_io_handler* iohandler, void *Buffer, 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number size, 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number count); 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsBool (* Seek)(struct _cms_io_handler* iohandler, cmsUInt32Number offset); 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsBool (* Close)(struct _cms_io_handler* iohandler); 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number (* Tell)(struct _cms_io_handler* iohandler); 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsBool (* Write)(struct _cms_io_handler* iohandler, cmsUInt32Number size, 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const void* Buffer); 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Endianess adjust functions 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt16Number CMSEXPORT _cmsAdjustEndianess16(cmsUInt16Number Word); 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt32Number CMSEXPORT _cmsAdjustEndianess32(cmsUInt32Number Value); 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsAdjustEndianess64(cmsUInt64Number* Result, cmsUInt64Number* QWord); 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Helper IO functions 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsReadUInt8Number(cmsIOHANDLER* io, cmsUInt8Number* n); 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsReadUInt16Number(cmsIOHANDLER* io, cmsUInt16Number* n); 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsReadUInt32Number(cmsIOHANDLER* io, cmsUInt32Number* n); 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsReadFloat32Number(cmsIOHANDLER* io, cmsFloat32Number* n); 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsReadUInt64Number(cmsIOHANDLER* io, cmsUInt64Number* n); 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsRead15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number* n); 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsReadXYZNumber(cmsIOHANDLER* io, cmsCIEXYZ* XYZ); 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsReadUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, cmsUInt16Number* Array); 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsWriteUInt8Number(cmsIOHANDLER* io, cmsUInt8Number n); 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsWriteUInt16Number(cmsIOHANDLER* io, cmsUInt16Number n); 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsWriteUInt32Number(cmsIOHANDLER* io, cmsUInt32Number n); 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsWriteFloat32Number(cmsIOHANDLER* io, cmsFloat32Number n); 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsWriteUInt64Number(cmsIOHANDLER* io, cmsUInt64Number* n); 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsWrite15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number n); 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsWriteXYZNumber(cmsIOHANDLER* io, const cmsCIEXYZ* XYZ); 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsWriteUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, const cmsUInt16Number* Array); 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ICC base tag 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsTagTypeSignature sig; 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsInt8Number reserved[4]; 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} _cmsTagBase; 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Type base helper functions 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsTagTypeSignature CMSEXPORT _cmsReadTypeBase(cmsIOHANDLER* io); 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsWriteTypeBase(cmsIOHANDLER* io, cmsTagTypeSignature sig); 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Alignment functions 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsReadAlignment(cmsIOHANDLER* io); 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsWriteAlignment(cmsIOHANDLER* io); 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// To deal with text streams. 2K at most 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsIOPrintf(cmsIOHANDLER* io, const char* frm, ...); 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Fixed point helper functions 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number CMSEXPORT _cms8Fixed8toDouble(cmsUInt16Number fixed8); 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsUInt16Number CMSEXPORT _cmsDoubleTo8Fixed8(cmsFloat64Number val); 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsFloat64Number CMSEXPORT _cms15Fixed16toDouble(cmsS15Fixed16Number fix32); 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsS15Fixed16Number CMSEXPORT _cmsDoubleTo15Fixed16(cmsFloat64Number v); 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Date/time helper functions 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsEncodeDateTimeNumber(cmsDateTimeNumber *Dest, const struct tm *Source); 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsDecodeDateTimeNumber(const cmsDateTimeNumber *Source, struct tm *Dest); 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------------------------------- 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Shared callbacks for user data 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void (* _cmsFreeUserDataFn)(cmsContext ContextID, void* Data); 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void* (* _cmsDupUserDataFn)(cmsContext ContextID, const void* Data); 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------------------------------- 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Plug-in foundation 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPluginMagicNumber 0x61637070 // 'acpp' 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPluginMemHandlerSig 0x6D656D48 // 'memH' 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPluginInterpolationSig 0x696E7048 // 'inpH' 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPluginParametricCurveSig 0x70617248 // 'parH' 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPluginFormattersSig 0x66726D48 // 'frmH 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPluginTagTypeSig 0x74797048 // 'typH' 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPluginTagSig 0x74616748 // 'tagH' 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPluginRenderingIntentSig 0x696E7448 // 'intH' 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPluginMultiProcessElementSig 0x6D706548 // 'mpeH' 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPluginOptimizationSig 0x6F707448 // 'optH' 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPluginTransformSig 0x7A666D48 // 'xfmH' 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define cmsPluginMutexSig 0x6D747A48 // 'mtxH' 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct _cmsPluginBaseStruct { 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number Magic; // 'acpp' signature 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number ExpectedVersion; // Expected version of LittleCMS 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number Type; // Type of plug-in 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct _cmsPluginBaseStruct* Next; // For multiple plugin definition. NULL for end of list. 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPluginBase; 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Maximum number of types in a plugin array 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define MAX_TYPES_IN_LCMS_PLUGIN 20 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------------------------------- 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Memory handler. Each new plug-in type replaces current behaviour 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void* (* _cmsMallocFnPtrType)(cmsContext ContextID, cmsUInt32Number size); 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void (* _cmsFreeFnPtrType)(cmsContext ContextID, void *Ptr); 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void* (* _cmsReallocFnPtrType)(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize); 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void* (* _cmsMalloZerocFnPtrType)(cmsContext ContextID, cmsUInt32Number size); 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void* (* _cmsCallocFnPtrType)(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size); 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void* (* _cmsDupFnPtrType)(cmsContext ContextID, const void* Org, cmsUInt32Number size); 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsPluginBase base; 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Required 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsMallocFnPtrType MallocPtr; 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsFreeFnPtrType FreePtr; 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsReallocFnPtrType ReallocPtr; 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Optional 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsMalloZerocFnPtrType MallocZeroPtr; 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsCallocFnPtrType CallocPtr; 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsDupFnPtrType DupPtr; 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPluginMemHandler; 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// ------------------------------------------------------------------------------------------------------------------ 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Interpolation. 16 bits and floating point versions. 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct _cms_interp_struc; 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Interpolation callbacks 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 16 bits forward interpolation. This function performs precision-limited linear interpolation 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// and is supposed to be quite fast. Implementation may be tetrahedral or trilinear, and plug-ins may 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// choose to implement any other interpolation algorithm. 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void (* _cmsInterpFn16)(register const cmsUInt16Number Input[], 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov register cmsUInt16Number Output[], 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov register const struct _cms_interp_struc* p); 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Floating point forward interpolation. Full precision interpolation using floats. This is not a 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// time critical function. Implementation may be tetrahedral or trilinear, and plug-ins may 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// choose to implement any other interpolation algorithm. 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void (* _cmsInterpFnFloat)(cmsFloat32Number const Input[], 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsFloat32Number Output[], 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const struct _cms_interp_struc* p); 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// This type holds a pointer to an interpolator that can be either 16 bits or float 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef union { 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsInterpFn16 Lerp16; // Forward interpolation in 16 bits 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsInterpFnFloat LerpFloat; // Forward interpolation in floating point 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsInterpFunction; 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Flags for interpolator selection 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CMS_LERP_FLAGS_16BITS 0x0000 // The default 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CMS_LERP_FLAGS_FLOAT 0x0001 // Requires different implementation 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CMS_LERP_FLAGS_TRILINEAR 0x0100 // Hint only 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define MAX_INPUT_DIMENSIONS 8 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct _cms_interp_struc { // Used on all interpolations. Supplied by lcms2 when calling the interpolation function 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsContext ContextID; // The calling thread 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number dwFlags; // Keep original flags 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number nInputs; // != 1 only in 3D interpolation 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number nOutputs; // != 1 only in 3D interpolation 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number nSamples[MAX_INPUT_DIMENSIONS]; // Valid on all kinds of tables 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number Domain[MAX_INPUT_DIMENSIONS]; // Domain = nSamples - 1 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number opta[MAX_INPUT_DIMENSIONS]; // Optimization for 3D CLUT. This is the number of nodes premultiplied for each 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // dimension. For example, in 7 nodes, 7, 7^2 , 7^3, 7^4, etc. On non-regular 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Samplings may vary according of the number of nodes for each dimension. 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const void *Table; // Points to the actual interpolation table 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsInterpFunction Interpolation; // Points to the function to do the interpolation 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } cmsInterpParams; 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Interpolators factory 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsInterpFunction (* cmsInterpFnFactory)(cmsUInt32Number nInputChannels, cmsUInt32Number nOutputChannels, cmsUInt32Number dwFlags); 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// The plug-in 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsPluginBase base; 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Points to a user-supplied function which implements the factory 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsInterpFnFactory InterpolatorsFactory; 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPluginInterpolation; 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------------------------------- 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Parametric curves. A negative type means same function but analytically inverted. Max. number of params is 10 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Evaluator callback for user-suplied parametric curves. May implement more than one type 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsFloat64Number (* cmsParametricCurveEvaluator)(cmsInt32Number Type, const cmsFloat64Number Params[10], cmsFloat64Number R); 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Plug-in may implement an arbitrary number of parametric curves 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsPluginBase base; 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number nFunctions; // Number of supported functions 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number FunctionTypes[MAX_TYPES_IN_LCMS_PLUGIN]; // The identification types 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number ParameterCount[MAX_TYPES_IN_LCMS_PLUGIN]; // Number of parameters for each function 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsParametricCurveEvaluator Evaluator; // The evaluator 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPluginParametricCurves; 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------------------------------- 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Formatters. This plug-in adds new handlers, replacing them if they already exist. Formatters dealing with 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// cmsFloat32Number (bps = 4) or double (bps = 0) types are requested via FormatterFloat callback. Others come across 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Formatter16 callback 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct _cmstransform_struct; 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsUInt8Number* (* cmsFormatter16)(register struct _cmstransform_struct* CMMcargo, 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov register cmsUInt16Number Values[], 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov register cmsUInt8Number* Buffer, 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov register cmsUInt32Number Stride); 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsUInt8Number* (* cmsFormatterFloat)(struct _cmstransform_struct* CMMcargo, 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsFloat32Number Values[], 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt8Number* Buffer, 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number Stride); 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// This type holds a pointer to a formatter that can be either 16 bits or cmsFloat32Number 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef union { 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsFormatter16 Fmt16; 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsFormatterFloat FmtFloat; 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsFormatter; 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CMS_PACK_FLAGS_16BITS 0x0000 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CMS_PACK_FLAGS_FLOAT 0x0001 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef enum { cmsFormatterInput=0, cmsFormatterOutput=1 } cmsFormatterDirection; 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsFormatter (* cmsFormatterFactory)(cmsUInt32Number Type, // Specific type, i.e. TYPE_RGB_8 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsFormatterDirection Dir, 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number dwFlags); // precision 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Plug-in may implement an arbitrary number of formatters 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsPluginBase base; 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsFormatterFactory FormattersFactory; 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPluginFormatters; 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------------------------------- 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Tag type handler. Each type is free to return anything it wants, and it is up to the caller to 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// know in advance what is the type contained in the tag. 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct _cms_typehandler_struct { 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsTagTypeSignature Signature; // The signature of the type 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Allocates and reads items 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void * (* ReadPtr)(struct _cms_typehandler_struct* self, 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsIOHANDLER* io, 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number* nItems, 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number SizeOfTag); 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Writes n Items 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsBool (* WritePtr)(struct _cms_typehandler_struct* self, 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsIOHANDLER* io, 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* Ptr, 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number nItems); 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Duplicate an item or array of items 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* (* DupPtr)(struct _cms_typehandler_struct* self, 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const void *Ptr, 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number n); 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Free all resources 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void (* FreePtr)(struct _cms_typehandler_struct* self, 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void *Ptr); 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Additional parameters used by the calling thread 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsContext ContextID; 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number ICCVersion; 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsTagTypeHandler; 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Each plug-in implements a single type 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsPluginBase base; 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsTagTypeHandler Handler; 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPluginTagType; 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------------------------------- 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// This is the tag plugin, which identifies tags. For writing, a pointer to function is provided. 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// This function should return the desired type for this tag, given the version of profile 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// and the data being serialized. 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number ElemCount; // If this tag needs an array, how many elements should keep 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // For reading. 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number nSupportedTypes; // In how many types this tag can come (MAX_TYPES_IN_LCMS_PLUGIN maximum) 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsTagTypeSignature SupportedTypes[MAX_TYPES_IN_LCMS_PLUGIN]; 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // For writting 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsTagTypeSignature (* DecideType)(cmsFloat64Number ICCVersion, const void *Data); 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsTagDescriptor; 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Plug-in implements a single tag 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsPluginBase base; 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsTagSignature Signature; 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsTagDescriptor Descriptor; 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPluginTag; 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------------------------------- 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Custom intents. This function should join all profiles specified in the array in 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// a single LUT. Any custom intent in the chain redirects to custom function. If more than 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// one custom intent is found, the one located first is invoked. Usually users should use only one 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// custom intent, so mixing custom intents in same multiprofile transform is not supported. 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsPipeline* (* cmsIntentFn)( cmsContext ContextID, 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number nProfiles, 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number Intents[], 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsHPROFILE hProfiles[], 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsBool BPC[], 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsFloat64Number AdaptationStates[], 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number dwFlags); 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Each plug-in defines a single intent number. 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsPluginBase base; 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number Intent; 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsIntentFn Link; 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov char Description[256]; 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPluginRenderingIntent; 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// The default ICC intents (perceptual, saturation, rel.col and abs.col) 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsPipeline* CMSEXPORT _cmsDefaultICCintents(cmsContext ContextID, 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number nProfiles, 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number Intents[], 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsHPROFILE hProfiles[], 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsBool BPC[], 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsFloat64Number AdaptationStates[], 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number dwFlags); 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------------------------------- 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Pipelines, Multi Process Elements. 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void (* _cmsStageEvalFn) (const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage* mpe); 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void*(* _cmsStageDupElemFn) (cmsStage* mpe); 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void (* _cmsStageFreeElemFn) (cmsStage* mpe); 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// This function allocates a generic MPE 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsStage* CMSEXPORT _cmsStageAllocPlaceholder(cmsContext ContextID, 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsStageSignature Type, 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number InputChannels, 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number OutputChannels, 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsStageEvalFn EvalPtr, // Points to fn that evaluates the element (always in floating point) 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsStageDupElemFn DupElemPtr, // Points to a fn that duplicates the stage 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsStageFreeElemFn FreePtr, // Points to a fn that sets the element free 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* Data); // A generic pointer to whatever memory needed by the element 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsPluginBase base; 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsTagTypeHandler Handler; 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPluginMultiProcessElement; 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Data kept in "Element" member of cmsStage 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Curves 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number nCurves; 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsToneCurve** TheCurves; 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} _cmsStageToneCurvesData; 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Matrix 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsFloat64Number* Double; // floating point for the matrix 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsFloat64Number* Offset; // The offset 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} _cmsStageMatrixData; 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// CLUT 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov union { // Can have only one of both representations at same time 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt16Number* T; // Points to the table 16 bits table 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsFloat32Number* TFloat; // Points to the cmsFloat32Number table 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } Tab; 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsInterpParams* Params; 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number nEntries; 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsBool HasFloatValues; 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} _cmsStageCLutData; 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------------------------------- 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Optimization. Using this plug-in, additional optimization strategies may be implemented. 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// The function should return TRUE if any optimization is done on the LUT, this terminates 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// the optimization search. Or FALSE if it is unable to optimize and want to give a chance 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// to the rest of optimizers. 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void (* _cmsOPTeval16Fn)(register const cmsUInt16Number In[], 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov register cmsUInt16Number Out[], 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov register const void* Data); 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsBool (* _cmsOPToptimizeFn)(cmsPipeline** Lut, 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number Intent, 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number* InputFormat, 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number* OutputFormat, 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number* dwFlags); 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// This function may be used to set the optional evaluator and a block of private data. If private data is being used, an optional 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// duplicator and free functions should also be specified in order to duplicate the LUT construct. Use NULL to inhibit such functionality. 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsPipelineSetOptimizationParameters(cmsPipeline* Lut, 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsOPTeval16Fn Eval16, 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* PrivateData, 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsFreeUserDataFn FreePrivateDataFn, 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsDupUserDataFn DupPrivateDataFn); 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsPluginBase base; 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Optimize entry point 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsOPToptimizeFn OptimizePtr; 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPluginOptimization; 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------------------------------- 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Full xform 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void (* _cmsTransformFn)(struct _cmstransform_struct *CMMcargo, 575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const void* InputBuffer, 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* OutputBuffer, 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number Size, 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number Stride); 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsBool (* _cmsTransformFactory)(_cmsTransformFn* xform, 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void** UserData, 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsFreeUserDataFn* FreePrivateDataFn, 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsPipeline** Lut, 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number* InputFormat, 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number* OutputFormat, 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsUInt32Number* dwFlags); 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Retrieve user data as specified by the factory 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsSetTransformUserData(struct _cmstransform_struct *CMMcargo, void* ptr, _cmsFreeUserDataFn FreePrivateDataFn); 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void * CMSEXPORT _cmsGetTransformUserData(struct _cmstransform_struct *CMMcargo); 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Retrieve formatters 595ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsGetTransformFormatters16 (struct _cmstransform_struct *CMMcargo, cmsFormatter16* FromInput, cmsFormatter16* ToOutput); 596ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsGetTransformFormattersFloat(struct _cmstransform_struct *CMMcargo, cmsFormatterFloat* FromInput, cmsFormatterFloat* ToOutput); 597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsPluginBase base; 600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // Transform entry point 602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsTransformFactory Factory; 603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPluginTransform; 605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------------------------------------- 607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Mutex 608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void* (* _cmsCreateMutexFnPtrType)(cmsContext ContextID); 610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void (* _cmsDestroyMutexFnPtrType)(cmsContext ContextID, void* mtx); 611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef cmsBool (* _cmsLockMutexFnPtrType)(cmsContext ContextID, void* mtx); 612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef void (* _cmsUnlockMutexFnPtrType)(cmsContext ContextID, void* mtx); 613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef struct { 615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov cmsPluginBase base; 616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsCreateMutexFnPtrType CreateMutexPtr; 618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsDestroyMutexFnPtrType DestroyMutexPtr; 619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsLockMutexFnPtrType LockMutexPtr; 620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov _cmsUnlockMutexFnPtrType UnlockMutexPtr; 621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} cmsPluginMutex; 623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 624ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void* CMSEXPORT _cmsCreateMutex(cmsContext ContextID); 625ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsDestroyMutex(cmsContext ContextID, void* mtx); 626ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI cmsBool CMSEXPORT _cmsLockMutex(cmsContext ContextID, void* mtx); 627ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCMSAPI void CMSEXPORT _cmsUnlockMutex(cmsContext ContextID, void* mtx); 628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef CMS_USE_CPP_API 631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# ifdef __cplusplus 632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov# endif 634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _lcms_plugin_H 637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 638