source-engine/common/quicktime_win32/CMICCProfile.h
FluorescentCIAAfricanAmerican 3bf9df6b27 1
2020-04-22 12:56:21 -04:00

1026 lines
48 KiB
C

/*
File: CMICCProfile.h
Contains: ICC Profile Format Definitions
Version: QuickTime 7.3
Copyright: (c) 2007 (c) 1994-2001 by Apple Computer, Inc., all rights reserved.
Bugs?: For bug reports, consult the following page on
the World Wide Web:
http://developer.apple.com/bugreporter/
*/
#ifndef __CMICCPROFILE__
#define __CMICCPROFILE__
#ifndef __MACTYPES__
#include <MacTypes.h>
#endif
#if PRAGMA_ONCE
#pragma once
#endif
#if PRAGMA_IMPORT
#pragma import on
#endif
#if PRAGMA_STRUCT_ALIGN
#pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
#pragma pack(2)
#endif
/* ICC Profile version constants */
enum {
cmICCProfileVersion4 = 0x04000000,
cmICCProfileVersion2 = 0x02000000,
cmICCProfileVersion21 = 0x02100000,
cmCS2ProfileVersion = cmICCProfileVersion2,
cmCS1ProfileVersion = 0x00000100 /* ColorSync 1.0 profile version */
};
/* Current Major version number */
enum {
cmProfileMajorVersionMask = (long)0xFF000000,
cmCurrentProfileMajorVersion = 0x02000000
};
/* magic cookie number for anonymous file ID */
enum {
cmMagicNumber = FOUR_CHAR_CODE('acsp')
};
/************************************************************************/
/*************** ColorSync 2.0 profile specification ********************/
/************************************************************************/
/**** flags field ****/
enum {
cmICCReservedFlagsMask = 0x0000FFFF, /* these bits of the flags field are defined and reserved by ICC */
cmEmbeddedMask = 0x00000001, /* if bit 0 is 0 then not embedded profile, if 1 then embedded profile */
cmEmbeddedUseMask = 0x00000002, /* if bit 1 is 0 then ok to use anywhere, if 1 then ok to use as embedded profile only */
cmCMSReservedFlagsMask = (long)0xFFFF0000, /* these bits of the flags field are defined and reserved by CMS vendor */
cmQualityMask = 0x00030000, /* if bits 16-17 is 0 then normal, if 1 then draft, if 2 then best */
cmInterpolationMask = 0x00040000, /* if bit 18 is 0 then interpolation, if 1 then lookup only */
cmGamutCheckingMask = 0x00080000 /* if bit 19 is 0 then create gamut checking info, if 1 then no gamut checking info */
};
/* copyright-protection flag options */
enum {
cmEmbeddedProfile = 0, /* 0 is not embedded profile, 1 is embedded profile */
cmEmbeddedUse = 1 /* 0 is to use anywhere, 1 is to use as embedded profile only */
};
/* speed and quality flag options */
enum {
cmNormalMode = 0, /* it uses the least significent two bits in the high word of flag */
cmDraftMode = 1, /* it should be evaulated like this: right shift 16 bits first, mask off the */
cmBestMode = 2 /* high 14 bits, and then compare with the enum to determine the option value */
};
/**** deviceAttributes fields ****/
/* deviceAttributes[0] is defined by and reserved for device vendors */
/* deviceAttributes[1] is defined by and reserved for ICC */
/* The following bits of deviceAttributes[1] are currently defined */
enum {
cmReflectiveTransparentMask = 0x00000001, /* if bit 0 is 0 then reflective media, if 1 then transparency media */
cmGlossyMatteMask = 0x00000002 /* if bit 1 is 0 then glossy, if 1 then matte */
};
/* device/media attributes element values */
enum {
cmReflective = 0, /* if bit 0 is 0 then reflective media, if 1 then transparency media */
cmGlossy = 1 /* if bit 1 is 0 then glossy, if 1 then matte */
};
/**** renderingIntent field ****/
enum {
cmPerceptual = 0, /* Photographic images */
cmRelativeColorimetric = 1, /* Logo Colors */
cmSaturation = 2, /* Business graphics */
cmAbsoluteColorimetric = 3 /* Logo Colors */
};
/* data type element values */
enum {
cmAsciiData = 0,
cmBinaryData = 1
};
/* screen encodings */
enum {
cmPrtrDefaultScreens = 0, /* Use printer default screens. 0 is false, 1 is ture */
cmLinesPer = 1 /* 0 is LinesPerCm, 1 is LinesPerInch */
};
/* 2.0 tag type information */
enum {
cmNumHeaderElements = 10
};
/* public tags */
enum {
cmAToB0Tag = FOUR_CHAR_CODE('A2B0'),
cmAToB1Tag = FOUR_CHAR_CODE('A2B1'),
cmAToB2Tag = FOUR_CHAR_CODE('A2B2'),
cmBlueColorantTag = FOUR_CHAR_CODE('bXYZ'),
cmBlueTRCTag = FOUR_CHAR_CODE('bTRC'),
cmBToA0Tag = FOUR_CHAR_CODE('B2A0'),
cmBToA1Tag = FOUR_CHAR_CODE('B2A1'),
cmBToA2Tag = FOUR_CHAR_CODE('B2A2'),
cmCalibrationDateTimeTag = FOUR_CHAR_CODE('calt'),
cmChromaticAdaptationTag = FOUR_CHAR_CODE('chad'),
cmCharTargetTag = FOUR_CHAR_CODE('targ'),
cmCopyrightTag = FOUR_CHAR_CODE('cprt'),
cmDeviceMfgDescTag = FOUR_CHAR_CODE('dmnd'),
cmDeviceModelDescTag = FOUR_CHAR_CODE('dmdd'),
cmGamutTag = FOUR_CHAR_CODE('gamt'),
cmGrayTRCTag = FOUR_CHAR_CODE('kTRC'),
cmGreenColorantTag = FOUR_CHAR_CODE('gXYZ'),
cmGreenTRCTag = FOUR_CHAR_CODE('gTRC'),
cmLuminanceTag = FOUR_CHAR_CODE('lumi'),
cmMeasurementTag = FOUR_CHAR_CODE('meas'),
cmMediaBlackPointTag = FOUR_CHAR_CODE('bkpt'),
cmMediaWhitePointTag = FOUR_CHAR_CODE('wtpt'),
cmNamedColorTag = FOUR_CHAR_CODE('ncol'),
cmNamedColor2Tag = FOUR_CHAR_CODE('ncl2'),
cmPreview0Tag = FOUR_CHAR_CODE('pre0'),
cmPreview1Tag = FOUR_CHAR_CODE('pre1'),
cmPreview2Tag = FOUR_CHAR_CODE('pre2'),
cmProfileDescriptionTag = FOUR_CHAR_CODE('desc'),
cmProfileSequenceDescTag = FOUR_CHAR_CODE('pseq'),
cmPS2CRD0Tag = FOUR_CHAR_CODE('psd0'),
cmPS2CRD1Tag = FOUR_CHAR_CODE('psd1'),
cmPS2CRD2Tag = FOUR_CHAR_CODE('psd2'),
cmPS2CRD3Tag = FOUR_CHAR_CODE('psd3'),
cmPS2CSATag = FOUR_CHAR_CODE('ps2s'),
cmPS2RenderingIntentTag = FOUR_CHAR_CODE('ps2i'),
cmRedColorantTag = FOUR_CHAR_CODE('rXYZ'),
cmRedTRCTag = FOUR_CHAR_CODE('rTRC'),
cmScreeningDescTag = FOUR_CHAR_CODE('scrd'),
cmScreeningTag = FOUR_CHAR_CODE('scrn'),
cmTechnologyTag = FOUR_CHAR_CODE('tech'),
cmUcrBgTag = FOUR_CHAR_CODE('bfd '),
cmViewingConditionsDescTag = FOUR_CHAR_CODE('vued'),
cmViewingConditionsTag = FOUR_CHAR_CODE('view')
};
/* custom tags */
enum {
cmPS2CRDVMSizeTag = FOUR_CHAR_CODE('psvm'),
cmVideoCardGammaTag = FOUR_CHAR_CODE('vcgt'),
cmMakeAndModelTag = FOUR_CHAR_CODE('mmod'),
cmProfileDescriptionMLTag = FOUR_CHAR_CODE('dscm'),
cmNativeDisplayInfoTag = FOUR_CHAR_CODE('ndin')
};
/* public type signatures */
enum {
cmSigCrdInfoType = FOUR_CHAR_CODE('crdi'),
cmSigCurveType = FOUR_CHAR_CODE('curv'),
cmSigDataType = FOUR_CHAR_CODE('data'),
cmSigDateTimeType = FOUR_CHAR_CODE('dtim'),
cmSigLut16Type = FOUR_CHAR_CODE('mft2'),
cmSigLut8Type = FOUR_CHAR_CODE('mft1'),
cmSigMeasurementType = FOUR_CHAR_CODE('meas'),
cmSigMultiFunctA2BType = FOUR_CHAR_CODE('mAB '),
cmSigMultiFunctB2AType = FOUR_CHAR_CODE('mBA '),
cmSigNamedColorType = FOUR_CHAR_CODE('ncol'),
cmSigNamedColor2Type = FOUR_CHAR_CODE('ncl2'),
cmSigParametricCurveType = FOUR_CHAR_CODE('para'),
cmSigProfileDescriptionType = FOUR_CHAR_CODE('desc'),
cmSigProfileSequenceDescType = FOUR_CHAR_CODE('pseq'),
cmSigScreeningType = FOUR_CHAR_CODE('scrn'),
cmSigS15Fixed16Type = FOUR_CHAR_CODE('sf32'),
cmSigSignatureType = FOUR_CHAR_CODE('sig '),
cmSigTextType = FOUR_CHAR_CODE('text'),
cmSigU16Fixed16Type = FOUR_CHAR_CODE('uf32'),
cmSigU1Fixed15Type = FOUR_CHAR_CODE('uf16'),
cmSigUInt8Type = FOUR_CHAR_CODE('ui08'),
cmSigUInt16Type = FOUR_CHAR_CODE('ui16'),
cmSigUInt32Type = FOUR_CHAR_CODE('ui32'),
cmSigUInt64Type = FOUR_CHAR_CODE('ui64'),
cmSigUcrBgType = FOUR_CHAR_CODE('bfd '),
cmSigUnicodeTextType = FOUR_CHAR_CODE('utxt'),
cmSigViewingConditionsType = FOUR_CHAR_CODE('view'),
cmSigXYZType = FOUR_CHAR_CODE('XYZ ')
};
/* custom type signatures */
enum {
cmSigPS2CRDVMSizeType = FOUR_CHAR_CODE('psvm'),
cmSigVideoCardGammaType = FOUR_CHAR_CODE('vcgt'),
cmSigMakeAndModelType = FOUR_CHAR_CODE('mmod'),
cmSigNativeDisplayInfoType = FOUR_CHAR_CODE('ndin'),
cmSigMultiLocalizedUniCodeType = FOUR_CHAR_CODE('mluc')
};
/* technology tag descriptions */
enum {
cmTechnologyDigitalCamera = FOUR_CHAR_CODE('dcam'),
cmTechnologyFilmScanner = FOUR_CHAR_CODE('fscn'),
cmTechnologyReflectiveScanner = FOUR_CHAR_CODE('rscn'),
cmTechnologyInkJetPrinter = FOUR_CHAR_CODE('ijet'),
cmTechnologyThermalWaxPrinter = FOUR_CHAR_CODE('twax'),
cmTechnologyElectrophotographicPrinter = FOUR_CHAR_CODE('epho'),
cmTechnologyElectrostaticPrinter = FOUR_CHAR_CODE('esta'),
cmTechnologyDyeSublimationPrinter = FOUR_CHAR_CODE('dsub'),
cmTechnologyPhotographicPaperPrinter = FOUR_CHAR_CODE('rpho'),
cmTechnologyFilmWriter = FOUR_CHAR_CODE('fprn'),
cmTechnologyVideoMonitor = FOUR_CHAR_CODE('vidm'),
cmTechnologyVideoCamera = FOUR_CHAR_CODE('vidc'),
cmTechnologyProjectionTelevision = FOUR_CHAR_CODE('pjtv'),
cmTechnologyCRTDisplay = FOUR_CHAR_CODE('CRT '),
cmTechnologyPMDisplay = FOUR_CHAR_CODE('PMD '),
cmTechnologyAMDisplay = FOUR_CHAR_CODE('AMD '),
cmTechnologyPhotoCD = FOUR_CHAR_CODE('KPCD'),
cmTechnologyPhotoImageSetter = FOUR_CHAR_CODE('imgs'),
cmTechnologyGravure = FOUR_CHAR_CODE('grav'),
cmTechnologyOffsetLithography = FOUR_CHAR_CODE('offs'),
cmTechnologySilkscreen = FOUR_CHAR_CODE('silk'),
cmTechnologyFlexography = FOUR_CHAR_CODE('flex')
};
/* Measurement type encodings */
/* Measurement Flare */
enum {
cmFlare0 = 0x00000000,
cmFlare100 = 0x00000001
};
/* Measurement Geometry */
enum {
cmGeometryUnknown = 0x00000000,
cmGeometry045or450 = 0x00000001,
cmGeometry0dord0 = 0x00000002
};
/* Standard Observer */
enum {
cmStdobsUnknown = 0x00000000,
cmStdobs1931TwoDegrees = 0x00000001,
cmStdobs1964TenDegrees = 0x00000002
};
/* Standard Illuminant */
enum {
cmIlluminantUnknown = 0x00000000,
cmIlluminantD50 = 0x00000001,
cmIlluminantD65 = 0x00000002,
cmIlluminantD93 = 0x00000003,
cmIlluminantF2 = 0x00000004,
cmIlluminantD55 = 0x00000005,
cmIlluminantA = 0x00000006,
cmIlluminantEquiPower = 0x00000007,
cmIlluminantF8 = 0x00000008
};
/* Spot Function Value */
enum {
cmSpotFunctionUnknown = 0,
cmSpotFunctionDefault = 1,
cmSpotFunctionRound = 2,
cmSpotFunctionDiamond = 3,
cmSpotFunctionEllipse = 4,
cmSpotFunctionLine = 5,
cmSpotFunctionSquare = 6,
cmSpotFunctionCross = 7
};
/* Color Space Signatures */
enum {
cmXYZData = FOUR_CHAR_CODE('XYZ '),
cmLabData = FOUR_CHAR_CODE('Lab '),
cmLuvData = FOUR_CHAR_CODE('Luv '),
cmYCbCrData = FOUR_CHAR_CODE('YCbr'),
cmYxyData = FOUR_CHAR_CODE('Yxy '),
cmRGBData = FOUR_CHAR_CODE('RGB '),
cmSRGBData = FOUR_CHAR_CODE('sRGB'),
cmGrayData = FOUR_CHAR_CODE('GRAY'),
cmHSVData = FOUR_CHAR_CODE('HSV '),
cmHLSData = FOUR_CHAR_CODE('HLS '),
cmCMYKData = FOUR_CHAR_CODE('CMYK'),
cmCMYData = FOUR_CHAR_CODE('CMY '),
cmMCH5Data = FOUR_CHAR_CODE('MCH5'),
cmMCH6Data = FOUR_CHAR_CODE('MCH6'),
cmMCH7Data = FOUR_CHAR_CODE('MCH7'),
cmMCH8Data = FOUR_CHAR_CODE('MCH8'),
cm3CLRData = FOUR_CHAR_CODE('3CLR'),
cm4CLRData = FOUR_CHAR_CODE('4CLR'),
cm5CLRData = FOUR_CHAR_CODE('5CLR'),
cm6CLRData = FOUR_CHAR_CODE('6CLR'),
cm7CLRData = FOUR_CHAR_CODE('7CLR'),
cm8CLRData = FOUR_CHAR_CODE('8CLR'),
cm9CLRData = FOUR_CHAR_CODE('9CLR'),
cm10CLRData = FOUR_CHAR_CODE('ACLR'),
cm11CLRData = FOUR_CHAR_CODE('BCLR'),
cm12CLRData = FOUR_CHAR_CODE('CCLR'),
cm13CLRData = FOUR_CHAR_CODE('DCLR'),
cm14CLRData = FOUR_CHAR_CODE('ECLR'),
cm15CLRData = FOUR_CHAR_CODE('FCLR'),
cmNamedData = FOUR_CHAR_CODE('NAME')
};
/* profileClass enumerations */
enum {
cmInputClass = FOUR_CHAR_CODE('scnr'),
cmDisplayClass = FOUR_CHAR_CODE('mntr'),
cmOutputClass = FOUR_CHAR_CODE('prtr'),
cmLinkClass = FOUR_CHAR_CODE('link'),
cmAbstractClass = FOUR_CHAR_CODE('abst'),
cmColorSpaceClass = FOUR_CHAR_CODE('spac'),
cmNamedColorClass = FOUR_CHAR_CODE('nmcl')
};
/* platform enumerations */
enum {
cmMacintosh = FOUR_CHAR_CODE('APPL'),
cmMicrosoft = FOUR_CHAR_CODE('MSFT'),
cmSolaris = FOUR_CHAR_CODE('SUNW'),
cmSiliconGraphics = FOUR_CHAR_CODE('SGI '),
cmTaligent = FOUR_CHAR_CODE('TGNT')
};
/* parametric curve type enumerations */
enum {
cmParametricType0 = 0, /* Y = X^gamma */
cmParametricType1 = 1, /* Y = (aX+b)^gamma [X>=-b/a], Y = 0 [X<-b/a] */
cmParametricType2 = 2, /* Y = (aX+b)^gamma + c [X>=-b/a], Y = c [X<-b/a] */
cmParametricType3 = 3, /* Y = (aX+b)^gamma [X>=d], Y = cX [X<d] */
cmParametricType4 = 4 /* Y = (aX+b)^gamma + e [X>=d], Y = cX+f [X<d] */
};
/* ColorSync 1.0 elements */
enum {
cmCS1ChromTag = FOUR_CHAR_CODE('chrm'),
cmCS1TRCTag = FOUR_CHAR_CODE('trc '),
cmCS1NameTag = FOUR_CHAR_CODE('name'),
cmCS1CustTag = FOUR_CHAR_CODE('cust')
};
/* General element data types */
struct CMDateTime {
UInt16 year;
UInt16 month;
UInt16 dayOfTheMonth;
UInt16 hours;
UInt16 minutes;
UInt16 seconds;
};
typedef struct CMDateTime CMDateTime;
struct CMFixedXYColor {
Fixed x;
Fixed y;
};
typedef struct CMFixedXYColor CMFixedXYColor;
struct CMFixedXYZColor {
Fixed X;
Fixed Y;
Fixed Z;
};
typedef struct CMFixedXYZColor CMFixedXYZColor;
typedef UInt16 CMXYZComponent;
struct CMXYZColor {
CMXYZComponent X;
CMXYZComponent Y;
CMXYZComponent Z;
};
typedef struct CMXYZColor CMXYZColor;
/* Typedef for Profile MD5 message digest */
/* Derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm */
typedef unsigned char CMProfileMD5[16];
typedef CMProfileMD5 * CMProfileMD5Ptr;
/*
* CMProfileMD5AreEqual()
*
* Availability: available as macro/inline
*/
#ifdef __cplusplus
inline Boolean CMProfileMD5AreEqual(CMProfileMD5 a, CMProfileMD5 b)
{
return ((long*)a)[0]==((long*)b)[0] && ((long*)a)[1]==((long*)b)[1] &&
((long*)a)[2]==((long*)b)[2] && ((long*)a)[3]==((long*)b)[3];
}
#else
#define CMProfileMD5AreEqual(a, b) (\
((long*)a)[0]==((long*)b)[0] && ((long*)a)[1]==((long*)b)[1] && \
((long*)a)[2]==((long*)b)[2] && ((long*)a)[3]==((long*)b)[3])
#endif
struct CM2Header {
UInt32 size; /* This is the total size of the Profile */
OSType CMMType; /* CMM signature, Registered with CS2 consortium */
UInt32 profileVersion; /* Version of CMProfile format */
OSType profileClass; /* input, display, output, devicelink, abstract, or color conversion profile type */
OSType dataColorSpace; /* color space of data */
OSType profileConnectionSpace; /* profile connection color space */
CMDateTime dateTime; /* date and time of profile creation */
OSType CS2profileSignature; /* 'acsp' constant ColorSync 2.0 file ID */
OSType platform; /* primary profile platform, Registered with CS2 consortium */
UInt32 flags; /* profile flags */
OSType deviceManufacturer; /* Registered with ICC consortium */
UInt32 deviceModel; /* Registered with ICC consortium */
UInt32 deviceAttributes[2]; /* Attributes[0] is for device vendors, [1] is for ICC */
UInt32 renderingIntent; /* preferred rendering intent of tagged object */
CMFixedXYZColor white; /* profile illuminant */
OSType creator; /* profile creator */
char reserved[44]; /* reserved for future use */
};
typedef struct CM2Header CM2Header;
struct CM4Header {
UInt32 size; /* This is the total size of the Profile */
OSType CMMType; /* CMM signature, Registered with CS2 consortium */
UInt32 profileVersion; /* Version of CMProfile format */
OSType profileClass; /* input, display, output, devicelink, abstract, or color conversion profile type */
OSType dataColorSpace; /* color space of data */
OSType profileConnectionSpace; /* profile connection color space */
CMDateTime dateTime; /* date and time of profile creation */
OSType CS2profileSignature; /* 'acsp' constant ColorSync 2.0 file ID */
OSType platform; /* primary profile platform, Registered with CS2 consortium */
UInt32 flags; /* profile flags */
OSType deviceManufacturer; /* Registered with ICC consortium */
UInt32 deviceModel; /* Registered with ICC consortium */
UInt32 deviceAttributes[2]; /* Attributes[0] is for device vendors, [1] is for ICC */
UInt32 renderingIntent; /* preferred rendering intent of tagged object */
CMFixedXYZColor white; /* profile illuminant */
OSType creator; /* profile creator */
CMProfileMD5 digest; /* Profile message digest */
char reserved[28]; /* reserved for future use */
};
typedef struct CM4Header CM4Header;
struct CMTagRecord {
OSType tag; /* Registered with CS2 consortium */
UInt32 elementOffset; /* Relative to start of CMProfile */
UInt32 elementSize;
};
typedef struct CMTagRecord CMTagRecord;
struct CMTagElemTable {
UInt32 count;
CMTagRecord tagList[1]; /* variable size, determined by count */
};
typedef struct CMTagElemTable CMTagElemTable;
struct CM2Profile {
CM2Header header;
CMTagElemTable tagTable;
char elemData[1]; /* variable size data for tagged element storage */
};
typedef struct CM2Profile CM2Profile;
typedef CM2Profile * CM2ProfilePtr;
typedef CM2ProfilePtr * CM2ProfileHandle;
/* Tag Type Definitions */
struct CMAdaptationMatrixType {
OSType typeDescriptor; /* 'sf32' = cmSigS15Fixed16Type */
unsigned long reserved; /* fill with 0x00 */
Fixed adaptationMatrix[9]; /* fixed size of nine matrix entries */
};
typedef struct CMAdaptationMatrixType CMAdaptationMatrixType;
struct CMCurveType {
OSType typeDescriptor; /* 'curv' = cmSigCurveType */
UInt32 reserved; /* fill with 0x00 */
UInt32 countValue; /* number of entries in table that follows */
UInt16 data[1]; /* variable size, determined by countValue */
};
typedef struct CMCurveType CMCurveType;
struct CMDataType {
OSType typeDescriptor; /* 'data' = cmSigDataType*/
UInt32 reserved; /* fill with 0x00 */
UInt32 dataFlag; /* 0 = ASCII, 1 = binary */
char data[1]; /* variable size, determined by tag element size */
};
typedef struct CMDataType CMDataType;
struct CMDateTimeType {
OSType typeDescriptor; /* 'dtim' = cmSigDateTimeType */
UInt32 reserved; /* fill with 0x00 */
CMDateTime dateTime; /* */
};
typedef struct CMDateTimeType CMDateTimeType;
struct CMLut16Type {
OSType typeDescriptor; /* 'mft2' = cmSigLut16Type */
UInt32 reserved; /* fill with 0x00 */
UInt8 inputChannels; /* Number of input channels */
UInt8 outputChannels; /* Number of output channels */
UInt8 gridPoints; /* Number of clutTable grid points */
UInt8 reserved2; /* fill with 0x00 */
Fixed matrix[3][3]; /* */
UInt16 inputTableEntries; /* Number of entries in 1-D input luts */
UInt16 outputTableEntries; /* Number of entries in 1-D output luts */
UInt16 inputTable[1]; /* variable size, determined by inputChannels*inputTableEntries */
#if 0 /* NOTE: Field offsets are variable from here on. */
/* In order to correctly reflect the actual format of this tag, some of the fields in */
/* this structure have been removed because they follow an array field of variable size. */
/* As a result, the size of this structure has changed from previous versions of this interface. */
/* Code that relies on sizeof(CMLut16Type) should be changed. */
UInt16 CLUT[]; /* variable size, determined by (gridPoints^inputChannels)*outputChannels */
UInt16 outputTable[]; /* variable size, determined by outputChannels*outputTableEntries */
#endif
};
typedef struct CMLut16Type CMLut16Type;
struct CMLut8Type {
OSType typeDescriptor; /* 'mft1' = cmSigLut8Type */
UInt32 reserved; /* fill with 0x00 */
UInt8 inputChannels; /* Number of input channels */
UInt8 outputChannels; /* Number of output channels */
UInt8 gridPoints; /* Number of clutTable grid points */
UInt8 reserved2; /* fill with 0x00 */
Fixed matrix[3][3]; /* */
UInt8 inputTable[1]; /* variable size, determined by inputChannels*256 */
#if 0 /* NOTE: Field offsets are variable from here on. */
/* In order to correctly reflect the actual format of this tag, some of the fields in */
/* this structure have been removed because they follow an array field of variable size. */
/* As a result, the size of this structure has changed from previous versions of this interface. */
/* Code that relies on sizeof(CMLut8Type) should be changed. */
UInt8 CLUT[]; /* variable size, determined by (gridPoints^inputChannels)*outputChannels */
UInt8 outputTable[]; /* variable size, determined by outputChannels*256 */
#endif
};
typedef struct CMLut8Type CMLut8Type;
struct CMMultiFunctLutType {
OSType typeDescriptor; /* 'mAB ' = cmSigMultiFunctA2BType or 'mBA ' = cmSigMultiFunctB2AType */
UInt32 reserved; /* fill with 0x00 */
UInt8 inputChannels; /* Number of input channels */
UInt8 outputChannels; /* Number of output channels */
UInt16 reserved2; /* fill with 0x00 */
UInt32 offsetBcurves; /* offset to first "B" curve */
UInt32 offsetMatrix; /* offset to 3x4 matrix */
UInt32 offsetMcurves; /* offset to first "M" curve */
UInt32 offsetCLUT; /* offset to multi-dimensional LUT of type CMMultiFunctCLUTType */
UInt32 offsetAcurves; /* offset to first "A" curve */
UInt8 data[1]; /* variable size */
};
typedef struct CMMultiFunctLutType CMMultiFunctLutType;
typedef CMMultiFunctLutType CMMultiFunctLutA2BType;
typedef CMMultiFunctLutType CMMultiFunctLutB2AType;
struct CMMultiFunctCLUTType {
UInt8 gridPoints[16]; /* grigpoints for each input channel dimension (remaining are 0) */
UInt8 entrySize; /* bytes per lut enrty (1 or 2) */
UInt8 reserved[3]; /* fill with 0x00 */
UInt8 data[1]; /* variable size, determined by above */
};
typedef struct CMMultiFunctCLUTType CMMultiFunctCLUTType;
struct CMMeasurementType {
OSType typeDescriptor; /* 'meas' = cmSigMeasurementType */
UInt32 reserved; /* fill with 0x00 */
UInt32 standardObserver; /* cmStdobsUnknown, cmStdobs1931TwoDegrees, cmStdobs1964TenDegrees */
CMFixedXYZColor backingXYZ; /* absolute XYZ values of backing */
UInt32 geometry; /* cmGeometryUnknown, cmGeometry045or450 (0/45), cmGeometry0dord0 (0/d or d/0) */
UInt32 flare; /* cmFlare0, cmFlare100 */
UInt32 illuminant; /* cmIlluminantUnknown, cmIlluminantD50, ... */
};
typedef struct CMMeasurementType CMMeasurementType;
struct CMNamedColorType {
OSType typeDescriptor; /* 'ncol' = cmSigNamedColorType */
UInt32 reserved; /* fill with 0x00 */
UInt32 vendorFlag; /* */
UInt32 count; /* count of named colors in array that follows */
UInt8 prefixName[1]; /* variable size, max = 32 */
#if 0 /* NOTE: Field offsets are variable from here on. */
/* In order to correctly reflect the actual format of this tag, some of the fields in */
/* this structure have been removed because they follow an array field of variable size. */
/* As a result, the size of this structure has changed from previous versions of this interface. */
/* Code that relies on sizeof(CMNamedColorType) should be changed. */
UInt8 suffixName[]; /* variable size, max = 32 */
struct {
UInt8 rootName[]; /* variable size, max = 32 */
UInt8 colorCoords[]; /* variable size */
} colorName[]; /* variable size */
#endif
};
typedef struct CMNamedColorType CMNamedColorType;
struct CMNamedColor2EntryType {
UInt8 rootName[32]; /* 32 byte field. 7 bit ASCII null terminated */
UInt16 PCSColorCoords[3]; /* Lab or XYZ color */
UInt16 DeviceColorCoords[1]; /* variable size */
};
typedef struct CMNamedColor2EntryType CMNamedColor2EntryType;
struct CMNamedColor2Type {
OSType typeDescriptor; /* 'ncl2' = cmSigNamedColor2Type */
UInt32 reserved; /* fill with 0x00 */
UInt32 vendorFlag; /* lower 16 bits reserved for ICC use */
UInt32 count; /* count of named colors in array that follows */
UInt32 deviceChannelCount; /* number of device channels, 0 indicates no device value available */
UInt8 prefixName[32]; /* Fixed 32 byte size. 7 bit ASCII null terminated */
UInt8 suffixName[32]; /* Fixed 32 byte size. 7 bit ASCII null terminated */
char data[1]; /* variable size data for CMNamedColor2EntryType */
};
typedef struct CMNamedColor2Type CMNamedColor2Type;
struct CMNativeDisplayInfo {
UInt32 dataSize; /* Size of this structure */
CMFixedXYColor redPhosphor; /* Phosphors - native cromaticity values of the display */
CMFixedXYColor greenPhosphor;
CMFixedXYColor bluePhosphor;
CMFixedXYColor whitePoint;
Fixed redGammaValue; /* Gammas - native gamma values of the display */
Fixed greenGammaValue;
Fixed blueGammaValue;
/* Gamma tables - if if gammaChannels is not zero, */
/* native gamma tables are preferred over values */
/* redGammaValue, greenGammaValue, blueGammaValue */
UInt16 gammaChannels; /* # of gamma channels (1 or 3) */
UInt16 gammaEntryCount; /* 1-based number of entries per channel */
UInt16 gammaEntrySize; /* size in bytes of each entry */
char gammaData[1]; /* variable size, determined by channels*entryCount*entrySize */
};
typedef struct CMNativeDisplayInfo CMNativeDisplayInfo;
struct CMNativeDisplayInfoType {
OSType typeDescriptor; /* 'ndin' = cmSigNativeDisplayInfoType */
unsigned long reserved; /* fill with 0x00 */
CMNativeDisplayInfo nativeDisplayInfo; /* data of type CMNativeDisplayInfo */
};
typedef struct CMNativeDisplayInfoType CMNativeDisplayInfoType;
struct CMParametricCurveType {
OSType typeDescriptor; /* 'para' = cmSigParametricCurveType */
UInt32 reserved; /* fill with 0x00 */
UInt16 functionType; /* cmParametricType0, cmParametricType1, etc. */
UInt16 reserved2; /* fill with 0x00 */
Fixed value[1]; /* variable size, determined by functionType */
};
typedef struct CMParametricCurveType CMParametricCurveType;
struct CMTextDescriptionType {
OSType typeDescriptor; /* 'desc' = cmSigProfileDescriptionType */
UInt32 reserved; /* fill with 0x00 */
UInt32 ASCIICount; /* Count of bytes (including null terminator) */
UInt8 ASCIIName[2]; /* variable size, determined by ASCIICount. 7 bit ASCII null terminated */
#if 0 /* NOTE: Field offsets are variable from here on. */
/* In order to correctly reflect the actual format of this tag, some of the fields in */
/* this structure have been removed because they follow an array field of variable size. */
/* As a result, the size of this structure has changed from previous versions of this interface. */
/* Code that relies on sizeof(CMTextDescriptionType) should be changed. */
UInt32 UniCodeCode; /* Unused */
UInt32 UniCodeCount; /* Count of 2-byte characters (including null terminator) */
UInt8 UniCodeName[]; /* variable size, determined by UniCodeCount */
SInt16 ScriptCodeCode; /* Mac-defined script code */
UInt8 ScriptCodeCount; /* Count of bytes (including null terminator) */
UInt8 ScriptCodeName[]; /* variable size, determined by ScriptCodeCount */
#endif
};
typedef struct CMTextDescriptionType CMTextDescriptionType;
struct CMTextType {
OSType typeDescriptor; /* 'text' = cmSigTextType */
UInt32 reserved; /* fill with 0x00 */
UInt8 text[1]; /* variable size, determined by tag element size */
};
typedef struct CMTextType CMTextType;
struct CMUnicodeTextType {
OSType typeDescriptor; /* 'utxt' = cmSigUnicodeTextType */
UInt32 reserved; /* fill with 0x00 */
UniChar text[1]; /* variable size, determined by tag element size */
};
typedef struct CMUnicodeTextType CMUnicodeTextType;
struct CMScreeningChannelRec {
Fixed frequency;
Fixed angle;
UInt32 spotFunction;
};
typedef struct CMScreeningChannelRec CMScreeningChannelRec;
struct CMScreeningType {
OSType typeDescriptor; /* 'scrn' = cmSigScreeningType */
UInt32 reserved; /* fill with 0x00 */
UInt32 screeningFlag; /* bit 0 : use printer default screens, bit 1 : inch/cm */
UInt32 channelCount; /* */
CMScreeningChannelRec channelInfo[1]; /* variable size, determined by channelCount */
};
typedef struct CMScreeningType CMScreeningType;
struct CMSignatureType {
OSType typeDescriptor; /* 'sig ' = cmSigSignatureType */
UInt32 reserved; /* fill with 0x00 */
OSType signature;
};
typedef struct CMSignatureType CMSignatureType;
struct CMS15Fixed16ArrayType {
OSType typeDescriptor; /* 'sf32' = cmSigS15Fixed16Type */
UInt32 reserved; /* fill with 0x00 */
Fixed value[1]; /* variable size, determined by tag element size */
};
typedef struct CMS15Fixed16ArrayType CMS15Fixed16ArrayType;
struct CMU16Fixed16ArrayType {
OSType typeDescriptor; /* 'uf32' = cmSigU16Fixed16Type */
UInt32 reserved; /* fill with 0x00 */
UInt32 value[1]; /* variable size, determined by tag element size */
};
typedef struct CMU16Fixed16ArrayType CMU16Fixed16ArrayType;
struct CMUInt8ArrayType {
OSType typeDescriptor; /* 'ui08' = cmSigUInt8Type */
UInt32 reserved; /* fill with 0x00 */
UInt8 value[1]; /* variable size, determined by tag element size */
};
typedef struct CMUInt8ArrayType CMUInt8ArrayType;
struct CMUInt16ArrayType {
OSType typeDescriptor; /* 'ui16' = cmSigUInt16Type */
UInt32 reserved; /* fill with 0x00 */
UInt16 value[1]; /* variable size, determined by tag element size */
};
typedef struct CMUInt16ArrayType CMUInt16ArrayType;
struct CMUInt32ArrayType {
OSType typeDescriptor; /* 'ui32' = cmSigUInt32Type */
UInt32 reserved; /* fill with 0x00 */
UInt32 value[1]; /* variable size, determined by tag element size */
};
typedef struct CMUInt32ArrayType CMUInt32ArrayType;
struct CMUInt64ArrayType {
OSType typeDescriptor; /* 'ui64' = cmSigUInt64Type */
UInt32 reserved; /* fill with 0x00 */
UInt32 value[1]; /* variable size, determined by tag element size */
};
typedef struct CMUInt64ArrayType CMUInt64ArrayType;
struct CMViewingConditionsType {
OSType typeDescriptor; /* 'view' = cmSigViewingConditionsType */
UInt32 reserved; /* fill with 0x00 */
CMFixedXYZColor illuminant; /* absolute XYZs of illuminant in cd/m^2 */
CMFixedXYZColor surround; /* absolute XYZs of surround in cd/m^2 */
UInt32 stdIlluminant; /* see definitions of std illuminants */
};
typedef struct CMViewingConditionsType CMViewingConditionsType;
struct CMXYZType {
OSType typeDescriptor; /* 'XYZ ' = cmSigXYZType */
UInt32 reserved; /* fill with 0x00 */
CMFixedXYZColor XYZ[1]; /* variable size, determined by tag element size */
};
typedef struct CMXYZType CMXYZType;
struct CMProfileSequenceDescType {
OSType typeDescriptor; /* 'pseq' = cmProfileSequenceDescTag */
UInt32 reserved; /* fill with 0x00 */
UInt32 count; /* Number of descriptions */
char data[1]; /* variable size data explained in ICC spec */
};
typedef struct CMProfileSequenceDescType CMProfileSequenceDescType;
struct CMUcrBgType {
OSType typeDescriptor; /* 'bfd ' = cmSigUcrBgType */
UInt32 reserved; /* fill with 0x00 */
UInt32 ucrCount; /* Number of UCR entries */
UInt16 ucrValues[1]; /* variable size, determined by ucrCount */
#if 0 /* NOTE: Field offsets are variable from here on. */
/* In order to correctly reflect the actual format of this tag, some of the fields in */
/* this structure have been removed because they follow an array field of variable size. */
/* As a result, the size of this structure has changed from previous versions of this interface. */
/* Code that relies on sizeof(CMUcrBgType) should be changed. */
UInt32 bgCount; /* Number of BG entries */
UInt16 bgValues[]; /* variable size, determined by bgCount */
UInt8 ucrbgASCII[]; /* null terminated ASCII string */
#endif
};
typedef struct CMUcrBgType CMUcrBgType;
/* Private Tag Type Definitions */
struct CMIntentCRDVMSize {
long renderingIntent; /* rendering intent */
UInt32 VMSize; /* VM size taken up by the CRD */
};
typedef struct CMIntentCRDVMSize CMIntentCRDVMSize;
struct CMPS2CRDVMSizeType {
OSType typeDescriptor; /* 'psvm' = cmSigPS2CRDVMSizeType */
UInt32 reserved; /* fill with 0x00 */
UInt32 count; /* number of intent entries */
CMIntentCRDVMSize intentCRD[1]; /* variable size, determined by count */
};
typedef struct CMPS2CRDVMSizeType CMPS2CRDVMSizeType;
enum {
cmVideoCardGammaTableType = 0,
cmVideoCardGammaFormulaType = 1
};
struct CMVideoCardGammaTable {
UInt16 channels; /* # of gamma channels (1 or 3) */
UInt16 entryCount; /* 1-based number of entries per channel */
UInt16 entrySize; /* size in bytes of each entry */
char data[1]; /* variable size, determined by channels*entryCount*entrySize */
};
typedef struct CMVideoCardGammaTable CMVideoCardGammaTable;
struct CMVideoCardGammaFormula {
Fixed redGamma; /* must be > 0.0 */
Fixed redMin; /* must be > 0.0 and < 1.0 */
Fixed redMax; /* must be > 0.0 and < 1.0 */
Fixed greenGamma; /* must be > 0.0 */
Fixed greenMin; /* must be > 0.0 and < 1.0 */
Fixed greenMax; /* must be > 0.0 and < 1.0 */
Fixed blueGamma; /* must be > 0.0 */
Fixed blueMin; /* must be > 0.0 and < 1.0 */
Fixed blueMax; /* must be > 0.0 and < 1.0 */
};
typedef struct CMVideoCardGammaFormula CMVideoCardGammaFormula;
struct CMVideoCardGamma {
UInt32 tagType;
union {
CMVideoCardGammaTable table;
CMVideoCardGammaFormula formula;
} u;
};
typedef struct CMVideoCardGamma CMVideoCardGamma;
struct CMVideoCardGammaType {
OSType typeDescriptor; /* 'vcgt' = cmSigVideoCardGammaType */
UInt32 reserved; /* fill with 0x00 */
CMVideoCardGamma gamma;
};
typedef struct CMVideoCardGammaType CMVideoCardGammaType;
struct CMMakeAndModel {
OSType manufacturer;
UInt32 model;
UInt32 serialNumber;
UInt32 manufactureDate;
UInt32 reserved1; /* fill with 0x00 */
UInt32 reserved2; /* fill with 0x00 */
UInt32 reserved3; /* fill with 0x00 */
UInt32 reserved4; /* fill with 0x00 */
};
typedef struct CMMakeAndModel CMMakeAndModel;
struct CMMakeAndModelType {
OSType typeDescriptor; /* 'mmod' = cmSigMakeAndModelType */
UInt32 reserved; /* fill with 0x00 */
CMMakeAndModel makeAndModel;
};
typedef struct CMMakeAndModelType CMMakeAndModelType;
struct CMMultiLocalizedUniCodeEntryRec {
char languageCode[2]; /* language code from ISO-639 */
char regionCode[2]; /* region code from ISO-3166 */
UInt32 textLength; /* the length in bytes of the string */
UInt32 textOffset; /* the offset from the start of tag in bytes */
};
typedef struct CMMultiLocalizedUniCodeEntryRec CMMultiLocalizedUniCodeEntryRec;
struct CMMultiLocalizedUniCodeType {
OSType typeDescriptor; /* 'mluc' = cmSigMultiLocalizedUniCodeType */
UInt32 reserved; /* fill with 0x00 */
UInt32 entryCount; /* 1-based number of name records that follow */
UInt32 entrySize; /* size in bytes of name records that follow */
/* variable-length data for storage of CMMultiLocalizedUniCodeEntryRec */
/* variable-length data for storage of Unicode strings*/
};
typedef struct CMMultiLocalizedUniCodeType CMMultiLocalizedUniCodeType;
/************************************************************************/
/*************** ColorSync 1.0 profile specification ********************/
/************************************************************************/
enum {
cmGrayResponse = 0,
cmRedResponse = 1,
cmGreenResponse = 2,
cmBlueResponse = 3,
cmCyanResponse = 4,
cmMagentaResponse = 5,
cmYellowResponse = 6,
cmUcrResponse = 7,
cmBgResponse = 8,
cmOnePlusLastResponse = 9
};
/* Device types */
enum {
cmMonitorDevice = FOUR_CHAR_CODE('mntr'),
cmScannerDevice = FOUR_CHAR_CODE('scnr'),
cmPrinterDevice = FOUR_CHAR_CODE('prtr')
};
struct CMIString {
ScriptCode theScript;
Str63 theString;
};
typedef struct CMIString CMIString;
/* Profile options */
enum {
cmPerceptualMatch = 0x0000, /* Default. For photographic images */
cmColorimetricMatch = 0x0001, /* Exact matching when possible */
cmSaturationMatch = 0x0002 /* For solid colors */
};
/* Profile flags */
enum {
cmNativeMatchingPreferred = 0x00000001, /* Default to native not preferred */
cmTurnOffCache = 0x00000002 /* Default to turn on CMM cache */
};
typedef long CMMatchOption;
typedef long CMMatchFlag;
struct CMHeader {
UInt32 size;
OSType CMMType;
UInt32 applProfileVersion;
OSType dataType;
OSType deviceType;
OSType deviceManufacturer;
UInt32 deviceModel;
UInt32 deviceAttributes[2];
UInt32 profileNameOffset;
UInt32 customDataOffset;
CMMatchFlag flags;
CMMatchOption options;
CMXYZColor white;
CMXYZColor black;
};
typedef struct CMHeader CMHeader;
struct CMProfileChromaticities {
CMXYZColor red;
CMXYZColor green;
CMXYZColor blue;
CMXYZColor cyan;
CMXYZColor magenta;
CMXYZColor yellow;
};
typedef struct CMProfileChromaticities CMProfileChromaticities;
struct CMProfileResponse {
UInt16 counts[9];
UInt16 data[1]; /* Variable size */
};
typedef struct CMProfileResponse CMProfileResponse;
struct CMProfile {
CMHeader header;
CMProfileChromaticities profile;
CMProfileResponse response;
CMIString profileName;
char customData[1]; /* Variable size */
};
typedef struct CMProfile CMProfile;
typedef CMProfile * CMProfilePtr;
typedef CMProfilePtr * CMProfileHandle;
#if OLDROUTINENAMES
enum {
kCMApplProfileVersion = cmCS1ProfileVersion
};
enum {
grayResponse = cmGrayResponse,
redResponse = cmRedResponse,
greenResponse = cmGreenResponse,
blueResponse = cmBlueResponse,
cyanResponse = cmCyanResponse,
magentaResponse = cmMagentaResponse,
yellowResponse = cmYellowResponse,
ucrResponse = cmUcrResponse,
bgResponse = cmBgResponse,
onePlusLastResponse = cmOnePlusLastResponse
};
enum {
rgbData = cmRGBData,
cmykData = cmCMYKData,
grayData = cmGrayData,
xyzData = cmXYZData
};
enum {
XYZData = cmXYZData
};
enum {
monitorDevice = cmMonitorDevice,
scannerDevice = cmScannerDevice,
printerDevice = cmPrinterDevice
};
enum {
CMNativeMatchingPreferred = cmNativeMatchingPreferred, /* Default to native not preferred */
CMTurnOffCache = cmTurnOffCache /* Default to turn on CMM cache */
};
enum {
CMPerceptualMatch = cmPerceptualMatch, /* Default. For photographic images */
CMColorimetricMatch = cmColorimetricMatch, /* Exact matching when possible */
CMSaturationMatch = cmSaturationMatch /* For solid colors */
};
typedef UInt16 XYZComponent;
typedef CMXYZColor XYZColor;
typedef UInt16 CMResponseData;
typedef CMIString IString;
typedef long CMResponseColor;
typedef CMResponseColor responseColor;
#endif /* OLDROUTINENAMES */
#if PRAGMA_STRUCT_ALIGN
#pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
#pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
#pragma pack()
#endif
#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif
#endif /* __CMICCPROFILE__ */