File indexing completed on 2025-08-27 09:55:30
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #ifndef _lcms_plugin_H
0032
0033
0034 #ifdef _MSC_VER
0035 # if (_MSC_VER >= 1400)
0036 # ifndef _CRT_SECURE_NO_DEPRECATE
0037 # define _CRT_SECURE_NO_DEPRECATE
0038 # endif
0039 # ifndef _CRT_SECURE_NO_WARNINGS
0040 # define _CRT_SECURE_NO_WARNINGS
0041 # endif
0042 # endif
0043 #endif
0044
0045 #ifndef _lcms2_H
0046 #include "lcms2.h"
0047 #endif
0048
0049
0050 #include <stdlib.h>
0051 #include <math.h>
0052 #include <stdarg.h>
0053 #include <memory.h>
0054 #include <string.h>
0055
0056
0057 #ifndef CMS_USE_CPP_API
0058 # ifdef __cplusplus
0059 extern "C" {
0060 # endif
0061 #endif
0062
0063
0064
0065
0066 #define VX 0
0067 #define VY 1
0068 #define VZ 2
0069
0070
0071 typedef struct {
0072 cmsFloat64Number n[3];
0073
0074 } cmsVEC3;
0075
0076
0077 typedef struct {
0078 cmsVEC3 v[3];
0079
0080 } cmsMAT3;
0081
0082 CMSAPI void CMSEXPORT _cmsVEC3init(cmsVEC3* r, cmsFloat64Number x, cmsFloat64Number y, cmsFloat64Number z);
0083 CMSAPI void CMSEXPORT _cmsVEC3minus(cmsVEC3* r, const cmsVEC3* a, const cmsVEC3* b);
0084 CMSAPI void CMSEXPORT _cmsVEC3cross(cmsVEC3* r, const cmsVEC3* u, const cmsVEC3* v);
0085 CMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3dot(const cmsVEC3* u, const cmsVEC3* v);
0086 CMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3length(const cmsVEC3* a);
0087 CMSAPI cmsFloat64Number CMSEXPORT _cmsVEC3distance(const cmsVEC3* a, const cmsVEC3* b);
0088
0089 CMSAPI void CMSEXPORT _cmsMAT3identity(cmsMAT3* a);
0090 CMSAPI cmsBool CMSEXPORT _cmsMAT3isIdentity(const cmsMAT3* a);
0091 CMSAPI void CMSEXPORT _cmsMAT3per(cmsMAT3* r, const cmsMAT3* a, const cmsMAT3* b);
0092 CMSAPI cmsBool CMSEXPORT _cmsMAT3inverse(const cmsMAT3* a, cmsMAT3* b);
0093 CMSAPI cmsBool CMSEXPORT _cmsMAT3solve(cmsVEC3* x, cmsMAT3* a, cmsVEC3* b);
0094 CMSAPI void CMSEXPORT _cmsMAT3eval(cmsVEC3* r, const cmsMAT3* a, const cmsVEC3* v);
0095
0096
0097
0098
0099 CMSAPI cmsHANDLE CMSEXPORT cmsMD5alloc(cmsContext ContextID);
0100 CMSAPI void CMSEXPORT cmsMD5add(cmsHANDLE Handle, const cmsUInt8Number* buf, cmsUInt32Number len);
0101 CMSAPI void CMSEXPORT cmsMD5finish(cmsProfileID* ProfileID, cmsHANDLE Handle);
0102
0103
0104
0105 CMSAPI void CMSEXPORT cmsSignalError(cmsContext ContextID, cmsUInt32Number ErrorCode, const char *ErrorText, ...);
0106
0107
0108
0109 CMSAPI void* CMSEXPORT _cmsMalloc(cmsContext ContextID, cmsUInt32Number size);
0110 CMSAPI void* CMSEXPORT _cmsMallocZero(cmsContext ContextID, cmsUInt32Number size);
0111 CMSAPI void* CMSEXPORT _cmsCalloc(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size);
0112 CMSAPI void* CMSEXPORT _cmsRealloc(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize);
0113 CMSAPI void CMSEXPORT _cmsFree(cmsContext ContextID, void* Ptr);
0114 CMSAPI void* CMSEXPORT _cmsDupMem(cmsContext ContextID, const void* Org, cmsUInt32Number size);
0115
0116
0117
0118 struct _cms_io_handler {
0119
0120 void* stream;
0121
0122 cmsContext ContextID;
0123 cmsUInt32Number UsedSpace;
0124 cmsUInt32Number ReportedSize;
0125 char PhysicalFile[cmsMAX_PATH];
0126
0127 cmsUInt32Number (* Read)(struct _cms_io_handler* iohandler, void *Buffer,
0128 cmsUInt32Number size,
0129 cmsUInt32Number count);
0130 cmsBool (* Seek)(struct _cms_io_handler* iohandler, cmsUInt32Number offset);
0131 cmsBool (* Close)(struct _cms_io_handler* iohandler);
0132 cmsUInt32Number (* Tell)(struct _cms_io_handler* iohandler);
0133 cmsBool (* Write)(struct _cms_io_handler* iohandler, cmsUInt32Number size,
0134 const void* Buffer);
0135 };
0136
0137
0138 CMSAPI cmsUInt16Number CMSEXPORT _cmsAdjustEndianess16(cmsUInt16Number Word);
0139 CMSAPI cmsUInt32Number CMSEXPORT _cmsAdjustEndianess32(cmsUInt32Number Value);
0140 CMSAPI void CMSEXPORT _cmsAdjustEndianess64(cmsUInt64Number* Result, cmsUInt64Number* QWord);
0141
0142
0143 CMSAPI cmsBool CMSEXPORT _cmsReadUInt8Number(cmsIOHANDLER* io, cmsUInt8Number* n);
0144 CMSAPI cmsBool CMSEXPORT _cmsReadUInt16Number(cmsIOHANDLER* io, cmsUInt16Number* n);
0145 CMSAPI cmsBool CMSEXPORT _cmsReadUInt32Number(cmsIOHANDLER* io, cmsUInt32Number* n);
0146 CMSAPI cmsBool CMSEXPORT _cmsReadFloat32Number(cmsIOHANDLER* io, cmsFloat32Number* n);
0147 CMSAPI cmsBool CMSEXPORT _cmsReadUInt64Number(cmsIOHANDLER* io, cmsUInt64Number* n);
0148 CMSAPI cmsBool CMSEXPORT _cmsRead15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number* n);
0149 CMSAPI cmsBool CMSEXPORT _cmsReadXYZNumber(cmsIOHANDLER* io, cmsCIEXYZ* XYZ);
0150 CMSAPI cmsBool CMSEXPORT _cmsReadUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, cmsUInt16Number* Array);
0151
0152 CMSAPI cmsBool CMSEXPORT _cmsWriteUInt8Number(cmsIOHANDLER* io, cmsUInt8Number n);
0153 CMSAPI cmsBool CMSEXPORT _cmsWriteUInt16Number(cmsIOHANDLER* io, cmsUInt16Number n);
0154 CMSAPI cmsBool CMSEXPORT _cmsWriteUInt32Number(cmsIOHANDLER* io, cmsUInt32Number n);
0155 CMSAPI cmsBool CMSEXPORT _cmsWriteFloat32Number(cmsIOHANDLER* io, cmsFloat32Number n);
0156 CMSAPI cmsBool CMSEXPORT _cmsWriteUInt64Number(cmsIOHANDLER* io, cmsUInt64Number* n);
0157 CMSAPI cmsBool CMSEXPORT _cmsWrite15Fixed16Number(cmsIOHANDLER* io, cmsFloat64Number n);
0158 CMSAPI cmsBool CMSEXPORT _cmsWriteXYZNumber(cmsIOHANDLER* io, const cmsCIEXYZ* XYZ);
0159 CMSAPI cmsBool CMSEXPORT _cmsWriteUInt16Array(cmsIOHANDLER* io, cmsUInt32Number n, const cmsUInt16Number* Array);
0160
0161
0162 typedef struct {
0163 cmsTagTypeSignature sig;
0164 cmsInt8Number reserved[4];
0165
0166 } _cmsTagBase;
0167
0168
0169 CMSAPI cmsTagTypeSignature CMSEXPORT _cmsReadTypeBase(cmsIOHANDLER* io);
0170 CMSAPI cmsBool CMSEXPORT _cmsWriteTypeBase(cmsIOHANDLER* io, cmsTagTypeSignature sig);
0171
0172
0173 CMSAPI cmsBool CMSEXPORT _cmsReadAlignment(cmsIOHANDLER* io);
0174 CMSAPI cmsBool CMSEXPORT _cmsWriteAlignment(cmsIOHANDLER* io);
0175
0176
0177 CMSAPI cmsBool CMSEXPORT _cmsIOPrintf(cmsIOHANDLER* io, const char* frm, ...);
0178
0179
0180 CMSAPI cmsFloat64Number CMSEXPORT _cms8Fixed8toDouble(cmsUInt16Number fixed8);
0181 CMSAPI cmsUInt16Number CMSEXPORT _cmsDoubleTo8Fixed8(cmsFloat64Number val);
0182
0183 CMSAPI cmsFloat64Number CMSEXPORT _cms15Fixed16toDouble(cmsS15Fixed16Number fix32);
0184 CMSAPI cmsS15Fixed16Number CMSEXPORT _cmsDoubleTo15Fixed16(cmsFloat64Number v);
0185
0186
0187 CMSAPI void CMSEXPORT _cmsEncodeDateTimeNumber(cmsDateTimeNumber *Dest, const struct tm *Source);
0188 CMSAPI void CMSEXPORT _cmsDecodeDateTimeNumber(const cmsDateTimeNumber *Source, struct tm *Dest);
0189
0190
0191
0192
0193 typedef void (* _cmsFreeUserDataFn)(cmsContext ContextID, void* Data);
0194 typedef void* (* _cmsDupUserDataFn)(cmsContext ContextID, const void* Data);
0195
0196
0197
0198
0199 #define cmsPluginMagicNumber 0x61637070
0200
0201 #define cmsPluginMemHandlerSig 0x6D656D48
0202 #define cmsPluginInterpolationSig 0x696E7048
0203 #define cmsPluginParametricCurveSig 0x70617248
0204 #define cmsPluginFormattersSig 0x66726D48
0205 #define cmsPluginTagTypeSig 0x74797048
0206 #define cmsPluginTagSig 0x74616748
0207 #define cmsPluginRenderingIntentSig 0x696E7448
0208 #define cmsPluginMultiProcessElementSig 0x6D706548
0209 #define cmsPluginOptimizationSig 0x6F707448
0210 #define cmsPluginTransformSig 0x7A666D48
0211 #define cmsPluginMutexSig 0x6D747A48
0212 #define cmsPluginParalellizationSig 0x70726C48
0213
0214 typedef struct _cmsPluginBaseStruct {
0215
0216 cmsUInt32Number Magic;
0217 cmsUInt32Number ExpectedVersion;
0218 cmsUInt32Number Type;
0219 struct _cmsPluginBaseStruct* Next;
0220
0221 } cmsPluginBase;
0222
0223
0224 #define MAX_TYPES_IN_LCMS_PLUGIN 20
0225
0226
0227
0228
0229
0230 typedef void* (* _cmsMallocFnPtrType)(cmsContext ContextID, cmsUInt32Number size);
0231 typedef void (* _cmsFreeFnPtrType)(cmsContext ContextID, void *Ptr);
0232 typedef void* (* _cmsReallocFnPtrType)(cmsContext ContextID, void* Ptr, cmsUInt32Number NewSize);
0233
0234 typedef void* (* _cmsMalloZerocFnPtrType)(cmsContext ContextID, cmsUInt32Number size);
0235 typedef void* (* _cmsCallocFnPtrType)(cmsContext ContextID, cmsUInt32Number num, cmsUInt32Number size);
0236 typedef void* (* _cmsDupFnPtrType)(cmsContext ContextID, const void* Org, cmsUInt32Number size);
0237
0238 typedef struct {
0239
0240 cmsPluginBase base;
0241
0242
0243 _cmsMallocFnPtrType MallocPtr;
0244 _cmsFreeFnPtrType FreePtr;
0245 _cmsReallocFnPtrType ReallocPtr;
0246
0247
0248 _cmsMalloZerocFnPtrType MallocZeroPtr;
0249 _cmsCallocFnPtrType CallocPtr;
0250 _cmsDupFnPtrType DupPtr;
0251
0252 } cmsPluginMemHandler;
0253
0254
0255
0256
0257
0258 struct _cms_interp_struc;
0259
0260
0261
0262
0263
0264
0265 typedef void (* _cmsInterpFn16)(CMSREGISTER const cmsUInt16Number Input[],
0266 CMSREGISTER cmsUInt16Number Output[],
0267 CMSREGISTER const struct _cms_interp_struc* p);
0268
0269
0270
0271
0272 typedef void (* _cmsInterpFnFloat)(cmsFloat32Number const Input[],
0273 cmsFloat32Number Output[],
0274 const struct _cms_interp_struc* p);
0275
0276
0277
0278
0279 typedef union {
0280 _cmsInterpFn16 Lerp16;
0281 _cmsInterpFnFloat LerpFloat;
0282 } cmsInterpFunction;
0283
0284
0285 #define CMS_LERP_FLAGS_16BITS 0x0000
0286 #define CMS_LERP_FLAGS_FLOAT 0x0001
0287 #define CMS_LERP_FLAGS_TRILINEAR 0x0100
0288
0289
0290 #define MAX_INPUT_DIMENSIONS 15
0291
0292 typedef struct _cms_interp_struc {
0293
0294 cmsContext ContextID;
0295
0296 cmsUInt32Number dwFlags;
0297 cmsUInt32Number nInputs;
0298 cmsUInt32Number nOutputs;
0299
0300 cmsUInt32Number nSamples[MAX_INPUT_DIMENSIONS];
0301 cmsUInt32Number Domain[MAX_INPUT_DIMENSIONS];
0302
0303 cmsUInt32Number opta[MAX_INPUT_DIMENSIONS];
0304
0305
0306
0307 const void *Table;
0308 cmsInterpFunction Interpolation;
0309
0310 } cmsInterpParams;
0311
0312
0313 typedef cmsInterpFunction (* cmsInterpFnFactory)(cmsUInt32Number nInputChannels, cmsUInt32Number nOutputChannels, cmsUInt32Number dwFlags);
0314
0315
0316 typedef struct {
0317 cmsPluginBase base;
0318
0319
0320 cmsInterpFnFactory InterpolatorsFactory;
0321
0322 } cmsPluginInterpolation;
0323
0324
0325
0326
0327
0328
0329 typedef cmsFloat64Number (* cmsParametricCurveEvaluator)(cmsInt32Number Type, const cmsFloat64Number Params[10], cmsFloat64Number R);
0330
0331
0332 typedef struct {
0333 cmsPluginBase base;
0334
0335 cmsUInt32Number nFunctions;
0336 cmsUInt32Number FunctionTypes[MAX_TYPES_IN_LCMS_PLUGIN];
0337 cmsUInt32Number ParameterCount[MAX_TYPES_IN_LCMS_PLUGIN];
0338
0339 cmsParametricCurveEvaluator Evaluator;
0340
0341 } cmsPluginParametricCurves;
0342
0343
0344
0345
0346
0347
0348 struct _cmstransform_struct;
0349
0350 typedef cmsUInt8Number* (* cmsFormatter16)(CMSREGISTER struct _cmstransform_struct* CMMcargo,
0351 CMSREGISTER cmsUInt16Number Values[],
0352 CMSREGISTER cmsUInt8Number* Buffer,
0353 CMSREGISTER cmsUInt32Number Stride);
0354
0355 typedef cmsUInt8Number* (* cmsFormatterFloat)(struct _cmstransform_struct* CMMcargo,
0356 cmsFloat32Number Values[],
0357 cmsUInt8Number* Buffer,
0358 cmsUInt32Number Stride);
0359
0360
0361 typedef union {
0362 cmsFormatter16 Fmt16;
0363 cmsFormatterFloat FmtFloat;
0364
0365 } cmsFormatter;
0366
0367 #define CMS_PACK_FLAGS_16BITS 0x0000
0368 #define CMS_PACK_FLAGS_FLOAT 0x0001
0369
0370 typedef enum { cmsFormatterInput=0, cmsFormatterOutput=1 } cmsFormatterDirection;
0371
0372 typedef cmsFormatter (* cmsFormatterFactory)(cmsUInt32Number Type,
0373 cmsFormatterDirection Dir,
0374 cmsUInt32Number dwFlags);
0375
0376
0377 typedef struct {
0378 cmsPluginBase base;
0379 cmsFormatterFactory FormattersFactory;
0380
0381 } cmsPluginFormatters;
0382
0383
0384
0385
0386
0387 typedef struct _cms_typehandler_struct {
0388
0389 cmsTagTypeSignature Signature;
0390
0391
0392 void * (* ReadPtr)(struct _cms_typehandler_struct* self,
0393 cmsIOHANDLER* io,
0394 cmsUInt32Number* nItems,
0395 cmsUInt32Number SizeOfTag);
0396
0397
0398 cmsBool (* WritePtr)(struct _cms_typehandler_struct* self,
0399 cmsIOHANDLER* io,
0400 void* Ptr,
0401 cmsUInt32Number nItems);
0402
0403
0404 void* (* DupPtr)(struct _cms_typehandler_struct* self,
0405 const void *Ptr,
0406 cmsUInt32Number n);
0407
0408
0409 void (* FreePtr)(struct _cms_typehandler_struct* self,
0410 void *Ptr);
0411
0412
0413 cmsContext ContextID;
0414 cmsUInt32Number ICCVersion;
0415
0416 } cmsTagTypeHandler;
0417
0418
0419 typedef struct {
0420 cmsPluginBase base;
0421 cmsTagTypeHandler Handler;
0422
0423 } cmsPluginTagType;
0424
0425
0426
0427
0428
0429
0430 typedef struct {
0431
0432 cmsUInt32Number ElemCount;
0433
0434
0435 cmsUInt32Number nSupportedTypes;
0436 cmsTagTypeSignature SupportedTypes[MAX_TYPES_IN_LCMS_PLUGIN];
0437
0438
0439 cmsTagTypeSignature (* DecideType)(cmsFloat64Number ICCVersion, const void *Data);
0440
0441 } cmsTagDescriptor;
0442
0443
0444 typedef struct {
0445 cmsPluginBase base;
0446
0447 cmsTagSignature Signature;
0448 cmsTagDescriptor Descriptor;
0449
0450 } cmsPluginTag;
0451
0452
0453
0454
0455
0456
0457
0458
0459 typedef cmsPipeline* (* cmsIntentFn)( cmsContext ContextID,
0460 cmsUInt32Number nProfiles,
0461 cmsUInt32Number Intents[],
0462 cmsHPROFILE hProfiles[],
0463 cmsBool BPC[],
0464 cmsFloat64Number AdaptationStates[],
0465 cmsUInt32Number dwFlags);
0466
0467
0468
0469 typedef struct {
0470 cmsPluginBase base;
0471 cmsUInt32Number Intent;
0472 cmsIntentFn Link;
0473 char Description[256];
0474
0475 } cmsPluginRenderingIntent;
0476
0477
0478
0479 CMSAPI cmsPipeline* CMSEXPORT _cmsDefaultICCintents(cmsContext ContextID,
0480 cmsUInt32Number nProfiles,
0481 cmsUInt32Number Intents[],
0482 cmsHPROFILE hProfiles[],
0483 cmsBool BPC[],
0484 cmsFloat64Number AdaptationStates[],
0485 cmsUInt32Number dwFlags);
0486
0487
0488
0489
0490
0491
0492 typedef void (* _cmsStageEvalFn) (const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage* mpe);
0493 typedef void*(* _cmsStageDupElemFn) (cmsStage* mpe);
0494 typedef void (* _cmsStageFreeElemFn) (cmsStage* mpe);
0495
0496
0497
0498 CMSAPI cmsStage* CMSEXPORT _cmsStageAllocPlaceholder(cmsContext ContextID,
0499 cmsStageSignature Type,
0500 cmsUInt32Number InputChannels,
0501 cmsUInt32Number OutputChannels,
0502 _cmsStageEvalFn EvalPtr,
0503 _cmsStageDupElemFn DupElemPtr,
0504 _cmsStageFreeElemFn FreePtr,
0505 void* Data);
0506 typedef struct {
0507 cmsPluginBase base;
0508 cmsTagTypeHandler Handler;
0509
0510 } cmsPluginMultiProcessElement;
0511
0512
0513
0514
0515
0516 typedef struct {
0517 cmsUInt32Number nCurves;
0518 cmsToneCurve** TheCurves;
0519
0520 } _cmsStageToneCurvesData;
0521
0522
0523 typedef struct {
0524 cmsFloat64Number* Double;
0525 cmsFloat64Number* Offset;
0526
0527 } _cmsStageMatrixData;
0528
0529
0530 typedef struct {
0531
0532 union {
0533 cmsUInt16Number* T;
0534 cmsFloat32Number* TFloat;
0535
0536 } Tab;
0537
0538 cmsInterpParams* Params;
0539 cmsUInt32Number nEntries;
0540 cmsBool HasFloatValues;
0541
0542 } _cmsStageCLutData;
0543
0544
0545
0546
0547
0548
0549
0550
0551 typedef cmsBool (* _cmsOPToptimizeFn)(cmsPipeline** Lut,
0552 cmsUInt32Number Intent,
0553 cmsUInt32Number* InputFormat,
0554 cmsUInt32Number* OutputFormat,
0555 cmsUInt32Number* dwFlags);
0556
0557
0558 typedef void (* _cmsPipelineEval16Fn)(CMSREGISTER const cmsUInt16Number In[],
0559 CMSREGISTER cmsUInt16Number Out[],
0560 const void* Data);
0561
0562
0563 typedef void (* _cmsPipelineEvalFloatFn)(const cmsFloat32Number In[],
0564 cmsFloat32Number Out[],
0565 const void* Data);
0566
0567
0568
0569
0570
0571 CMSAPI void CMSEXPORT _cmsPipelineSetOptimizationParameters(cmsPipeline* Lut,
0572 _cmsPipelineEval16Fn Eval16,
0573 void* PrivateData,
0574 _cmsFreeUserDataFn FreePrivateDataFn,
0575 _cmsDupUserDataFn DupPrivateDataFn);
0576
0577 typedef struct {
0578 cmsPluginBase base;
0579
0580
0581 _cmsOPToptimizeFn OptimizePtr;
0582
0583 } cmsPluginOptimization;
0584
0585
0586
0587
0588 typedef struct {
0589 cmsUInt32Number BytesPerLineIn;
0590 cmsUInt32Number BytesPerLineOut;
0591 cmsUInt32Number BytesPerPlaneIn;
0592 cmsUInt32Number BytesPerPlaneOut;
0593
0594 } cmsStride;
0595
0596 typedef void (* _cmsTransformFn)(struct _cmstransform_struct *CMMcargo,
0597 const void* InputBuffer,
0598 void* OutputBuffer,
0599 cmsUInt32Number Size,
0600 cmsUInt32Number Stride);
0601
0602
0603 typedef void (*_cmsTransform2Fn)(struct _cmstransform_struct *CMMcargo,
0604 const void* InputBuffer,
0605 void* OutputBuffer,
0606 cmsUInt32Number PixelsPerLine,
0607 cmsUInt32Number LineCount,
0608 const cmsStride* Stride);
0609
0610 typedef cmsBool (* _cmsTransformFactory)(_cmsTransformFn* xform,
0611 void** UserData,
0612 _cmsFreeUserDataFn* FreePrivateDataFn,
0613 cmsPipeline** Lut,
0614 cmsUInt32Number* InputFormat,
0615 cmsUInt32Number* OutputFormat,
0616 cmsUInt32Number* dwFlags);
0617
0618 typedef cmsBool (* _cmsTransform2Factory)(_cmsTransform2Fn* xform,
0619 void** UserData,
0620 _cmsFreeUserDataFn* FreePrivateDataFn,
0621 cmsPipeline** Lut,
0622 cmsUInt32Number* InputFormat,
0623 cmsUInt32Number* OutputFormat,
0624 cmsUInt32Number* dwFlags);
0625
0626
0627
0628 CMSAPI void CMSEXPORT _cmsSetTransformUserData(struct _cmstransform_struct *CMMcargo, void* ptr, _cmsFreeUserDataFn FreePrivateDataFn);
0629 CMSAPI void * CMSEXPORT _cmsGetTransformUserData(struct _cmstransform_struct *CMMcargo);
0630
0631
0632
0633 CMSAPI void CMSEXPORT _cmsGetTransformFormatters16 (struct _cmstransform_struct *CMMcargo, cmsFormatter16* FromInput, cmsFormatter16* ToOutput);
0634 CMSAPI void CMSEXPORT _cmsGetTransformFormattersFloat(struct _cmstransform_struct *CMMcargo, cmsFormatterFloat* FromInput, cmsFormatterFloat* ToOutput);
0635
0636
0637 CMSAPI cmsUInt32Number CMSEXPORT _cmsGetTransformFlags(struct _cmstransform_struct* CMMcargo);
0638
0639 typedef struct {
0640 cmsPluginBase base;
0641
0642
0643 union {
0644 _cmsTransformFactory legacy_xform;
0645 _cmsTransform2Factory xform;
0646 } factories;
0647
0648 } cmsPluginTransform;
0649
0650
0651
0652
0653 typedef void* (* _cmsCreateMutexFnPtrType)(cmsContext ContextID);
0654 typedef void (* _cmsDestroyMutexFnPtrType)(cmsContext ContextID, void* mtx);
0655 typedef cmsBool (* _cmsLockMutexFnPtrType)(cmsContext ContextID, void* mtx);
0656 typedef void (* _cmsUnlockMutexFnPtrType)(cmsContext ContextID, void* mtx);
0657
0658 typedef struct {
0659 cmsPluginBase base;
0660
0661 _cmsCreateMutexFnPtrType CreateMutexPtr;
0662 _cmsDestroyMutexFnPtrType DestroyMutexPtr;
0663 _cmsLockMutexFnPtrType LockMutexPtr;
0664 _cmsUnlockMutexFnPtrType UnlockMutexPtr;
0665
0666 } cmsPluginMutex;
0667
0668 CMSAPI void* CMSEXPORT _cmsCreateMutex(cmsContext ContextID);
0669 CMSAPI void CMSEXPORT _cmsDestroyMutex(cmsContext ContextID, void* mtx);
0670 CMSAPI cmsBool CMSEXPORT _cmsLockMutex(cmsContext ContextID, void* mtx);
0671 CMSAPI void CMSEXPORT _cmsUnlockMutex(cmsContext ContextID, void* mtx);
0672
0673
0674
0675
0676 CMSAPI _cmsTransform2Fn CMSEXPORT _cmsGetTransformWorker(struct _cmstransform_struct* CMMcargo);
0677 CMSAPI cmsInt32Number CMSEXPORT _cmsGetTransformMaxWorkers(struct _cmstransform_struct* CMMcargo);
0678 CMSAPI cmsUInt32Number CMSEXPORT _cmsGetTransformWorkerFlags(struct _cmstransform_struct* CMMcargo);
0679
0680
0681 #define CMS_GUESS_MAX_WORKERS -1
0682
0683 typedef struct {
0684 cmsPluginBase base;
0685
0686 cmsInt32Number MaxWorkers;
0687 cmsUInt32Number WorkerFlags;
0688 _cmsTransform2Fn SchedulerFn;
0689
0690 } cmsPluginParalellization;
0691
0692
0693 #ifndef CMS_USE_CPP_API
0694 # ifdef __cplusplus
0695 }
0696 # endif
0697 #endif
0698
0699 #define _lcms_plugin_H
0700 #endif