/*
 	File:		MediaHandlers.h
 
 	Contains:	QuickTime interfaces
 
 	Version:	Technology:	
 				Release:	QuickTime 4.0
 
 	Copyright:	(c) 1990-1998 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 __MEDIAHANDLERS__
#define __MEDIAHANDLERS__

#ifndef __CONDITIONALMACROS__
#include <ConditionalMacros.h>
#endif
#ifndef __MACTYPES__
#include <MacTypes.h>
#endif
#ifndef __COMPONENTS__
#include <Components.h>
#endif
#ifndef __MOVIES__
#include <Movies.h>
#endif
#ifndef __SOUND__
#include <Sound.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

typedef CALLBACK_API( void , PrePrerollCompleteProcPtr )(MediaHandler mh, OSErr err, void *refcon);
typedef STACK_UPP_TYPE(PrePrerollCompleteProcPtr) 				PrePrerollCompleteUPP;

enum {
	handlerHasSpatial			= 1 << 0,
	handlerCanClip				= 1 << 1,
	handlerCanMatte				= 1 << 2,
	handlerCanTransferMode		= 1 << 3,
	handlerNeedsBuffer			= 1 << 4,
	handlerNoIdle				= 1 << 5,
	handlerNoScheduler			= 1 << 6,
	handlerWantsTime			= 1 << 7,
	handlerCGrafPortOnly		= 1 << 8,
	handlerCanSend				= 1 << 9,
	handlerCanHandleComplexMatrix = 1 << 10,
	handlerWantsDestinationPixels = 1 << 11,
	handlerCanSendImageData		= 1 << 12,
	handlerCanPicSave			= 1 << 13
};

/* media task flags */

enum {
	mMustDraw					= 1 << 3,
	mAtEnd						= 1 << 4,
	mPreflightDraw				= 1 << 5,
	mSyncDrawing				= 1 << 6,
	mPrecompositeOnly			= 1 << 9,
	mSoundOnly					= 1 << 10,
	mDoIdleActionsBeforeDraws	= 1 << 11
};

/* media task result flags */

enum {
	mDidDraw					= 1 << 0,
	mNeedsToDraw				= 1 << 2,
	mDrawAgain					= 1 << 3,
	mPartialDraw				= 1 << 4,
	mWantIdleActions			= 1 << 5
};


enum {
	forceUpdateRedraw			= 1 << 0,
	forceUpdateNewBuffer		= 1 << 1
};

/* media hit test flags */

enum {
	mHitTestBounds				= 1L << 0,						/*	point must only be within targetRefCon's bounding box */
	mHitTestImage				= 1L << 1,						/*  point must be within the shape of the targetRefCon's image */
	mHitTestInvisible			= 1L << 2,						/*  invisible targetRefCon's may be hit tested */
	mHitTestIsClick				= 1L << 3						/*  for codecs that want mouse events */
};

/* media is opaque flags */

enum {
	mOpaque						= 1L << 0,
	mInvisible					= 1L << 1
};







struct GetMovieCompleteParams {
	short 							version;
	Movie 							theMovie;
	Track 							theTrack;
	Media 							theMedia;
	TimeScale 						movieScale;
	TimeScale 						mediaScale;
	TimeValue 						movieDuration;
	TimeValue 						trackDuration;
	TimeValue 						mediaDuration;
	Fixed 							effectiveRate;
	TimeBase 						timeBase;
	short 							volume;
	Fixed 							width;
	Fixed 							height;
	MatrixRecord 					trackMovieMatrix;
	CGrafPtr 						moviePort;
	GDHandle 						movieGD;
	PixMapHandle 					trackMatte;
	QTAtomContainer 				inputMap;
};
typedef struct GetMovieCompleteParams	GetMovieCompleteParams;

enum {
	kMediaVideoParamBrightness	= 1,
	kMediaVideoParamContrast	= 2,
	kMediaVideoParamHue			= 3,
	kMediaVideoParamSharpness	= 4,
	kMediaVideoParamSaturation	= 5,
	kMediaVideoParamBlackLevel	= 6,
	kMediaVideoParamWhiteLevel	= 7
};


