2002-03-21 21:00:21 +00:00
// Basic types:
typedef char * Ptr ;
typedef Ptr * Handle ;
typedef long Size ;
typedef unsigned char Boolean ;
typedef unsigned char Str31 [ 32 ] ;
typedef long Fixed ;
typedef long OSErr ;
2001-11-10 18:06:59 +00:00
typedef int OSType ;
2001-10-27 17:45:27 +00:00
2002-03-21 21:00:21 +00:00
typedef long ComponentResult ;
typedef unsigned char UInt8 ;
typedef signed char SInt8 ;
typedef unsigned short UInt16 ;
typedef signed short SInt16 ;
typedef unsigned long UInt32 ;
typedef signed long SInt32 ;
# define FOUR_CHAR_CODE(x) ((unsigned long)(x)) /* otherwise compiler will complain about values with high bit set */
2001-11-10 18:06:59 +00:00
// codec private shit:
typedef void * GlobalsPtr ;
typedef void * * Globals ;
2001-10-27 17:45:27 +00:00
2002-03-21 21:00:21 +00:00
//==================== COMPONENTS ===========================
2001-10-27 17:45:27 +00:00
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) ComponentParameters {
2001-11-10 18:06:59 +00:00
UInt8 flags ; /* call modifiers: sync/async, deferred, immed, etc */
UInt8 paramSize ; /* size in bytes of actual parameters passed to this call */
short what ; /* routine selector, negative for Component management calls */
long params [ 1 ] ; /* actual parameters for the indicated routine */
} ;
typedef struct ComponentParameters ComponentParameters ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) ComponentDescription {
2001-11-10 18:06:59 +00:00
OSType componentType ; /* A unique 4-byte code indentifying the command set */
OSType componentSubType ; /* Particular flavor of this instance */
OSType componentManufacturer ; /* Vendor indentification */
unsigned long componentFlags ; /* 8 each for Component,Type,SubType,Manuf/revision */
unsigned long componentFlagsMask ; /* Mask for specifying which flags to consider in search, zero during registration */
} ;
typedef struct ComponentDescription ComponentDescription ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) ResourceSpec {
2001-11-10 18:06:59 +00:00
OSType resType ; /* 4-byte code */
short resID ; /* */
} ;
typedef struct ResourceSpec ResourceSpec ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) ComponentResource {
2001-11-10 18:06:59 +00:00
ComponentDescription cd ; /* Registration parameters */
ResourceSpec component ; /* resource where Component code is found */
ResourceSpec componentName ; /* name string resource */
ResourceSpec componentInfo ; /* info string resource */
ResourceSpec componentIcon ; /* icon resource */
} ;
typedef struct ComponentResource ComponentResource ;
typedef ComponentResource * ComponentResourcePtr ;
typedef ComponentResourcePtr * ComponentResourceHandle ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) ComponentRecord {
2001-11-10 18:06:59 +00:00
long data [ 1 ] ;
} ;
typedef struct ComponentRecord ComponentRecord ;
typedef ComponentRecord * Component ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) ComponentInstanceRecord {
2001-11-10 18:06:59 +00:00
long data [ 1 ] ;
} ;
typedef struct ComponentInstanceRecord ComponentInstanceRecord ;
typedef ComponentInstanceRecord * ComponentInstance ;
2001-10-27 17:45:27 +00:00
2002-03-21 21:00:21 +00:00
// ========================= QUICKDRAW =========================
2002-03-25 13:35:23 +00:00
struct __attribute__ ( ( __packed__ ) ) Rect {
2002-03-21 21:00:21 +00:00
short top ;
short left ;
short bottom ;
short right ;
} ;
typedef struct Rect Rect ;
typedef Rect * RectPtr ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) RGBColor {
2002-03-21 21:00:21 +00:00
unsigned short red ; /*magnitude of red component*/
unsigned short green ; /*magnitude of green component*/
unsigned short blue ; /*magnitude of blue component*/
} ;
typedef struct RGBColor RGBColor ;
typedef RGBColor * RGBColorPtr ;
typedef RGBColorPtr * RGBColorHdl ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) ColorSpec {
2002-03-21 21:00:21 +00:00
short value ; /*index or other value*/
RGBColor rgb ; /*true color*/
} ;
typedef struct ColorSpec ColorSpec ;
typedef ColorSpec * ColorSpecPtr ;
typedef ColorSpec CSpecArray [ 1 ] ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) ColorTable {
2002-03-21 21:00:21 +00:00
long ctSeed ; /*unique identifier for table*/
short ctFlags ; /*high bit: 0 = PixMap; 1 = device*/
short ctSize ; /*number of entries in CTTable*/
CSpecArray ctTable ; /*array [0..0] of ColorSpec*/
} ;
typedef struct ColorTable ColorTable ;
typedef ColorTable * CTabPtr ;
typedef CTabPtr * CTabHandle ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) MatrixRecord {
2002-03-21 21:00:21 +00:00
Fixed matrix [ 3 ] [ 3 ] ;
} ;
typedef struct MatrixRecord MatrixRecord ;
typedef MatrixRecord * MatrixRecordPtr ;
typedef long ImageSequence ;
typedef OSType CodecType ;
typedef unsigned short CodecFlags ;
typedef unsigned long CodecQ ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) ImageDescription {
2002-03-21 21:00:21 +00:00
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 ;
/* values for PixMap.pixelFormat*/
enum {
k16LE555PixelFormat = FOUR_CHAR_CODE ( ' L555 ' ) , /* 16 bit LE rgb 555 (PC)*/
k16LE5551PixelFormat = FOUR_CHAR_CODE ( ' 5551 ' ) , /* 16 bit LE rgb 5551*/
k16BE565PixelFormat = FOUR_CHAR_CODE ( ' B565 ' ) , /* 16 bit BE rgb 565*/
k16LE565PixelFormat = FOUR_CHAR_CODE ( ' L565 ' ) , /* 16 bit LE rgb 565*/
k24BGRPixelFormat = FOUR_CHAR_CODE ( ' 24 BG ' ) , /* 24 bit bgr */
k32BGRAPixelFormat = FOUR_CHAR_CODE ( ' BGRA ' ) , /* 32 bit bgra (Matrox)*/
k32ABGRPixelFormat = FOUR_CHAR_CODE ( ' ABGR ' ) , /* 32 bit abgr */
k32RGBAPixelFormat = FOUR_CHAR_CODE ( ' RGBA ' ) , /* 32 bit rgba */
kYUVSPixelFormat = FOUR_CHAR_CODE ( ' yuvs ' ) , /* YUV 4:2:2 byte ordering 16-unsigned = 'YUY2'*/
kYUVUPixelFormat = FOUR_CHAR_CODE ( ' yuvu ' ) , /* YUV 4:2:2 byte ordering 16-signed*/
kYVU9PixelFormat = FOUR_CHAR_CODE ( ' YVU9 ' ) , /* YVU9 Planar 9*/
kYUV411PixelFormat = FOUR_CHAR_CODE ( ' Y411 ' ) , /* YUV 4:1:1 Interleaved 16*/
kYVYU422PixelFormat = FOUR_CHAR_CODE ( ' YVYU ' ) , /* YVYU 4:2:2 byte ordering 16*/
kUYVY422PixelFormat = FOUR_CHAR_CODE ( ' UYVY ' ) , /* UYVY 4:2:2 byte ordering 16*/
kYUV211PixelFormat = FOUR_CHAR_CODE ( ' Y211 ' ) , /* YUV 2:1:1 Packed 8*/
k2vuyPixelFormat = FOUR_CHAR_CODE ( ' 2 vuy ' ) /* UYVY 4:2:2 byte ordering 16*/
} ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) PixMapExtension {
2002-03-21 21:00:21 +00:00
long extSize ; /*size of struct, duh!*/
unsigned long pmBits ; /*pixmap attributes bitfield*/
void * pmGD ; /*this is a GDHandle*/
long pmSeed ;
Fixed gammaLevel ; /*pixmap gammalevel*/
Fixed requestedGammaLevel ;
unsigned long reserved2 ;
long longRowBytes ; /*used when rowBytes > 16382*/
unsigned long signature ;
Handle baseAddrHandle ;
} ;
typedef struct PixMapExtension PixMapExtension ;
typedef PixMapExtension * PixMapExtPtr ;
typedef PixMapExtPtr * PixMapExtHandle ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) PixMap {
2002-03-21 21:00:21 +00:00
Ptr baseAddr ; /*pointer to pixels*/
short rowBytes ; /*offset to next line*/
Rect bounds ; /*encloses bitmap*/
short pmVersion ; /*pixMap version number*/
short packType ; /*defines packing format*/
long packSize ; /*length of pixel data*/
Fixed hRes ; /*horiz. resolution (ppi)*/
Fixed vRes ; /*vert. resolution (ppi)*/
short pixelType ; /*defines pixel type*/
short pixelSize ; /*# bits in pixel*/
short cmpCount ; /*# components in pixel*/
short cmpSize ; /*# bits per component*/
OSType pixelFormat ; /*fourCharCode representation*/
CTabHandle pmTable ; /*color map for this pixMap*/
PixMapExtHandle pmExt ; /*Handle to pixMap extension*/
} ;
typedef struct PixMap PixMap ;
typedef PixMap * PixMapPtr ;
typedef PixMapPtr * PixMapHandle ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) BitMap {
2002-03-21 21:00:21 +00:00
Ptr baseAddr ;
short rowBytes ;
Rect bounds ;
} ;
typedef struct BitMap BitMap ;
typedef BitMap * BitMapPtr ;
typedef BitMapPtr * BitMapHandle ;
2002-11-24 21:25:00 +00:00
typedef struct OpaqueRgnHandle * RgnHandle ;
struct Pattern {
UInt8 pat [ 8 ] ;
} ;
typedef struct Pattern Pattern ;
typedef unsigned char Style ;
typedef Style StyleField ;
struct __attribute__ ( ( __packed__ ) ) Point {
short v ;
short h ;
} ;
typedef struct Point Point ;
struct __attribute__ ( ( __packed__ ) ) GrafPort {
short device ;
BitMap portBits ;
Rect portRect ;
RgnHandle visRgn ;
RgnHandle clipRgn ;
Pattern bkPat ;
Pattern fillPat ;
Point pnLoc ;
Point pnSize ;
short pnMode ;
Pattern pnPat ;
short pnVis ;
short txFont ;
StyleField txFace ; /*StyleField occupies 16-bits, but only first 8-bits are used*/
UInt8 txFlags ; /* QuickTime uses second 8 bits of StyleField for txFlags */
short txMode ;
short txSize ;
Fixed spExtra ;
long fgColor ;
long bkColor ;
short colrBit ;
short patStretch ;
Handle picSave ;
Handle rgnSave ;
Handle polySave ;
/*QDProcsPtr*/ void * grafProcs ;
} ;
typedef struct GrafPort GrafPort ;
typedef GrafPort * GWorldPtr ;
typedef GWorldPtr * GWorldHandle ;
# define anyCodec ((CodecComponent)0)
enum {
/* transfer modes */
srcCopy = 0 , /*the 16 transfer modes*/
srcOr = 1 ,
srcXor = 2 ,
srcBic = 3 ,
notSrcCopy = 4 ,
notSrcOr = 5 ,
notSrcXor = 6 ,
notSrcBic = 7 ,
patCopy = 8 ,
patOr = 9 ,
patXor = 10 ,
patBic = 11 ,
notPatCopy = 12 ,
notPatOr = 13 ,
notPatXor = 14 ,
notPatBic = 15 , /* Special Text Transfer Mode */
grayishTextOr = 49 ,
hilitetransfermode = 50 ,
hilite = 50 , /* Arithmetic transfer modes */
blend = 32 ,
addPin = 33 ,
addOver = 34 ,
subPin = 35 ,
addMax = 37 ,
adMax = 37 ,
subOver = 38 ,
adMin = 39 ,
ditherCopy = 64 , /* Transparent mode constant */
transparent = 36
} ;
typedef unsigned long GWorldFlags ;
2002-03-21 21:00:21 +00:00
// ============================== CODECS ===========================
typedef Component CompressorComponent ;
typedef Component DecompressorComponent ;
typedef Component CodecComponent ;
2002-11-24 21:25:00 +00:00
enum {
codecLosslessQuality = 0x00000400 ,
codecMaxQuality = 0x000003FF ,
codecMinQuality = 0x00000000 ,
codecLowQuality = 0x00000100 ,
codecNormalQuality = 0x00000200 ,
codecHighQuality = 0x00000300
} ;
2002-03-21 21:00:21 +00:00
// callbacks:
typedef void * ImageCodecDrawBandCompleteUPP ;
2002-11-24 21:25:00 +00:00
typedef long long ICMProgressProcRecord ;
typedef long long ICMCompletionProcRecord ;
2002-12-16 01:47:42 +00:00
typedef ICMCompletionProcRecord * ICMCompletionProcRecordPtr ;
2002-11-24 21:25:00 +00:00
typedef long long ICMDataProcRecord ;
2002-03-21 21:00:21 +00:00
typedef void * ICMFrameTimePtr ;
typedef void * CDSequenceDataSourcePtr ;
typedef void * ICMFrameTimeInfoPtr ;
// graphics port
typedef struct OpaqueGrafPtr * GrafPtr ;
typedef GrafPtr CGrafPtr ;
2002-03-25 13:35:23 +00:00
/* codec capabilities flags */
enum {
2002-12-16 01:47:42 +00:00
codecCanScale = 1L < < 0 , // 1
codecCanMask = 1L < < 1 , // 2
codecCanMatte = 1L < < 2 , // 4
codecCanTransform = 1L < < 3 , // 8
codecCanTransferMode = 1L < < 4 , // 10
codecCanCopyPrev = 1L < < 5 , // 20
codecCanSpool = 1L < < 6 , // 40
codecCanClipVertical = 1L < < 7 , // 80
codecCanClipRectangular = 1L < < 8 , // 100
codecCanRemapColor = 1L < < 9 , // 200
codecCanFastDither = 1L < < 10 , // 400
codecCanSrcExtract = 1L < < 11 , // 800
codecCanCopyPrevComp = 1L < < 12 , // 1000
codecCanAsync = 1L < < 13 , // 2000
codecCanMakeMask = 1L < < 14 , // 4000
codecCanShift = 1L < < 15 , // 8000
codecCanAsyncWhen = 1L < < 16 , // 10000
codecCanShieldCursor = 1L < < 17 , // 20000
codecCanManagePrevBuffer = 1L < < 18 , // 40000
2002-03-25 13:35:23 +00:00
codecHasVolatileBuffer = 1L < < 19 , // 80000 /* codec requires redraw after window movement */
2002-12-16 01:47:42 +00:00
codecWantsRegionMask = 1L < < 20 , // 100000
2002-03-25 13:35:23 +00:00
codecImageBufferIsOnScreen = 1L < < 21 , // 200000 /* old def of codec using overlay surface, = ( codecIsDirectToScreenOnly | codecUsesOverlaySurface | codecImageBufferIsOverlaySurface | codecSrcMustBeImageBuffer ) */
2002-12-16 01:47:42 +00:00
codecWantsDestinationPixels = 1L < < 22 , // 400000
codecWantsSpecialScaling = 1L < < 23 , // 800000
codecHandlesInputs = 1L < < 24 , // 1000000
2002-03-25 13:35:23 +00:00
codecCanDoIndirectSurface = 1L < < 25 , /* codec can handle indirect surface (GDI) */
codecIsSequenceSensitive = 1L < < 26 ,
codecRequiresOffscreen = 1L < < 27 ,
codecRequiresMaskBits = 1L < < 28 ,
codecCanRemapResolution = 1L < < 29 ,
codecIsDirectToScreenOnly = 1L < < 30 , /* codec can only decompress data to the screen */
codecCanLockSurface = 1L < < 31 /* codec can lock destination surface, icm doesn't lock for you */
} ;
/* codec capabilities flags2 */
enum {
codecUsesOverlaySurface = 1L < < 0 , /* codec uses overlay surface */
codecImageBufferIsOverlaySurface = 1L < < 1 , /* codec image buffer is overlay surface, the bits in the buffer are on the screen */
codecSrcMustBeImageBuffer = 1L < < 2 , /* codec can only source data from an image buffer */
codecImageBufferIsInAGPMemory = 1L < < 4 , /* codec image buffer is in AGP space, byte writes are OK */
codecImageBufferIsInPCIMemory = 1L < < 5 /* codec image buffer is across a PCI bus; byte writes are bad */
} ;
/* codec condition flags */
// FFD = 13 = 8+4+1
enum {
2002-12-16 01:47:42 +00:00
codecConditionFirstBand = 1L < < 0 , // 1
codecConditionLastBand = 1L < < 1 , // 2
codecConditionFirstFrame = 1L < < 2 , // 4
codecConditionNewDepth = 1L < < 3 , // 8
codecConditionNewTransform = 1L < < 4 , // 10
codecConditionNewSrcRect = 1L < < 5 , // 20
codecConditionNewMask = 1L < < 6 , // 40
codecConditionNewMatte = 1L < < 7 , // 80
codecConditionNewTransferMode = 1L < < 8 , // 100
codecConditionNewClut = 1L < < 9 , // 200
codecConditionNewAccuracy = 1L < < 10 , // 400
codecConditionNewDestination = 1L < < 11 , // 800
codecConditionFirstScreen = 1L < < 12 , // 1000
codecConditionDoCursor = 1L < < 13 , // 2000
codecConditionCatchUpDiff = 1L < < 14 , // 4000
codecConditionMaskMayBeChanged = 1L < < 15 , // 8000
codecConditionToBuffer = 1L < < 16 , // 10000
codecConditionCodecChangedMask = 1L < < 31 // 20000
2002-03-25 13:35:23 +00:00
} ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) CodecCapabilities {
2002-03-21 21:00:21 +00:00
long flags ;
short wantedPixelSize ;
short extendWidth ;
short extendHeight ;
short bandMin ;
short bandInc ;
short pad ;
unsigned long time ;
long flags2 ; /* field new in QuickTime 4.0 */
} ;
typedef struct CodecCapabilities CodecCapabilities ;
struct __attribute__ ( ( __packed__ ) ) CodecDecompressParams {
ImageSequence sequenceID ; /* predecompress,banddecompress */
ImageDescriptionHandle imageDescription ; /* predecompress,banddecompress */
Ptr data ;
long bufferSize ;
long frameNumber ;
long startLine ;
long stopLine ;
long conditionFlags ;
2002-12-16 01:47:42 +00:00
CodecFlags callerFlags ; // short
2002-03-21 21:00:21 +00:00
CodecCapabilities * capabilities ; /* predecompress,banddecompress */
ICMProgressProcRecord progressProcRecord ;
ICMCompletionProcRecord completionProcRecord ;
ICMDataProcRecord dataProcRecord ;
CGrafPtr port ; /* predecompress,banddecompress */
PixMap dstPixMap ; /* predecompress,banddecompress */
BitMapPtr maskBits ;
PixMapPtr mattePixMap ;
Rect srcRect ; /* predecompress,banddecompress */
MatrixRecord * matrix ; /* predecompress,banddecompress */
CodecQ accuracy ; /* predecompress,banddecompress */
short transferMode ; /* predecompress,banddecompress */
ICMFrameTimePtr frameTime ; /* banddecompress */
long reserved [ 1 ] ;
/* The following fields only exist for QuickTime 2.0 and greater */
SInt8 matrixFlags ; /* high bit set if 2x resize */
SInt8 matrixType ;
Rect dstRect ; /* only valid for simple transforms */
/* The following fields only exist for QuickTime 2.1 and greater */
UInt16 majorSourceChangeSeed ;
UInt16 minorSourceChangeSeed ;
CDSequenceDataSourcePtr sourceData ;
RgnHandle maskRegion ;
/* The following fields only exist for QuickTime 2.5 and greater */
OSType * * wantedDestinationPixelTypes ; /* Handle to 0-terminated list of OSTypes */
long screenFloodMethod ;
long screenFloodValue ;
short preferredOffscreenPixelSize ;
/* The following fields only exist for QuickTime 3.0 and greater */
ICMFrameTimeInfoPtr syncFrameTime ; /* banddecompress */
Boolean needUpdateOnTimeChange ; /* banddecompress */
Boolean enableBlackLining ;
Boolean needUpdateOnSourceChange ; /* band decompress */
Boolean pad ;
long unused ;
CGrafPtr finalDestinationPort ;
long requestedBufferWidth ; /* must set codecWantsSpecialScaling to indicate this field is valid*/
long requestedBufferHeight ; /* must set codecWantsSpecialScaling to indicate this field is valid*/
/* The following fields only exist for QuickTime 4.0 and greater */
Rect displayableAreaOfRequestedBuffer ; /* set in predecompress*/
Boolean requestedSingleField ;
Boolean needUpdateOnNextIdle ;
Boolean pad2 [ 2 ] ;
Fixed bufferGammaLevel ;
/* The following fields only exist for QuickTime 5.0 and greater */
UInt32 taskWeight ; /* preferred weight for MP tasks implementing this operation*/
OSType taskName ; /* preferred name (type) for MP tasks implementing this operation*/
} ;
typedef struct CodecDecompressParams CodecDecompressParams ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) ImageSubCodecDecompressCapabilities {
2002-03-21 21:00:21 +00:00
long recordSize ; /* sizeof(ImageSubCodecDecompressCapabilities)*/
long decompressRecordSize ; /* size of your codec's decompress record*/
Boolean canAsync ; /* default true*/
UInt8 pad0 ;
/* The following fields only exist for QuickTime 4.0 and greater */
UInt16 suggestedQueueSize ;
Boolean canProvideTrigger ;
/* The following fields only exist for QuickTime 5.0 and greater */
Boolean subCodecFlushesScreen ; /* only used on Mac OS X*/
Boolean subCodecCallsDrawBandComplete ;
UInt8 pad2 [ 1 ] ;
/* The following fields only exist for QuickTime 5.1 and greater */
Boolean isChildCodec ; /* set by base codec before calling Initialize*/
UInt8 pad3 [ 3 ] ;
} ;
typedef struct ImageSubCodecDecompressCapabilities ImageSubCodecDecompressCapabilities ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) ImageSubCodecDecompressRecord {
2002-03-21 21:00:21 +00:00
Ptr baseAddr ;
long rowBytes ;
Ptr codecData ;
ICMProgressProcRecord progressProcRecord ;
ICMDataProcRecord dataProcRecord ;
void * userDecompressRecord ; /* pointer to codec-specific per-band data*/
UInt8 frameType ;
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.)*/
UInt8 pad [ 2 ] ;
long priv [ 2 ] ;
/* The following fields only exist for QuickTime 5.0 and greater */
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. */
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. */
} ;
typedef struct ImageSubCodecDecompressRecord ImageSubCodecDecompressRecord ;
/* 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 */
} ;
2002-11-24 21:25:00 +00:00
struct __attribute__ ( ( __packed__ ) ) CodecInfo {
2002-03-21 21:00:21 +00:00
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 ;
2002-12-16 01:47:42 +00:00
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*/
} ;
2002-03-25 13:35:23 +00:00
static inline void dump_ImageDescription ( void * xxx ) {
ImageDescription * id = ( ImageDescription * ) xxx ;
unsigned char * x ;
2002-11-24 21:25:00 +00:00
int i ;
for ( i = 0 ; i < id - > idSize ; i + + ) {
printf ( " %02X " , ( ( unsigned char * ) id ) [ i ] ) ;
if ( ( i % 16 ) = = 15 ) printf ( " \n " ) ;
}
printf ( " \n " ) ;
2002-03-25 13:35:23 +00:00
printf ( " =============== ImageDescription at %p ================== \n " , xxx ) ;
printf ( " idSize=0x%X fourcc=0x%08X \n " , id - > idSize , id - > cType ) ;
printf ( " ver=%d rev=%d vendor=0x%08X \n " , id - > version , id - > revisionLevel , id - > vendor ) ;
printf ( " tempQ=%d spatQ=%d dim: %d x %d dpi: %d x %d depth: %d \n " ,
id - > temporalQuality , id - > spatialQuality ,
id - > width , id - > height ,
id - > hRes , id - > vRes ,
id - > depth ) ;
printf ( " dataSize=%d frameCount=%d clutID=%d \n " , id - > dataSize , id - > frameCount , id - > clutID ) ;
printf ( " name='%.*s' \n " , ( ( char * ) ( & id - > name ) ) [ 0 ] , ( ( char * ) ( & id - > name ) ) + 1 ) ;
x = ( ( char * ) ( & id - > clutID ) ) + 2 ;
if ( id - > idSize > sizeof ( ImageDescription ) ) {
printf ( " %02X %02X %02X %02X | %02X %02X %02X %02X | %02X %02X %02X %02X | %02X %02X %02X %02X \n " ,
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 ] ) ;
}
printf ( " ========================================================= \n " ) ;
}
static inline void dump_Rect ( char * title , Rect * r ) {
printf ( " %s: %d;%d - %d;%d \n " , title ,
( int ) r - > top , ( int ) r - > left , ( int ) r - > bottom , ( int ) r - > right ) ;
}
static inline void dump_MatrixRecord ( char * title , MatrixRecord * m ) {
printf ( " %s: [%d %d %d][%d %d %d][%d %d %d] \n " , title ,
m - > matrix [ 0 ] [ 0 ] , m - > matrix [ 0 ] [ 1 ] , m - > matrix [ 0 ] [ 2 ] ,
m - > matrix [ 1 ] [ 0 ] , m - > matrix [ 1 ] [ 1 ] , m - > matrix [ 1 ] [ 2 ] ,
m - > matrix [ 2 ] [ 0 ] , m - > matrix [ 2 ] [ 1 ] , m - > matrix [ 2 ] [ 2 ] ) ;
}
static inline void dump_PixMap ( void * xxx ) {
PixMap * p = xxx ;
printf ( " =============== PixMap at %p ================== \n " , xxx ) ;
printf ( " base=%p stride=%d \n " , p - > baseAddr , p - > rowBytes ) ;
dump_Rect ( " bounds " , & p - > bounds ) ;
printf ( " pmVersion=0x%X packType=0x%X \n packSize=0x%X \n " ,
p - > pmVersion , p - > packType , p - > packSize ) ;
printf ( " hRes=0x%X vRes=0x%X pixelType=0x%X pixelSize=0x%X \n " ,
p - > hRes , p - > vRes , p - > pixelType , p - > pixelSize ) ;
printf ( " cmpCount=0x%X cmpSize=0x%X pixelFormat=0x%X \n " ,
p - > cmpCount , p - > cmpSize , p - > pixelFormat ) ;
printf ( " pmTable=%p pmExt=%p \n " , p - > pmTable , p - > pmExt ) ;
printf ( " ========================================================= \n " ) ;
}
static inline void dump_CodecCapabilities ( void * xxx ) {
CodecCapabilities * cc = xxx ;
if ( ! xxx ) return ;
printf ( " =============== CodecCapabilities at %p ================= \n " , xxx ) ;
printf ( " flags=0x%X flags2=0x%X \n " , cc - > flags , cc - > flags2 ) ;
printf ( " wantedPixelSize=%d extendWidth=%d extendHeight=%d band=%d+%d \n " ,
cc - > wantedPixelSize , cc - > extendWidth , cc - > extendHeight ,
cc - > bandMin , cc - > bandInc ) ;
printf ( " pad=0x%X time=0x%X \n " , cc - > pad , cc - > time ) ;
printf ( " ========================================================= \n " ) ;
}
static inline void dump_CodecDecompressParams ( void * xxx ) {
CodecDecompressParams * cd = xxx ;
ImageDescription * * idh ;
2002-11-24 21:25:00 +00:00
int i ;
2002-03-25 13:35:23 +00:00
if ( ! xxx ) return ;
printf ( " =============== CodecDecompressParams at %p ================== \n " , xxx ) ;
printf ( " sequenceID=%d \n " , cd - > sequenceID ) ;
idh = cd - > imageDescription ;
if ( idh & & idh [ 0 ] ) dump_ImageDescription ( idh [ 0 ] ) ;
2002-11-24 21:25:00 +00:00
for ( i = 0 ; i < sizeof ( CodecDecompressParams ) ; i + + ) {
printf ( " %02X " , ( ( unsigned char * ) cd ) [ i ] ) ;
if ( ( i % 16 ) = = 15 ) printf ( " \n " ) ;
}
printf ( " \n " ) ;
2002-03-25 13:35:23 +00:00
printf ( " data=%p size=%d \n " , cd - > data , cd - > bufferSize ) ;
printf ( " frameno=%d lines: %d .. %d condflags=0x%X callerflags=0x%X \n " ,
cd - > frameNumber , cd - > startLine , cd - > stopLine , cd - > conditionFlags , cd - > callerFlags ) ;
// printf("maskBits=%p mattePixMap=%p\n",
// cd->maskBits,cd->mattePixMap);
2002-12-01 00:28:04 +00:00
dump_PixMap ( & cd - > dstPixMap ) ;
2002-03-25 13:35:23 +00:00
// if(cd->mattePixMap) dump_PixMap(cd->mattePixMap);
2002-12-01 00:28:04 +00:00
if ( cd - > matrix ) dump_MatrixRecord ( " matrix " , cd - > matrix ) ;
if ( cd - > capabilities ) dump_CodecCapabilities ( cd - > capabilities ) ;
2002-03-25 13:35:23 +00:00
printf ( " accuracy=%d transferMode=%d matrixFlags=0x%X matrixType=%d \n " ,
( int ) cd - > accuracy , ( int ) cd - > transferMode , ( int ) cd - > matrixFlags , ( int ) cd - > matrixType ) ;
printf ( " srcrect: %d;%d - %d;%d \n " , cd - > srcRect . top , cd - > srcRect . left , cd - > srcRect . bottom , cd - > srcRect . right ) ;
printf ( " dstrect: %d;%d - %d;%d \n " , cd - > dstRect . top , cd - > dstRect . left , cd - > dstRect . bottom , cd - > dstRect . right ) ;
printf ( " wantedDestinationPixelTypes=%p \n " , cd - > wantedDestinationPixelTypes ) ;
2002-12-01 00:28:04 +00:00
if ( cd - > wantedDestinationPixelTypes ) {
unsigned int * p = cd - > wantedDestinationPixelTypes ;
while ( p [ 0 ] ) {
printf ( " 0x%08X %.4s \n " , p [ 0 ] , & p [ 0 ] ) ;
+ + p ;
}
}
2002-03-25 13:35:23 +00:00
printf ( " screenFloodMethod=%d value=%d preferredOffscreenPixelSize=%d \n " ,
cd - > screenFloodMethod , cd - > screenFloodValue , cd - > preferredOffscreenPixelSize ) ;
printf ( " callbacks: progress=%p compl=%p data=%p ftime=%p srcdata=%p sync=%p \n " ,
cd - > progressProcRecord , cd - > completionProcRecord ,
cd - > dataProcRecord , cd - > frameTime , cd - > sourceData , cd - > syncFrameTime ) ;
// printf("\n");
printf ( " ========================================================= \n " ) ;
}
2002-03-21 21:00:21 +00:00