/*
     File:       ImageCompression.h
 
     Contains:   QuickTime Interfaces.
 
     Version:    Technology: QuickTime 6.0
                 Release:    QuickTime 6.0.2
 
     Copyright:  (c) 1990-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 __IMAGECOMPRESSION__
#define __IMAGECOMPRESSION__

#ifndef __MACTYPES__
#include <MacTypes.h>
#endif

#ifndef __QUICKDRAW__
#include <Quickdraw.h>
#endif

#ifndef __QDOFFSCREEN__
#include <QDOffscreen.h>
#endif

#ifndef __COMPONENTS__
#include <Components.h>
#endif

#ifndef __STANDARDFILE__
#include <StandardFile.h>
#endif




#if PRAGMA_ONCE
#pragma once
#endif

#ifdef __cplusplus
extern "C" {
#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


struct MatrixRecord {
    Fixed                           matrix[3][3];
};
typedef struct MatrixRecord             MatrixRecord;
typedef MatrixRecord *                  MatrixRecordPtr;
enum {
    kRawCodecType               = FOUR_CHAR_CODE('raw '),
    kCinepakCodecType           = FOUR_CHAR_CODE('cvid'),
    kGraphicsCodecType          = FOUR_CHAR_CODE('smc '),
    kAnimationCodecType         = FOUR_CHAR_CODE('rle '),
    kVideoCodecType             = FOUR_CHAR_CODE('rpza'),
    kComponentVideoCodecType    = FOUR_CHAR_CODE('yuv2'),
    kJPEGCodecType              = FOUR_CHAR_CODE('jpeg'),
    kMotionJPEGACodecType       = FOUR_CHAR_CODE('mjpa'),
    kMotionJPEGBCodecType       = FOUR_CHAR_CODE('mjpb'),
    kSGICodecType               = FOUR_CHAR_CODE('.SGI'),
    kPlanarRGBCodecType         = FOUR_CHAR_CODE('8BPS'),
    kMacPaintCodecType          = FOUR_CHAR_CODE('PNTG'),
    kGIFCodecType               = FOUR_CHAR_CODE('gif '),
    kPhotoCDCodecType           = FOUR_CHAR_CODE('kpcd'),
    kQuickDrawGXCodecType       = FOUR_CHAR_CODE('qdgx'),
    kAVRJPEGCodecType           = FOUR_CHAR_CODE('avr '),
    kOpenDMLJPEGCodecType       = FOUR_CHAR_CODE('dmb1'),
    kBMPCodecType               = FOUR_CHAR_CODE('WRLE'),
    kWindowsRawCodecType        = FOUR_CHAR_CODE('WRAW'),
    kVectorCodecType            = FOUR_CHAR_CODE('path'),
    kQuickDrawCodecType         = FOUR_CHAR_CODE('qdrw'),
    kWaterRippleCodecType       = FOUR_CHAR_CODE('ripl'),
    kFireCodecType              = FOUR_CHAR_CODE('fire'),
    kCloudCodecType             = FOUR_CHAR_CODE('clou'),
    kH261CodecType              = FOUR_CHAR_CODE('h261'),
    kH263CodecType              = FOUR_CHAR_CODE('h263'),
    kDVCNTSCCodecType           = FOUR_CHAR_CODE('dvc '),       /* DV - NTSC and DVCPRO NTSC (available in QuickTime 6.0 or later)*/
                                                                /* NOTE: kDVCProNTSCCodecType is deprecated.  */
                                                                /* Use kDVCNTSCCodecType instead -- as far as the codecs are concerned, */
                                                                /* the two data formats are identical.*/
    kDVCPALCodecType            = FOUR_CHAR_CODE('dvcp'),
    kDVCProPALCodecType         = FOUR_CHAR_CODE('dvpp'),       /* available in QuickTime 6.0 or later*/
    kBaseCodecType              = FOUR_CHAR_CODE('base'),
    kFLCCodecType               = FOUR_CHAR_CODE('flic'),
    kTargaCodecType             = FOUR_CHAR_CODE('tga '),
    kPNGCodecType               = FOUR_CHAR_CODE('png '),
    kTIFFCodecType              = FOUR_CHAR_CODE('tiff'),       /* NOTE: despite what might seem obvious from the two constants*/
                                                                /* below and their names, they really are correct. 'yuvu' really */
                                                                /* does mean signed, and 'yuvs' really does mean unsigned. Really. */
    kComponentVideoSigned       = FOUR_CHAR_CODE('yuvu'),
    kComponentVideoUnsigned     = FOUR_CHAR_CODE('yuvs'),
    kCMYKCodecType              = FOUR_CHAR_CODE('cmyk'),
    kMicrosoftVideo1CodecType   = FOUR_CHAR_CODE('msvc'),
    kSorensonCodecType          = FOUR_CHAR_CODE('SVQ1'),
    kSorenson3CodecType         = FOUR_CHAR_CODE('SVQ3'),       /* available in QuickTime 5 and later*/
    kIndeo4CodecType            = FOUR_CHAR_CODE('IV41'),
    kMPEG4VisualCodecType       = FOUR_CHAR_CODE('mp4v'),
    k64ARGBCodecType            = FOUR_CHAR_CODE('b64a'),
    k48RGBCodecType             = FOUR_CHAR_CODE('b48r'),
    k32AlphaGrayCodecType       = FOUR_CHAR_CODE('b32a'),
    k16GrayCodecType            = FOUR_CHAR_CODE('b16g'),
    kMpegYUV420CodecType        = FOUR_CHAR_CODE('myuv'),
    kYUV420CodecType            = FOUR_CHAR_CODE('y420'),
    kSorensonYUV9CodecType      = FOUR_CHAR_CODE('syv9'),
    k422YpCbCr8CodecType        = FOUR_CHAR_CODE('2vuy'),       /* Component Y'CbCr 8-bit 4:2:2  */
    k444YpCbCr8CodecType        = FOUR_CHAR_CODE('v308'),       /* Component Y'CbCr 8-bit 4:4:4  */
    k4444YpCbCrA8CodecType      = FOUR_CHAR_CODE('v408'),       /* Component Y'CbCrA 8-bit 4:4:4:4 */
    k422YpCbCr16CodecType       = FOUR_CHAR_CODE('v216'),       /* Component Y'CbCr 10,12,14,16-bit 4:2:2*/
    k422YpCbCr10CodecType       = FOUR_CHAR_CODE('v210'),       /* Component Y'CbCr 10-bit 4:2:2 */
    k444YpCbCr10CodecType       = FOUR_CHAR_CODE('v410'),       /* Component Y'CbCr 10-bit 4:4:4 */
    k4444YpCbCrA8RCodecType     = FOUR_CHAR_CODE('r408')        /* Component Y'CbCrA 8-bit 4:4:4:4, rendering format. full range alpha, zero biased yuv*/
};


/* one source effects */
enum {
    kBlurImageFilterType        = FOUR_CHAR_CODE('blur'),
    kSharpenImageFilterType     = FOUR_CHAR_CODE('shrp'),
    kEdgeDetectImageFilterType  = FOUR_CHAR_CODE('edge'),
    kEmbossImageFilterType      = FOUR_CHAR_CODE('embs'),
    kConvolveImageFilterType    = FOUR_CHAR_CODE('genk'),
    kAlphaGainImageFilterType   = FOUR_CHAR_CODE('gain'),
    kRGBColorBalanceImageFilterType = FOUR_CHAR_CODE('rgbb'),
    kHSLColorBalanceImageFilterType = FOUR_CHAR_CODE('hslb'),
    kColorSyncImageFilterType   = FOUR_CHAR_CODE('sync'),
    kFilmNoiseImageFilterType   = FOUR_CHAR_CODE('fmns'),
    kSolarizeImageFilterType    = FOUR_CHAR_CODE('solr'),
    kColorTintImageFilterType   = FOUR_CHAR_CODE('tint'),
    kLensFlareImageFilterType   = FOUR_CHAR_CODE('lens'),
    kBrightnessContrastImageFilterType = FOUR_CHAR_CODE('brco')
};

/* two source effects */
enum {
    kAlphaCompositorTransitionType = FOUR_CHAR_CODE('blnd'),
    kCrossFadeTransitionType    = FOUR_CHAR_CODE('dslv'),
    kChannelCompositeEffectType = FOUR_CHAR_CODE('chan'),
    kChromaKeyTransitionType    = FOUR_CHAR_CODE('ckey'),
    kImplodeTransitionType      = FOUR_CHAR_CODE('mplo'),
    kExplodeTransitionType      = FOUR_CHAR_CODE('xplo'),
    kGradientTransitionType     = FOUR_CHAR_CODE('matt'),
    kPushTransitionType         = FOUR_CHAR_CODE('push'),
    kSlideTransitionType        = FOUR_CHAR_CODE('slid'),
    kWipeTransitionType         = FOUR_CHAR_CODE('smpt'),
    kIrisTransitionType         = FOUR_CHAR_CODE('smp2'),
    kRadialTransitionType       = FOUR_CHAR_CODE('smp3'),
    kMatrixTransitionType       = FOUR_CHAR_CODE('smp4'),
    kZoomTransitionType         = FOUR_CHAR_CODE('zoom')
};

/* three source effects */
enum {
    kTravellingMatteEffectType  = FOUR_CHAR_CODE('trav')
};


/* Supported by QTNewGWorld in QuickTime 4.0 and later */
enum {
    kCMYKPixelFormat            = FOUR_CHAR_CODE('cmyk'),       /* CMYK, 8-bit */
    k64ARGBPixelFormat          = FOUR_CHAR_CODE('b64a'),       /* ARGB, 16-bit big-endian samples */
    k48RGBPixelFormat           = FOUR_CHAR_CODE('b48r'),       /* RGB, 16-bit big-endian samples */
    k32AlphaGrayPixelFormat     = FOUR_CHAR_CODE('b32a'),       /* AlphaGray, 16-bit big-endian samples */
    k16GrayPixelFormat          = FOUR_CHAR_CODE('b16g'),       /* Grayscale, 16-bit big-endian samples */
    k422YpCbCr8PixelFormat      = FOUR_CHAR_CODE('2vuy')        /* Component Y'CbCr 8-bit 4:2:2, ordered Cb Y'0 Cr Y'1 */
};

/* Supported by QTNewGWorld in QuickTime 4.1.2 and later */
enum {
    k4444YpCbCrA8PixelFormat    = FOUR_CHAR_CODE('v408'),       /* Component Y'CbCrA 8-bit 4:4:4:4, ordered Cb Y' Cr A */
    k4444YpCbCrA8RPixelFormat   = FOUR_CHAR_CODE('r408')        /* Component Y'CbCrA 8-bit 4:4:4:4, rendering format. full range alpha, zero biased yuv, ordered A Y' Cb Cr */
};

/* Supported by QTNewGWorld in QuickTime 6.0 and later */
enum {
    kYUV420PixelFormat          = FOUR_CHAR_CODE('y420')        /* Planar Component Y'CbCr 8-bit 4:2:0.  PixMap baseAddr points to a big-endian PlanarPixmapInfoYUV420 struct; see ImageCodec.i. */
};


/* These are the bits that are set in the Component flags, and also in the codecInfo struct. */
enum {
    codecInfoDoes1              = (1L << 0),                    /* codec can work with 1-bit pixels */
    codecInfoDoes2              = (1L << 1),                    /* codec can work with 2-bit pixels */
    codecInfoDoes4              = (1L << 2),                    /* codec can work with 4-bit pixels */
    codecInfoDoes8              = (1L << 3),                    /* codec can work with 8-bit pixels */
    codecInfoDoes16             = (1L << 4),                    /* codec can work with 16-bit pixels */
    codecInfoDoes32             = (1L << 5),                    /* codec can work with 32-bit pixels */
    codecInfoDoesDither         = (1L << 6),                    /* codec can do ditherMode */
    codecInfoDoesStretch        = (1L << 7),                    /* codec can stretch to arbitrary sizes */
    codecInfoDoesShrink         = (1L << 8),                    /* codec can shrink to arbitrary sizes */
    codecInfoDoesMask           = (1L << 9),                    /* codec can mask to clipping regions */
    codecInfoDoesTemporal       = (1L << 10),                   /* codec can handle temporal redundancy */
    codecInfoDoesDouble         = (1L << 11),                   /* codec can stretch to double size exactly */
    codecInfoDoesQuad           = (1L << 12),                   /* codec can stretch to quadruple size exactly */
    codecInfoDoesHalf           = (1L << 13),                   /* codec can shrink to half size */
    codecInfoDoesQuarter        = (1L << 14),                   /* codec can shrink to quarter size */
    codecInfoDoesRotate         = (1L << 15),                   /* codec can rotate on decompress */
    codecInfoDoesHorizFlip      = (1L << 16),                   /* codec can flip horizontally on decompress */
    codecInfoDoesVertFlip       = (1L << 17),                   /* codec can flip vertically on decompress */
    codecInfoHasEffectParameterList = (1L << 18),               /* codec implements get effects parameter list call, once was codecInfoDoesSkew */
    codecInfoDoesBlend          = (1L << 19),                   /* codec can blend on decompress */
    codecInfoDoesWarp           = (1L << 20),                   /* codec can warp arbitrarily on decompress */
    codecInfoDoesRecompress     = (1L << 21),                   /* codec can recompress image without accumulating errors */
    codecInfoDoesSpool          = (1L << 22),                   /* codec can spool image data */
    codecInfoDoesRateConstrain  = (1L << 23)                    /* codec can data rate constrain */
};


enum {
    codecInfoDepth1             = (1L << 0),                    /* compressed data at 1 bpp depth available */
    codecInfoDepth2             = (1L << 1),                    /* compressed data at 2 bpp depth available */
    codecInfoDepth4             = (1L << 2),                    /* compressed data at 4 bpp depth available */
    codecInfoDepth8             = (1L << 3),                    /* compressed data at 8 bpp depth available */
    codecInfoDepth16            = (1L << 4),                    /* compressed data at 16 bpp depth available */
    codecInfoDepth32            = (1L << 5),                    /* compressed data at 32 bpp depth available */
    codecInfoDepth24            = (1L << 6),                    /* compressed data at 24 bpp depth available */
    codecInfoDepth33            = (1L << 7),                    /* compressed data at 1 bpp monochrome depth  available */
    codecInfoDepth34            = (1L << 8),                    /* compressed data at 2 bpp grayscale depth available */
    codecInfoDepth36            = (1L << 9),                    /* compressed data at 4 bpp grayscale depth available */
    codecInfoDepth40            = (1L << 10),                   /* compressed data at 8 bpp grayscale depth available */
    codecInfoStoresClut         = (1L << 11),                   /* compressed data can have custom cluts */
    codecInfoDoesLossless       = (1L << 12),                   /* compressed data can be stored in lossless format */
    codecInfoSequenceSensitive  = (1L << 13)                    /* compressed data is sensitive to out of sequence decoding */
};


/* input sequence flags*/
enum {
    codecFlagUseImageBuffer     = (1L << 0),                    /* decompress*/
    codecFlagUseScreenBuffer    = (1L << 1),                    /* decompress*/
    codecFlagUpdatePrevious     = (1L << 2),                    /* compress*/
    codecFlagNoScreenUpdate     = (1L << 3),                    /* decompress*/
    codecFlagWasCompressed      = (1L << 4),                    /* compress*/
    codecFlagDontOffscreen      = (1L << 5),                    /* decompress*/
    codecFlagUpdatePreviousComp = (1L << 6),                    /* compress*/
    codecFlagForceKeyFrame      = (1L << 7),                    /* compress*/
    codecFlagOnlyScreenUpdate   = (1L << 8),                    /* decompress*/
    codecFlagLiveGrab           = (1L << 9),                    /* compress*/
    codecFlagDiffFrame          = (1L << 9),                    /* decompress*/
    codecFlagDontUseNewImageBuffer = (1L << 10),                /* decompress*/
    codecFlagInterlaceUpdate    = (1L << 11),                   /* decompress*/
    codecFlagCatchUpDiff        = (1L << 12),                   /* decompress*/
    codecFlagSupportDisable     = (1L << 13),                   /* decompress*/
    codecFlagReenable           = (1L << 14)                    /* decompress*/
};


/* output sequence flags*/
enum {
    codecFlagOutUpdateOnNextIdle = (1L << 9),
    codecFlagOutUpdateOnDataSourceChange = (1L << 10),
    codecFlagSequenceSensitive  = (1L << 11),
    codecFlagOutUpdateOnTimeChange = (1L << 12),
    codecFlagImageBufferNotSourceImage = (1L << 13),
    codecFlagUsedNewImageBuffer = (1L << 14),
    codecFlagUsedImageBuffer    = (1L << 15)
};



enum {
                                                                /* The minimum data size for spooling in or out data */
    codecMinimumDataSize        = 32768L
};



enum {
    compressorComponentType     = FOUR_CHAR_CODE('imco'),       /* the type for "Components" which compress images */
    decompressorComponentType   = FOUR_CHAR_CODE('imdc')        /* the type for "Components" which decompress images */
};


typedef Component                       CompressorComponent;
typedef Component                       DecompressorComponent;
typedef Component                       CodecComponent;
#define anyCodec                ((CodecComponent)0)
#define bestSpeedCodec          ((CodecComponent)-1)
#define bestFidelityCodec       ((CodecComponent)-2)
#define bestCompressionCodec    ((CodecComponent)-3)
typedef OSType                          CodecType;
typedef unsigned short                  CodecFlags;
typedef unsigned long                   CodecQ;
enum {
    codecLosslessQuality        = 0x00000400,
    codecMaxQuality             = 0x000003FF,
    codecMinQuality             = 0x00000000,
    codecLowQuality             = 0x00000100,
    codecNormalQuality          = 0x00000200,
    codecHighQuality            = 0x00000300
};

enum {
    codecLockBitsShieldCursor   = (1 << 0)                      /* shield cursor */
};

enum {
    codecCompletionSource       = (1 << 0),                     /* asynchronous codec is done with source data */
    codecCompletionDest         = (1 << 1),                     /* asynchronous codec is done with destination data */
    codecCompletionDontUnshield = (1 << 2),                     /* on dest complete don't unshield cursor */
    codecCompletionWentOffscreen = (1 << 3),                    /* codec used offscreen buffer */
    codecCompletionUnlockBits   = (1 << 4),                     /* on dest complete, call ICMSequenceUnlockBits */
    codecCompletionForceChainFlush = (1 << 5),                  /* ICM needs to flush the whole chain */
    codecCompletionDropped      = (1 << 6)                      /* codec decided to drop this frame */
};

enum {
    codecProgressOpen           = 0,
    codecProgressUpdatePercent  = 1,
    codecProgressClose          = 2
};