typedef Handle *						dataHandlePtr;
typedef dataHandlePtr *					dataHandleHandle;

struct QTCustomActionTargetRecord {
	Movie 							movie;
	DoMCActionUPP 					doMCActionCallbackProc;
	long 							callBackRefcon;
	Track 							track;
	long 							trackObjectRefCon;
	Track 							defaultTrack;
	long 							defaultObjectRefCon;
	long 							reserved1;
	long 							reserved2;
};
typedef struct QTCustomActionTargetRecord QTCustomActionTargetRecord;

typedef QTCustomActionTargetRecord *	QTCustomActionTargetPtr;

struct MediaEQSpectrumBandsRecord {
	short 							count;
	UnsignedFixedPtr 				frequency;					/* pointer to array of frequencies*/
};
typedef struct MediaEQSpectrumBandsRecord MediaEQSpectrumBandsRecord;
typedef MediaEQSpectrumBandsRecord *	MediaEQSpectrumBandsRecordPtr;
EXTERN_API( ComponentResult )
CallComponentExecuteWiredAction	(ComponentInstance 		ci,
								 QTAtomContainer 		actionContainer,
								 QTAtom 				actionAtom,
								 QTCustomActionTargetPtr  target,
								 QTEventRecordPtr 		event)								FIVEWORDINLINE(0x2F3C, 0x0010, 0xFFF7, 0x7000, 0xA82A);



/* MediaCallRange2 */
/* These are unique to each type of media handler */
/* They are also included in the public interfaces */


