6
typedef unsigned char Boolean;
7
typedef unsigned char Str31[32];
10
typedef int32_t OSErr;
13
typedef int32_t ComponentResult;
14
typedef unsigned char UInt8;
15
typedef signed char SInt8;
16
typedef unsigned short UInt16;
17
typedef signed short SInt16;
18
typedef uint32_t UInt32;
19
typedef int32_t SInt32;
21
#define FOUR_CHAR_CODE(a,b,c,d) ((uint32_t)(a)<<24 | (uint32_t)(b)<<16 | (uint32_t)(c)<<8 | (uint32_t)(d)) /* otherwise compiler will complain about values with high bit set */
23
// codec private shit:
24
typedef void *GlobalsPtr;
25
typedef void **Globals;
27
//==================== COMPONENTS ===========================
29
struct __attribute__((__packed__)) ComponentParameters {
30
UInt8 flags; /* call modifiers: sync/async, deferred, immed, etc */
31
UInt8 paramSize; /* size in bytes of actual parameters passed to this call */
32
short what; /* routine selector, negative for Component management calls */
33
int32_t params[1]; /* actual parameters for the indicated routine */
35
typedef struct ComponentParameters ComponentParameters;
38
struct __attribute__((__packed__)) ComponentDescription {
39
OSType componentType; /* A unique 4-byte code indentifying the command set */
40
OSType componentSubType; /* Particular flavor of this instance */
41
OSType componentManufacturer; /* Vendor indentification */
42
uint32_t componentFlags; /* 8 each for Component,Type,SubType,Manuf/revision */
43
uint32_t componentFlagsMask; /* Mask for specifying which flags to consider in search, zero during registration */
45
typedef struct ComponentDescription ComponentDescription;
48
struct __attribute__((__packed__)) ResourceSpec {
49
OSType resType; /* 4-byte code */
52
typedef struct ResourceSpec ResourceSpec;
55
struct __attribute__((__packed__)) ComponentResource {
56
ComponentDescription cd; /* Registration parameters */
57
ResourceSpec component; /* resource where Component code is found */
58
ResourceSpec componentName; /* name string resource */
59
ResourceSpec componentInfo; /* info string resource */
60
ResourceSpec componentIcon; /* icon resource */
62
typedef struct ComponentResource ComponentResource;
63
typedef ComponentResource * ComponentResourcePtr;
64
typedef ComponentResourcePtr * ComponentResourceHandle;
67
struct __attribute__((__packed__)) ComponentRecord {
70
typedef struct ComponentRecord ComponentRecord;
71
typedef ComponentRecord * Component;
74
struct __attribute__((__packed__)) ComponentInstanceRecord {
77
typedef struct ComponentInstanceRecord ComponentInstanceRecord;
79
typedef ComponentInstanceRecord * ComponentInstance;
81
// ========================= QUICKDRAW =========================
83
struct __attribute__((__packed__)) Rect {
89
typedef struct Rect Rect;
90
typedef Rect * RectPtr;
92
struct __attribute__((__packed__)) RGBColor {
93
unsigned short red; /*magnitude of red component*/
94
unsigned short green; /*magnitude of green component*/
95
unsigned short blue; /*magnitude of blue component*/
97
typedef struct RGBColor RGBColor;
98
typedef RGBColor * RGBColorPtr;
99
typedef RGBColorPtr * RGBColorHdl;
101
struct __attribute__((__packed__)) ColorSpec {
102
short value; /*index or other value*/
103
RGBColor rgb; /*true color*/
105
typedef struct ColorSpec ColorSpec;
106
typedef ColorSpec * ColorSpecPtr;
107
typedef ColorSpec CSpecArray[1];
109
struct __attribute__((__packed__)) ColorTable {
110
int32_t ctSeed; /*unique identifier for table*/
111
short ctFlags; /*high bit: 0 = PixMap; 1 = device*/
112
short ctSize; /*number of entries in CTTable*/
113
CSpecArray ctTable; /*array [0..0] of ColorSpec*/
115
typedef struct ColorTable ColorTable;
116
typedef ColorTable * CTabPtr;
117
typedef CTabPtr * CTabHandle;
119
struct __attribute__((__packed__)) MatrixRecord {
122
typedef struct MatrixRecord MatrixRecord;
123
typedef MatrixRecord * MatrixRecordPtr;
125
typedef int32_t ImageSequence;
126
typedef OSType CodecType;
127
typedef unsigned short CodecFlags;
128
typedef uint32_t CodecQ;
130
struct __attribute__((__packed__)) ImageDescription {
131
int32_t idSize; /* total size of ImageDescription including extra data ( CLUTs and other per sequence data ) */
132
CodecType cType; /* what kind of codec compressed this data */
133
int32_t resvd1; /* reserved for Apple use */
134
short resvd2; /* reserved for Apple use */
135
short dataRefIndex; /* set to zero */
136
short version; /* which version is this data */
137
short revisionLevel; /* what version of that codec did this */
138
int32_t vendor; /* whose codec compressed this data */
139
CodecQ temporalQuality; /* what was the temporal quality factor */
140
CodecQ spatialQuality; /* what was the spatial quality factor */
141
short width; /* how many pixels wide is this data */
142
short height; /* how many pixels high is this data */
143
Fixed hRes; /* horizontal resolution */
144
Fixed vRes; /* vertical resolution */
145
int32_t dataSize; /* if known, the size of data for this image descriptor */
146
short frameCount; /* number of frames this description applies to */
147
Str31 name; /* name of codec ( in case not installed ) */
148
short depth; /* what depth is this data (1-32) or ( 33-40 grayscale ) */
149
short clutID; /* clut id or if 0 clut follows or -1 if no clut */
151
typedef struct ImageDescription ImageDescription;
152
typedef ImageDescription * ImageDescriptionPtr;
153
typedef ImageDescriptionPtr * ImageDescriptionHandle;
155
/* values for PixMap.pixelFormat*/
157
k16LE555PixelFormat = FOUR_CHAR_CODE('L','5','5','5'), /* 16 bit LE rgb 555 (PC)*/
158
k16LE5551PixelFormat = FOUR_CHAR_CODE('5','5','5','1'), /* 16 bit LE rgb 5551*/
159
k16BE565PixelFormat = FOUR_CHAR_CODE('B','5','6','5'), /* 16 bit BE rgb 565*/
160
k16LE565PixelFormat = FOUR_CHAR_CODE('L','5','6','5'), /* 16 bit LE rgb 565*/
161
k24BGRPixelFormat = FOUR_CHAR_CODE('2','4','B','G'), /* 24 bit bgr */
162
k32BGRAPixelFormat = FOUR_CHAR_CODE('B','G','R','A'), /* 32 bit bgra (Matrox)*/
163
k32ABGRPixelFormat = FOUR_CHAR_CODE('A','B','G','R'), /* 32 bit abgr */
164
k32RGBAPixelFormat = FOUR_CHAR_CODE('R','G','B','A'), /* 32 bit rgba */
165
kYUVSPixelFormat = FOUR_CHAR_CODE('y','u','v','s'), /* YUV 4:2:2 byte ordering 16-unsigned = 'YUY2'*/
166
kYUVUPixelFormat = FOUR_CHAR_CODE('y','u','v','u'), /* YUV 4:2:2 byte ordering 16-signed*/
167
kYVU9PixelFormat = FOUR_CHAR_CODE('Y','V','U','9'), /* YVU9 Planar 9*/
168
kYUV411PixelFormat = FOUR_CHAR_CODE('Y','4','1','1'), /* YUV 4:1:1 Interleaved 16*/
169
kYVYU422PixelFormat = FOUR_CHAR_CODE('Y','V','Y','U'), /* YVYU 4:2:2 byte ordering 16*/
170
kUYVY422PixelFormat = FOUR_CHAR_CODE('U','Y','V','Y'), /* UYVY 4:2:2 byte ordering 16*/
171
kYUV211PixelFormat = FOUR_CHAR_CODE('Y','2','1','1'), /* YUV 2:1:1 Packed 8*/
172
k2vuyPixelFormat = FOUR_CHAR_CODE('2','v','u','y') /* UYVY 4:2:2 byte ordering 16*/
175
struct __attribute__((__packed__)) PixMapExtension {
176
int32_t extSize; /*size of struct, duh!*/
177
uint32_t pmBits; /*pixmap attributes bitfield*/
178
void * pmGD; /*this is a GDHandle*/
180
Fixed gammaLevel; /*pixmap gammalevel*/
181
Fixed requestedGammaLevel;
183
int32_t longRowBytes; /*used when rowBytes > 16382*/
185
Handle baseAddrHandle;
187
typedef struct PixMapExtension PixMapExtension;
189
typedef PixMapExtension * PixMapExtPtr;
190
typedef PixMapExtPtr * PixMapExtHandle;
193
struct __attribute__((__packed__)) PixMap {
194
Ptr baseAddr; /*pointer to pixels*/
195
short rowBytes; /*offset to next line*/
196
Rect bounds; /*encloses bitmap*/
197
short pmVersion; /*pixMap version number*/
198
short packType; /*defines packing format*/
199
int32_t packSize; /*length of pixel data*/
200
Fixed hRes; /*horiz. resolution (ppi)*/
201
Fixed vRes; /*vert. resolution (ppi)*/
202
short pixelType; /*defines pixel type*/
203
short pixelSize; /*# bits in pixel*/
204
short cmpCount; /*# components in pixel*/
205
short cmpSize; /*# bits per component*/
206
OSType pixelFormat; /*fourCharCode representation*/
207
CTabHandle pmTable; /*color map for this pixMap*/
208
PixMapExtHandle pmExt; /*Handle to pixMap extension*/
210
typedef struct PixMap PixMap;
211
typedef PixMap * PixMapPtr;
212
typedef PixMapPtr * PixMapHandle;
215
struct __attribute__((__packed__)) BitMap {
220
typedef struct BitMap BitMap;
221
typedef BitMap * BitMapPtr;
222
typedef BitMapPtr * BitMapHandle;
223
typedef struct OpaqueRgnHandle* RgnHandle;
228
typedef struct Pattern Pattern;
229
typedef unsigned char Style;
230
typedef Style StyleField;
231
struct __attribute__((__packed__)) Point {
235
typedef struct Point Point;
236
struct __attribute__((__packed__)) GrafPort {
250
StyleField txFace; /*StyleField occupies 16-bits, but only first 8-bits are used*/
251
UInt8 txFlags; /* QuickTime uses second 8 bits of StyleField for txFlags */
262
/*QDProcsPtr*/void* grafProcs;
264
typedef struct GrafPort GrafPort;
265
typedef GrafPort *GWorldPtr;
266
typedef GWorldPtr *GWorldHandle;
267
#define anyCodec ((CodecComponent)0)
270
srcCopy = 0, /*the 16 transfer modes*/
285
notPatBic = 15, /* Special Text Transfer Mode */
287
hilitetransfermode = 50,
288
hilite = 50, /* Arithmetic transfer modes */
297
ditherCopy = 64, /* Transparent mode constant */
301
typedef uint32_t GWorldFlags;
305
// ============================== CODECS ===========================
307
typedef Component CompressorComponent;
308
typedef Component DecompressorComponent;
309
typedef Component CodecComponent;
312
codecLosslessQuality = 0x00000400,
313
codecMaxQuality = 0x000003FF,
314
codecMinQuality = 0x00000000,
315
codecLowQuality = 0x00000100,
316
codecNormalQuality = 0x00000200,
317
codecHighQuality = 0x00000300
323
typedef void* ImageCodecDrawBandCompleteUPP;
324
typedef int64_t ICMProgressProcRecord;
325
typedef int64_t ICMCompletionProcRecord;
326
typedef ICMCompletionProcRecord* ICMCompletionProcRecordPtr;
327
typedef int64_t ICMDataProcRecord;
328
typedef void* ICMFrameTimePtr;
329
typedef void* CDSequenceDataSourcePtr;
330
typedef void* ICMFrameTimeInfoPtr;
333
typedef struct OpaqueGrafPtr* GrafPtr;
334
typedef GrafPtr CGrafPtr;
337
/* codec capabilities flags */
339
codecCanScale = 1L << 0, // 1
340
codecCanMask = 1L << 1, // 2
341
codecCanMatte = 1L << 2, // 4
342
codecCanTransform = 1L << 3, // 8
343
codecCanTransferMode = 1L << 4, // 10
344
codecCanCopyPrev = 1L << 5, // 20
345
codecCanSpool = 1L << 6, // 40
346
codecCanClipVertical = 1L << 7, // 80
347
codecCanClipRectangular = 1L << 8, // 100
348
codecCanRemapColor = 1L << 9, // 200
349
codecCanFastDither = 1L << 10, // 400
350
codecCanSrcExtract = 1L << 11, // 800
351
codecCanCopyPrevComp = 1L << 12, // 1000
352
codecCanAsync = 1L << 13, // 2000
353
codecCanMakeMask = 1L << 14, // 4000
354
codecCanShift = 1L << 15, // 8000
355
codecCanAsyncWhen = 1L << 16, // 10000
356
codecCanShieldCursor = 1L << 17, // 20000
357
codecCanManagePrevBuffer = 1L << 18, // 40000
358
codecHasVolatileBuffer = 1L << 19, // 80000 /* codec requires redraw after window movement */
359
codecWantsRegionMask = 1L << 20, // 100000
360
codecImageBufferIsOnScreen = 1L << 21, // 200000 /* old def of codec using overlay surface, = ( codecIsDirectToScreenOnly | codecUsesOverlaySurface | codecImageBufferIsOverlaySurface | codecSrcMustBeImageBuffer ) */
361
codecWantsDestinationPixels = 1L << 22, // 400000
362
codecWantsSpecialScaling = 1L << 23, // 800000
363
codecHandlesInputs = 1L << 24, // 1000000
364
codecCanDoIndirectSurface = 1L << 25, /* codec can handle indirect surface (GDI) */
365
codecIsSequenceSensitive = 1L << 26,
366
codecRequiresOffscreen = 1L << 27,
367
codecRequiresMaskBits = 1L << 28,
368
codecCanRemapResolution = 1L << 29,
369
codecIsDirectToScreenOnly = 1L << 30, /* codec can only decompress data to the screen */
370
codecCanLockSurface = 1L << 31 /* codec can lock destination surface, icm doesn't lock for you */
373
/* codec capabilities flags2 */
375
codecUsesOverlaySurface = 1L << 0, /* codec uses overlay surface */
376
codecImageBufferIsOverlaySurface = 1L << 1, /* codec image buffer is overlay surface, the bits in the buffer are on the screen */
377
codecSrcMustBeImageBuffer = 1L << 2, /* codec can only source data from an image buffer */
378
codecImageBufferIsInAGPMemory = 1L << 4, /* codec image buffer is in AGP space, byte writes are OK */
379
codecImageBufferIsInPCIMemory = 1L << 5 /* codec image buffer is across a PCI bus; byte writes are bad */
382
/* codec condition flags */
385
codecConditionFirstBand = 1L << 0, // 1
386
codecConditionLastBand = 1L << 1, // 2
387
codecConditionFirstFrame = 1L << 2, // 4
388
codecConditionNewDepth = 1L << 3, // 8
389
codecConditionNewTransform = 1L << 4, // 10
390
codecConditionNewSrcRect = 1L << 5, // 20
391
codecConditionNewMask = 1L << 6, // 40
392
codecConditionNewMatte = 1L << 7, // 80
393
codecConditionNewTransferMode = 1L << 8, // 100
394
codecConditionNewClut = 1L << 9, // 200
395
codecConditionNewAccuracy = 1L << 10, // 400
396
codecConditionNewDestination = 1L << 11, // 800
397
codecConditionFirstScreen = 1L << 12, // 1000
398
codecConditionDoCursor = 1L << 13, // 2000
399
codecConditionCatchUpDiff = 1L << 14, // 4000
400
codecConditionMaskMayBeChanged = 1L << 15, // 8000
401
codecConditionToBuffer = 1L << 16, // 10000
402
codecConditionCodecChangedMask = 1L << 31 // 20000
407
struct __attribute__((__packed__)) CodecCapabilities {
409
short wantedPixelSize;
416
int32_t flags2; /* field new in QuickTime 4.0 */
418
typedef struct CodecCapabilities CodecCapabilities;
420
struct __attribute__((__packed__)) CodecDecompressParams {
421
ImageSequence sequenceID; /* predecompress,banddecompress */
422
ImageDescriptionHandle imageDescription; /* predecompress,banddecompress */
429
int32_t conditionFlags;
431
CodecFlags callerFlags; // short
432
CodecCapabilities * capabilities; /* predecompress,banddecompress */
433
ICMProgressProcRecord progressProcRecord;
434
ICMCompletionProcRecord completionProcRecord;
436
ICMDataProcRecord dataProcRecord;
437
CGrafPtr port; /* predecompress,banddecompress */
438
PixMap dstPixMap; /* predecompress,banddecompress */
440
PixMapPtr mattePixMap;
441
Rect srcRect; /* predecompress,banddecompress */
442
MatrixRecord * matrix; /* predecompress,banddecompress */
443
CodecQ accuracy; /* predecompress,banddecompress */
444
short transferMode; /* predecompress,banddecompress */
445
ICMFrameTimePtr frameTime; /* banddecompress */
448
/* The following fields only exist for QuickTime 2.0 and greater */
449
SInt8 matrixFlags; /* high bit set if 2x resize */
451
Rect dstRect; /* only valid for simple transforms */
453
/* The following fields only exist for QuickTime 2.1 and greater */
454
UInt16 majorSourceChangeSeed;
455
UInt16 minorSourceChangeSeed;
456
CDSequenceDataSourcePtr sourceData;
458
RgnHandle maskRegion;
460
/* The following fields only exist for QuickTime 2.5 and greater */
461
OSType ** wantedDestinationPixelTypes; /* Handle to 0-terminated list of OSTypes */
463
int32_t screenFloodMethod;
464
int32_t screenFloodValue;
465
short preferredOffscreenPixelSize;
467
/* The following fields only exist for QuickTime 3.0 and greater */
468
ICMFrameTimeInfoPtr syncFrameTime; /* banddecompress */
469
Boolean needUpdateOnTimeChange; /* banddecompress */
470
Boolean enableBlackLining;
471
Boolean needUpdateOnSourceChange; /* band decompress */
476
CGrafPtr finalDestinationPort;
478
int32_t requestedBufferWidth; /* must set codecWantsSpecialScaling to indicate this field is valid*/
479
int32_t requestedBufferHeight; /* must set codecWantsSpecialScaling to indicate this field is valid*/
481
/* The following fields only exist for QuickTime 4.0 and greater */
482
Rect displayableAreaOfRequestedBuffer; /* set in predecompress*/
483
Boolean requestedSingleField;
484
Boolean needUpdateOnNextIdle;
486
Fixed bufferGammaLevel;
488
/* The following fields only exist for QuickTime 5.0 and greater */
489
UInt32 taskWeight; /* preferred weight for MP tasks implementing this operation*/
490
OSType taskName; /* preferred name (type) for MP tasks implementing this operation*/
492
typedef struct CodecDecompressParams CodecDecompressParams;
496
struct __attribute__((__packed__)) ImageSubCodecDecompressCapabilities {
497
int32_t recordSize; /* sizeof(ImageSubCodecDecompressCapabilities)*/
498
int32_t decompressRecordSize; /* size of your codec's decompress record*/
499
Boolean canAsync; /* default true*/
502
/* The following fields only exist for QuickTime 4.0 and greater */
503
UInt16 suggestedQueueSize;
504
Boolean canProvideTrigger;
506
/* The following fields only exist for QuickTime 5.0 and greater */
507
Boolean subCodecFlushesScreen; /* only used on Mac OS X*/
508
Boolean subCodecCallsDrawBandComplete;
511
/* The following fields only exist for QuickTime 5.1 and greater */
512
Boolean isChildCodec; /* set by base codec before calling Initialize*/
515
typedef struct ImageSubCodecDecompressCapabilities ImageSubCodecDecompressCapabilities;
518
struct __attribute__((__packed__)) ImageSubCodecDecompressRecord {
522
ICMProgressProcRecord progressProcRecord;
523
ICMDataProcRecord dataProcRecord;
524
void * userDecompressRecord; /* pointer to codec-specific per-band data*/
526
Boolean inhibitMP; /* set this in BeginBand to tell the base decompressor not to call DrawBand from an MP task for this frame. (Only has any effect for MP-capable subcodecs. New in QuickTime 5.0.)*/
530
/* The following fields only exist for QuickTime 5.0 and greater */
531
ImageCodecDrawBandCompleteUPP drawBandCompleteUPP; /* only used if subcodec set subCodecCallsDrawBandComplete; if drawBandCompleteUPP is non-nil, codec must call it when a frame is finished, but may return from DrawBand before the frame is finished. */
532
void * drawBandCompleteRefCon; /* Note: do not call drawBandCompleteUPP directly from a hardware interrupt; instead, use DTInstall to run a function at deferred task time, and call drawBandCompleteUPP from that. */
534
typedef struct ImageSubCodecDecompressRecord ImageSubCodecDecompressRecord;
537
/* These are the bits that are set in the Component flags, and also in the codecInfo struct. */
539
codecInfoDoes1 = (1L << 0), /* codec can work with 1-bit pixels */
540
codecInfoDoes2 = (1L << 1), /* codec can work with 2-bit pixels */
541
codecInfoDoes4 = (1L << 2), /* codec can work with 4-bit pixels */
542
codecInfoDoes8 = (1L << 3), /* codec can work with 8-bit pixels */
543
codecInfoDoes16 = (1L << 4), /* codec can work with 16-bit pixels */
544
codecInfoDoes32 = (1L << 5), /* codec can work with 32-bit pixels */
545
codecInfoDoesDither = (1L << 6), /* codec can do ditherMode */
546
codecInfoDoesStretch = (1L << 7), /* codec can stretch to arbitrary sizes */
547
codecInfoDoesShrink = (1L << 8), /* codec can shrink to arbitrary sizes */
548
codecInfoDoesMask = (1L << 9), /* codec can mask to clipping regions */
549
codecInfoDoesTemporal = (1L << 10), /* codec can handle temporal redundancy */
550
codecInfoDoesDouble = (1L << 11), /* codec can stretch to double size exactly */
551
codecInfoDoesQuad = (1L << 12), /* codec can stretch to quadruple size exactly */
552
codecInfoDoesHalf = (1L << 13), /* codec can shrink to half size */
553
codecInfoDoesQuarter = (1L << 14), /* codec can shrink to quarter size */
554
codecInfoDoesRotate = (1L << 15), /* codec can rotate on decompress */
555
codecInfoDoesHorizFlip = (1L << 16), /* codec can flip horizontally on decompress */
556
codecInfoDoesVertFlip = (1L << 17), /* codec can flip vertically on decompress */
557
codecInfoHasEffectParameterList = (1L << 18), /* codec implements get effects parameter list call, once was codecInfoDoesSkew */
558
codecInfoDoesBlend = (1L << 19), /* codec can blend on decompress */
559
codecInfoDoesWarp = (1L << 20), /* codec can warp arbitrarily on decompress */
560
codecInfoDoesRecompress = (1L << 21), /* codec can recompress image without accumulating errors */
561
codecInfoDoesSpool = (1L << 22), /* codec can spool image data */
562
codecInfoDoesRateConstrain = (1L << 23) /* codec can data rate constrain */
567
codecInfoDepth1 = (1L << 0), /* compressed data at 1 bpp depth available */
568
codecInfoDepth2 = (1L << 1), /* compressed data at 2 bpp depth available */
569
codecInfoDepth4 = (1L << 2), /* compressed data at 4 bpp depth available */
570
codecInfoDepth8 = (1L << 3), /* compressed data at 8 bpp depth available */
571
codecInfoDepth16 = (1L << 4), /* compressed data at 16 bpp depth available */
572
codecInfoDepth32 = (1L << 5), /* compressed data at 32 bpp depth available */
573
codecInfoDepth24 = (1L << 6), /* compressed data at 24 bpp depth available */
574
codecInfoDepth33 = (1L << 7), /* compressed data at 1 bpp monochrome depth available */
575
codecInfoDepth34 = (1L << 8), /* compressed data at 2 bpp grayscale depth available */
576
codecInfoDepth36 = (1L << 9), /* compressed data at 4 bpp grayscale depth available */
577
codecInfoDepth40 = (1L << 10), /* compressed data at 8 bpp grayscale depth available */
578
codecInfoStoresClut = (1L << 11), /* compressed data can have custom cluts */
579
codecInfoDoesLossless = (1L << 12), /* compressed data can be stored in lossless format */
580
codecInfoSequenceSensitive = (1L << 13) /* compressed data is sensitive to out of sequence decoding */
583
struct __attribute__((__packed__)) CodecInfo {
584
Str31 typeName; /* name of the codec type i.e.: 'Apple Image Compression' */
585
short version; /* version of the codec data that this codec knows about */
586
short revisionLevel; /* revision level of this codec i.e: 0x00010001 (1.0.1) */
587
int32_t vendor; /* Maker of this codec i.e: 'appl' */
588
int32_t decompressFlags; /* codecInfo flags for decompression capabilities */
589
int32_t compressFlags; /* codecInfo flags for compression capabilities */
590
int32_t formatFlags; /* codecInfo flags for compression format details */
591
UInt8 compressionAccuracy; /* measure (1-255) of accuracy of this codec for compress (0 if unknown) */
592
UInt8 decompressionAccuracy; /* measure (1-255) of accuracy of this codec for decompress (0 if unknown) */
593
unsigned short compressionSpeed; /* ( millisecs for compressing 320x240 on base mac II) (0 if unknown) */
594
unsigned short decompressionSpeed; /* ( millisecs for decompressing 320x240 on mac II)(0 if unknown) */
595
UInt8 compressionLevel; /* measure (1-255) of compression level of this codec (0 if unknown) */
596
UInt8 resvd; /* pad */
597
short minimumHeight; /* minimum height of image (block size) */
598
short minimumWidth; /* minimum width of image (block size) */
599
short decompressPipelineLatency; /* in milliseconds ( for asynchronous codecs ) */
600
short compressPipelineLatency; /* in milliseconds ( for asynchronous codecs ) */
603
typedef struct CodecInfo CodecInfo;
606
codecFlagUseImageBuffer = (1L << 0), /* decompress*/
607
codecFlagUseScreenBuffer = (1L << 1), /* decompress*/
608
codecFlagUpdatePrevious = (1L << 2), /* compress*/
609
codecFlagNoScreenUpdate = (1L << 3), /* decompress*/
610
codecFlagWasCompressed = (1L << 4), /* compress*/
611
codecFlagDontOffscreen = (1L << 5), /* decompress*/
612
codecFlagUpdatePreviousComp = (1L << 6), /* compress*/
613
codecFlagForceKeyFrame = (1L << 7), /* compress*/
614
codecFlagOnlyScreenUpdate = (1L << 8), /* decompress*/
615
codecFlagLiveGrab = (1L << 9), /* compress*/
616
codecFlagDiffFrame = (1L << 9), /* decompress*/
617
codecFlagDontUseNewImageBuffer = (1L << 10), /* decompress*/
618
codecFlagInterlaceUpdate = (1L << 11), /* decompress*/
619
codecFlagCatchUpDiff = (1L << 12), /* decompress*/
620
codecFlagSupportDisable = (1L << 13), /* decompress*/
621
codecFlagReenable = (1L << 14) /* decompress*/
624
static inline void dump_ImageDescription(void* xxx){
625
ImageDescription* id=(ImageDescription*)xxx;
629
for(i=0;i<id->idSize;i++){
630
printf(" %02X",((unsigned char*)id)[i]);
631
if((i%16)==15) printf("\n");
636
printf("=============== ImageDescription at %p ==================\n",xxx);
637
printf("idSize=0x%X fourcc=0x%08X\n",id->idSize,id->cType);
638
printf("ver=%d rev=%d vendor=0x%08X\n",id->version,id->revisionLevel,id->vendor);
639
printf("tempQ=%d spatQ=%d dim: %d x %d dpi: %d x %d depth: %d\n",
640
id->temporalQuality,id->spatialQuality,
641
id->width, id->height,
644
printf("dataSize=%d frameCount=%d clutID=%d\n",id->dataSize, id->frameCount, id->clutID);
645
printf("name='%.*s'\n",((char*)(&id->name))[0],((char*)(&id->name))+1);
646
x=((char*)(&id->clutID))+2;
647
if(id->idSize>sizeof(ImageDescription)){
648
printf("%02X %02X %02X %02X | %02X %02X %02X %02X | %02X %02X %02X %02X | %02X %02X %02X %02X\n",
649
x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8],x[9],x[10],x[11],x[12],x[13],x[14],x[15]);
651
printf("=========================================================\n");
654
static inline void dump_Rect(char* title,Rect *r){
655
printf("%s: %d;%d - %d;%d\n",title,
656
(int)r->top,(int)r->left,(int)r->bottom,(int)r->right);
659
static inline void dump_MatrixRecord(char* title, MatrixRecord *m){
660
printf("%s: [%d %d %d][%d %d %d][%d %d %d]\n",title,
661
m->matrix[0][0],m->matrix[0][1],m->matrix[0][2],
662
m->matrix[1][0],m->matrix[1][1],m->matrix[1][2],
663
m->matrix[2][0],m->matrix[2][1],m->matrix[2][2]);
666
static inline void dump_PixMap(void* xxx){
668
printf("=============== PixMap at %p ==================\n",xxx);
669
printf("base=%p stride=%d\n",p->baseAddr, p->rowBytes);
670
dump_Rect("bounds",&p->bounds);
671
printf("pmVersion=0x%X packType=0x%X\n packSize=0x%X\n",
672
p->pmVersion,p->packType, p->packSize);
673
printf("hRes=0x%X vRes=0x%X pixelType=0x%X pixelSize=0x%X\n",
674
p->hRes,p->vRes,p->pixelType,p->pixelSize);
675
printf("cmpCount=0x%X cmpSize=0x%X pixelFormat=0x%X\n",
676
p->cmpCount,p->cmpSize,p->pixelFormat);
677
printf("pmTable=%p pmExt=%p\n",p->pmTable,p->pmExt);
678
printf("=========================================================\n");
681
static inline void dump_CodecCapabilities(void* xxx){
682
CodecCapabilities* cc=xxx;
684
printf("=============== CodecCapabilities at %p =================\n",xxx);
685
printf("flags=0x%X flags2=0x%X\n",cc->flags,cc->flags2);
686
printf("wantedPixelSize=%d extendWidth=%d extendHeight=%d band=%d+%d\n",
687
cc->wantedPixelSize,cc->extendWidth,cc->extendHeight,
688
cc->bandMin,cc->bandInc);
689
printf("pad=0x%X time=0x%X\n",cc->pad,cc->time);
690
printf("=========================================================\n");
693
static inline void dump_CodecDecompressParams(void* xxx){
694
CodecDecompressParams* cd=xxx;
695
ImageDescription **idh;
698
printf("=============== CodecDecompressParams at %p ==================\n",xxx);
699
printf("sequenceID=%d\n",cd->sequenceID);
700
idh=cd->imageDescription;
701
if(idh && idh[0]) dump_ImageDescription(idh[0]);
703
for(i=0;i<sizeof(CodecDecompressParams);i++){
704
printf(" %02X",((unsigned char*)cd)[i]);
705
if((i%16)==15) printf("\n");
709
printf("data=%p size=%d\n",cd->data,cd->bufferSize);
710
printf("frameno=%d lines: %d .. %d condflags=0x%X callerflags=0x%X\n",
711
cd->frameNumber, cd->startLine, cd->stopLine, cd->conditionFlags,cd->callerFlags);
712
// printf("maskBits=%p mattePixMap=%p\n",
713
// cd->maskBits,cd->mattePixMap);
714
dump_PixMap(&cd->dstPixMap);
715
// if(cd->mattePixMap) dump_PixMap(cd->mattePixMap);
716
if(cd->matrix) dump_MatrixRecord("matrix",cd->matrix);
717
if(cd->capabilities) dump_CodecCapabilities(cd->capabilities);
718
printf("accuracy=%d transferMode=%d matrixFlags=0x%X matrixType=%d\n",
719
(int)cd->accuracy, (int)cd->transferMode, (int)cd->matrixFlags, (int)cd->matrixType);
720
printf("srcrect: %d;%d - %d;%d\n",cd->srcRect.top,cd->srcRect.left,cd->srcRect.bottom,cd->srcRect.right);
721
printf("dstrect: %d;%d - %d;%d\n",cd->dstRect.top,cd->dstRect.left,cd->dstRect.bottom,cd->dstRect.right);
722
printf("wantedDestinationPixelTypes=%p\n",cd->wantedDestinationPixelTypes);
723
if(cd->wantedDestinationPixelTypes){
724
unsigned int* p=cd->wantedDestinationPixelTypes;
726
printf(" 0x%08X %.4s\n",p[0],&p[0]);
730
printf("screenFloodMethod=%d value=%d preferredOffscreenPixelSize=%d\n",
731
cd->screenFloodMethod, cd->screenFloodValue, cd->preferredOffscreenPixelSize);
732
printf("callbacks: progress=%p compl=%p data=%p ftime=%p srcdata=%p sync=%p\n",
733
cd->progressProcRecord, cd->completionProcRecord,
734
cd->dataProcRecord, cd->frameTime, cd->sourceData, cd->syncFrameTime);
737
printf("=========================================================\n");