typedef CALLBACK_API( OSErr , ICMDataProcPtr )(Ptr *dataP, long bytesNeeded, long refcon);
typedef CALLBACK_API( OSErr , ICMFlushProcPtr )(Ptr data, long bytesAdded, long refcon);
typedef CALLBACK_API( void , ICMCompletionProcPtr )(OSErr result, short flags, long refcon);
typedef CALLBACK_API( OSErr , ICMProgressProcPtr )(short message, Fixed completeness, long refcon);
typedef CALLBACK_API( void , StdPixProcPtr )(PixMap *src, Rect *srcRect, MatrixRecord *matrix, short mode, RgnHandle mask, PixMap *matte, Rect *matteRect, short flags);
typedef CALLBACK_API( void , QDPixProcPtr )(PixMap *src, Rect *srcRect, MatrixRecord *matrix, short mode, RgnHandle mask, PixMap *matte, Rect *matteRect, short flags);
typedef CALLBACK_API( void , ICMAlignmentProcPtr )(Rect *rp, long refcon);
typedef CALLBACK_API( void , ICMCursorShieldedProcPtr )(const Rect *r, void *refcon, long flags);
typedef CALLBACK_API( void , ICMMemoryDisposedProcPtr )(Ptr memoryBlock, void *refcon);
typedef void *                          ICMCursorNotify;
typedef CALLBACK_API( OSErr , ICMConvertDataFormatProcPtr )(void *refCon, long flags, Handle desiredFormat, Handle sourceDataFormat, void *srcData, long srcDataSize, void **dstData, long *dstDataSize);
typedef STACK_UPP_TYPE(ICMDataProcPtr)                          ICMDataUPP;
typedef STACK_UPP_TYPE(ICMFlushProcPtr)                         ICMFlushUPP;
typedef STACK_UPP_TYPE(ICMCompletionProcPtr)                    ICMCompletionUPP;
typedef STACK_UPP_TYPE(ICMProgressProcPtr)                      ICMProgressUPP;
typedef STACK_UPP_TYPE(StdPixProcPtr)                           StdPixUPP;
typedef STACK_UPP_TYPE(QDPixProcPtr)                            QDPixUPP;
typedef STACK_UPP_TYPE(ICMAlignmentProcPtr)                     ICMAlignmentUPP;
typedef STACK_UPP_TYPE(ICMCursorShieldedProcPtr)                ICMCursorShieldedUPP;
typedef STACK_UPP_TYPE(ICMMemoryDisposedProcPtr)                ICMMemoryDisposedUPP;
typedef STACK_UPP_TYPE(ICMConvertDataFormatProcPtr)             ICMConvertDataFormatUPP;
typedef long                            ImageSequence;
typedef long                            ImageSequenceDataSource;
typedef long                            ImageTranscodeSequence;
typedef long                            ImageFieldSequence;

struct ICMProgressProcRecord {
    ICMProgressUPP                  progressProc;
    long                            progressRefCon;
};
typedef struct ICMProgressProcRecord    ICMProgressProcRecord;
typedef ICMProgressProcRecord *         ICMProgressProcRecordPtr;

struct ICMCompletionProcRecord {
    ICMCompletionUPP                completionProc;
    long                            completionRefCon;
};
typedef struct ICMCompletionProcRecord  ICMCompletionProcRecord;
typedef ICMCompletionProcRecord *       ICMCompletionProcRecordPtr;

struct ICMDataProcRecord {
    ICMDataUPP                      dataProc;
    long                            dataRefCon;
};
typedef struct ICMDataProcRecord        ICMDataProcRecord;
typedef ICMDataProcRecord *             ICMDataProcRecordPtr;

struct ICMFlushProcRecord {
    ICMFlushUPP                     flushProc;
    long                            flushRefCon;
};
typedef struct ICMFlushProcRecord       ICMFlushProcRecord;
typedef ICMFlushProcRecord *            ICMFlushProcRecordPtr;

struct ICMAlignmentProcRecord {
    ICMAlignmentUPP                 alignmentProc;
    long                            alignmentRefCon;
};
typedef struct ICMAlignmentProcRecord   ICMAlignmentProcRecord;
typedef ICMAlignmentProcRecord *        ICMAlignmentProcRecordPtr;

struct DataRateParams {
    long                            dataRate;
    long                            dataOverrun;
    long                            frameDuration;
    long                            keyFrameRate;
    CodecQ                          minSpatialQuality;
    CodecQ                          minTemporalQuality;
};
typedef struct DataRateParams           DataRateParams;
typedef DataRateParams *                DataRateParamsPtr;

struct ImageDescription {
    long                            idSize;                     /* total size of ImageDescription including extra data ( CLUTs and other per sequence data ) */
    CodecType                       cType;                      /* what kind of codec compressed this data */
    long                            resvd1;                     /* reserved for Apple use */
    short                           resvd2;                     /* reserved for Apple use */
    short                           dataRefIndex;               /* set to zero  */
    short                           version;                    /* which version is this data */
    short                           revisionLevel;              /* what version of that codec did this */
    long                            vendor;                     /* whose  codec compressed this data */
    CodecQ                          temporalQuality;            /* what was the temporal quality factor  */
    CodecQ                          spatialQuality;             /* what was the spatial quality factor */
    short                           width;                      /* how many pixels wide is this data */
    short                           height;                     /* how many pixels high is this data */
    Fixed                           hRes;                       /* horizontal resolution */
    Fixed                           vRes;                       /* vertical resolution */
    long                            dataSize;                   /* if known, the size of data for this image descriptor */
    short                           frameCount;                 /* number of frames this description applies to */
    Str31                           name;                       /* name of codec ( in case not installed )  */
    short                           depth;                      /* what depth is this data (1-32) or ( 33-40 grayscale ) */
    short                           clutID;                     /* clut id or if 0 clut follows  or -1 if no clut */
};
typedef struct ImageDescription         ImageDescription;
typedef ImageDescription *              ImageDescriptionPtr;
typedef ImageDescriptionPtr *           ImageDescriptionHandle;

struct CodecInfo {
    Str31                           typeName;                   /* name of the codec type i.e.: 'Apple Image Compression' */
    short                           version;                    /* version of the codec data that this codec knows about */
    short                           revisionLevel;              /* revision level of this codec i.e: 0x00010001 (1.0.1) */
    long                            vendor;                     /* Maker of this codec i.e: 'appl' */
    long                            decompressFlags;            /* codecInfo flags for decompression capabilities */
    long                            compressFlags;              /* codecInfo flags for compression capabilities */
    long                            formatFlags;                /* codecInfo flags for compression format details */
    UInt8                           compressionAccuracy;        /* measure (1-255) of accuracy of this codec for compress (0 if unknown) */
    UInt8                           decompressionAccuracy;      /* measure (1-255) of accuracy of this codec for decompress (0 if unknown) */
    unsigned short                  compressionSpeed;           /* ( millisecs for compressing 320x240 on base mac II) (0 if unknown)  */
    unsigned short                  decompressionSpeed;         /* ( millisecs for decompressing 320x240 on mac II)(0 if unknown)  */
    UInt8                           compressionLevel;           /* measure (1-255) of compression level of this codec (0 if unknown)  */
    UInt8                           resvd;                      /* pad */
    short                           minimumHeight;              /* minimum height of image (block size) */
    short                           minimumWidth;               /* minimum width of image (block size) */
    short                           decompressPipelineLatency;  /* in milliseconds ( for asynchronous codecs ) */
    short                           compressPipelineLatency;    /* in milliseconds ( for asynchronous codecs ) */
    long                            privateData;
};
typedef struct CodecInfo                CodecInfo;

struct CodecNameSpec {
    CodecComponent                  codec;
    CodecType                       cType;
    Str31                           typeName;
    Handle                          name;
};
typedef struct CodecNameSpec            CodecNameSpec;

struct CodecNameSpecList {
    short                           count;
    CodecNameSpec                   list[1];
};
typedef struct CodecNameSpecList        CodecNameSpecList;
typedef CodecNameSpecList *             CodecNameSpecListPtr;
enum {
    defaultDither               = 0,
    forceDither                 = 1,
    suppressDither              = 2,
    useColorMatching            = 4
};

enum {
    callStdBits                 = 1,
    callOldBits                 = 2,
    noDefaultOpcodes            = 4
};

enum {
    graphicsModeStraightAlpha   = 256,
    graphicsModePreWhiteAlpha   = 257,
    graphicsModePreBlackAlpha   = 258,
    graphicsModeComposition     = 259,
    graphicsModeStraightAlphaBlend = 260,
    graphicsModePreMulColorAlpha = 261
};

enum {
    evenField1ToEvenFieldOut    = 1 << 0,
    evenField1ToOddFieldOut     = 1 << 1,
    oddField1ToEvenFieldOut     = 1 << 2,
    oddField1ToOddFieldOut      = 1 << 3,
    evenField2ToEvenFieldOut    = 1 << 4,
    evenField2ToOddFieldOut     = 1 << 5,
    oddField2ToEvenFieldOut     = 1 << 6,
    oddField2ToOddFieldOut      = 1 << 7
};

enum {
    icmFrameTimeHasVirtualStartTimeAndDuration = 1 << 0
};


struct ICMFrameTimeRecord {
    wide                            value;                      /* frame time*/
    long                            scale;                      /* timescale of value/duration fields*/
    void *                          base;                       /* timebase*/

    long                            duration;                   /* duration frame is to be displayed (0 if unknown)*/
    Fixed                           rate;                       /* rate of timebase relative to wall-time*/

    long                            recordSize;                 /* total number of bytes in ICMFrameTimeRecord*/

    long                            frameNumber;                /* number of frame, zero if not known*/

    long                            flags;

    wide                            virtualStartTime;           /* conceptual start time*/
    long                            virtualDuration;            /* conceptual duration*/
};
typedef struct ICMFrameTimeRecord       ICMFrameTimeRecord;

typedef ICMFrameTimeRecord *            ICMFrameTimePtr;
#ifndef __QTUUID__
#define __QTUUID__ 1
/* QuickTime flavor of universally unique identifier (uuid)*/

struct QTUUID {
    UInt32                          data1;
    UInt16                          data2;
    UInt16                          data3;
    UInt8                           data4[8];
};
typedef struct QTUUID                   QTUUID;

typedef QTUUID                          QTMediaContextID;
#endif  /* !defined(__QTUUID__) */

#if OPAQUE_UPP_TYPES
    EXTERN_API(ICMDataUPP)
    NewICMDataUPP                  (ICMDataProcPtr          userRoutine);

    EXTERN_API(ICMFlushUPP)
    NewICMFlushUPP                 (ICMFlushProcPtr         userRoutine);

    EXTERN_API(ICMCompletionUPP)
    NewICMCompletionUPP            (ICMCompletionProcPtr    userRoutine);

    EXTERN_API(ICMProgressUPP)
    NewICMProgressUPP              (ICMProgressProcPtr      userRoutine);

    EXTERN_API(StdPixUPP)
    NewStdPixUPP                   (StdPixProcPtr           userRoutine);

    EXTERN_API(QDPixUPP)
    NewQDPixUPP                    (QDPixProcPtr            userRoutine);

    EXTERN_API(ICMAlignmentUPP)
    NewICMAlignmentUPP             (ICMAlignmentProcPtr     userRoutine);

    EXTERN_API(ICMCursorShieldedUPP)
    NewICMCursorShieldedUPP        (ICMCursorShieldedProcPtr userRoutine);

    EXTERN_API(ICMMemoryDisposedUPP)
    NewICMMemoryDisposedUPP        (ICMMemoryDisposedProcPtr userRoutine);

    EXTERN_API(ICMConvertDataFormatUPP)
    NewICMConvertDataFormatUPP     (ICMConvertDataFormatProcPtr userRoutine);

    EXTERN_API(void)
    DisposeICMDataUPP              (ICMDataUPP              userUPP);

    EXTERN_API(void)
    DisposeICMFlushUPP             (ICMFlushUPP             userUPP);

    EXTERN_API(void)
    DisposeICMCompletionUPP        (ICMCompletionUPP        userUPP);

    EXTERN_API(void)
    DisposeICMProgressUPP          (ICMProgressUPP          userUPP);

    EXTERN_API(void)
    DisposeStdPixUPP               (StdPixUPP               userUPP);

    EXTERN_API(void)
    DisposeQDPixUPP                (QDPixUPP                userUPP);

    EXTERN_API(void)
    DisposeICMAlignmentUPP         (ICMAlignmentUPP         userUPP);

    EXTERN_API(void)
    DisposeICMCursorShieldedUPP    (ICMCursorShieldedUPP    userUPP);

    EXTERN_API(void)
    DisposeICMMemoryDisposedUPP    (ICMMemoryDisposedUPP    userUPP);

    EXTERN_API(void)
    DisposeICMConvertDataFormatUPP    (ICMConvertDataFormatUPP userUPP);

    EXTERN_API(OSErr)
    InvokeICMDataUPP               (Ptr *                   dataP,
                                    long                    bytesNeeded,
                                    long                    refcon,
                                    ICMDataUPP              userUPP);

    EXTERN_API(OSErr)
    InvokeICMFlushUPP              (Ptr                     data,
                                    long                    bytesAdded,
                                    long                    refcon,
                                    ICMFlushUPP             userUPP);

    EXTERN_API(void)
    InvokeICMCompletionUPP         (OSErr                   result,
                                    short                   flags,
                                    long                    refcon,
                                    ICMCompletionUPP        userUPP);

    EXTERN_API(OSErr)
    InvokeICMProgressUPP           (short                   message,
                                    Fixed                   completeness,
                                    long                    refcon,
                                    ICMProgressUPP          userUPP);

    EXTERN_API(void)
    InvokeStdPixUPP                (PixMap *                src,
                                    Rect *                  srcRect,
                                    MatrixRecord *          matrix,
                                    short                   mode,
                                    RgnHandle               mask,
                                    PixMap *                matte,
                                    Rect *                  matteRect,
                                    short                   flags,
                                    StdPixUPP               userUPP);

    EXTERN_API(void)
    InvokeQDPixUPP                 (PixMap *                src,
                                    Rect *                  srcRect,
                                    MatrixRecord *          matrix,
                                    short                   mode,
                                    RgnHandle               mask,
                                    PixMap *                matte,
                                    Rect *                  matteRect,
                                    short                   flags,
                                    QDPixUPP                userUPP);

    EXTERN_API(void)
    InvokeICMAlignmentUPP          (Rect *                  rp,
                                    long                    refcon,
                                    ICMAlignmentUPP         userUPP);

    EXTERN_API(void)
    InvokeICMCursorShieldedUPP     (const Rect *            r,
                                    void *                  refcon,
                                    long                    flags,
                                    ICMCursorShieldedUPP    userUPP);

    EXTERN_API(void)
    InvokeICMMemoryDisposedUPP     (Ptr                     memoryBlock,
                                    void *                  refcon,
                                    ICMMemoryDisposedUPP    userUPP);

    EXTERN_API(OSErr)
    InvokeICMConvertDataFormatUPP    (void *                refCon,
                                    long                    flags,
                                    Handle                  desiredFormat,
                                    Handle                  sourceDataFormat,
                                    void *                  srcData,
                                    long                    srcDataSize,
                                    void **                 dstData,
                                    long *                  dstDataSize,
                                    ICMConvertDataFormatUPP userUPP);

#else
    enum { uppICMDataProcInfo = 0x00000FE0 };                       /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes) */
    enum { uppICMFlushProcInfo = 0x00000FE0 };                      /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes) */
    enum { uppICMCompletionProcInfo = 0x00000E80 };                 /* pascal no_return_value Func(2_bytes, 2_bytes, 4_bytes) */
    enum { uppICMProgressProcInfo = 0x00000FA0 };                   /* pascal 2_bytes Func(2_bytes, 4_bytes, 4_bytes) */
    enum { uppStdPixProcInfo = 0x002FEFC0 };                        /* pascal no_return_value Func(4_bytes, 4_bytes, 4_bytes, 2_bytes, 4_bytes, 4_bytes, 4_bytes, 2_bytes) */
    enum { uppQDPixProcInfo = 0x002FEFC0 };                         /* pascal no_return_value Func(4_bytes, 4_bytes, 4_bytes, 2_bytes, 4_bytes, 4_bytes, 4_bytes, 2_bytes) */
    enum { uppICMAlignmentProcInfo = 0x000003C0 };                  /* pascal no_return_value Func(4_bytes, 4_bytes) */
    enum { uppICMCursorShieldedProcInfo = 0x00000FC0 };             /* pascal no_return_value Func(4_bytes, 4_bytes, 4_bytes) */
    enum { uppICMMemoryDisposedProcInfo = 0x000003C0 };             /* pascal no_return_value Func(4_bytes, 4_bytes) */
    enum { uppICMConvertDataFormatProcInfo = 0x003FFFE0 };          /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes) */
    #define NewICMDataUPP(userRoutine)                              (ICMDataUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppICMDataProcInfo, GetCurrentArchitecture())
    #define NewICMFlushUPP(userRoutine)                             (ICMFlushUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppICMFlushProcInfo, GetCurrentArchitecture())
    #define NewICMCompletionUPP(userRoutine)                        (ICMCompletionUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppICMCompletionProcInfo, GetCurrentArchitecture())
    #define NewICMProgressUPP(userRoutine)                          (ICMProgressUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppICMProgressProcInfo, GetCurrentArchitecture())
    #define NewStdPixUPP(userRoutine)                               (StdPixUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppStdPixProcInfo, GetCurrentArchitecture())
    #define NewQDPixUPP(userRoutine)                                (QDPixUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppQDPixProcInfo, GetCurrentArchitecture())
    #define NewICMAlignmentUPP(userRoutine)                         (ICMAlignmentUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppICMAlignmentProcInfo, GetCurrentArchitecture())
    #define NewICMCursorShieldedUPP(userRoutine)                    (ICMCursorShieldedUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppICMCursorShieldedProcInfo, GetCurrentArchitecture())
    #define NewICMMemoryDisposedUPP(userRoutine)                    (ICMMemoryDisposedUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppICMMemoryDisposedProcInfo, GetCurrentArchitecture())
    #define NewICMConvertDataFormatUPP(userRoutine)                 (ICMConvertDataFormatUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppICMConvertDataFormatProcInfo, GetCurrentArchitecture())
    #define DisposeICMDataUPP(userUPP)                              DisposeRoutineDescriptor(userUPP)
    #define DisposeICMFlushUPP(userUPP)                             DisposeRoutineDescriptor(userUPP)
    #define DisposeICMCompletionUPP(userUPP)                        DisposeRoutineDescriptor(userUPP)
    #define DisposeICMProgressUPP(userUPP)                          DisposeRoutineDescriptor(userUPP)
    #define DisposeStdPixUPP(userUPP)                               DisposeRoutineDescriptor(userUPP)
    #define DisposeQDPixUPP(userUPP)                                DisposeRoutineDescriptor(userUPP)
    #define DisposeICMAlignmentUPP(userUPP)                         DisposeRoutineDescriptor(userUPP)
    #define DisposeICMCursorShieldedUPP(userUPP)                    DisposeRoutineDescriptor(userUPP)
    #define DisposeICMMemoryDisposedUPP(userUPP)                    DisposeRoutineDescriptor(userUPP)
    #define DisposeICMConvertDataFormatUPP(userUPP)                 DisposeRoutineDescriptor(userUPP)
    #define InvokeICMDataUPP(dataP, bytesNeeded, refcon, userUPP)   (OSErr)CALL_THREE_PARAMETER_UPP((userUPP), uppICMDataProcInfo, (dataP), (bytesNeeded), (refcon))
    #define InvokeICMFlushUPP(data, bytesAdded, refcon, userUPP)    (OSErr)CALL_THREE_PARAMETER_UPP((userUPP), uppICMFlushProcInfo, (data), (bytesAdded), (refcon))
    #define InvokeICMCompletionUPP(result, flags, refcon, userUPP)  CALL_THREE_PARAMETER_UPP((userUPP), uppICMCompletionProcInfo, (result), (flags), (refcon))
    #define InvokeICMProgressUPP(message, completeness, refcon, userUPP)  (OSErr)CALL_THREE_PARAMETER_UPP((userUPP), uppICMProgressProcInfo, (message), (completeness), (refcon))
    #define InvokeStdPixUPP(src, srcRect, matrix, mode, mask, matte, matteRect, flags, userUPP)  CALL_EIGHT_PARAMETER_UPP((userUPP), uppStdPixProcInfo, (src), (srcRect), (matrix), (mode), (mask), (matte), (matteRect), (flags))
    #define InvokeQDPixUPP(src, srcRect, matrix, mode, mask, matte, matteRect, flags, userUPP)  CALL_EIGHT_PARAMETER_UPP((userUPP), uppQDPixProcInfo, (src), (srcRect), (matrix), (mode), (mask), (matte), (matteRect), (flags))
    #define InvokeICMAlignmentUPP(rp, refcon, userUPP)              CALL_TWO_PARAMETER_UPP((userUPP), uppICMAlignmentProcInfo, (rp), (refcon))
    #define InvokeICMCursorShieldedUPP(r, refcon, flags, userUPP)   CALL_THREE_PARAMETER_UPP((userUPP), uppICMCursorShieldedProcInfo, (r), (refcon), (flags))
    #define InvokeICMMemoryDisposedUPP(memoryBlock, refcon, userUPP)  CALL_TWO_PARAMETER_UPP((userUPP), uppICMMemoryDisposedProcInfo, (memoryBlock), (refcon))
    #define InvokeICMConvertDataFormatUPP(refCon, flags, desiredFormat, sourceDataFormat, srcData, srcDataSize, dstData, dstDataSize, userUPP)  (OSErr)CALL_EIGHT_PARAMETER_UPP((userUPP), uppICMConvertDataFormatProcInfo, (refCon), (flags), (desiredFormat), (sourceDataFormat), (srcData), (srcDataSize), (dstData), (dstDataSize))