/***** These are the calls for dealing with the Generic media handler *****/
EXTERN_API( ComponentResult )
MediaInitialize					(MediaHandler 			mh,
								 GetMovieCompleteParams * gmc)								FIVEWORDINLINE(0x2F3C, 0x0004, 0x0501, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetHandlerCapabilities		(MediaHandler 			mh,
								 long 					flags,
								 long 					flagsMask)							FIVEWORDINLINE(0x2F3C, 0x0008, 0x0502, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaIdle						(MediaHandler 			mh,
								 TimeValue 				atMediaTime,
								 long 					flagsIn,
								 long *					flagsOut,
								 const TimeRecord *		movieTime)							FIVEWORDINLINE(0x2F3C, 0x0010, 0x0503, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetMediaInfo				(MediaHandler 			mh,
								 Handle 				h)									FIVEWORDINLINE(0x2F3C, 0x0004, 0x0504, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaPutMediaInfo				(MediaHandler 			mh,
								 Handle 				h)									FIVEWORDINLINE(0x2F3C, 0x0004, 0x0505, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetActive					(MediaHandler 			mh,
								 Boolean 				enableMedia)						FIVEWORDINLINE(0x2F3C, 0x0002, 0x0506, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetRate					(MediaHandler 			mh,
								 Fixed 					rate)								FIVEWORDINLINE(0x2F3C, 0x0004, 0x0507, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGGetStatus					(MediaHandler 			mh,
								 ComponentResult *		statusErr)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x0508, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaTrackEdited				(MediaHandler 			mh)									FIVEWORDINLINE(0x2F3C, 0x0000, 0x0509, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetMediaTimeScale			(MediaHandler 			mh,
								 TimeScale 				newTimeScale)						FIVEWORDINLINE(0x2F3C, 0x0004, 0x050A, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetMovieTimeScale			(MediaHandler 			mh,
								 TimeScale 				newTimeScale)						FIVEWORDINLINE(0x2F3C, 0x0004, 0x050B, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetGWorld					(MediaHandler 			mh,
								 CGrafPtr 				aPort,
								 GDHandle 				aGD)								FIVEWORDINLINE(0x2F3C, 0x0008, 0x050C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetDimensions				(MediaHandler 			mh,
								 Fixed 					width,
								 Fixed 					height)								FIVEWORDINLINE(0x2F3C, 0x0008, 0x050D, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetClip					(MediaHandler 			mh,
								 RgnHandle 				theClip)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x050E, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetMatrix					(MediaHandler 			mh,
								 MatrixRecord *			trackMovieMatrix)					FIVEWORDINLINE(0x2F3C, 0x0004, 0x050F, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetTrackOpaque				(MediaHandler 			mh,
								 Boolean *				trackIsOpaque)						FIVEWORDINLINE(0x2F3C, 0x0004, 0x0510, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetGraphicsMode			(MediaHandler 			mh,
								 long 					mode,
								 const RGBColor *		opColor)							FIVEWORDINLINE(0x2F3C, 0x0008, 0x0511, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetGraphicsMode			(MediaHandler 			mh,
								 long *					mode,
								 RGBColor *				opColor)							FIVEWORDINLINE(0x2F3C, 0x0008, 0x0512, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGSetVolume					(MediaHandler 			mh,
								 short 					volume)								FIVEWORDINLINE(0x2F3C, 0x0002, 0x0513, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetSoundBalance			(MediaHandler 			mh,
								 short 					balance)							FIVEWORDINLINE(0x2F3C, 0x0002, 0x0514, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetSoundBalance			(MediaHandler 			mh,
								 short *				balance)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x0515, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetNextBoundsChange		(MediaHandler 			mh,
								 TimeValue *			when)								FIVEWORDINLINE(0x2F3C, 0x0004, 0x0516, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetSrcRgn					(MediaHandler 			mh,
								 RgnHandle 				rgn,
								 TimeValue 				atMediaTime)						FIVEWORDINLINE(0x2F3C, 0x0008, 0x0517, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaPreroll					(MediaHandler 			mh,
								 TimeValue 				time,
								 Fixed 					rate)								FIVEWORDINLINE(0x2F3C, 0x0008, 0x0518, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSampleDescriptionChanged	(MediaHandler 			mh,
								 long 					index)								FIVEWORDINLINE(0x2F3C, 0x0004, 0x0519, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaHasCharacteristic			(MediaHandler 			mh,
								 OSType 				characteristic,
								 Boolean *				hasIt)								FIVEWORDINLINE(0x2F3C, 0x0008, 0x051A, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetOffscreenBufferSize		(MediaHandler 			mh,
								 Rect *					bounds,
								 short 					depth,
								 CTabHandle 			ctab)								FIVEWORDINLINE(0x2F3C, 0x000A, 0x051B, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetHints					(MediaHandler 			mh,
								 long 					hints)								FIVEWORDINLINE(0x2F3C, 0x0004, 0x051C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetName					(MediaHandler 			mh,
								 Str255 				name,
								 long 					requestedLanguage,
								 long *					actualLanguage)						FIVEWORDINLINE(0x2F3C, 0x000C, 0x051D, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaForceUpdate				(MediaHandler 			mh,
								 long 					forceUpdateFlags)					FIVEWORDINLINE(0x2F3C, 0x0004, 0x051E, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetDrawingRgn				(MediaHandler 			mh,
								 RgnHandle *			partialRgn)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x051F, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGSetActiveSegment			(MediaHandler 			mh,
								 TimeValue 				activeStart,
								 TimeValue 				activeDuration)						FIVEWORDINLINE(0x2F3C, 0x0008, 0x0520, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaInvalidateRegion			(MediaHandler 			mh,
								 RgnHandle 				invalRgn)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x0521, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetNextStepTime			(MediaHandler 			mh,
								 short 					flags,
								 TimeValue 				mediaTimeIn,
								 TimeValue *			mediaTimeOut,
								 Fixed 					rate)								FIVEWORDINLINE(0x2F3C, 0x000E, 0x0522, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetNonPrimarySourceData	(MediaHandler 			mh,
								 long 					inputIndex,
								 long 					dataDescriptionSeed,
								 Handle 				dataDescription,
								 void *					data,
								 long 					dataSize,
								 ICMCompletionProcRecordPtr  asyncCompletionProc,
								 UniversalProcPtr 		transferProc,
								 void *					refCon)								FIVEWORDINLINE(0x2F3C, 0x0020, 0x0523, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaChangedNonPrimarySource	(MediaHandler 			mh,
								 long 					inputIndex)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x0524, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaTrackReferencesChanged		(MediaHandler 			mh)									FIVEWORDINLINE(0x2F3C, 0x0000, 0x0525, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetSampleDataPointer		(MediaHandler 			mh,
								 long 					sampleNum,
								 Ptr *					dataPtr,
								 long *					dataSize,
								 long *					sampleDescIndex)					FIVEWORDINLINE(0x2F3C, 0x0010, 0x0526, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaReleaseSampleDataPointer	(MediaHandler 			mh,
								 long 					sampleNum)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x0527, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaTrackPropertyAtomChanged	(MediaHandler 			mh)									FIVEWORDINLINE(0x2F3C, 0x0000, 0x0528, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetTrackInputMapReference	(MediaHandler 			mh,
								 QTAtomContainer 		inputMap)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x0529, 0x7000, 0xA82A);


EXTERN_API( ComponentResult )
MediaSetVideoParam				(MediaHandler 			mh,
								 long 					whichParam,
								 unsigned short *		value)								FIVEWORDINLINE(0x2F3C, 0x0008, 0x052B, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetVideoParam				(MediaHandler 			mh,
								 long 					whichParam,
								 unsigned short *		value)								FIVEWORDINLINE(0x2F3C, 0x0008, 0x052C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaCompare					(MediaHandler 			mh,
								 Boolean *				isOK,
								 Media 					srcMedia,
								 ComponentInstance 		srcMediaComponent)					FIVEWORDINLINE(0x2F3C, 0x000C, 0x052D, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetClock					(MediaHandler 			mh,
								 ComponentInstance *	clock)								FIVEWORDINLINE(0x2F3C, 0x0004, 0x052E, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetSoundOutputComponent	(MediaHandler 			mh,
								 Component 				outputComponent)					FIVEWORDINLINE(0x2F3C, 0x0004, 0x052F, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetSoundOutputComponent	(MediaHandler 			mh,
								 Component *			outputComponent)					FIVEWORDINLINE(0x2F3C, 0x0004, 0x0530, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetSoundLocalizationData	(MediaHandler 			mh,
								 Handle 				data)								FIVEWORDINLINE(0x2F3C, 0x0004, 0x0531, 0x7000, 0xA82A);




EXTERN_API( ComponentResult )
MediaGetInvalidRegion			(MediaHandler 			mh,
								 RgnHandle 				rgn)								FIVEWORDINLINE(0x2F3C, 0x0004, 0x053C, 0x7000, 0xA82A);


EXTERN_API( ComponentResult )
MediaSampleDescriptionB2N		(MediaHandler 			mh,
								 SampleDescriptionHandle  sampleDescriptionH)				FIVEWORDINLINE(0x2F3C, 0x0004, 0x053E, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSampleDescriptionN2B		(MediaHandler 			mh,
								 SampleDescriptionHandle  sampleDescriptionH)				FIVEWORDINLINE(0x2F3C, 0x0004, 0x053F, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaQueueNonPrimarySourceData	(MediaHandler 			mh,
								 long 					inputIndex,
								 long 					dataDescriptionSeed,
								 Handle 				dataDescription,
								 void *					data,
								 long 					dataSize,
								 ICMCompletionProcRecordPtr  asyncCompletionProc,
								 const ICMFrameTimeRecord * frameTime,
								 UniversalProcPtr 		transferProc,
								 void *					refCon)								FIVEWORDINLINE(0x2F3C, 0x0024, 0x0540, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaFlushNonPrimarySourceData	(MediaHandler 			mh,
								 long 					inputIndex)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x0541, 0x7000, 0xA82A);


EXTERN_API( ComponentResult )
MediaGetURLLink					(MediaHandler 			mh,
								 Point 					displayWhere,
								 Handle *				urlLink)							FIVEWORDINLINE(0x2F3C, 0x0008, 0x0543, 0x7000, 0xA82A);


EXTERN_API( ComponentResult )
MediaMakeMediaTimeTable			(MediaHandler 			mh,
								 long **				offsets,
								 TimeValue 				startTime,
								 TimeValue 				endTime,
								 TimeValue 				timeIncrement,
								 short 					firstDataRefIndex,
								 short 					lastDataRefIndex,
								 long *					retDataRefSkew)						FIVEWORDINLINE(0x2F3C, 0x0018, 0x0545, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaHitTestForTargetRefCon		(MediaHandler 			mh,
								 long 					flags,
								 Point 					loc,
								 long *					targetRefCon)						FIVEWORDINLINE(0x2F3C, 0x000C, 0x0546, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaHitTestTargetRefCon		(MediaHandler 			mh,
								 long 					targetRefCon,
								 long 					flags,
								 Point 					loc,
								 Boolean *				wasHit)								FIVEWORDINLINE(0x2F3C, 0x0010, 0x0547, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetActionsForQTEvent		(MediaHandler 			mh,
								 QTEventRecordPtr 		event,
								 long 					targetRefCon,
								 QTAtomContainer *		container,
								 QTAtom *				atom)								FIVEWORDINLINE(0x2F3C, 0x0010, 0x0548, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaDisposeTargetRefCon		(MediaHandler 			mh,
								 long 					targetRefCon)						FIVEWORDINLINE(0x2F3C, 0x0004, 0x0549, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaTargetRefConsEqual			(MediaHandler 			mh,
								 long 					firstRefCon,
								 long 					secondRefCon,
								 Boolean *				equal)								FIVEWORDINLINE(0x2F3C, 0x000C, 0x054A, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetActionsCallback			(MediaHandler 			mh,
								 ActionsUPP 			actionsCallbackProc,
								 void *					refcon)								FIVEWORDINLINE(0x2F3C, 0x0008, 0x054B, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaPrePrerollBegin			(MediaHandler 			mh,
								 TimeValue 				time,
								 Fixed 					rate,
								 PrePrerollCompleteUPP 	completeProc,
								 void *					refcon)								FIVEWORDINLINE(0x2F3C, 0x0010, 0x054C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaPrePrerollCancel			(MediaHandler 			mh,
								 void *					refcon)								FIVEWORDINLINE(0x2F3C, 0x0004, 0x054D, 0x7000, 0xA82A);


EXTERN_API( ComponentResult )
MediaEnterEmptyEdit				(MediaHandler 			mh)									FIVEWORDINLINE(0x2F3C, 0x0000, 0x054F, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaCurrentMediaQueuedData		(MediaHandler 			mh,
								 long *					milliSecs)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x0550, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetEffectiveVolume			(MediaHandler 			mh,
								 short *				volume)								FIVEWORDINLINE(0x2F3C, 0x0004, 0x0551, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaResolveTargetRefCon		(MediaHandler 			mh,
								 QTAtomContainer 		container,
								 QTAtom 				atom,
								 long *					targetRefCon)						FIVEWORDINLINE(0x2F3C, 0x000C, 0x0552, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetSoundLevelMeteringEnabled (MediaHandler 		mh,
								 Boolean *				enabled)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x0553, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetSoundLevelMeteringEnabled (MediaHandler 		mh,
								 Boolean 				enable)								FIVEWORDINLINE(0x2F3C, 0x0002, 0x0554, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetSoundLevelMeterInfo		(MediaHandler 			mh,
								 LevelMeterInfoPtr 		levelInfo)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x0555, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetEffectiveSoundBalance	(MediaHandler 			mh,
								 short *				balance)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x0556, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetScreenLock				(MediaHandler 			mh,
								 Boolean 				lockIt)								FIVEWORDINLINE(0x2F3C, 0x0002, 0x0557, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetDoMCActionCallback		(MediaHandler 			mh,
								 DoMCActionUPP 			doMCActionCallbackProc,
								 void *					refcon)								FIVEWORDINLINE(0x2F3C, 0x0008, 0x0558, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetErrorString				(MediaHandler 			mh,
								 ComponentResult 		theError,
								 Str255 				errorString)						FIVEWORDINLINE(0x2F3C, 0x0008, 0x0559, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetSoundEqualizerBands		(MediaHandler 			mh,
								 MediaEQSpectrumBandsRecordPtr  spectrumInfo)				FIVEWORDINLINE(0x2F3C, 0x0004, 0x055A, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetSoundEqualizerBands		(MediaHandler 			mh,
								 MediaEQSpectrumBandsRecordPtr  spectrumInfo)				FIVEWORDINLINE(0x2F3C, 0x0004, 0x055B, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetSoundEqualizerBandLevels (MediaHandler 			mh,
								 UInt8 *				bandLevels)							FIVEWORDINLINE(0x2F3C, 0x0004, 0x055C, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaDoIdleActions				(MediaHandler 			mh)									FIVEWORDINLINE(0x2F3C, 0x0000, 0x055D, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaSetSoundBassAndTreble		(MediaHandler 			mh,
								 short 					bass,
								 short 					treble)								FIVEWORDINLINE(0x2F3C, 0x0004, 0x055E, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaGetSoundBassAndTreble		(MediaHandler 			mh,
								 short *				bass,
								 short *				treble)								FIVEWORDINLINE(0x2F3C, 0x0008, 0x055F, 0x7000, 0xA82A);

EXTERN_API( ComponentResult )
MediaTimeBaseChanged			(MediaHandler 			mh)									FIVEWORDINLINE(0x2F3C, 0x0000, 0x0560, 0x7000, 0xA82A);





/* selectors for component calls */
enum {
	kCallComponentExecuteWiredActionSelect			= -9,
	kMediaInitializeSelect							= 0x0501,
	kMediaSetHandlerCapabilitiesSelect				= 0x0502,
	kMediaIdleSelect								= 0x0503,
	kMediaGetMediaInfoSelect						= 0x0504,
	kMediaPutMediaInfoSelect						= 0x0505,
	kMediaSetActiveSelect							= 0x0506,
	kMediaSetRateSelect								= 0x0507,
	kMediaGGetStatusSelect							= 0x0508,
	kMediaTrackEditedSelect							= 0x0509,
	kMediaSetMediaTimeScaleSelect					= 0x050A,
	kMediaSetMovieTimeScaleSelect					= 0x050B,
	kMediaSetGWorldSelect							= 0x050C,
	kMediaSetDimensionsSelect						= 0x050D,
	kMediaSetClipSelect								= 0x050E,
	kMediaSetMatrixSelect							= 0x050F,
	kMediaGetTrackOpaqueSelect						= 0x0510,
	kMediaSetGraphicsModeSelect						= 0x0511,
	kMediaGetGraphicsModeSelect						= 0x0512,
	kMediaGSetVolumeSelect							= 0x0513,
	kMediaSetSoundBalanceSelect						= 0x0514,
	kMediaGetSoundBalanceSelect						= 0x0515,
	kMediaGetNextBoundsChangeSelect					= 0x0516,
	kMediaGetSrcRgnSelect							= 0x0517,
	kMediaPrerollSelect								= 0x0518,
	kMediaSampleDescriptionChangedSelect			= 0x0519,
	kMediaHasCharacteristicSelect					= 0x051A,
	kMediaGetOffscreenBufferSizeSelect				= 0x051B,
	kMediaSetHintsSelect							= 0x051C,
	kMediaGetNameSelect								= 0x051D,
	kMediaForceUpdateSelect							= 0x051E,
	kMediaGetDrawingRgnSelect						= 0x051F,
	kMediaGSetActiveSegmentSelect					= 0x0520,
	kMediaInvalidateRegionSelect					= 0x0521,
	kMediaGetNextStepTimeSelect						= 0x0522,
	kMediaSetNonPrimarySourceDataSelect				= 0x0523,
	kMediaChangedNonPrimarySourceSelect				= 0x0524,
	kMediaTrackReferencesChangedSelect				= 0x0525,
	kMediaGetSampleDataPointerSelect				= 0x0526,
	kMediaReleaseSampleDataPointerSelect			= 0x0527,
	kMediaTrackPropertyAtomChangedSelect			= 0x0528,
	kMediaSetTrackInputMapReferenceSelect			= 0x0529,
	kMediaSetVideoParamSelect						= 0x052B,
	kMediaGetVideoParamSelect						= 0x052C,
	kMediaCompareSelect								= 0x052D,
	kMediaGetClockSelect							= 0x052E,
	kMediaSetSoundOutputComponentSelect				= 0x052F,
	kMediaGetSoundOutputComponentSelect				= 0x0530,
	kMediaSetSoundLocalizationDataSelect			= 0x0531,
	kMediaGetInvalidRegionSelect					= 0x053C,
	kMediaSampleDescriptionB2NSelect				= 0x053E,
	kMediaSampleDescriptionN2BSelect				= 0x053F,
	kMediaQueueNonPrimarySourceDataSelect			= 0x0540,
	kMediaFlushNonPrimarySourceDataSelect			= 0x0541,
	kMediaGetURLLinkSelect							= 0x0543,
	kMediaMakeMediaTimeTableSelect					= 0x0545,
	kMediaHitTestForTargetRefConSelect				= 0x0546,
	kMediaHitTestTargetRefConSelect					= 0x0547,
	kMediaGetActionsForQTEventSelect				= 0x0548,
	kMediaDisposeTargetRefConSelect					= 0x0549,
	kMediaTargetRefConsEqualSelect					= 0x054A,
	kMediaSetActionsCallbackSelect					= 0x054B,
	kMediaPrePrerollBeginSelect						= 0x054C,
	kMediaPrePrerollCancelSelect					= 0x054D,
	kMediaEnterEmptyEditSelect						= 0x054F,
	kMediaCurrentMediaQueuedDataSelect				= 0x0550,
	kMediaGetEffectiveVolumeSelect					= 0x0551,
	kMediaResolveTargetRefConSelect					= 0x0552,
	kMediaGetSoundLevelMeteringEnabledSelect		= 0x0553,
	kMediaSetSoundLevelMeteringEnabledSelect		= 0x0554,
	kMediaGetSoundLevelMeterInfoSelect				= 0x0555,
	kMediaGetEffectiveSoundBalanceSelect			= 0x0556,
	kMediaSetScreenLockSelect						= 0x0557,
	kMediaSetDoMCActionCallbackSelect				= 0x0558,
	kMediaGetErrorStringSelect						= 0x0559,
	kMediaGetSoundEqualizerBandsSelect				= 0x055A,
	kMediaSetSoundEqualizerBandsSelect				= 0x055B,
	kMediaGetSoundEqualizerBandLevelsSelect			= 0x055C,
	kMediaDoIdleActionsSelect						= 0x055D,
	kMediaSetSoundBassAndTrebleSelect				= 0x055E,
	kMediaGetSoundBassAndTrebleSelect				= 0x055F,
	kMediaTimeBaseChangedSelect						= 0x0560
};
enum { uppPrePrerollCompleteProcInfo = 0x00000EC0 }; 			/* pascal no_return_value Func(4_bytes, 2_bytes, 4_bytes) */
#if MIXEDMODE_CALLS_ARE_FUNCTIONS
EXTERN_API(PrePrerollCompleteUPP)
NewPrePrerollCompleteProc	   (PrePrerollCompleteProcPtr userRoutine);
EXTERN_API(void)
CallPrePrerollCompleteProc	   (PrePrerollCompleteUPP	userRoutine,
								MediaHandler			mh,
								OSErr					err,
								void *					refcon);
#else
#define NewPrePrerollCompleteProc(userRoutine) 					(PrePrerollCompleteUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppPrePrerollCompleteProcInfo, GetCurrentArchitecture())
#define CallPrePrerollCompleteProc(userRoutine, mh, err, refcon)  CALL_THREE_PARAMETER_UPP((userRoutine), uppPrePrerollCompleteProcInfo, (mh), (err), (refcon))
#endif

#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 /* __MEDIAHANDLERS__ */