#endif
/* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
#define NewICMDataProc(userRoutine)                             NewICMDataUPP(userRoutine)
#define NewICMFlushProc(userRoutine)                            NewICMFlushUPP(userRoutine)
#define NewICMCompletionProc(userRoutine)                       NewICMCompletionUPP(userRoutine)
#define NewICMProgressProc(userRoutine)                         NewICMProgressUPP(userRoutine)
#define NewStdPixProc(userRoutine)                              NewStdPixUPP(userRoutine)
#define NewQDPixProc(userRoutine)                               NewQDPixUPP(userRoutine)
#define NewICMAlignmentProc(userRoutine)                        NewICMAlignmentUPP(userRoutine)
#define NewICMCursorShieldedProc(userRoutine)                   NewICMCursorShieldedUPP(userRoutine)
#define NewICMMemoryDisposedProc(userRoutine)                   NewICMMemoryDisposedUPP(userRoutine)
#define NewICMConvertDataFormatProc(userRoutine)                NewICMConvertDataFormatUPP(userRoutine)
#define CallICMDataProc(userRoutine, dataP, bytesNeeded, refcon) InvokeICMDataUPP(dataP, bytesNeeded, refcon, userRoutine)
#define CallICMFlushProc(userRoutine, data, bytesAdded, refcon) InvokeICMFlushUPP(data, bytesAdded, refcon, userRoutine)
#define CallICMCompletionProc(userRoutine, result, flags, refcon) InvokeICMCompletionUPP(result, flags, refcon, userRoutine)
#define CallICMProgressProc(userRoutine, message, completeness, refcon) InvokeICMProgressUPP(message, completeness, refcon, userRoutine)
#define CallStdPixProc(userRoutine, src, srcRect, matrix, mode, mask, matte, matteRect, flags) InvokeStdPixUPP(src, srcRect, matrix, mode, mask, matte, matteRect, flags, userRoutine)
#define CallQDPixProc(userRoutine, src, srcRect, matrix, mode, mask, matte, matteRect, flags) InvokeQDPixUPP(src, srcRect, matrix, mode, mask, matte, matteRect, flags, userRoutine)
#define CallICMAlignmentProc(userRoutine, rp, refcon)           InvokeICMAlignmentUPP(rp, refcon, userRoutine)
#define CallICMCursorShieldedProc(userRoutine, r, refcon, flags) InvokeICMCursorShieldedUPP(r, refcon, flags, userRoutine)
#define CallICMMemoryDisposedProc(userRoutine, memoryBlock, refcon) InvokeICMMemoryDisposedUPP(memoryBlock, refcon, userRoutine)
#define CallICMConvertDataFormatProc(userRoutine, refCon, flags, desiredFormat, sourceDataFormat, srcData, srcDataSize, dstData, dstDataSize) InvokeICMConvertDataFormatUPP(refCon, flags, desiredFormat, sourceDataFormat, srcData, srcDataSize, dstData, dstDataSize, userRoutine)

EXTERN_API( OSErr )
CodecManagerVersion             (long *                 version)                            TWOWORDINLINE(0x7000, 0xAAA3);

EXTERN_API( OSErr )
GetCodecNameList                (CodecNameSpecListPtr * list,
                                 short                  showAll)                            TWOWORDINLINE(0x7001, 0xAAA3);

EXTERN_API( OSErr )
DisposeCodecNameList            (CodecNameSpecListPtr   list)                               TWOWORDINLINE(0x700F, 0xAAA3);

EXTERN_API( OSErr )
GetCodecInfo                    (CodecInfo *            info,
                                 CodecType              cType,
                                 CodecComponent         codec)                              TWOWORDINLINE(0x7003, 0xAAA3);

EXTERN_API( OSErr )
GetMaxCompressionSize           (PixMapHandle           src,
                                 const Rect *           srcRect,
                                 short                  colorDepth,
                                 CodecQ                 quality,
                                 CodecType              cType,
                                 CompressorComponent    codec,
                                 long *                 size)                               TWOWORDINLINE(0x7004, 0xAAA3);

EXTERN_API( OSErr )
GetCSequenceMaxCompressionSize  (ImageSequence          seqID,
                                 PixMapHandle           src,
                                 long *                 size)                               FOURWORDINLINE(0x203C, 0x000C, 0x0074, 0xAAA3);

EXTERN_API( OSErr )
GetCompressionTime              (PixMapHandle           src,
                                 const Rect *           srcRect,
                                 short                  colorDepth,
                                 CodecType              cType,
                                 CompressorComponent    codec,
                                 CodecQ *               spatialQuality,
                                 CodecQ *               temporalQuality,
                                 unsigned long *        compressTime)                       TWOWORDINLINE(0x7005, 0xAAA3);

EXTERN_API( OSErr )
CompressImage                   (PixMapHandle           src,
                                 const Rect *           srcRect,
                                 CodecQ                 quality,
                                 CodecType              cType,
                                 ImageDescriptionHandle  desc,
                                 Ptr                    data)                               TWOWORDINLINE(0x7006, 0xAAA3);

EXTERN_API( OSErr )
FCompressImage                  (PixMapHandle           src,
                                 const Rect *           srcRect,
                                 short                  colorDepth,
                                 CodecQ                 quality,
                                 CodecType              cType,
                                 CompressorComponent    codec,
                                 CTabHandle             ctable,
                                 CodecFlags             flags,
                                 long                   bufferSize,
                                 ICMFlushProcRecordPtr  flushProc,
                                 ICMProgressProcRecordPtr  progressProc,
                                 ImageDescriptionHandle  desc,
                                 Ptr                    data)                               TWOWORDINLINE(0x7007, 0xAAA3);

EXTERN_API( OSErr )
DecompressImage                 (Ptr                    data,
                                 ImageDescriptionHandle  desc,
                                 PixMapHandle           dst,
                                 const Rect *           srcRect,
                                 const Rect *           dstRect,
                                 short                  mode,
                                 RgnHandle              mask)                               TWOWORDINLINE(0x7008, 0xAAA3);

EXTERN_API( OSErr )
FDecompressImage                (Ptr                    data,
                                 ImageDescriptionHandle  desc,
                                 PixMapHandle           dst,
                                 const Rect *           srcRect,
                                 MatrixRecordPtr        matrix,
                                 short                  mode,
                                 RgnHandle              mask,
                                 PixMapHandle           matte,
                                 const Rect *           matteRect,
                                 CodecQ                 accuracy,
                                 DecompressorComponent  codec,
                                 long                   bufferSize,
                                 ICMDataProcRecordPtr   dataProc,
                                 ICMProgressProcRecordPtr  progressProc)                    TWOWORDINLINE(0x7009, 0xAAA3);

EXTERN_API( OSErr )
CompressSequenceBegin           (ImageSequence *        seqID,
                                 PixMapHandle           src,
                                 PixMapHandle           prev,
                                 const Rect *           srcRect,
                                 const Rect *           prevRect,
                                 short                  colorDepth,
                                 CodecType              cType,
                                 CompressorComponent    codec,
                                 CodecQ                 spatialQuality,
                                 CodecQ                 temporalQuality,
                                 long                   keyFrameRate,
                                 CTabHandle             ctable,
                                 CodecFlags             flags,
                                 ImageDescriptionHandle  desc)                              TWOWORDINLINE(0x700A, 0xAAA3);

EXTERN_API( OSErr )
CompressSequenceFrame           (ImageSequence          seqID,
                                 PixMapHandle           src,
                                 const Rect *           srcRect,
                                 CodecFlags             flags,
                                 Ptr                    data,
                                 long *                 dataSize,
                                 UInt8 *                similarity,
                                 ICMCompletionProcRecordPtr  asyncCompletionProc)           TWOWORDINLINE(0x700B, 0xAAA3);

EXTERN_API( OSErr )
DecompressSequenceBegin         (ImageSequence *        seqID,
                                 ImageDescriptionHandle  desc,
                                 CGrafPtr               port,
                                 GDHandle               gdh,
                                 const Rect *           srcRect,
                                 MatrixRecordPtr        matrix,
                                 short                  mode,
                                 RgnHandle              mask,
                                 CodecFlags             flags,
                                 CodecQ                 accuracy,
                                 DecompressorComponent  codec)                              TWOWORDINLINE(0x700D, 0xAAA3);

EXTERN_API( OSErr )
DecompressSequenceBeginS        (ImageSequence *        seqID,
                                 ImageDescriptionHandle  desc,
                                 Ptr                    data,
                                 long                   dataSize,
                                 CGrafPtr               port,
                                 GDHandle               gdh,
                                 const Rect *           srcRect,
                                 MatrixRecordPtr        matrix,
                                 short                  mode,
                                 RgnHandle              mask,
                                 CodecFlags             flags,
                                 CodecQ                 accuracy,
                                 DecompressorComponent  codec)                              FOURWORDINLINE(0x203C, 0x0030, 0x005D, 0xAAA3);

EXTERN_API( OSErr )
DecompressSequenceFrame         (ImageSequence          seqID,
                                 Ptr                    data,
                                 CodecFlags             inFlags,
                                 CodecFlags *           outFlags,
                                 ICMCompletionProcRecordPtr  asyncCompletionProc)           TWOWORDINLINE(0x700E, 0xAAA3);

EXTERN_API( OSErr )
DecompressSequenceFrameS        (ImageSequence          seqID,
                                 Ptr                    data,
                                 long                   dataSize,
                                 CodecFlags             inFlags,
                                 CodecFlags *           outFlags,
                                 ICMCompletionProcRecordPtr  asyncCompletionProc)           FOURWORDINLINE(0x203C, 0x0016, 0x0047, 0xAAA3);

EXTERN_API( OSErr )
DecompressSequenceFrameWhen     (ImageSequence          seqID,
                                 Ptr                    data,
                                 long                   dataSize,
                                 CodecFlags             inFlags,
                                 CodecFlags *           outFlags,
                                 ICMCompletionProcRecordPtr  asyncCompletionProc,
                                 const ICMFrameTimeRecord * frameTime)                      FOURWORDINLINE(0x203C, 0x001A, 0x005E, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceFlush                 (ImageSequence          seqID)                              FOURWORDINLINE(0x203C, 0x0004, 0x005F, 0xAAA3);

EXTERN_API( OSErr )
SetDSequenceMatrix              (ImageSequence          seqID,
                                 MatrixRecordPtr        matrix)                             TWOWORDINLINE(0x7010, 0xAAA3);

EXTERN_API( OSErr )
GetDSequenceMatrix              (ImageSequence          seqID,
                                 MatrixRecordPtr        matrix)                             FOURWORDINLINE(0x203C, 0x0008, 0x0091, 0xAAA3);

EXTERN_API( OSErr )
SetDSequenceMatte               (ImageSequence          seqID,
                                 PixMapHandle           matte,
                                 const Rect *           matteRect)                          TWOWORDINLINE(0x7011, 0xAAA3);

EXTERN_API( OSErr )
SetDSequenceMask                (ImageSequence          seqID,
                                 RgnHandle              mask)                               TWOWORDINLINE(0x7012, 0xAAA3);

EXTERN_API( OSErr )
SetDSequenceTransferMode        (ImageSequence          seqID,
                                 short                  mode,
                                 const RGBColor *       opColor)                            TWOWORDINLINE(0x7013, 0xAAA3);

EXTERN_API( OSErr )
SetDSequenceDataProc            (ImageSequence          seqID,
                                 ICMDataProcRecordPtr   dataProc,
                                 long                   bufferSize)                         TWOWORDINLINE(0x7014, 0xAAA3);

EXTERN_API( OSErr )
SetDSequenceAccuracy            (ImageSequence          seqID,
                                 CodecQ                 accuracy)                           TWOWORDINLINE(0x7034, 0xAAA3);

EXTERN_API( OSErr )
SetDSequenceSrcRect             (ImageSequence          seqID,
                                 const Rect *           srcRect)                            TWOWORDINLINE(0x7035, 0xAAA3);

EXTERN_API( OSErr )
SetDSequenceFlags               (ImageSequence          seqID,
                                 long                   flags,
                                 long                   flagsMask)                          FOURWORDINLINE(0x203C, 0x000C, 0x0057, 0xAAA3);

enum {
    codecDSequenceDisableOverlaySurface = (1L << 5),
    codecDSequenceSingleField   = (1L << 6),
    codecDSequenceBidirectionalPrediction = (1L << 7),
    codecDSequenceFlushInsteadOfDirtying = (1L << 8),
    codecDSequenceEnableSubPixelPositioning = (1L << 9)
};

typedef CodecComponent *                CodecComponentPtr;
typedef CodecComponentPtr *             CodecComponentHandle;
/* selectors for ICMSequenceGet/SetInfo*/
enum {
    kICMSequenceTaskWeight      = FOUR_CHAR_CODE('twei'),       /* data is pointer to UInt32*/
    kICMSequenceTaskName        = FOUR_CHAR_CODE('tnam'),       /* data is pointer to OSType*/
    kICMSequenceUserPreferredCodecs = FOUR_CHAR_CODE('punt')    /* data is pointer to CodecComponentHandle*/
};


EXTERN_API( OSErr )
ICMSequenceGetInfo              (ImageSequence          seqID,
                                 OSType                 which,
                                 void *                 data)                               FOURWORDINLINE(0x203C, 0x000C, 0x0089, 0xAAA3);

EXTERN_API( OSErr )
ICMSequenceSetInfo              (ImageSequence          seqID,
                                 OSType                 which,
                                 void *                 data,
                                 Size                   dataSize)                           FOURWORDINLINE(0x203C, 0x0010, 0x009D, 0xAAA3);

EXTERN_API( OSErr )
GetDSequenceImageBuffer         (ImageSequence          seqID,
                                 GWorldPtr *            gworld)                             TWOWORDINLINE(0x7015, 0xAAA3);

EXTERN_API( OSErr )
GetDSequenceScreenBuffer        (ImageSequence          seqID,
                                 GWorldPtr *            gworld)                             TWOWORDINLINE(0x7016, 0xAAA3);

EXTERN_API( OSErr )
SetCSequenceQuality             (ImageSequence          seqID,
                                 CodecQ                 spatialQuality,
                                 CodecQ                 temporalQuality)                    TWOWORDINLINE(0x7017, 0xAAA3);

EXTERN_API( OSErr )
SetCSequencePrev                (ImageSequence          seqID,
                                 PixMapHandle           prev,
                                 const Rect *           prevRect)                           TWOWORDINLINE(0x7018, 0xAAA3);

EXTERN_API( OSErr )
SetCSequenceFlushProc           (ImageSequence          seqID,
                                 ICMFlushProcRecordPtr  flushProc,
                                 long                   bufferSize)                         TWOWORDINLINE(0x7033, 0xAAA3);

EXTERN_API( OSErr )
SetCSequenceKeyFrameRate        (ImageSequence          seqID,
                                 long                   keyFrameRate)                       TWOWORDINLINE(0x7036, 0xAAA3);

EXTERN_API( OSErr )
GetCSequenceKeyFrameRate        (ImageSequence          seqID,
                                 long *                 keyFrameRate)                       FOURWORDINLINE(0x203C, 0x0008, 0x004B, 0xAAA3);

EXTERN_API( OSErr )
GetCSequencePrevBuffer          (ImageSequence          seqID,
                                 GWorldPtr *            gworld)                             TWOWORDINLINE(0x7019, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceBusy                  (ImageSequence          seqID)                              TWOWORDINLINE(0x701A, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceEnd                   (ImageSequence          seqID)                              TWOWORDINLINE(0x701B, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceEquivalentImageDescription (ImageSequence     seqID,
                                 ImageDescriptionHandle  newDesc,
                                 Boolean *              equivalent)                         FOURWORDINLINE(0x203C, 0x000C, 0x0065, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceEquivalentImageDescriptionS (ImageSequence    seqID,
                                 ImageDescriptionHandle  newDesc,
                                 Boolean *              equivalent,
                                 Boolean *              canSwitch)                          FOURWORDINLINE(0x203C, 0x0010, 0x009F, 0xAAA3);

EXTERN_API( OSErr )
ReplaceDSequenceImageDescription (ImageSequence         seqID,
                                 ImageDescriptionHandle  newDesc)                           FOURWORDINLINE(0x203C, 0x0008, 0x00A0, 0xAAA3);

EXTERN_API( OSErr )
GetCompressedImageSize          (ImageDescriptionHandle  desc,
                                 Ptr                    data,
                                 long                   bufferSize,
                                 ICMDataProcRecordPtr   dataProc,
                                 long *                 dataSize)                           TWOWORDINLINE(0x701C, 0xAAA3);

EXTERN_API( OSErr )
GetSimilarity                   (PixMapHandle           src,
                                 const Rect *           srcRect,
                                 ImageDescriptionHandle  desc,
                                 Ptr                    data,
                                 Fixed *                similarity)                         TWOWORDINLINE(0x701D, 0xAAA3);

enum {
    kImageDescriptionSampleFormat = FOUR_CHAR_CODE('idfm'),     /* image description extension describing sample format*/
    kImageDescriptionClassicAtomFormat = FOUR_CHAR_CODE('atom'), /* sample contains classic atom structure (ie, GX codec and Curve codec)*/
    kImageDescriptionQTAtomFormat = FOUR_CHAR_CODE('qtat'),     /* sample contains QT atom structure*/
    kImageDescriptionEffectDataFormat = FOUR_CHAR_CODE('fxat'), /* sample describes an effect (as QTAtoms)*/
    kImageDescriptionPrivateDataFormat = FOUR_CHAR_CODE('priv'), /* sample is in a private codec specific format*/
    kImageDescriptionAlternateCodec = FOUR_CHAR_CODE('subs'),   /* image description extension containing the OSType of a substitute codec should the main codec not be available*/
    kImageDescriptionColorSpace = FOUR_CHAR_CODE('cspc')        /* image description extension containing an OSType naming the native pixel format of an image (only used for pixel formats not supported by classic Color QuickDraw)*/
};

EXTERN_API( OSErr )
GetImageDescriptionCTable       (ImageDescriptionHandle  desc,
                                 CTabHandle *           ctable)                             TWOWORDINLINE(0x701E, 0xAAA3);

EXTERN_API( OSErr )
SetImageDescriptionCTable       (ImageDescriptionHandle  desc,
                                 CTabHandle             ctable)                             TWOWORDINLINE(0x701F, 0xAAA3);

EXTERN_API( OSErr )
GetImageDescriptionExtension    (ImageDescriptionHandle  desc,
                                 Handle *               extension,
                                 long                   idType,
                                 long                   index)                              TWOWORDINLINE(0x7020, 0xAAA3);

EXTERN_API( OSErr )
AddImageDescriptionExtension    (ImageDescriptionHandle  desc,
                                 Handle                 extension,
                                 long                   idType)                             TWOWORDINLINE(0x7021, 0xAAA3);

EXTERN_API( OSErr )
RemoveImageDescriptionExtension (ImageDescriptionHandle  desc,
                                 long                   idType,
                                 long                   index)                              FOURWORDINLINE(0x203C, 0x000C, 0x003A, 0xAAA3);

EXTERN_API( OSErr )
CountImageDescriptionExtensionType (ImageDescriptionHandle  desc,
                                 long                   idType,
                                 long *                 count)                              FOURWORDINLINE(0x203C, 0x000C, 0x003B, 0xAAA3);

EXTERN_API( OSErr )
GetNextImageDescriptionExtensionType (ImageDescriptionHandle  desc,
                                 long *                 idType)                             FOURWORDINLINE(0x203C, 0x0008, 0x003C, 0xAAA3);

EXTERN_API( OSErr )
FindCodec                       (CodecType              cType,
                                 CodecComponent         specCodec,
                                 CompressorComponent *  compressor,
                                 DecompressorComponent * decompressor)                      TWOWORDINLINE(0x7023, 0xAAA3);

EXTERN_API( OSErr )
CompressPicture                 (PicHandle              srcPicture,
                                 PicHandle              dstPicture,
                                 CodecQ                 quality,
                                 CodecType              cType)                              TWOWORDINLINE(0x7024, 0xAAA3);

EXTERN_API( OSErr )
FCompressPicture                (PicHandle              srcPicture,
                                 PicHandle              dstPicture,
                                 short                  colorDepth,
                                 CTabHandle             ctable,
                                 CodecQ                 quality,
                                 short                  doDither,
                                 short                  compressAgain,
                                 ICMProgressProcRecordPtr  progressProc,
                                 CodecType              cType,
                                 CompressorComponent    codec)                              TWOWORDINLINE(0x7025, 0xAAA3);

EXTERN_API( OSErr )
CompressPictureFile             (short                  srcRefNum,
                                 short                  dstRefNum,
                                 CodecQ                 quality,
                                 CodecType              cType)                              TWOWORDINLINE(0x7026, 0xAAA3);

EXTERN_API( OSErr )
FCompressPictureFile            (short                  srcRefNum,
                                 short                  dstRefNum,
                                 short                  colorDepth,
                                 CTabHandle             ctable,
                                 CodecQ                 quality,
                                 short                  doDither,
                                 short                  compressAgain,
                                 ICMProgressProcRecordPtr  progressProc,
                                 CodecType              cType,
                                 CompressorComponent    codec)                              TWOWORDINLINE(0x7027, 0xAAA3);

EXTERN_API( OSErr )
GetPictureFileHeader            (short                  refNum,
                                 Rect *                 frame,
                                 OpenCPicParams *       header)                             TWOWORDINLINE(0x7028, 0xAAA3);

EXTERN_API( OSErr )
DrawPictureFile                 (short                  refNum,
                                 const Rect *           frame,
                                 ICMProgressProcRecordPtr  progressProc)                    TWOWORDINLINE(0x7029, 0xAAA3);

EXTERN_API( OSErr )
DrawTrimmedPicture              (PicHandle              srcPicture,
                                 const Rect *           frame,
                                 RgnHandle              trimMask,
                                 short                  doDither,
                                 ICMProgressProcRecordPtr  progressProc)                    TWOWORDINLINE(0x702E, 0xAAA3);

EXTERN_API( OSErr )
DrawTrimmedPictureFile          (short                  srcRefnum,
                                 const Rect *           frame,
                                 RgnHandle              trimMask,
                                 short                  doDither,
                                 ICMProgressProcRecordPtr  progressProc)                    TWOWORDINLINE(0x702F, 0xAAA3);

EXTERN_API( OSErr )
MakeThumbnailFromPicture        (PicHandle              picture,
                                 short                  colorDepth,
                                 PicHandle              thumbnail,
                                 ICMProgressProcRecordPtr  progressProc)                    TWOWORDINLINE(0x702A, 0xAAA3);

EXTERN_API( OSErr )
MakeThumbnailFromPictureFile    (short                  refNum,
                                 short                  colorDepth,
                                 PicHandle              thumbnail,
                                 ICMProgressProcRecordPtr  progressProc)                    TWOWORDINLINE(0x702B, 0xAAA3);

EXTERN_API( OSErr )
MakeThumbnailFromPixMap         (PixMapHandle           src,
                                 const Rect *           srcRect,
                                 short                  colorDepth,
                                 PicHandle              thumbnail,
                                 ICMProgressProcRecordPtr  progressProc)                    TWOWORDINLINE(0x702C, 0xAAA3);

EXTERN_API( OSErr )
TrimImage                       (ImageDescriptionHandle  desc,
                                 Ptr                    inData,
                                 long                   inBufferSize,
                                 ICMDataProcRecordPtr   dataProc,
                                 Ptr                    outData,
                                 long                   outBufferSize,
                                 ICMFlushProcRecordPtr  flushProc,
                                 Rect *                 trimRect,
                                 ICMProgressProcRecordPtr  progressProc)                    TWOWORDINLINE(0x702D, 0xAAA3);

EXTERN_API( OSErr )
ConvertImage                    (ImageDescriptionHandle  srcDD,
                                 Ptr                    srcData,
                                 short                  colorDepth,
                                 CTabHandle             ctable,
                                 CodecQ                 accuracy,
                                 CodecQ                 quality,
                                 CodecType              cType,
                                 CodecComponent         codec,
                                 ImageDescriptionHandle  dstDD,
                                 Ptr                    dstData)                            TWOWORDINLINE(0x7030, 0xAAA3);

EXTERN_API( OSErr )
GetCompressedPixMapInfo         (PixMapPtr              pix,
                                 ImageDescriptionHandle * desc,
                                 Ptr *                  data,
                                 long *                 bufferSize,
                                 ICMDataProcRecord *    dataProc,
                                 ICMProgressProcRecord * progressProc)                      TWOWORDINLINE(0x7037, 0xAAA3);

EXTERN_API( OSErr )
SetCompressedPixMapInfo         (PixMapPtr              pix,
                                 ImageDescriptionHandle  desc,
                                 Ptr                    data,
                                 long                   bufferSize,
                                 ICMDataProcRecordPtr   dataProc,
                                 ICMProgressProcRecordPtr  progressProc)                    TWOWORDINLINE(0x7038, 0xAAA3);

EXTERN_API( void )
StdPix                          (PixMapPtr              src,
                                 const Rect *           srcRect,
                                 MatrixRecordPtr        matrix,
                                 short                  mode,
                                 RgnHandle              mask,
                                 PixMapPtr              matte,
                                 const Rect *           matteRect,
                                 short                  flags)                              TWOWORDINLINE(0x700C, 0xAAA3);

EXTERN_API( OSErr )
TransformRgn                    (MatrixRecordPtr        matrix,
                                 RgnHandle              rgn)                                TWOWORDINLINE(0x7039, 0xAAA3);

/***********
    preview stuff
***********/
EXTERN_API( void )
SFGetFilePreview                (Point                  where,
                                 ConstStr255Param       prompt,
                                 FileFilterUPP          fileFilter,
                                 short                  numTypes,
                                 ConstSFTypeListPtr     typeList,
                                 DlgHookUPP             dlgHook,
                                 SFReply *              reply)                              TWOWORDINLINE(0x7041, 0xAAA3);

EXTERN_API( void )
SFPGetFilePreview               (Point                  where,
                                 ConstStr255Param       prompt,
                                 FileFilterUPP          fileFilter,
                                 short                  numTypes,
                                 ConstSFTypeListPtr     typeList,
                                 DlgHookUPP             dlgHook,
                                 SFReply *              reply,
                                 short                  dlgID,
                                 ModalFilterUPP         filterProc)                         TWOWORDINLINE(0x7042, 0xAAA3);

EXTERN_API( void )
StandardGetFilePreview          (FileFilterUPP          fileFilter,
                                 short                  numTypes,
                                 ConstSFTypeListPtr     typeList,
                                 StandardFileReply *    reply)                              TWOWORDINLINE(0x7043, 0xAAA3);

EXTERN_API( void )
CustomGetFilePreview            (FileFilterYDUPP        fileFilter,
                                 short                  numTypes,
                                 ConstSFTypeListPtr     typeList,
                                 StandardFileReply *    reply,
                                 short                  dlgID,
                                 Point                  where,
                                 DlgHookYDUPP           dlgHook,
                                 ModalFilterYDUPP       filterProc,
                                 ActivationOrderListPtr  activeList,
                                 ActivateYDUPP          activateProc,
                                 void *                 yourDataPtr)                        TWOWORDINLINE(0x7044, 0xAAA3);

EXTERN_API( OSErr )
MakeFilePreview                 (short                  resRefNum,
                                 ICMProgressProcRecordPtr  progress)                        TWOWORDINLINE(0x7045, 0xAAA3);

EXTERN_API( OSErr )
AddFilePreview                  (short                  resRefNum,
                                 OSType                 previewType,
                                 Handle                 previewData)                        TWOWORDINLINE(0x7046, 0xAAA3);

enum {
    sfpItemPreviewAreaUser      = 11,
    sfpItemPreviewStaticText    = 12,
    sfpItemPreviewDividerUser   = 13,
    sfpItemCreatePreviewButton  = 14,
    sfpItemShowPreviewButton    = 15
};


struct PreviewResourceRecord {
    unsigned long                   modDate;
    short                           version;
    OSType                          resType;
    short                           resID;
};
typedef struct PreviewResourceRecord    PreviewResourceRecord;

typedef PreviewResourceRecord *         PreviewResourcePtr;
typedef PreviewResourcePtr *            PreviewResource;
EXTERN_API( void )
AlignScreenRect                 (Rect *                 rp,
                                 ICMAlignmentProcRecordPtr  alignmentProc)                  FOURWORDINLINE(0x203C, 0x0008, 0x004C, 0xAAA3);

EXTERN_API( void )
AlignWindow                     (WindowRef              wp,
                                 Boolean                front,
                                 const Rect *           alignmentRect,
                                 ICMAlignmentProcRecordPtr  alignmentProc)                  FOURWORDINLINE(0x203C, 0x000E, 0x004D, 0xAAA3);

EXTERN_API( void )
DragAlignedWindow               (WindowRef              wp,
                                 Point                  startPt,
                                 Rect *                 boundsRect,
                                 Rect *                 alignmentRect,
                                 ICMAlignmentProcRecordPtr  alignmentProc)                  FOURWORDINLINE(0x203C, 0x0014, 0x004E, 0xAAA3);

EXTERN_API( long )
DragAlignedGrayRgn              (RgnHandle              theRgn,
                                 Point                  startPt,
                                 Rect *                 boundsRect,
                                 Rect *                 slopRect,
                                 short                  axis,
                                 UniversalProcPtr       actionProc,
                                 Rect *                 alignmentRect,
                                 ICMAlignmentProcRecordPtr  alignmentProc)                  FOURWORDINLINE(0x203C, 0x001E, 0x004F, 0xAAA3);

EXTERN_API( OSErr )
SetCSequenceDataRateParams      (ImageSequence          seqID,
                                 DataRateParamsPtr      params)                             FOURWORDINLINE(0x203C, 0x0008, 0x0050, 0xAAA3);

EXTERN_API( OSErr )
SetCSequenceFrameNumber         (ImageSequence          seqID,
                                 long                   frameNumber)                        FOURWORDINLINE(0x203C, 0x0008, 0x0051, 0xAAA3);

EXTERN_API( OSErr )
SetCSequencePreferredPacketSize (ImageSequence          seqID,
                                 long                   preferredPacketSizeInBytes)         FOURWORDINLINE(0x203C, 0x0008, 0x0078, 0xAAA3);

EXTERN_API( OSErr )
NewImageGWorld                  (GWorldPtr *            gworld,
                                 ImageDescriptionHandle  idh,
                                 GWorldFlags            flags)                              FOURWORDINLINE(0x203C, 0x000C, 0x0052, 0xAAA3);

EXTERN_API( OSErr )
GetCSequenceDataRateParams      (ImageSequence          seqID,
                                 DataRateParamsPtr      params)                             FOURWORDINLINE(0x203C, 0x0008, 0x0053, 0xAAA3);

EXTERN_API( OSErr )
GetCSequenceFrameNumber         (ImageSequence          seqID,
                                 long *                 frameNumber)                        FOURWORDINLINE(0x203C, 0x0008, 0x0054, 0xAAA3);

EXTERN_API( OSErr )
GetBestDeviceRect               (GDHandle *             gdh,
                                 Rect *                 rp)                                 FOURWORDINLINE(0x203C, 0x0008, 0x0055, 0xAAA3);

EXTERN_API( OSErr )
SetSequenceProgressProc         (ImageSequence          seqID,
                                 ICMProgressProcRecord * progressProc)                      FOURWORDINLINE(0x203C, 0x0008, 0x0056, 0xAAA3);

EXTERN_API( OSErr )
GDHasScale                      (GDHandle               gdh,
                                 short                  depth,
                                 Fixed *                scale)                              FOURWORDINLINE(0x203C, 0x000A, 0x005A, 0xAAA3);

EXTERN_API( OSErr )
GDGetScale                      (GDHandle               gdh,
                                 Fixed *                scale,
                                 short *                flags)                              FOURWORDINLINE(0x203C, 0x000C, 0x005B, 0xAAA3);

EXTERN_API( OSErr )
GDSetScale                      (GDHandle               gdh,
                                 Fixed                  scale,
                                 short                  flags)                              FOURWORDINLINE(0x203C, 0x000A, 0x005C, 0xAAA3);

EXTERN_API( OSErr )
ICMShieldSequenceCursor         (ImageSequence          seqID)                              FOURWORDINLINE(0x203C, 0x0004, 0x0062, 0xAAA3);

EXTERN_API( void )
ICMDecompressComplete           (ImageSequence          seqID,
                                 OSErr                  err,
                                 short                  flag,
                                 ICMCompletionProcRecordPtr  completionRtn)                 FOURWORDINLINE(0x203C, 0x000C, 0x0063, 0xAAA3);

EXTERN_API( OSErr )
ICMDecompressCompleteS          (ImageSequence          seqID,
                                 OSErr                  err,
                                 short                  flag,
                                 ICMCompletionProcRecordPtr  completionRtn)                 FOURWORDINLINE(0x203C, 0x000C, 0x0082, 0xAAA3);

EXTERN_API( OSErr )
ICMSequenceLockBits             (ImageSequence          seqID,
                                 PixMapPtr              dst,
                                 long                   flags)                              FOURWORDINLINE(0x203C, 0x000C, 0x007C, 0xAAA3);

EXTERN_API( OSErr )
ICMSequenceUnlockBits           (ImageSequence          seqID,
                                 long                   flags)                              FOURWORDINLINE(0x203C, 0x0008, 0x007D, 0xAAA3);

enum {
    kICMPixelFormatIsPlanarMask = 0x0F,                         /* these bits in formatFlags indicate how many planes there are; they're 0 if chunky*/
    kICMPixelFormatIsIndexed    = (1L << 4),
    kICMPixelFormatIsSupportedByQD = (1L << 5),
    kICMPixelFormatIsMonochrome = (1L << 6),
    kICMPixelFormatHasAlphaChannel = (1L << 7)
};


struct ICMPixelFormatInfo {
    long                            size;                       /* caller MUST fill this in with sizeof(ICMPixelFormatInfo) before calling ICMGet/SetPixelFormatInfo*/
    unsigned long                   formatFlags;
    short                           bitsPerPixel[14];           /* list each plane's bits per pixel separately if planar*/
                                                                /* new field for QuickTime 4.1*/
    Fixed                           defaultGammaLevel;
                                                                /* new fields for QuickTime 6.0*/
    short                           horizontalSubsampling[14];  /* per plane; use 1 if plane is not subsampled*/
    short                           verticalSubsampling[14];    /* per plane; use 1 if plane is not subsampled*/
};
typedef struct ICMPixelFormatInfo       ICMPixelFormatInfo;
typedef ICMPixelFormatInfo *            ICMPixelFormatInfoPtr;
/* IMPORTANT: Fill in theInfo->size with sizeof(ICMPixelFormatInfo) before calling ICMGetPixelFormatInfo */
EXTERN_API( OSErr )
ICMGetPixelFormatInfo           (OSType                 PixelFormat,
                                 ICMPixelFormatInfoPtr  theInfo)                            FOURWORDINLINE(0x203C, 0x0008, 0x0083, 0xAAA3);

/* IMPORTANT: Fill in theInfo->size with sizeof(ICMPixelFormatInfo) before calling ICMSetPixelFormatInfo */
EXTERN_API( OSErr )
ICMSetPixelFormatInfo           (OSType                 PixelFormat,
                                 ICMPixelFormatInfoPtr  theInfo)                            FOURWORDINLINE(0x203C, 0x0008, 0x008A, 0xAAA3);

enum {
    kICMGetChainUltimateParent  = 0,
    kICMGetChainParent          = 1,
    kICMGetChainChild           = 2,
    kICMGetChainUltimateChild   = 3
};

EXTERN_API( OSErr )
ICMSequenceGetChainMember       (ImageSequence          seqID,
                                 ImageSequence *        retSeqID,
                                 long                   flags)                              FOURWORDINLINE(0x203C, 0x000C, 0x007E, 0xAAA3);

EXTERN_API( OSErr )
SetDSequenceTimeCode            (ImageSequence          seqID,
                                 void *                 timeCodeFormat,
                                 void *                 timeCodeTime)                       FOURWORDINLINE(0x203C, 0x000C, 0x0064, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceNewMemory             (ImageSequence          seqID,
                                 Ptr *                  data,
                                 Size                   dataSize,
                                 long                   dataUse,
                                 ICMMemoryDisposedUPP   memoryGoneProc,
                                 void *                 refCon)                             FOURWORDINLINE(0x203C, 0x0018, 0x0066, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceDisposeMemory         (ImageSequence          seqID,
                                 Ptr                    data)                               FOURWORDINLINE(0x203C, 0x0008, 0x0067, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceNewDataSource         (ImageSequence          seqID,
                                 ImageSequenceDataSource * sourceID,
                                 OSType                 sourceType,
                                 long                   sourceInputNumber,
                                 Handle                 dataDescription,
                                 ICMConvertDataFormatUPP  transferProc,
                                 void *                 refCon)                             FOURWORDINLINE(0x203C, 0x001C, 0x0068, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceDisposeDataSource     (ImageSequenceDataSource  sourceID)                         FOURWORDINLINE(0x203C, 0x0004, 0x0069, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceSetSourceData         (ImageSequenceDataSource  sourceID,
                                 void *                 data,
                                 long                   dataSize)                           FOURWORDINLINE(0x203C, 0x000C, 0x006A, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceChangedSourceData     (ImageSequenceDataSource  sourceID)                         FOURWORDINLINE(0x203C, 0x0004, 0x006B, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceSetSourceDataQueue    (ImageSequenceDataSource  sourceID,
                                 QHdrPtr                dataQueue)                          FOURWORDINLINE(0x203C, 0x0008, 0x007B, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceGetDataSource         (ImageSequence          seqID,
                                 ImageSequenceDataSource * sourceID,
                                 OSType                 sourceType,
                                 long                   sourceInputNumber)                  FOURWORDINLINE(0x203C, 0x0010, 0x007F, 0xAAA3);

EXTERN_API( OSErr )
PtInDSequenceData               (ImageSequence          seqID,
                                 void *                 data,
                                 Size                   dataSize,
                                 Point                  where,
                                 Boolean *              hit)                                FOURWORDINLINE(0x203C, 0x0014, 0x006C, 0xAAA3);

EXTERN_API( OSErr )
HitTestDSequenceData            (ImageSequence          seqID,
                                 void *                 data,
                                 Size                   dataSize,
                                 Point                  where,
                                 long *                 hit,
                                 long                   hitFlags)                           FOURWORDINLINE(0x203C, 0x0018, 0x0087, 0xAAA3);

EXTERN_API( OSErr )
GetGraphicsImporterForFile      (const FSSpec *         theFile,
                                 ComponentInstance *    gi)                                 FOURWORDINLINE(0x203C, 0x0008, 0x006E, 0xAAA3);

EXTERN_API( OSErr )
GetGraphicsImporterForDataRef   (Handle                 dataRef,
                                 OSType                 dataRefType,
                                 ComponentInstance *    gi)                                 FOURWORDINLINE(0x203C, 0x000C, 0x0077, 0xAAA3);

enum {
    kDontUseValidateToFindGraphicsImporter = 1L << 0
};

EXTERN_API( OSErr )
GetGraphicsImporterForFileWithFlags (const FSSpec *     theFile,
                                 ComponentInstance *    gi,
                                 long                   flags)                              FOURWORDINLINE(0x203C, 0x000C, 0x0084, 0xAAA3);

EXTERN_API( OSErr )
GetGraphicsImporterForDataRefWithFlags (Handle          dataRef,
                                 OSType                 dataRefType,
                                 ComponentInstance *    gi,
                                 long                   flags)                              FOURWORDINLINE(0x203C, 0x0010, 0x0085, 0xAAA3);

EXTERN_API( OSErr )
QTGetFileNameExtension          (ConstStrFileNameParam  fileName,
                                 OSType                 fileType,
                                 OSType *               extension)                          FOURWORDINLINE(0x203C, 0x000C, 0x0061, 0xAAA3);


EXTERN_API( OSErr )
ImageTranscodeSequenceBegin     (ImageTranscodeSequence * its,
                                 ImageDescriptionHandle  srcDesc,
                                 OSType                 destType,
                                 ImageDescriptionHandle * dstDesc,
                                 void *                 data,
                                 long                   dataSize)                           FOURWORDINLINE(0x203C, 0x0018, 0x006F, 0xAAA3);

EXTERN_API( OSErr )
ImageTranscodeSequenceEnd       (ImageTranscodeSequence  its)                               FOURWORDINLINE(0x203C, 0x0004, 0x0070, 0xAAA3);

EXTERN_API( OSErr )
ImageTranscodeFrame             (ImageTranscodeSequence  its,
                                 void *                 srcData,
                                 long                   srcDataSize,
                                 void **                dstData,
                                 long *                 dstDataSize)                        FOURWORDINLINE(0x203C, 0x0014, 0x0071, 0xAAA3);

EXTERN_API( OSErr )
ImageTranscodeDisposeFrameData  (ImageTranscodeSequence  its,
                                 void *                 dstData)                            FOURWORDINLINE(0x203C, 0x0008, 0x0072, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceInvalidate            (ImageSequence          seqID,
                                 RgnHandle              invalRgn)                           FOURWORDINLINE(0x203C, 0x0008, 0x0073, 0xAAA3);

EXTERN_API( OSErr )
CDSequenceSetTimeBase           (ImageSequence          seqID,
                                 void *                 base)                               FOURWORDINLINE(0x203C, 0x0008, 0x0079, 0xAAA3);

EXTERN_API( OSErr )
ImageFieldSequenceBegin         (ImageFieldSequence *   ifs,
                                 ImageDescriptionHandle  desc1,
                                 ImageDescriptionHandle  desc2,
                                 ImageDescriptionHandle  descOut)                           FOURWORDINLINE(0x203C, 0x0010, 0x006D, 0xAAA3);

EXTERN_API( OSErr )
ImageFieldSequenceExtractCombine (ImageFieldSequence    ifs,
                                 long                   fieldFlags,
                                 void *                 data1,
                                 long                   dataSize1,
                                 void *                 data2,
                                 long                   dataSize2,
                                 void *                 outputData,
                                 long *                 outDataSize)                        FOURWORDINLINE(0x203C, 0x0020, 0x0075, 0xAAA3);

EXTERN_API( OSErr )
ImageFieldSequenceEnd           (ImageFieldSequence     ifs)                                FOURWORDINLINE(0x203C, 0x0004, 0x0076, 0xAAA3);

enum {
    kICMTempThenAppMemory       = 1L << 12,
    kICMAppThenTempMemory       = 1L << 13
};

EXTERN_API( OSErr )
QTNewGWorld                     (GWorldPtr *            offscreenGWorld,
                                 OSType                 PixelFormat,
                                 const Rect *           boundsRect,
                                 CTabHandle             cTable,
                                 GDHandle               aGDevice,
                                 GWorldFlags            flags)                              FOURWORDINLINE(0x203C, 0x0018, 0x0080, 0xAAA3);

EXTERN_API( OSErr )
QTNewGWorldFromPtr              (GWorldPtr *            gw,
                                 OSType                 pixelFormat,
                                 const Rect *           boundsRect,
                                 CTabHandle             cTable,
                                 GDHandle               aGDevice,
                                 GWorldFlags            flags,
                                 void *                 baseAddr,
                                 long                   rowBytes)                           FOURWORDINLINE(0x203C, 0x0020, 0x008B, 0xAAA3);

EXTERN_API( GWorldFlags )
QTUpdateGWorld                  (GWorldPtr *            offscreenGWorld,
                                 OSType                 PixelFormat,
                                 const Rect *           boundsRect,
                                 CTabHandle             cTable,
                                 GDHandle               aGDevice,
                                 GWorldFlags            flags)                              FOURWORDINLINE(0x203C, 0x0018, 0x0081, 0xAAA3);

EXTERN_API( OSErr )
MakeImageDescriptionForPixMap   (PixMapHandle           pixmap,
                                 ImageDescriptionHandle * idh)                              FOURWORDINLINE(0x203C, 0x0008, 0x007A, 0xAAA3);

EXTERN_API( OSErr )
MakeImageDescriptionForEffect   (OSType                 effectType,
                                 ImageDescriptionHandle * idh)                              FOURWORDINLINE(0x203C, 0x0008, 0x0092, 0xAAA3);

EXTERN_API( short )
QTGetPixelSize                  (OSType                 PixelFormat)                        FOURWORDINLINE(0x203C, 0x0004, 0x0086, 0xAAA3);

EXTERN_API( short )
QTGetPixelFormatDepthForImageDescription (OSType        pixelFormat)                        FOURWORDINLINE(0x203C, 0x0004, 0x00A3, 0xAAA3);

EXTERN_API( long )
QTGetPixMapPtrRowBytes          (PixMapPtr              pm)                                 FOURWORDINLINE(0x203C, 0x0004, 0x008D, 0xAAA3);

EXTERN_API( long )
QTGetPixMapHandleRowBytes       (PixMapHandle           pm)                                 FOURWORDINLINE(0x203C, 0x0004, 0x008E, 0xAAA3);

EXTERN_API( OSErr )
QTSetPixMapPtrRowBytes          (PixMapPtr              pm,
                                 long                   rowBytes)                           FOURWORDINLINE(0x203C, 0x0008, 0x0090, 0xAAA3);

EXTERN_API( OSErr )
QTSetPixMapHandleRowBytes       (PixMapHandle           pm,
                                 long                   rowBytes)                           FOURWORDINLINE(0x203C, 0x0008, 0x008F, 0xAAA3);

enum {
    kQTUsePlatformDefaultGammaLevel = 0,                        /* When decompressing into this PixMap, gamma-correct to the platform's standard gamma. */
    kQTUseSourceGammaLevel      = -1L,                          /* When decompressing into this PixMap, don't perform gamma-correction. */
    kQTCCIR601VideoGammaLevel   = 0x00023333                    /* 2.2, standard television video gamma.*/
};

EXTERN_API( Fixed )
QTGetPixMapPtrGammaLevel        (PixMapPtr              pm)                                 FOURWORDINLINE(0x203C, 0x0004, 0x0093, 0xAAA3);

EXTERN_API( OSErr )
QTSetPixMapPtrGammaLevel        (PixMapPtr              pm,
                                 Fixed                  gammaLevel)                         FOURWORDINLINE(0x203C, 0x0008, 0x0094, 0xAAA3);

EXTERN_API( Fixed )
QTGetPixMapHandleGammaLevel     (PixMapHandle           pm)                                 FOURWORDINLINE(0x203C, 0x0004, 0x0096, 0xAAA3);

EXTERN_API( OSErr )
QTSetPixMapHandleGammaLevel     (PixMapHandle           pm,
                                 Fixed                  gammaLevel)                         FOURWORDINLINE(0x203C, 0x0008, 0x0097, 0xAAA3);

EXTERN_API( Fixed )
QTGetPixMapPtrRequestedGammaLevel (PixMapPtr            pm)                                 FOURWORDINLINE(0x203C, 0x0004, 0x0098, 0xAAA3);

EXTERN_API( OSErr )
QTSetPixMapPtrRequestedGammaLevel (PixMapPtr            pm,
                                 Fixed                  requestedGammaLevel)                FOURWORDINLINE(0x203C, 0x0008, 0x0099, 0xAAA3);

EXTERN_API( Fixed )
QTGetPixMapHandleRequestedGammaLevel (PixMapHandle      pm)                                 FOURWORDINLINE(0x203C, 0x0004, 0x009A, 0xAAA3);

EXTERN_API( OSErr )
QTSetPixMapHandleRequestedGammaLevel (PixMapHandle      pm,
                                 Fixed                  requestedGammaLevel)                FOURWORDINLINE(0x203C, 0x0008, 0x009B, 0xAAA3);

EXTERN_API( OSErr )
QuadToQuadMatrix                (const Fixed *          source,
                                 const Fixed *          dest,
                                 MatrixRecord *         map)                                FOURWORDINLINE(0x203C, 0x000C, 0x0095, 0xAAA3);





enum {
    identityMatrixType          = 0x00,                         /* result if matrix is identity */
    translateMatrixType         = 0x01,                         /* result if matrix translates */
    scaleMatrixType             = 0x02,                         /* result if matrix scales */
    scaleTranslateMatrixType    = 0x03,                         /* result if matrix scales and translates */
    linearMatrixType            = 0x04,                         /* result if matrix is general 2 x 2 */
    linearTranslateMatrixType   = 0x05,                         /* result if matrix is general 2 x 2 and translates */
    perspectiveMatrixType       = 0x06                          /* result if matrix is general 3 x 3 */
};


typedef unsigned short                  MatrixFlags;
EXTERN_API( short )
GetMatrixType                   (const MatrixRecord *   m)                                  TWOWORDINLINE(0x7014, 0xABC2);

EXTERN_API( void )
CopyMatrix                      (const MatrixRecord *   m1,
                                 MatrixRecord *         m2)                                 TWOWORDINLINE(0x7020, 0xABC2);

EXTERN_API( Boolean )
EqualMatrix                     (const MatrixRecord *   m1,
                                 const MatrixRecord *   m2)                                 TWOWORDINLINE(0x7021, 0xABC2);

EXTERN_API( void )
SetIdentityMatrix               (MatrixRecord *         matrix)                             TWOWORDINLINE(0x7015, 0xABC2);

EXTERN_API( void )
TranslateMatrix                 (MatrixRecord *         m,
                                 Fixed                  deltaH,
                                 Fixed                  deltaV)                             TWOWORDINLINE(0x7019, 0xABC2);

EXTERN_API( void )
RotateMatrix                    (MatrixRecord *         m,
                                 Fixed                  degrees,
                                 Fixed                  aboutX,
                                 Fixed                  aboutY)                             TWOWORDINLINE(0x7016, 0xABC2);

EXTERN_API( void )
ScaleMatrix                     (MatrixRecord *         m,
                                 Fixed                  scaleX,
                                 Fixed                  scaleY,
                                 Fixed                  aboutX,
                                 Fixed                  aboutY)                             TWOWORDINLINE(0x7017, 0xABC2);

EXTERN_API( void )
SkewMatrix                      (MatrixRecord *         m,
                                 Fixed                  skewX,
                                 Fixed                  skewY,
                                 Fixed                  aboutX,
                                 Fixed                  aboutY)                             TWOWORDINLINE(0x7018, 0xABC2);

EXTERN_API( OSErr )
TransformFixedPoints            (const MatrixRecord *   m,
                                 FixedPoint *           fpt,
                                 long                   count)                              TWOWORDINLINE(0x7022, 0xABC2);

EXTERN_API( OSErr )
TransformPoints                 (const MatrixRecord *   mp,
                                 Point *                pt1,
                                 long                   count)                              TWOWORDINLINE(0x7023, 0xABC2);

EXTERN_API( Boolean )
TransformFixedRect              (const MatrixRecord *   m,
                                 FixedRect *            fr,
                                 FixedPoint *           fpp)                                TWOWORDINLINE(0x7024, 0xABC2);

EXTERN_API( Boolean )
TransformRect                   (const MatrixRecord *   m,
                                 Rect *                 r,
                                 FixedPoint *           fpp)                                TWOWORDINLINE(0x7025, 0xABC2);

EXTERN_API( Boolean )
InverseMatrix                   (const MatrixRecord *   m,
                                 MatrixRecord *         im)                                 TWOWORDINLINE(0x701C, 0xABC2);

EXTERN_API( void )
ConcatMatrix                    (const MatrixRecord *   a,
                                 MatrixRecord *         b)                                  TWOWORDINLINE(0x701B, 0xABC2);

EXTERN_API( void )
RectMatrix                      (MatrixRecord *         matrix,
                                 const Rect *           srcRect,
                                 const Rect *           dstRect)                            TWOWORDINLINE(0x701E, 0xABC2);

EXTERN_API( void )
MapMatrix                       (MatrixRecord *         matrix,
                                 const Rect *           fromRect,
                                 const Rect *           toRect)                             TWOWORDINLINE(0x701D, 0xABC2);







EXTERN_API( void )
CompAdd                         (wide *                 src,
                                 wide *                 dst)                                TWOWORDINLINE(0x7001, 0xABC2);

EXTERN_API( void )
CompSub                         (wide *                 src,
                                 wide *                 dst)                                TWOWORDINLINE(0x7002, 0xABC2);

EXTERN_API( void )
CompNeg                         (wide *                 dst)                                TWOWORDINLINE(0x7003, 0xABC2);

EXTERN_API( void )
CompShift                       (wide *                 src,
                                 short                  shift)                              TWOWORDINLINE(0x7004, 0xABC2);

EXTERN_API( void )
CompMul                         (long                   src1,
                                 long                   src2,
                                 wide *                 dst)                                TWOWORDINLINE(0x7005, 0xABC2);

EXTERN_API( long )
CompDiv                         (wide *                 numerator,
                                 long                   denominator,
                                 long *                 remainder)                          TWOWORDINLINE(0x7006, 0xABC2);

EXTERN_API( void )
CompFixMul                      (wide *                 compSrc,
                                 Fixed                  fixSrc,
                                 wide *                 compDst)                            TWOWORDINLINE(0x7007, 0xABC2);

EXTERN_API( void )
CompMulDiv                      (wide *                 co,
                                 long                   mul,
                                 long                   divisor)                            TWOWORDINLINE(0x7008, 0xABC2);

EXTERN_API( void )
CompMulDivTrunc                 (wide *                 co,
                                 long                   mul,
                                 long                   divisor,
                                 long *                 remainder)                          TWOWORDINLINE(0x700C, 0xABC2);

EXTERN_API( long )
CompCompare                     (const wide *           a,
                                 const wide *           minusb)                             TWOWORDINLINE(0x7009, 0xABC2);

EXTERN_API( unsigned long )
CompSquareRoot                  (const wide *           src)                                TWOWORDINLINE(0x7011, 0xABC2);

EXTERN_API( Fixed )
FixMulDiv                       (Fixed                  src,
                                 Fixed                  mul,
                                 Fixed                  divisor)                            TWOWORDINLINE(0x700A, 0xABC2);

EXTERN_API( Fixed )
UnsignedFixMulDiv               (Fixed                  src,
                                 Fixed                  mul,
                                 Fixed                  divisor)                            TWOWORDINLINE(0x700D, 0xABC2);

EXTERN_API( Fract )
FracSinCos                      (Fixed                  degree,
                                 Fract *                cosOut)                             TWOWORDINLINE(0x700B, 0xABC2);

EXTERN_API( Fixed )
FixExp2                         (Fixed                  src)                                TWOWORDINLINE(0x700E, 0xABC2);

EXTERN_API( Fixed )
FixLog2                         (Fixed                  src)                                TWOWORDINLINE(0x700F, 0xABC2);

EXTERN_API( Fixed )
FixPow                          (Fixed                  base,
                                 Fixed                  exp)                                TWOWORDINLINE(0x7010, 0xABC2);




typedef ComponentInstance               GraphicsImportComponent;
enum {
    GraphicsImporterComponentType = FOUR_CHAR_CODE('grip')
};

enum {
    graphicsImporterUsesImageDecompressor = 1L << 23
};

enum {
    quickTimeImageFileImageDescriptionAtom = FOUR_CHAR_CODE('idsc'),
    quickTimeImageFileImageDataAtom = FOUR_CHAR_CODE('idat'),
    quickTimeImageFileMetaDataAtom = FOUR_CHAR_CODE('meta'),
    quickTimeImageFileColorSyncProfileAtom = FOUR_CHAR_CODE('iicc')
};

enum {
    graphicsImporterDrawsAllPixels = 0,
    graphicsImporterDoesntDrawAllPixels = 1,
    graphicsImporterDontKnowIfDrawAllPixels = 2
};

/* Flags for GraphicsImportSetFlags */
enum {
    kGraphicsImporterDontDoGammaCorrection = 1L << 0,
    kGraphicsImporterTrustResolutionFromFile = 1L << 1,
    kGraphicsImporterEnableSubPixelPositioning = 1L << 2
};

enum {
    kGraphicsExportGroup        = FOUR_CHAR_CODE('expo'),
    kGraphicsExportFileType     = FOUR_CHAR_CODE('ftyp'),
    kGraphicsExportMIMEType     = FOUR_CHAR_CODE('mime'),
    kGraphicsExportExtension    = FOUR_CHAR_CODE('ext '),
    kGraphicsExportDescription  = FOUR_CHAR_CODE('desc')
};

/* User data types for layers of Photoshop files */
enum {
    kQTPhotoshopLayerMode       = FOUR_CHAR_CODE('lmod'),       /* OSType */
    kQTPhotoshopLayerOpacity    = FOUR_CHAR_CODE('lopa'),       /* UInt8, 0 = transparent .. 255 = opaque */
    kQTPhotoshopLayerClipping   = FOUR_CHAR_CODE('lclp'),       /* UInt8, 0 = base, 1 = non-base */
    kQTPhotoshopLayerFlags      = FOUR_CHAR_CODE('lflg'),       /* UInt8 */
    kQTPhotoshopLayerName       = FOUR_CHAR_CODE('©lnm'),       /* Text */
    kQTPhotoshopLayerUnicodeName = FOUR_CHAR_CODE('luni')       /* Unicode characters, not terminated */
};

/* User data returned by graphics importers to suggest intended use for indexed images */
enum {
    kQTIndexedImageType         = FOUR_CHAR_CODE('nth?'),       /* 1 or more OSTypes, such as the following values: */
    kQTIndexedImageIsThumbnail  = FOUR_CHAR_CODE('n=th'),       /* The image at this index is a thumbnail. */
    kQTIndexedImageIsLayer      = FOUR_CHAR_CODE('n=ly'),       /* The image at this index is a layer. */
    kQTIndexedImageIsPage       = FOUR_CHAR_CODE('n=pg'),       /* The image at this index is a page. */
    kQTIndexedImageIsMultiResolution = FOUR_CHAR_CODE('n=rs')   /* The image at this index is one of several identical images at different resolutions. */
};

/* Other user data types returned by graphics importers */
enum {
    kQTTIFFUserDataPrefix       = 0x74690000,                   /* Added to some tag values in TIFF IFDs to generate user data codes.  (0x7469 is 'ti'.) */
                                                                /* For example, YCbCrPositioning is tag 0x0213, so its user data code is 0x74690213. */
    kQTTIFFExifUserDataPrefix   = 0x65780000,                   /* Added to tag values in Exif IFDs to generate user data codes.  (0x6578 is 'ex'.) */
                                                                /* For example, DateTimeOriginal is tag 0x9003, so its user data code is 0x65789003. */
    kQTTIFFExifGPSUserDataPrefix = 0x67700000,                  /* Added to tag values in Exif GPS IFDs to generate user data codes.  (0x6770 is 'gp'.) */
                                                                /* For example, GPSAltitude is tag 0x0006, so its user data code is 0x6770006. */
    kQTAlphaMode                = FOUR_CHAR_CODE('almo'),       /* UInt32; eg, graphicsModeStraightAlpha or graphicsModePreBlackAlpha */
    kQTAlphaModePreMulColor     = FOUR_CHAR_CODE('almp'),       /* RGBColor; used if kQTAlphaMode is graphicsModePreMulColorAlpha */
    kUserDataIPTC               = FOUR_CHAR_CODE('iptc')
};

/* Found in TIFF and Exif JPEG files */
enum {
    kQTTIFFUserDataOrientation  = 0x74690112,                   /* 1 SHORT */
    kQTTIFFUserDataTransferFunction = 0x7469012D,               /* n SHORTs */
    kQTTIFFUserDataWhitePoint   = 0x7469013E,                   /* 2 RATIONALs */
    kQTTIFFUserDataPrimaryChromaticities = 0x7469013F,          /* 6 RATIONALs */
    kQTTIFFUserDataTransferRange = 0x74690156,                  /* 6 SHORTs */
    kQTTIFFUserDataYCbCrPositioning = 0x74690213,               /* 1 SHORT */
    kQTTIFFUserDataReferenceBlackWhite = 0x74690214             /* n LONGs */
};

/* Found in GeoTIFF files; defined in the GeoTIFF 1.0 spec */
enum {
    kQTTIFFUserDataModelPixelScale = 0x7469830E,                /* 3 DOUBLEs */
    kQTTIFFUserDataModelTransformation = 0x746985D8,            /* 16 DOUBLEs */
    kQTTIFFUserDataModelTiepoint = 0x74698482,                  /* n DOUBLEs */
    kQTTIFFUserDataGeoKeyDirectory = 0x746987AF,                /* n SHORTs */
    kQTTIFFUserDataGeoDoubleParams = 0x746987B0,                /* n DOUBLEs */
    kQTTIFFUserDataGeoAsciiParams = 0x746987B1,                 /* n ASCIIs */
    kQTTIFFUserDataIntergraphMatrix = 0x74698480                /* 16 or 17 DOUBLEs */
};

/* Found in Exif TIFF and Exif JPEG files; defined in the Exif 2.1 spec */
enum {
    kQTExifUserDataExifVersion  = 0x65789000,                   /* 4 bytes (import only) */
    kQTExifUserDataFlashPixVersion = 0x6578A000,                /* 4 bytes */
    kQTExifUserDataColorSpace   = 0x6578A001,                   /* 1 SHORT */
    kQTExifUserDataComponentsConfiguration = 0x65789101,        /* 4 bytes */
    kQTExifUserDataCompressedBitsPerPixel = 0x65789102,         /* 1 RATIONAL */
    kQTExifUserDataPixelXDimension = 0x6578A002,                /* 1 SHORT or LONG */
    kQTExifUserDataPixelYDimension = 0x6578A003,                /* 1 SHORT or LONG */
    kQTExifUserDataMakerNote    = 0x6578927C,                   /* n bytes */
    kQTExifUserDataUserComment  = 0x6578928C,                   /* n bytes */
    kQTExifUserDataRelatedSoundFile = 0x6578A004,               /* 13 ASCIIs*/
    kQTExifUserDataDateTimeOriginal = 0x65789003,               /* 20 ASCIIs */
    kQTExifUserDataDateTimeDigitized = 0x65789004,              /* 20 ASCIIs */
    kQTExifUserDataSubSecTime   = 0x65789290,                   /* n ASCIIs */
    kQTExifUserDataSubSecTimeOriginal = 0x65789291,             /* n ASCIIs */
    kQTExifUserDataSubSecTimeDigitized = 0x65789292,            /* n ASCIIs */
    kQTExifUserDataExposureTime = 0x6578829A,                   /* 1 RATIONAL */
    kQTExifUserDataFNumber      = 0x6578829D,                   /* 1 RATIONAL */
    kQTExifUserDataExposureProgram = 0x65788822,                /* 1 SHORT */
    kQTExifUserDataSpectralSensitivity = 0x65788824,            /* n ASCIIs */
    kQTExifUserDataISOSpeedRatings = 0x65788827,                /* n SHORTs */
    kQTExifUserDataShutterSpeedValue = 0x65789201,              /* 1 SIGNED RATIONAL */
    kQTExifUserDataApertureValue = 0x65789202,                  /* 1 RATIONAL */
    kQTExifUserDataBrightnessValue = 0x65789203,                /* 1 SIGNED RATIONAL */
    kQTExifUserDataExposureBiasValue = 0x65789204,              /* 1 SIGNED RATIONAL */
    kQTExifUserDataMaxApertureValue = 0x65789205,               /* 1 RATIONAL */
    kQTExifUserDataSubjectDistance = 0x65789206,                /* 1 RATIONAL */
    kQTExifUserDataMeteringMode = 0x65789207,                   /* 1 SHORT */
    kQTExifUserDataLightSource  = 0x65789208,                   /* 1 SHORT */
    kQTExifUserDataFlash        = 0x65789209,                   /* 1 SHORT */
    kQTExifUserDataFocalLength  = 0x6578920A,                   /* 1 RATIONAL */
    kQTExifUserDataFlashEnergy  = 0x6578A20B,                   /* 1 RATIONAL */
    kQTExifUserDataFocalPlaneXResolution = 0x6578A20E,          /* 1 RATIONAL */
    kQTExifUserDataFocalPlaneYResolution = 0x6578A20F,          /* 1 RATIONAL */
    kQTExifUserDataFocalPlaneResolutionUnit = 0x6578A210,       /* 1 SHORT */
    kQTExifUserDataSubjectLocation = 0x6578A214,                /* 1 SHORT */
    kQTExifUserDataExposureIndex = 0x6578A215,                  /* 1 RATIONAL */
    kQTExifUserDataSensingMethod = 0x6578A217,                  /* 1 SHORT */
    kQTExifUserDataFileSource   = 0x6578A300,                   /* 1 UNDEFINED */
    kQTExifUserDataSceneType    = 0x6578A301                    /* 1 UNDEFINED */
};

/* Found in some Exif TIFF and Exif JPEG files; defined in the Exif 2.1 spec */
enum {
    kQTExifUserDataGPSVersionID = 0x06770000,                   /* 4 BYTEs */
    kQTExifUserDataGPSLatitudeRef = 0x06770001,                 /* 2 ASCIIs*/
    kQTExifUserDataGPSLatitude  = 0x06770002,                   /* 3 RATIONALs */
    kQTExifUserDataGPSLongitudeRef = 0x06770003,                /* 2 ASCIIs */
    kQTExifUserDataGPSLongitude = 0x06770004,                   /* 3 RATIONALs */
    kQTExifUserDataGPSAltitudeRef = 0x06770005,                 /* 1 BYTE */
    kQTExifUserDataGPSAltitude  = 0x06770006,                   /* 1 RATIONAL */
    kQTExifUserDataGPSTimeStamp = 0x06770007,                   /* 3 RATIONALs */
    kQTExifUserDataGPSSatellites = 0x06770008,                  /* n ASCIIs */
    kQTExifUserDataGPSStatus    = 0x06770009,                   /* 2 ASCIIs */
    kQTExifUserDataGPSMeasureMode = 0x0677000A,                 /* 2 ASCIIs */
    kQTExifUserDataGPSDOP       = 0x0677000B,                   /* 1 RATIONAL */
    kQTExifUserDataGPSSpeedRef  = 0x0677000C,                   /* 2 ASCIIs */
    kQTExifUserDataGPSSpeed     = 0x0677000D,                   /* 1 RATIONAL */
    kQTExifUserDataGPSTrackRef  = 0x0677000E,                   /* 2 ASCIIs */
    kQTExifUserDataGPSTrack     = 0x0677000F,                   /* 1 RATIONAL */
    kQTExifUserDataGPSImgDirectionRef = 0x06770010,             /* 2 ASCIIs */
    kQTExifUserDataGPSImgDirection = 0x06770011,                /* 1 RATIONAL */
    kQTExifUserDataGPSMapDatum  = 0x06770012,                   /* n ASCII */
    kQTExifUserDataGPSDestLatitudeRef = 0x06770013,             /* 2 ASCIIs */
    kQTExifUserDataGPSDestLatitude = 0x06770014,                /* 3 RATIONALs */
    kQTExifUserDataGPSDestLongitudeRef = 0x06770015,            /* 2 ASCIIs */
    kQTExifUserDataGPSDestLongitude = 0x06770016,               /* 3 RATIONALs */
    kQTExifUserDataGPSDestBearingRef = 0x06770017,              /* 2 ASCIIs */
    kQTExifUserDataGPSDestBearing = 0x06770018,                 /* 1 RATIONAL */
    kQTExifUserDataGPSDestDistanceRef = 0x06770019,             /* 2 ASCIIs */
    kQTExifUserDataGPSDestDistance = 0x0677001A                 /* 1 RATIONAL */
};


/** These are GraphicsImport procedures **/
EXTERN_API( ComponentResult )
GraphicsImportSetDataReference  (GraphicsImportComponent  ci,
                                 Handle                 dataRef,
                                 OSType                 dataReType)                         FIVEWORDINLINE(0x2F3C, 0x0008, 0x0001, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetDataReference  (GraphicsImportComponent  ci,
                                 Handle *               dataRef,
                                 OSType *               dataReType)                         FIVEWORDINLINE(0x2F3C, 0x0008, 0x0002, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetDataFile       (GraphicsImportComponent  ci,
                                 const FSSpec *         theFile)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x0003, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetDataFile       (GraphicsImportComponent  ci,
                                 FSSpec *               theFile)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x0004, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetDataHandle     (GraphicsImportComponent  ci,
                                 Handle                 h)                                  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0005, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetDataHandle     (GraphicsImportComponent  ci,
                                 Handle *               h)                                  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0006, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetImageDescription (GraphicsImportComponent  ci,
                                 ImageDescriptionHandle * desc)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0x0007, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetDataOffsetAndSize (GraphicsImportComponent  ci,
                                 unsigned long *        offset,
                                 unsigned long *        size)                               FIVEWORDINLINE(0x2F3C, 0x0008, 0x0008, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportReadData          (GraphicsImportComponent  ci,
                                 void *                 dataPtr,
                                 unsigned long          dataOffset,
                                 unsigned long          dataSize)                           FIVEWORDINLINE(0x2F3C, 0x000C, 0x0009, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetClip           (GraphicsImportComponent  ci,
                                 RgnHandle              clipRgn)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x000A, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetClip           (GraphicsImportComponent  ci,
                                 RgnHandle *            clipRgn)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x000B, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetSourceRect     (GraphicsImportComponent  ci,
                                 const Rect *           sourceRect)                         FIVEWORDINLINE(0x2F3C, 0x0004, 0x000C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetSourceRect     (GraphicsImportComponent  ci,
                                 Rect *                 sourceRect)                         FIVEWORDINLINE(0x2F3C, 0x0004, 0x000D, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetNaturalBounds  (GraphicsImportComponent  ci,
                                 Rect *                 naturalBounds)                      FIVEWORDINLINE(0x2F3C, 0x0004, 0x000E, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportDraw              (GraphicsImportComponent  ci)                               FIVEWORDINLINE(0x2F3C, 0x0000, 0x000F, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetGWorld         (GraphicsImportComponent  ci,
                                 CGrafPtr               port,
                                 GDHandle               gd)                                 FIVEWORDINLINE(0x2F3C, 0x0008, 0x0010, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetGWorld         (GraphicsImportComponent  ci,
                                 CGrafPtr *             port,
                                 GDHandle *             gd)                                 FIVEWORDINLINE(0x2F3C, 0x0008, 0x0011, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetMatrix         (GraphicsImportComponent  ci,
                                 const MatrixRecord *   matrix)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0x0012, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetMatrix         (GraphicsImportComponent  ci,
                                 MatrixRecord *         matrix)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0x0013, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetBoundsRect     (GraphicsImportComponent  ci,
                                 const Rect *           bounds)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0x0014, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetBoundsRect     (GraphicsImportComponent  ci,
                                 Rect *                 bounds)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0x0015, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSaveAsPicture     (GraphicsImportComponent  ci,
                                 const FSSpec *         fss,
                                 ScriptCode             scriptTag)                          FIVEWORDINLINE(0x2F3C, 0x0006, 0x0016, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetGraphicsMode   (GraphicsImportComponent  ci,
                                 long                   graphicsMode,
                                 const RGBColor *       opColor)                            FIVEWORDINLINE(0x2F3C, 0x0008, 0x0017, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetGraphicsMode   (GraphicsImportComponent  ci,
                                 long *                 graphicsMode,
                                 RGBColor *             opColor)                            FIVEWORDINLINE(0x2F3C, 0x0008, 0x0018, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetQuality        (GraphicsImportComponent  ci,
                                 CodecQ                 quality)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x0019, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetQuality        (GraphicsImportComponent  ci,
                                 CodecQ *               quality)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x001A, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSaveAsQuickTimeImageFile (GraphicsImportComponent  ci,
                                 const FSSpec *         fss,
                                 ScriptCode             scriptTag)                          FIVEWORDINLINE(0x2F3C, 0x0006, 0x001B, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetDataReferenceOffsetAndLimit (GraphicsImportComponent  ci,
                                 unsigned long          offset,
                                 unsigned long          limit)                              FIVEWORDINLINE(0x2F3C, 0x0008, 0x001C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetDataReferenceOffsetAndLimit (GraphicsImportComponent  ci,
                                 unsigned long *        offset,
                                 unsigned long *        limit)                              FIVEWORDINLINE(0x2F3C, 0x0008, 0x001D, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetAliasedDataReference (GraphicsImportComponent  ci,
                                 Handle *               dataRef,
                                 OSType *               dataRefType)                        FIVEWORDINLINE(0x2F3C, 0x0008, 0x001E, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportValidate          (GraphicsImportComponent  ci,
                                 Boolean *              valid)                              FIVEWORDINLINE(0x2F3C, 0x0004, 0x001F, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetMetaData       (GraphicsImportComponent  ci,
                                 void *                 userData)                           FIVEWORDINLINE(0x2F3C, 0x0004, 0x0020, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetMIMETypeList   (GraphicsImportComponent  ci,
                                 void *                 qtAtomContainerPtr)                 FIVEWORDINLINE(0x2F3C, 0x0004, 0x0021, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportDoesDrawAllPixels (GraphicsImportComponent  ci,
                                 short *                drawsAllPixels)                     FIVEWORDINLINE(0x2F3C, 0x0004, 0x0022, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetAsPicture      (GraphicsImportComponent  ci,
                                 PicHandle *            picture)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x0023, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportExportImageFile   (GraphicsImportComponent  ci,
                                 OSType                 fileType,
                                 OSType                 fileCreator,
                                 const FSSpec *         fss,
                                 ScriptCode             scriptTag)                          FIVEWORDINLINE(0x2F3C, 0x000E, 0x0024, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetExportImageTypeList (GraphicsImportComponent  ci,
                                 void *                 qtAtomContainerPtr)                 FIVEWORDINLINE(0x2F3C, 0x0004, 0x0025, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportDoExportImageFileDialog (GraphicsImportComponent  ci,
                                 const FSSpec *         inDefaultSpec,
                                 StringPtr              prompt,
                                 ModalFilterYDUPP       filterProc,
                                 OSType *               outExportedType,
                                 FSSpec *               outExportedSpec,
                                 ScriptCode *           outScriptTag)                       FIVEWORDINLINE(0x2F3C, 0x0018, 0x0026, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetExportSettingsAsAtomContainer (GraphicsImportComponent  ci,
                                 void *                 qtAtomContainerPtr)                 FIVEWORDINLINE(0x2F3C, 0x0004, 0x0027, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetExportSettingsFromAtomContainer (GraphicsImportComponent  ci,
                                 void *                 qtAtomContainer)                    FIVEWORDINLINE(0x2F3C, 0x0004, 0x0028, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetProgressProc   (GraphicsImportComponent  ci,
                                 ICMProgressProcRecordPtr  progressProc)                    FIVEWORDINLINE(0x2F3C, 0x0004, 0x0029, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetProgressProc   (GraphicsImportComponent  ci,
                                 ICMProgressProcRecordPtr  progressProc)                    FIVEWORDINLINE(0x2F3C, 0x0004, 0x002A, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetImageCount     (GraphicsImportComponent  ci,
                                 unsigned long *        imageCount)                         FIVEWORDINLINE(0x2F3C, 0x0004, 0x002B, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetImageIndex     (GraphicsImportComponent  ci,
                                 unsigned long          imageIndex)                         FIVEWORDINLINE(0x2F3C, 0x0004, 0x002C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetImageIndex     (GraphicsImportComponent  ci,
                                 unsigned long *        imageIndex)                         FIVEWORDINLINE(0x2F3C, 0x0004, 0x002D, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetDataOffsetAndSize64 (GraphicsImportComponent  ci,
                                 wide *                 offset,
                                 wide *                 size)                               FIVEWORDINLINE(0x2F3C, 0x0008, 0x002E, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportReadData64        (GraphicsImportComponent  ci,
                                 void *                 dataPtr,
                                 const wide *           dataOffset,
                                 unsigned long          dataSize)                           FIVEWORDINLINE(0x2F3C, 0x000C, 0x002F, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetDataReferenceOffsetAndLimit64 (GraphicsImportComponent  ci,
                                 const wide *           offset,
                                 const wide *           limit)                              FIVEWORDINLINE(0x2F3C, 0x0008, 0x0030, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetDataReferenceOffsetAndLimit64 (GraphicsImportComponent  ci,
                                 wide *                 offset,
                                 wide *                 limit)                              FIVEWORDINLINE(0x2F3C, 0x0008, 0x0031, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetDefaultMatrix  (GraphicsImportComponent  ci,
                                 MatrixRecord *         defaultMatrix)                      FIVEWORDINLINE(0x2F3C, 0x0004, 0x0032, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetDefaultClip    (GraphicsImportComponent  ci,
                                 RgnHandle *            defaultRgn)                         FIVEWORDINLINE(0x2F3C, 0x0004, 0x0033, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetDefaultGraphicsMode (GraphicsImportComponent  ci,
                                 long *                 defaultGraphicsMode,
                                 RGBColor *             defaultOpColor)                     FIVEWORDINLINE(0x2F3C, 0x0008, 0x0034, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetDefaultSourceRect (GraphicsImportComponent  ci,
                                 Rect *                 defaultSourceRect)                  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0035, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetColorSyncProfile (GraphicsImportComponent  ci,
                                 Handle *               profile)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x0036, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetDestRect       (GraphicsImportComponent  ci,
                                 const Rect *           destRect)                           FIVEWORDINLINE(0x2F3C, 0x0004, 0x0037, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetDestRect       (GraphicsImportComponent  ci,
                                 Rect *                 destRect)                           FIVEWORDINLINE(0x2F3C, 0x0004, 0x0038, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetFlags          (GraphicsImportComponent  ci,
                                 long                   flags)                              FIVEWORDINLINE(0x2F3C, 0x0004, 0x0039, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportGetFlags          (GraphicsImportComponent  ci,
                                 long *                 flags)                              FIVEWORDINLINE(0x2F3C, 0x0004, 0x003A, 0x7000, 0xA82A);

/* 2 private selectors */
EXTERN_API( ComponentResult )
GraphicsImportGetBaseDataOffsetAndSize64 (GraphicsImportComponent  ci,
                                 wide *                 offset,
                                 wide *                 size)                               FIVEWORDINLINE(0x2F3C, 0x0008, 0x003D, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsImportSetImageIndexToThumbnail (GraphicsImportComponent  ci)                        FIVEWORDINLINE(0x2F3C, 0x0000, 0x003E, 0x7000, 0xA82A);



typedef ComponentInstance               GraphicsExportComponent;
enum {
    GraphicsExporterComponentType = FOUR_CHAR_CODE('grex'),
    kBaseGraphicsExporterSubType = FOUR_CHAR_CODE('base')
};

enum {
    graphicsExporterIsBaseExporter = 1L << 0,
    graphicsExporterCanTranscode = 1L << 1,
    graphicsExporterUsesImageCompressor = 1L << 2
};


struct QTResolutionSettings {
    Fixed                           horizontalResolution;
    Fixed                           verticalResolution;
};
typedef struct QTResolutionSettings     QTResolutionSettings;

struct QTTargetDataSize {
    unsigned long                   targetDataSize;
};
typedef struct QTTargetDataSize         QTTargetDataSize;

struct QTThumbnailSettings {
    long                            enableThumbnail;            /* a thoroughly padded Boolean*/
    long                            maxThumbnailWidth;          /* set to zero to let someone else decide*/
    long                            maxThumbnailHeight;         /* set to zero to let someone else decide*/
};
typedef struct QTThumbnailSettings      QTThumbnailSettings;
enum {
    kQTResolutionSettings       = FOUR_CHAR_CODE('reso'),
    kQTTargetDataSize           = FOUR_CHAR_CODE('dasz'),
    kQTDontRecompress           = FOUR_CHAR_CODE('dntr'),
    kQTInterlaceStyle           = FOUR_CHAR_CODE('ilac'),
    kQTColorSyncProfile         = FOUR_CHAR_CODE('iccp'),
    kQTThumbnailSettings        = FOUR_CHAR_CODE('thum'),
    kQTEnableExif               = FOUR_CHAR_CODE('exif'),       /* UInt8 (boolean)*/
    kQTMetaData                 = FOUR_CHAR_CODE('meta')
};

enum {
    kQTTIFFCompressionMethod    = FOUR_CHAR_CODE('tifc'),       /* UInt32*/
    kQTTIFFCompression_None     = 1,
    kQTTIFFCompression_PackBits = 32773L,
    kQTTIFFLittleEndian         = FOUR_CHAR_CODE('tife')        /* UInt8 (boolean)*/
};

enum {
    kQTPNGFilterPreference      = FOUR_CHAR_CODE('pngf'),       /* UInt32*/
    kQTPNGFilterBestForColorType = FOUR_CHAR_CODE('bflt'),
    kQTPNGFilterNone            = 0,
    kQTPNGFilterSub             = 1,
    kQTPNGFilterUp              = 2,
    kQTPNGFilterAverage         = 3,
    kQTPNGFilterPaeth           = 4,
    kQTPNGFilterAdaptivePerRow  = FOUR_CHAR_CODE('aflt'),
    kQTPNGInterlaceStyle        = FOUR_CHAR_CODE('ilac'),       /* UInt32*/
    kQTPNGInterlaceNone         = 0,
    kQTPNGInterlaceAdam7        = 1
};


/** These are GraphicsExport procedures **/
/* To use: set the input and output (and other settings as desired) and call GEDoExport. */
EXTERN_API( ComponentResult )
GraphicsExportDoExport          (GraphicsExportComponent  ci,
                                 unsigned long *        actualSizeWritten)                  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0001, 0x7000, 0xA82A);

/* Used for internal communication between the base and format-specific graphics exporter: */
EXTERN_API( ComponentResult )
GraphicsExportCanTranscode      (GraphicsExportComponent  ci,
                                 Boolean *              canTranscode)                       FIVEWORDINLINE(0x2F3C, 0x0004, 0x0002, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportDoTranscode       (GraphicsExportComponent  ci)                               FIVEWORDINLINE(0x2F3C, 0x0000, 0x0003, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportCanUseCompressor  (GraphicsExportComponent  ci,
                                 Boolean *              canUseCompressor,
                                 void *                 codecSettingsAtomContainerPtr)      FIVEWORDINLINE(0x2F3C, 0x0008, 0x0004, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportDoUseCompressor   (GraphicsExportComponent  ci,
                                 void *                 codecSettingsAtomContainer,
                                 ImageDescriptionHandle * outDesc)                          FIVEWORDINLINE(0x2F3C, 0x0008, 0x0005, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportDoStandaloneExport (GraphicsExportComponent  ci)                              FIVEWORDINLINE(0x2F3C, 0x0000, 0x0006, 0x7000, 0xA82A);

/* Queries applications can make of a format-specific graphics exporter: */
EXTERN_API( ComponentResult )
GraphicsExportGetDefaultFileTypeAndCreator (GraphicsExportComponent  ci,
                                 OSType *               fileType,
                                 OSType *               fileCreator)                        FIVEWORDINLINE(0x2F3C, 0x0008, 0x0007, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetDefaultFileNameExtension (GraphicsExportComponent  ci,
                                 OSType *               fileNameExtension)                  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0008, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetMIMETypeList   (GraphicsExportComponent  ci,
                                 void *                 qtAtomContainerPtr)                 FIVEWORDINLINE(0x2F3C, 0x0004, 0x0009, 0x7000, 0xA82A);

/* (1 unused selector) */
/* Graphics exporter settings: */
EXTERN_API( ComponentResult )
GraphicsExportRequestSettings   (GraphicsExportComponent  ci,
                                 ModalFilterYDUPP       filterProc,
                                 void *                 yourDataProc)                       FIVEWORDINLINE(0x2F3C, 0x0008, 0x000B, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetSettingsFromAtomContainer (GraphicsExportComponent  ci,
                                 void *                 qtAtomContainer)                    FIVEWORDINLINE(0x2F3C, 0x0004, 0x000C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetSettingsAsAtomContainer (GraphicsExportComponent  ci,
                                 void *                 qtAtomContainerPtr)                 FIVEWORDINLINE(0x2F3C, 0x0004, 0x000D, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetSettingsAsText (GraphicsExportComponent  ci,
                                 Handle *               theText)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x000E, 0x7000, 0xA82A);

/* Graphics exporters may implement some or none of the following: */
EXTERN_API( ComponentResult )
GraphicsExportSetDontRecompress (GraphicsExportComponent  ci,
                                 Boolean                dontRecompress)                     FIVEWORDINLINE(0x2F3C, 0x0002, 0x000F, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetDontRecompress (GraphicsExportComponent  ci,
                                 Boolean *              dontRecompress)                     FIVEWORDINLINE(0x2F3C, 0x0004, 0x0010, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetInterlaceStyle (GraphicsExportComponent  ci,
                                 unsigned long          interlaceStyle)                     FIVEWORDINLINE(0x2F3C, 0x0004, 0x0011, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInterlaceStyle (GraphicsExportComponent  ci,
                                 unsigned long *        interlaceStyle)                     FIVEWORDINLINE(0x2F3C, 0x0004, 0x0012, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetMetaData       (GraphicsExportComponent  ci,
                                 void *                 userData)                           FIVEWORDINLINE(0x2F3C, 0x0004, 0x0013, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetMetaData       (GraphicsExportComponent  ci,
                                 void *                 userData)                           FIVEWORDINLINE(0x2F3C, 0x0004, 0x0014, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetTargetDataSize (GraphicsExportComponent  ci,
                                 unsigned long          targetDataSize)                     FIVEWORDINLINE(0x2F3C, 0x0004, 0x0015, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetTargetDataSize (GraphicsExportComponent  ci,
                                 unsigned long *        targetDataSize)                     FIVEWORDINLINE(0x2F3C, 0x0004, 0x0016, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetCompressionMethod (GraphicsExportComponent  ci,
                                 long                   compressionMethod)                  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0017, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetCompressionMethod (GraphicsExportComponent  ci,
                                 long *                 compressionMethod)                  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0018, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetCompressionQuality (GraphicsExportComponent  ci,
                                 CodecQ                 spatialQuality)                     FIVEWORDINLINE(0x2F3C, 0x0004, 0x0019, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetCompressionQuality (GraphicsExportComponent  ci,
                                 CodecQ *               spatialQuality)                     FIVEWORDINLINE(0x2F3C, 0x0004, 0x001A, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetResolution     (GraphicsExportComponent  ci,
                                 Fixed                  horizontalResolution,
                                 Fixed                  verticalResolution)                 FIVEWORDINLINE(0x2F3C, 0x0008, 0x001B, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetResolution     (GraphicsExportComponent  ci,
                                 Fixed *                horizontalResolution,
                                 Fixed *                verticalResolution)                 FIVEWORDINLINE(0x2F3C, 0x0008, 0x001C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetDepth          (GraphicsExportComponent  ci,
                                 long                   depth)                              FIVEWORDINLINE(0x2F3C, 0x0004, 0x001D, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetDepth          (GraphicsExportComponent  ci,
                                 long *                 depth)                              FIVEWORDINLINE(0x2F3C, 0x0004, 0x001E, 0x7000, 0xA82A);

/* (2 unused selectors) */
EXTERN_API( ComponentResult )
GraphicsExportSetColorSyncProfile (GraphicsExportComponent  ci,
                                 Handle                 colorSyncProfile)                   FIVEWORDINLINE(0x2F3C, 0x0004, 0x0021, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetColorSyncProfile (GraphicsExportComponent  ci,
                                 Handle *               colorSyncProfile)                   FIVEWORDINLINE(0x2F3C, 0x0004, 0x0022, 0x7000, 0xA82A);

/* Always implemented by the base graphics exporter: */
EXTERN_API( ComponentResult )
GraphicsExportSetProgressProc   (GraphicsExportComponent  ci,
                                 ICMProgressProcRecordPtr  progressProc)                    FIVEWORDINLINE(0x2F3C, 0x0004, 0x0023, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetProgressProc   (GraphicsExportComponent  ci,
                                 ICMProgressProcRecordPtr  progressProc)                    FIVEWORDINLINE(0x2F3C, 0x0004, 0x0024, 0x7000, 0xA82A);

/* Sources for the input image: */
EXTERN_API( ComponentResult )
GraphicsExportSetInputDataReference (GraphicsExportComponent  ci,
                                 Handle                 dataRef,
                                 OSType                 dataRefType,
                                 ImageDescriptionHandle  desc)                              FIVEWORDINLINE(0x2F3C, 0x000C, 0x0025, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInputDataReference (GraphicsExportComponent  ci,
                                 Handle *               dataRef,
                                 OSType *               dataRefType)                        FIVEWORDINLINE(0x2F3C, 0x0008, 0x0026, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetInputFile      (GraphicsExportComponent  ci,
                                 const FSSpec *         theFile,
                                 ImageDescriptionHandle  desc)                              FIVEWORDINLINE(0x2F3C, 0x0008, 0x0027, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInputFile      (GraphicsExportComponent  ci,
                                 FSSpec *               theFile)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x0028, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetInputHandle    (GraphicsExportComponent  ci,
                                 Handle                 h,
                                 ImageDescriptionHandle  desc)                              FIVEWORDINLINE(0x2F3C, 0x0008, 0x0029, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInputHandle    (GraphicsExportComponent  ci,
                                 Handle *               h)                                  FIVEWORDINLINE(0x2F3C, 0x0004, 0x002A, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetInputPtr       (GraphicsExportComponent  ci,
                                 Ptr                    p,
                                 unsigned long          size,
                                 ImageDescriptionHandle  desc)                              FIVEWORDINLINE(0x2F3C, 0x000C, 0x002B, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInputPtr       (GraphicsExportComponent  ci,
                                 Ptr *                  p,
                                 unsigned long *        size)                               FIVEWORDINLINE(0x2F3C, 0x0008, 0x002C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetInputGraphicsImporter (GraphicsExportComponent  ci,
                                 GraphicsImportComponent  grip)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0x002D, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInputGraphicsImporter (GraphicsExportComponent  ci,
                                 GraphicsImportComponent * grip)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x002E, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetInputPicture   (GraphicsExportComponent  ci,
                                 PicHandle              picture)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x002F, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInputPicture   (GraphicsExportComponent  ci,
                                 PicHandle *            picture)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x0030, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetInputGWorld    (GraphicsExportComponent  ci,
                                 GWorldPtr              gworld)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0x0031, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInputGWorld    (GraphicsExportComponent  ci,
                                 GWorldPtr *            gworld)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0x0032, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetInputPixmap    (GraphicsExportComponent  ci,
                                 PixMapHandle           pixmap)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0x0033, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInputPixmap    (GraphicsExportComponent  ci,
                                 PixMapHandle *         pixmap)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0x0034, 0x7000, 0xA82A);

/* Only applicable when the input is a data reference, file, handle or ptr: */
EXTERN_API( ComponentResult )
GraphicsExportSetInputOffsetAndLimit (GraphicsExportComponent  ci,
                                 unsigned long          offset,
                                 unsigned long          limit)                              FIVEWORDINLINE(0x2F3C, 0x0008, 0x0035, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInputOffsetAndLimit (GraphicsExportComponent  ci,
                                 unsigned long *        offset,
                                 unsigned long *        limit)                              FIVEWORDINLINE(0x2F3C, 0x0008, 0x0036, 0x7000, 0xA82A);

/* Used by format-specific graphics exporters when transcoding: */
EXTERN_API( ComponentResult )
GraphicsExportMayExporterReadInputData (GraphicsExportComponent  ci,
                                 Boolean *              mayReadInputData)                   FIVEWORDINLINE(0x2F3C, 0x0004, 0x0037, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInputDataSize  (GraphicsExportComponent  ci,
                                 unsigned long *        size)                               FIVEWORDINLINE(0x2F3C, 0x0004, 0x0038, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportReadInputData     (GraphicsExportComponent  ci,
                                 void *                 dataPtr,
                                 unsigned long          dataOffset,
                                 unsigned long          dataSize)                           FIVEWORDINLINE(0x2F3C, 0x000C, 0x0039, 0x7000, 0xA82A);

/* Used by format-specific graphics exporters, especially when doing standalone export: */
EXTERN_API( ComponentResult )
GraphicsExportGetInputImageDescription (GraphicsExportComponent  ci,
                                 ImageDescriptionHandle * desc)                             FIVEWORDINLINE(0x2F3C, 0x0004, 0x003A, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInputImageDimensions (GraphicsExportComponent  ci,
                                 Rect *                 dimensions)                         FIVEWORDINLINE(0x2F3C, 0x0004, 0x003B, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetInputImageDepth (GraphicsExportComponent  ci,
                                 long *                 inputDepth)                         FIVEWORDINLINE(0x2F3C, 0x0004, 0x003C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportDrawInputImage    (GraphicsExportComponent  ci,
                                 CGrafPtr               gw,
                                 GDHandle               gd,
                                 const Rect *           srcRect,
                                 const Rect *           dstRect)                            FIVEWORDINLINE(0x2F3C, 0x0010, 0x003D, 0x7000, 0xA82A);

/* Destinations for the output image: */
EXTERN_API( ComponentResult )
GraphicsExportSetOutputDataReference (GraphicsExportComponent  ci,
                                 Handle                 dataRef,
                                 OSType                 dataRefType)                        FIVEWORDINLINE(0x2F3C, 0x0008, 0x003E, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetOutputDataReference (GraphicsExportComponent  ci,
                                 Handle *               dataRef,
                                 OSType *               dataRefType)                        FIVEWORDINLINE(0x2F3C, 0x0008, 0x003F, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetOutputFile     (GraphicsExportComponent  ci,
                                 const FSSpec *         theFile)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x0040, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetOutputFile     (GraphicsExportComponent  ci,
                                 FSSpec *               theFile)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x0041, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetOutputHandle   (GraphicsExportComponent  ci,
                                 Handle                 h)                                  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0042, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetOutputHandle   (GraphicsExportComponent  ci,
                                 Handle *               h)                                  FIVEWORDINLINE(0x2F3C, 0x0004, 0x0043, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetOutputOffsetAndMaxSize (GraphicsExportComponent  ci,
                                 unsigned long          offset,
                                 unsigned long          maxSize,
                                 Boolean                truncateFile)                       FIVEWORDINLINE(0x2F3C, 0x000A, 0x0044, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetOutputOffsetAndMaxSize (GraphicsExportComponent  ci,
                                 unsigned long *        offset,
                                 unsigned long *        maxSize,
                                 Boolean *              truncateFile)                       FIVEWORDINLINE(0x2F3C, 0x000C, 0x0045, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetOutputFileTypeAndCreator (GraphicsExportComponent  ci,
                                 OSType                 fileType,
                                 OSType                 fileCreator)                        FIVEWORDINLINE(0x2F3C, 0x0008, 0x0046, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetOutputFileTypeAndCreator (GraphicsExportComponent  ci,
                                 OSType *               fileType,
                                 OSType *               fileCreator)                        FIVEWORDINLINE(0x2F3C, 0x0008, 0x0047, 0x7000, 0xA82A);

/* Used by format-specific graphics exporters: */
EXTERN_API( ComponentResult )
GraphicsExportWriteOutputData   (GraphicsExportComponent  ci,
                                 const void *           dataPtr,
                                 unsigned long          dataSize)                           FIVEWORDINLINE(0x2F3C, 0x0008, 0x0048, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportSetOutputMark     (GraphicsExportComponent  ci,
                                 unsigned long          mark)                               FIVEWORDINLINE(0x2F3C, 0x0004, 0x0049, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetOutputMark     (GraphicsExportComponent  ci,
                                 unsigned long *        mark)                               FIVEWORDINLINE(0x2F3C, 0x0004, 0x004A, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportReadOutputData    (GraphicsExportComponent  ci,
                                 void *                 dataPtr,
                                 unsigned long          dataOffset,
                                 unsigned long          dataSize)                           FIVEWORDINLINE(0x2F3C, 0x000C, 0x004B, 0x7000, 0xA82A);

/* Allows embedded thumbnail creation, if supported. */
EXTERN_API( ComponentResult )
GraphicsExportSetThumbnailEnabled (GraphicsExportComponent  ci,
                                 Boolean                enableThumbnail,
                                 long                   maxThumbnailWidth,
                                 long                   maxThumbnailHeight)                 FIVEWORDINLINE(0x2F3C, 0x000A, 0x004C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetThumbnailEnabled (GraphicsExportComponent  ci,
                                 Boolean *              thumbnailEnabled,
                                 long *                 maxThumbnailWidth,
                                 long *                 maxThumbnailHeight)                 FIVEWORDINLINE(0x2F3C, 0x000C, 0x004D, 0x7000, 0xA82A);

/* Allows export of Exif files, if supported.  This disables Exif-incompatible settings such as grayscale JPEG and compressed TIFF, and enables export of Exif metadata. */
EXTERN_API( ComponentResult )
GraphicsExportSetExifEnabled    (GraphicsExportComponent  ci,
                                 Boolean                enableExif)                         FIVEWORDINLINE(0x2F3C, 0x0002, 0x004E, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
GraphicsExportGetExifEnabled    (GraphicsExportComponent  ci,
                                 Boolean *              exifEnabled)                        FIVEWORDINLINE(0x2F3C, 0x0004, 0x004F, 0x7000, 0xA82A);



typedef ComponentInstance               ImageTranscoderComponent;
enum {
    ImageTranscodererComponentType = FOUR_CHAR_CODE('imtc')
};


/** These are ImageTranscoder procedures **/
EXTERN_API( ComponentResult )
ImageTranscoderBeginSequence    (ImageTranscoderComponent  itc,
                                 ImageDescriptionHandle  srcDesc,
                                 ImageDescriptionHandle * dstDesc,
                                 void *                 data,
                                 long                   dataSize)                           FIVEWORDINLINE(0x2F3C, 0x0010, 0x0001, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
ImageTranscoderConvert          (ImageTranscoderComponent  itc,
                                 void *                 srcData,
                                 long                   srcDataSize,
                                 void **                dstData,
                                 long *                 dstDataSize)                        FIVEWORDINLINE(0x2F3C, 0x0010, 0x0002, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
ImageTranscoderDisposeData      (ImageTranscoderComponent  itc,
                                 void *                 dstData)                            FIVEWORDINLINE(0x2F3C, 0x0004, 0x0003, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
ImageTranscoderEndSequence      (ImageTranscoderComponent  itc)                             FIVEWORDINLINE(0x2F3C, 0x0000, 0x0004, 0x7000, 0xA82A);

/* UPP call backs */

/* selectors for component calls */
enum {
    kGraphicsImportSetDataReferenceSelect      = 0x0001,
    kGraphicsImportGetDataReferenceSelect      = 0x0002,
    kGraphicsImportSetDataFileSelect           = 0x0003,
    kGraphicsImportGetDataFileSelect           = 0x0004,
    kGraphicsImportSetDataHandleSelect         = 0x0005,
    kGraphicsImportGetDataHandleSelect         = 0x0006,
    kGraphicsImportGetImageDescriptionSelect   = 0x0007,
    kGraphicsImportGetDataOffsetAndSizeSelect  = 0x0008,
    kGraphicsImportReadDataSelect              = 0x0009,
    kGraphicsImportSetClipSelect               = 0x000A,
    kGraphicsImportGetClipSelect               = 0x000B,
    kGraphicsImportSetSourceRectSelect         = 0x000C,
    kGraphicsImportGetSourceRectSelect         = 0x000D,
    kGraphicsImportGetNaturalBoundsSelect      = 0x000E,
    kGraphicsImportDrawSelect                  = 0x000F,
    kGraphicsImportSetGWorldSelect             = 0x0010,
    kGraphicsImportGetGWorldSelect             = 0x0011,
    kGraphicsImportSetMatrixSelect             = 0x0012,
    kGraphicsImportGetMatrixSelect             = 0x0013,
    kGraphicsImportSetBoundsRectSelect         = 0x0014,
    kGraphicsImportGetBoundsRectSelect         = 0x0015,
    kGraphicsImportSaveAsPictureSelect         = 0x0016,
    kGraphicsImportSetGraphicsModeSelect       = 0x0017,
    kGraphicsImportGetGraphicsModeSelect       = 0x0018,
    kGraphicsImportSetQualitySelect            = 0x0019,
    kGraphicsImportGetQualitySelect            = 0x001A,
    kGraphicsImportSaveAsQuickTimeImageFileSelect = 0x001B,
    kGraphicsImportSetDataReferenceOffsetAndLimitSelect = 0x001C,
    kGraphicsImportGetDataReferenceOffsetAndLimitSelect = 0x001D,
    kGraphicsImportGetAliasedDataReferenceSelect = 0x001E,
    kGraphicsImportValidateSelect              = 0x001F,
    kGraphicsImportGetMetaDataSelect           = 0x0020,
    kGraphicsImportGetMIMETypeListSelect       = 0x0021,
    kGraphicsImportDoesDrawAllPixelsSelect     = 0x0022,
    kGraphicsImportGetAsPictureSelect          = 0x0023,
    kGraphicsImportExportImageFileSelect       = 0x0024,
    kGraphicsImportGetExportImageTypeListSelect = 0x0025,
    kGraphicsImportDoExportImageFileDialogSelect = 0x0026,
    kGraphicsImportGetExportSettingsAsAtomContainerSelect = 0x0027,
    kGraphicsImportSetExportSettingsFromAtomContainerSelect = 0x0028,
    kGraphicsImportSetProgressProcSelect       = 0x0029,
    kGraphicsImportGetProgressProcSelect       = 0x002A,
    kGraphicsImportGetImageCountSelect         = 0x002B,
    kGraphicsImportSetImageIndexSelect         = 0x002C,
    kGraphicsImportGetImageIndexSelect         = 0x002D,
    kGraphicsImportGetDataOffsetAndSize64Select = 0x002E,
    kGraphicsImportReadData64Select            = 0x002F,
    kGraphicsImportSetDataReferenceOffsetAndLimit64Select = 0x0030,
    kGraphicsImportGetDataReferenceOffsetAndLimit64Select = 0x0031,
    kGraphicsImportGetDefaultMatrixSelect      = 0x0032,
    kGraphicsImportGetDefaultClipSelect        = 0x0033,
    kGraphicsImportGetDefaultGraphicsModeSelect = 0x0034,
    kGraphicsImportGetDefaultSourceRectSelect  = 0x0035,
    kGraphicsImportGetColorSyncProfileSelect   = 0x0036,
    kGraphicsImportSetDestRectSelect           = 0x0037,
    kGraphicsImportGetDestRectSelect           = 0x0038,
    kGraphicsImportSetFlagsSelect              = 0x0039,
    kGraphicsImportGetFlagsSelect              = 0x003A,
    kGraphicsImportGetBaseDataOffsetAndSize64Select = 0x003D,
    kGraphicsImportSetImageIndexToThumbnailSelect = 0x003E,
    kGraphicsExportDoExportSelect              = 0x0001,
    kGraphicsExportCanTranscodeSelect          = 0x0002,
    kGraphicsExportDoTranscodeSelect           = 0x0003,
    kGraphicsExportCanUseCompressorSelect      = 0x0004,
    kGraphicsExportDoUseCompressorSelect       = 0x0005,
    kGraphicsExportDoStandaloneExportSelect    = 0x0006,
    kGraphicsExportGetDefaultFileTypeAndCreatorSelect = 0x0007,
    kGraphicsExportGetDefaultFileNameExtensionSelect = 0x0008,
    kGraphicsExportGetMIMETypeListSelect       = 0x0009,
    kGraphicsExportRequestSettingsSelect       = 0x000B,
    kGraphicsExportSetSettingsFromAtomContainerSelect = 0x000C,
    kGraphicsExportGetSettingsAsAtomContainerSelect = 0x000D,
    kGraphicsExportGetSettingsAsTextSelect     = 0x000E,
    kGraphicsExportSetDontRecompressSelect     = 0x000F,
    kGraphicsExportGetDontRecompressSelect     = 0x0010,
    kGraphicsExportSetInterlaceStyleSelect     = 0x0011,
    kGraphicsExportGetInterlaceStyleSelect     = 0x0012,
    kGraphicsExportSetMetaDataSelect           = 0x0013,
    kGraphicsExportGetMetaDataSelect           = 0x0014,
    kGraphicsExportSetTargetDataSizeSelect     = 0x0015,
    kGraphicsExportGetTargetDataSizeSelect     = 0x0016,
    kGraphicsExportSetCompressionMethodSelect  = 0x0017,
    kGraphicsExportGetCompressionMethodSelect  = 0x0018,
    kGraphicsExportSetCompressionQualitySelect = 0x0019,
    kGraphicsExportGetCompressionQualitySelect = 0x001A,
    kGraphicsExportSetResolutionSelect         = 0x001B,
    kGraphicsExportGetResolutionSelect         = 0x001C,
    kGraphicsExportSetDepthSelect              = 0x001D,
    kGraphicsExportGetDepthSelect              = 0x001E,
    kGraphicsExportSetColorSyncProfileSelect   = 0x0021,
    kGraphicsExportGetColorSyncProfileSelect   = 0x0022,
    kGraphicsExportSetProgressProcSelect       = 0x0023,
    kGraphicsExportGetProgressProcSelect       = 0x0024,
    kGraphicsExportSetInputDataReferenceSelect = 0x0025,
    kGraphicsExportGetInputDataReferenceSelect = 0x0026,
    kGraphicsExportSetInputFileSelect          = 0x0027,
    kGraphicsExportGetInputFileSelect          = 0x0028,
    kGraphicsExportSetInputHandleSelect        = 0x0029,
    kGraphicsExportGetInputHandleSelect        = 0x002A,
    kGraphicsExportSetInputPtrSelect           = 0x002B,
    kGraphicsExportGetInputPtrSelect           = 0x002C,
    kGraphicsExportSetInputGraphicsImporterSelect = 0x002D,
    kGraphicsExportGetInputGraphicsImporterSelect = 0x002E,
    kGraphicsExportSetInputPictureSelect       = 0x002F,
    kGraphicsExportGetInputPictureSelect       = 0x0030,
    kGraphicsExportSetInputGWorldSelect        = 0x0031,
    kGraphicsExportGetInputGWorldSelect        = 0x0032,
    kGraphicsExportSetInputPixmapSelect        = 0x0033,
    kGraphicsExportGetInputPixmapSelect        = 0x0034,
    kGraphicsExportSetInputOffsetAndLimitSelect = 0x0035,
    kGraphicsExportGetInputOffsetAndLimitSelect = 0x0036,
    kGraphicsExportMayExporterReadInputDataSelect = 0x0037,
    kGraphicsExportGetInputDataSizeSelect      = 0x0038,
    kGraphicsExportReadInputDataSelect         = 0x0039,
    kGraphicsExportGetInputImageDescriptionSelect = 0x003A,
    kGraphicsExportGetInputImageDimensionsSelect = 0x003B,
    kGraphicsExportGetInputImageDepthSelect    = 0x003C,
    kGraphicsExportDrawInputImageSelect        = 0x003D,
    kGraphicsExportSetOutputDataReferenceSelect = 0x003E,
    kGraphicsExportGetOutputDataReferenceSelect = 0x003F,
    kGraphicsExportSetOutputFileSelect         = 0x0040,
    kGraphicsExportGetOutputFileSelect         = 0x0041,
    kGraphicsExportSetOutputHandleSelect       = 0x0042,
    kGraphicsExportGetOutputHandleSelect       = 0x0043,
    kGraphicsExportSetOutputOffsetAndMaxSizeSelect = 0x0044,
    kGraphicsExportGetOutputOffsetAndMaxSizeSelect = 0x0045,
    kGraphicsExportSetOutputFileTypeAndCreatorSelect = 0x0046,
    kGraphicsExportGetOutputFileTypeAndCreatorSelect = 0x0047,
    kGraphicsExportWriteOutputDataSelect       = 0x0048,
    kGraphicsExportSetOutputMarkSelect         = 0x0049,
    kGraphicsExportGetOutputMarkSelect         = 0x004A,
    kGraphicsExportReadOutputDataSelect        = 0x004B,
    kGraphicsExportSetThumbnailEnabledSelect   = 0x004C,
    kGraphicsExportGetThumbnailEnabledSelect   = 0x004D,
    kGraphicsExportSetExifEnabledSelect        = 0x004E,
    kGraphicsExportGetExifEnabledSelect        = 0x004F,
    kImageTranscoderBeginSequenceSelect        = 0x0001,
    kImageTranscoderConvertSelect              = 0x0002,
    kImageTranscoderDisposeDataSelect          = 0x0003,
    kImageTranscoderEndSequenceSelect          = 0x0004
};

#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

#ifdef __cplusplus
}
#endif

#endif /* __IMAGECOMPRESSION__ */

