diff --git a/Mac/Modules/qt/_Qtmodule.c b/Mac/Modules/qt/_Qtmodule.c
index 2618205..74121af 100644
--- a/Mac/Modules/qt/_Qtmodule.c
+++ b/Mac/Modules/qt/_Qtmodule.c
@@ -23037,6 +23037,1763 @@
 	return _res;
 }
 
+static PyObject *Qt_MediaSetChunkManagementFlags(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	UInt32 flags;
+	UInt32 flagsMask;
+#ifndef MediaSetChunkManagementFlags
+	PyMac_PRECHECK(MediaSetChunkManagementFlags);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mh,
+	                      &flags,
+	                      &flagsMask))
+		return NULL;
+	_rv = MediaSetChunkManagementFlags(mh,
+	                                   flags,
+	                                   flagsMask);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetChunkManagementFlags(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	UInt32 flags;
+#ifndef MediaGetChunkManagementFlags
+	PyMac_PRECHECK(MediaGetChunkManagementFlags);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetChunkManagementFlags(mh,
+	                                   &flags);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     flags);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetPurgeableChunkMemoryAllowance(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Size allowance;
+#ifndef MediaSetPurgeableChunkMemoryAllowance
+	PyMac_PRECHECK(MediaSetPurgeableChunkMemoryAllowance);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &allowance))
+		return NULL;
+	_rv = MediaSetPurgeableChunkMemoryAllowance(mh,
+	                                            allowance);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetPurgeableChunkMemoryAllowance(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Size allowance;
+#ifndef MediaGetPurgeableChunkMemoryAllowance
+	PyMac_PRECHECK(MediaGetPurgeableChunkMemoryAllowance);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetPurgeableChunkMemoryAllowance(mh,
+	                                            &allowance);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     allowance);
+	return _res;
+}
+
+static PyObject *Qt_MediaEmptyAllPurgeableChunks(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+#ifndef MediaEmptyAllPurgeableChunks
+	PyMac_PRECHECK(MediaEmptyAllPurgeableChunks);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaEmptyAllPurgeableChunks(mh);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetHandlerCapabilities(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long flags;
+	long flagsMask;
+#ifndef MediaSetHandlerCapabilities
+	PyMac_PRECHECK(MediaSetHandlerCapabilities);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mh,
+	                      &flags,
+	                      &flagsMask))
+		return NULL;
+	_rv = MediaSetHandlerCapabilities(mh,
+	                                  flags,
+	                                  flagsMask);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaIdle(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	TimeValue atMediaTime;
+	long flagsIn;
+	long flagsOut;
+	TimeRecord movieTime;
+#ifndef MediaIdle
+	PyMac_PRECHECK(MediaIdle);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&llO&",
+	                      CmpInstObj_Convert, &mh,
+	                      &atMediaTime,
+	                      &flagsIn,
+	                      QtTimeRecord_Convert, &movieTime))
+		return NULL;
+	_rv = MediaIdle(mh,
+	                atMediaTime,
+	                flagsIn,
+	                &flagsOut,
+	                &movieTime);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     flagsOut);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetMediaInfo(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Handle h;
+#ifndef MediaGetMediaInfo
+	PyMac_PRECHECK(MediaGetMediaInfo);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      ResObj_Convert, &h))
+		return NULL;
+	_rv = MediaGetMediaInfo(mh,
+	                        h);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaPutMediaInfo(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Handle h;
+#ifndef MediaPutMediaInfo
+	PyMac_PRECHECK(MediaPutMediaInfo);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      ResObj_Convert, &h))
+		return NULL;
+	_rv = MediaPutMediaInfo(mh,
+	                        h);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetActive(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Boolean enableMedia;
+#ifndef MediaSetActive
+	PyMac_PRECHECK(MediaSetActive);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&b",
+	                      CmpInstObj_Convert, &mh,
+	                      &enableMedia))
+		return NULL;
+	_rv = MediaSetActive(mh,
+	                     enableMedia);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetRate(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Fixed rate;
+#ifndef MediaSetRate
+	PyMac_PRECHECK(MediaSetRate);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      PyMac_GetFixed, &rate))
+		return NULL;
+	_rv = MediaSetRate(mh,
+	                   rate);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGGetStatus(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	ComponentResult statusErr;
+#ifndef MediaGGetStatus
+	PyMac_PRECHECK(MediaGGetStatus);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGGetStatus(mh,
+	                      &statusErr);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     statusErr);
+	return _res;
+}
+
+static PyObject *Qt_MediaTrackEdited(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+#ifndef MediaTrackEdited
+	PyMac_PRECHECK(MediaTrackEdited);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaTrackEdited(mh);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetMediaTimeScale(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	TimeScale newTimeScale;
+#ifndef MediaSetMediaTimeScale
+	PyMac_PRECHECK(MediaSetMediaTimeScale);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &newTimeScale))
+		return NULL;
+	_rv = MediaSetMediaTimeScale(mh,
+	                             newTimeScale);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetMovieTimeScale(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	TimeScale newTimeScale;
+#ifndef MediaSetMovieTimeScale
+	PyMac_PRECHECK(MediaSetMovieTimeScale);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &newTimeScale))
+		return NULL;
+	_rv = MediaSetMovieTimeScale(mh,
+	                             newTimeScale);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetGWorld(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	CGrafPtr aPort;
+	GDHandle aGD;
+#ifndef MediaSetGWorld
+	PyMac_PRECHECK(MediaSetGWorld);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      GrafObj_Convert, &aPort,
+	                      OptResObj_Convert, &aGD))
+		return NULL;
+	_rv = MediaSetGWorld(mh,
+	                     aPort,
+	                     aGD);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetDimensions(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Fixed width;
+	Fixed height;
+#ifndef MediaSetDimensions
+	PyMac_PRECHECK(MediaSetDimensions);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      PyMac_GetFixed, &width,
+	                      PyMac_GetFixed, &height))
+		return NULL;
+	_rv = MediaSetDimensions(mh,
+	                         width,
+	                         height);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetClip(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	RgnHandle theClip;
+#ifndef MediaSetClip
+	PyMac_PRECHECK(MediaSetClip);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      ResObj_Convert, &theClip))
+		return NULL;
+	_rv = MediaSetClip(mh,
+	                   theClip);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetTrackOpaque(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Boolean trackIsOpaque;
+#ifndef MediaGetTrackOpaque
+	PyMac_PRECHECK(MediaGetTrackOpaque);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetTrackOpaque(mh,
+	                          &trackIsOpaque);
+	_res = Py_BuildValue("lb",
+	                     _rv,
+	                     trackIsOpaque);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetGraphicsMode(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long mode;
+	RGBColor opColor;
+#ifndef MediaSetGraphicsMode
+	PyMac_PRECHECK(MediaSetGraphicsMode);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lO&",
+	                      CmpInstObj_Convert, &mh,
+	                      &mode,
+	                      QdRGB_Convert, &opColor))
+		return NULL;
+	_rv = MediaSetGraphicsMode(mh,
+	                           mode,
+	                           &opColor);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetGraphicsMode(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long mode;
+	RGBColor opColor;
+#ifndef MediaGetGraphicsMode
+	PyMac_PRECHECK(MediaGetGraphicsMode);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetGraphicsMode(mh,
+	                           &mode,
+	                           &opColor);
+	_res = Py_BuildValue("llO&",
+	                     _rv,
+	                     mode,
+	                     QdRGB_New, &opColor);
+	return _res;
+}
+
+static PyObject *Qt_MediaGSetVolume(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	short volume;
+#ifndef MediaGSetVolume
+	PyMac_PRECHECK(MediaGSetVolume);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&h",
+	                      CmpInstObj_Convert, &mh,
+	                      &volume))
+		return NULL;
+	_rv = MediaGSetVolume(mh,
+	                      volume);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetSoundBalance(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	short balance;
+#ifndef MediaSetSoundBalance
+	PyMac_PRECHECK(MediaSetSoundBalance);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&h",
+	                      CmpInstObj_Convert, &mh,
+	                      &balance))
+		return NULL;
+	_rv = MediaSetSoundBalance(mh,
+	                           balance);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetSoundBalance(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	short balance;
+#ifndef MediaGetSoundBalance
+	PyMac_PRECHECK(MediaGetSoundBalance);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetSoundBalance(mh,
+	                           &balance);
+	_res = Py_BuildValue("lh",
+	                     _rv,
+	                     balance);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetNextBoundsChange(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	TimeValue when;
+#ifndef MediaGetNextBoundsChange
+	PyMac_PRECHECK(MediaGetNextBoundsChange);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetNextBoundsChange(mh,
+	                               &when);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     when);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetSrcRgn(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	RgnHandle rgn;
+	TimeValue atMediaTime;
+#ifndef MediaGetSrcRgn
+	PyMac_PRECHECK(MediaGetSrcRgn);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      ResObj_Convert, &rgn,
+	                      &atMediaTime))
+		return NULL;
+	_rv = MediaGetSrcRgn(mh,
+	                     rgn,
+	                     atMediaTime);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaPreroll(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	TimeValue time;
+	Fixed rate;
+#ifndef MediaPreroll
+	PyMac_PRECHECK(MediaPreroll);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lO&",
+	                      CmpInstObj_Convert, &mh,
+	                      &time,
+	                      PyMac_GetFixed, &rate))
+		return NULL;
+	_rv = MediaPreroll(mh,
+	                   time,
+	                   rate);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSampleDescriptionChanged(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long index;
+#ifndef MediaSampleDescriptionChanged
+	PyMac_PRECHECK(MediaSampleDescriptionChanged);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &index))
+		return NULL;
+	_rv = MediaSampleDescriptionChanged(mh,
+	                                    index);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaHasCharacteristic(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	OSType characteristic;
+	Boolean hasIt;
+#ifndef MediaHasCharacteristic
+	PyMac_PRECHECK(MediaHasCharacteristic);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      PyMac_GetOSType, &characteristic))
+		return NULL;
+	_rv = MediaHasCharacteristic(mh,
+	                             characteristic,
+	                             &hasIt);
+	_res = Py_BuildValue("lb",
+	                     _rv,
+	                     hasIt);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetOffscreenBufferSize(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Rect bounds;
+	short depth;
+	CTabHandle ctab;
+#ifndef MediaGetOffscreenBufferSize
+	PyMac_PRECHECK(MediaGetOffscreenBufferSize);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&hO&",
+	                      CmpInstObj_Convert, &mh,
+	                      &depth,
+	                      ResObj_Convert, &ctab))
+		return NULL;
+	_rv = MediaGetOffscreenBufferSize(mh,
+	                                  &bounds,
+	                                  depth,
+	                                  ctab);
+	_res = Py_BuildValue("lO&",
+	                     _rv,
+	                     PyMac_BuildRect, &bounds);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetHints(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long hints;
+#ifndef MediaSetHints
+	PyMac_PRECHECK(MediaSetHints);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &hints))
+		return NULL;
+	_rv = MediaSetHints(mh,
+	                    hints);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetName(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Str255 name;
+	long requestedLanguage;
+	long actualLanguage;
+#ifndef MediaGetName
+	PyMac_PRECHECK(MediaGetName);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      PyMac_GetStr255, name,
+	                      &requestedLanguage))
+		return NULL;
+	_rv = MediaGetName(mh,
+	                   name,
+	                   requestedLanguage,
+	                   &actualLanguage);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     actualLanguage);
+	return _res;
+}
+
+static PyObject *Qt_MediaForceUpdate(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long forceUpdateFlags;
+#ifndef MediaForceUpdate
+	PyMac_PRECHECK(MediaForceUpdate);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &forceUpdateFlags))
+		return NULL;
+	_rv = MediaForceUpdate(mh,
+	                       forceUpdateFlags);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetDrawingRgn(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	RgnHandle partialRgn;
+#ifndef MediaGetDrawingRgn
+	PyMac_PRECHECK(MediaGetDrawingRgn);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetDrawingRgn(mh,
+	                         &partialRgn);
+	_res = Py_BuildValue("lO&",
+	                     _rv,
+	                     ResObj_New, partialRgn);
+	return _res;
+}
+
+static PyObject *Qt_MediaGSetActiveSegment(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	TimeValue activeStart;
+	TimeValue activeDuration;
+#ifndef MediaGSetActiveSegment
+	PyMac_PRECHECK(MediaGSetActiveSegment);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mh,
+	                      &activeStart,
+	                      &activeDuration))
+		return NULL;
+	_rv = MediaGSetActiveSegment(mh,
+	                             activeStart,
+	                             activeDuration);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaInvalidateRegion(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	RgnHandle invalRgn;
+#ifndef MediaInvalidateRegion
+	PyMac_PRECHECK(MediaInvalidateRegion);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      ResObj_Convert, &invalRgn))
+		return NULL;
+	_rv = MediaInvalidateRegion(mh,
+	                            invalRgn);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetNextStepTime(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	short flags;
+	TimeValue mediaTimeIn;
+	TimeValue mediaTimeOut;
+	Fixed rate;
+#ifndef MediaGetNextStepTime
+	PyMac_PRECHECK(MediaGetNextStepTime);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&hlO&",
+	                      CmpInstObj_Convert, &mh,
+	                      &flags,
+	                      &mediaTimeIn,
+	                      PyMac_GetFixed, &rate))
+		return NULL;
+	_rv = MediaGetNextStepTime(mh,
+	                           flags,
+	                           mediaTimeIn,
+	                           &mediaTimeOut,
+	                           rate);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     mediaTimeOut);
+	return _res;
+}
+
+static PyObject *Qt_MediaChangedNonPrimarySource(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long inputIndex;
+#ifndef MediaChangedNonPrimarySource
+	PyMac_PRECHECK(MediaChangedNonPrimarySource);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &inputIndex))
+		return NULL;
+	_rv = MediaChangedNonPrimarySource(mh,
+	                                   inputIndex);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaTrackReferencesChanged(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+#ifndef MediaTrackReferencesChanged
+	PyMac_PRECHECK(MediaTrackReferencesChanged);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaTrackReferencesChanged(mh);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaReleaseSampleDataPointer(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long sampleNum;
+#ifndef MediaReleaseSampleDataPointer
+	PyMac_PRECHECK(MediaReleaseSampleDataPointer);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &sampleNum))
+		return NULL;
+	_rv = MediaReleaseSampleDataPointer(mh,
+	                                    sampleNum);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaTrackPropertyAtomChanged(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+#ifndef MediaTrackPropertyAtomChanged
+	PyMac_PRECHECK(MediaTrackPropertyAtomChanged);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaTrackPropertyAtomChanged(mh);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetVideoParam(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long whichParam;
+	unsigned short value;
+#ifndef MediaSetVideoParam
+	PyMac_PRECHECK(MediaSetVideoParam);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &whichParam))
+		return NULL;
+	_rv = MediaSetVideoParam(mh,
+	                         whichParam,
+	                         &value);
+	_res = Py_BuildValue("lH",
+	                     _rv,
+	                     value);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetVideoParam(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long whichParam;
+	unsigned short value;
+#ifndef MediaGetVideoParam
+	PyMac_PRECHECK(MediaGetVideoParam);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &whichParam))
+		return NULL;
+	_rv = MediaGetVideoParam(mh,
+	                         whichParam,
+	                         &value);
+	_res = Py_BuildValue("lH",
+	                     _rv,
+	                     value);
+	return _res;
+}
+
+static PyObject *Qt_MediaCompare(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Boolean isOK;
+	Media srcMedia;
+	ComponentInstance srcMediaComponent;
+#ifndef MediaCompare
+	PyMac_PRECHECK(MediaCompare);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      MediaObj_Convert, &srcMedia,
+	                      CmpInstObj_Convert, &srcMediaComponent))
+		return NULL;
+	_rv = MediaCompare(mh,
+	                   &isOK,
+	                   srcMedia,
+	                   srcMediaComponent);
+	_res = Py_BuildValue("lb",
+	                     _rv,
+	                     isOK);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetClock(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	ComponentInstance clock;
+#ifndef MediaGetClock
+	PyMac_PRECHECK(MediaGetClock);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetClock(mh,
+	                    &clock);
+	_res = Py_BuildValue("lO&",
+	                     _rv,
+	                     CmpInstObj_New, clock);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetSoundOutputComponent(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Component outputComponent;
+#ifndef MediaSetSoundOutputComponent
+	PyMac_PRECHECK(MediaSetSoundOutputComponent);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      CmpObj_Convert, &outputComponent))
+		return NULL;
+	_rv = MediaSetSoundOutputComponent(mh,
+	                                   outputComponent);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetSoundOutputComponent(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Component outputComponent;
+#ifndef MediaGetSoundOutputComponent
+	PyMac_PRECHECK(MediaGetSoundOutputComponent);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetSoundOutputComponent(mh,
+	                                   &outputComponent);
+	_res = Py_BuildValue("lO&",
+	                     _rv,
+	                     CmpObj_New, outputComponent);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetSoundLocalizationData(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Handle data;
+#ifndef MediaSetSoundLocalizationData
+	PyMac_PRECHECK(MediaSetSoundLocalizationData);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      ResObj_Convert, &data))
+		return NULL;
+	_rv = MediaSetSoundLocalizationData(mh,
+	                                    data);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetInvalidRegion(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	RgnHandle rgn;
+#ifndef MediaGetInvalidRegion
+	PyMac_PRECHECK(MediaGetInvalidRegion);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      ResObj_Convert, &rgn))
+		return NULL;
+	_rv = MediaGetInvalidRegion(mh,
+	                            rgn);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSampleDescriptionB2N(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	SampleDescriptionHandle sampleDescriptionH;
+#ifndef MediaSampleDescriptionB2N
+	PyMac_PRECHECK(MediaSampleDescriptionB2N);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      ResObj_Convert, &sampleDescriptionH))
+		return NULL;
+	_rv = MediaSampleDescriptionB2N(mh,
+	                                sampleDescriptionH);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSampleDescriptionN2B(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	SampleDescriptionHandle sampleDescriptionH;
+#ifndef MediaSampleDescriptionN2B
+	PyMac_PRECHECK(MediaSampleDescriptionN2B);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      ResObj_Convert, &sampleDescriptionH))
+		return NULL;
+	_rv = MediaSampleDescriptionN2B(mh,
+	                                sampleDescriptionH);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaFlushNonPrimarySourceData(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long inputIndex;
+#ifndef MediaFlushNonPrimarySourceData
+	PyMac_PRECHECK(MediaFlushNonPrimarySourceData);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &inputIndex))
+		return NULL;
+	_rv = MediaFlushNonPrimarySourceData(mh,
+	                                     inputIndex);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetURLLink(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Point displayWhere;
+	Handle urlLink;
+#ifndef MediaGetURLLink
+	PyMac_PRECHECK(MediaGetURLLink);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      PyMac_GetPoint, &displayWhere))
+		return NULL;
+	_rv = MediaGetURLLink(mh,
+	                      displayWhere,
+	                      &urlLink);
+	_res = Py_BuildValue("lO&",
+	                     _rv,
+	                     ResObj_New, urlLink);
+	return _res;
+}
+
+static PyObject *Qt_MediaHitTestForTargetRefCon(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long flags;
+	Point loc;
+	long targetRefCon;
+#ifndef MediaHitTestForTargetRefCon
+	PyMac_PRECHECK(MediaHitTestForTargetRefCon);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lO&",
+	                      CmpInstObj_Convert, &mh,
+	                      &flags,
+	                      PyMac_GetPoint, &loc))
+		return NULL;
+	_rv = MediaHitTestForTargetRefCon(mh,
+	                                  flags,
+	                                  loc,
+	                                  &targetRefCon);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     targetRefCon);
+	return _res;
+}
+
+static PyObject *Qt_MediaHitTestTargetRefCon(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long targetRefCon;
+	long flags;
+	Point loc;
+	Boolean wasHit;
+#ifndef MediaHitTestTargetRefCon
+	PyMac_PRECHECK(MediaHitTestTargetRefCon);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&llO&",
+	                      CmpInstObj_Convert, &mh,
+	                      &targetRefCon,
+	                      &flags,
+	                      PyMac_GetPoint, &loc))
+		return NULL;
+	_rv = MediaHitTestTargetRefCon(mh,
+	                               targetRefCon,
+	                               flags,
+	                               loc,
+	                               &wasHit);
+	_res = Py_BuildValue("lb",
+	                     _rv,
+	                     wasHit);
+	return _res;
+}
+
+static PyObject *Qt_MediaDisposeTargetRefCon(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long targetRefCon;
+#ifndef MediaDisposeTargetRefCon
+	PyMac_PRECHECK(MediaDisposeTargetRefCon);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &targetRefCon))
+		return NULL;
+	_rv = MediaDisposeTargetRefCon(mh,
+	                               targetRefCon);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaTargetRefConsEqual(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long firstRefCon;
+	long secondRefCon;
+	Boolean equal;
+#ifndef MediaTargetRefConsEqual
+	PyMac_PRECHECK(MediaTargetRefConsEqual);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mh,
+	                      &firstRefCon,
+	                      &secondRefCon))
+		return NULL;
+	_rv = MediaTargetRefConsEqual(mh,
+	                              firstRefCon,
+	                              secondRefCon,
+	                              &equal);
+	_res = Py_BuildValue("lb",
+	                     _rv,
+	                     equal);
+	return _res;
+}
+
+static PyObject *Qt_MediaPrePrerollCancel(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	void * refcon;
+#ifndef MediaPrePrerollCancel
+	PyMac_PRECHECK(MediaPrePrerollCancel);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&s",
+	                      CmpInstObj_Convert, &mh,
+	                      &refcon))
+		return NULL;
+	_rv = MediaPrePrerollCancel(mh,
+	                            refcon);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaEnterEmptyEdit(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+#ifndef MediaEnterEmptyEdit
+	PyMac_PRECHECK(MediaEnterEmptyEdit);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaEnterEmptyEdit(mh);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaCurrentMediaQueuedData(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long milliSecs;
+#ifndef MediaCurrentMediaQueuedData
+	PyMac_PRECHECK(MediaCurrentMediaQueuedData);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaCurrentMediaQueuedData(mh,
+	                                  &milliSecs);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     milliSecs);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetEffectiveVolume(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	short volume;
+#ifndef MediaGetEffectiveVolume
+	PyMac_PRECHECK(MediaGetEffectiveVolume);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetEffectiveVolume(mh,
+	                              &volume);
+	_res = Py_BuildValue("lh",
+	                     _rv,
+	                     volume);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetSoundLevelMeteringEnabled(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Boolean enabled;
+#ifndef MediaGetSoundLevelMeteringEnabled
+	PyMac_PRECHECK(MediaGetSoundLevelMeteringEnabled);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetSoundLevelMeteringEnabled(mh,
+	                                        &enabled);
+	_res = Py_BuildValue("lb",
+	                     _rv,
+	                     enabled);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetSoundLevelMeteringEnabled(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Boolean enable;
+#ifndef MediaSetSoundLevelMeteringEnabled
+	PyMac_PRECHECK(MediaSetSoundLevelMeteringEnabled);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&b",
+	                      CmpInstObj_Convert, &mh,
+	                      &enable))
+		return NULL;
+	_rv = MediaSetSoundLevelMeteringEnabled(mh,
+	                                        enable);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetEffectiveSoundBalance(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	short balance;
+#ifndef MediaGetEffectiveSoundBalance
+	PyMac_PRECHECK(MediaGetEffectiveSoundBalance);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetEffectiveSoundBalance(mh,
+	                                    &balance);
+	_res = Py_BuildValue("lh",
+	                     _rv,
+	                     balance);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetScreenLock(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	Boolean lockIt;
+#ifndef MediaSetScreenLock
+	PyMac_PRECHECK(MediaSetScreenLock);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&b",
+	                      CmpInstObj_Convert, &mh,
+	                      &lockIt))
+		return NULL;
+	_rv = MediaSetScreenLock(mh,
+	                         lockIt);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetErrorString(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	ComponentResult theError;
+	Str255 errorString;
+#ifndef MediaGetErrorString
+	PyMac_PRECHECK(MediaGetErrorString);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lO&",
+	                      CmpInstObj_Convert, &mh,
+	                      &theError,
+	                      PyMac_GetStr255, errorString))
+		return NULL;
+	_rv = MediaGetErrorString(mh,
+	                          theError,
+	                          errorString);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetSoundEqualizerBandLevels(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	UInt8 bandLevels;
+#ifndef MediaGetSoundEqualizerBandLevels
+	PyMac_PRECHECK(MediaGetSoundEqualizerBandLevels);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetSoundEqualizerBandLevels(mh,
+	                                       &bandLevels);
+	_res = Py_BuildValue("lb",
+	                     _rv,
+	                     bandLevels);
+	return _res;
+}
+
+static PyObject *Qt_MediaDoIdleActions(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+#ifndef MediaDoIdleActions
+	PyMac_PRECHECK(MediaDoIdleActions);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaDoIdleActions(mh);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetSoundBassAndTreble(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	short bass;
+	short treble;
+#ifndef MediaSetSoundBassAndTreble
+	PyMac_PRECHECK(MediaSetSoundBassAndTreble);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&hh",
+	                      CmpInstObj_Convert, &mh,
+	                      &bass,
+	                      &treble))
+		return NULL;
+	_rv = MediaSetSoundBassAndTreble(mh,
+	                                 bass,
+	                                 treble);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetSoundBassAndTreble(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	short bass;
+	short treble;
+#ifndef MediaGetSoundBassAndTreble
+	PyMac_PRECHECK(MediaGetSoundBassAndTreble);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetSoundBassAndTreble(mh,
+	                                 &bass,
+	                                 &treble);
+	_res = Py_BuildValue("lhh",
+	                     _rv,
+	                     bass,
+	                     treble);
+	return _res;
+}
+
+static PyObject *Qt_MediaTimeBaseChanged(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+#ifndef MediaTimeBaseChanged
+	PyMac_PRECHECK(MediaTimeBaseChanged);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaTimeBaseChanged(mh);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaMCIsPlayerEvent(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	EventRecord e;
+	Boolean handledIt;
+#ifndef MediaMCIsPlayerEvent
+	PyMac_PRECHECK(MediaMCIsPlayerEvent);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      PyMac_GetEventRecord, &e))
+		return NULL;
+	_rv = MediaMCIsPlayerEvent(mh,
+	                           &e,
+	                           &handledIt);
+	_res = Py_BuildValue("lb",
+	                     _rv,
+	                     handledIt);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetMediaLoadState(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long mediaLoadState;
+#ifndef MediaGetMediaLoadState
+	PyMac_PRECHECK(MediaGetMediaLoadState);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGetMediaLoadState(mh,
+	                             &mediaLoadState);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     mediaLoadState);
+	return _res;
+}
+
+static PyObject *Qt_MediaVideoOutputChanged(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	ComponentInstance vout;
+#ifndef MediaVideoOutputChanged
+	PyMac_PRECHECK(MediaVideoOutputChanged);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      CmpInstObj_Convert, &vout))
+		return NULL;
+	_rv = MediaVideoOutputChanged(mh,
+	                              vout);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaEmptySampleCache(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long sampleNum;
+	long sampleCount;
+#ifndef MediaEmptySampleCache
+	PyMac_PRECHECK(MediaEmptySampleCache);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&ll",
+	                      CmpInstObj_Convert, &mh,
+	                      &sampleNum,
+	                      &sampleCount))
+		return NULL;
+	_rv = MediaEmptySampleCache(mh,
+	                            sampleNum,
+	                            sampleCount);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaGetPublicInfo(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	OSType infoSelector;
+	void * infoDataPtr;
+	Size ioDataSize;
+#ifndef MediaGetPublicInfo
+	PyMac_PRECHECK(MediaGetPublicInfo);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&s",
+	                      CmpInstObj_Convert, &mh,
+	                      PyMac_GetOSType, &infoSelector,
+	                      &infoDataPtr))
+		return NULL;
+	_rv = MediaGetPublicInfo(mh,
+	                         infoSelector,
+	                         infoDataPtr,
+	                         &ioDataSize);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     ioDataSize);
+	return _res;
+}
+
+static PyObject *Qt_MediaSetPublicInfo(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	OSType infoSelector;
+	void * infoDataPtr;
+	Size dataSize;
+#ifndef MediaSetPublicInfo
+	PyMac_PRECHECK(MediaSetPublicInfo);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&sl",
+	                      CmpInstObj_Convert, &mh,
+	                      PyMac_GetOSType, &infoSelector,
+	                      &infoDataPtr,
+	                      &dataSize))
+		return NULL;
+	_rv = MediaSetPublicInfo(mh,
+	                         infoSelector,
+	                         infoDataPtr,
+	                         dataSize);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaRefConSetProperty(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long refCon;
+	long propertyType;
+	void * propertyValue;
+#ifndef MediaRefConSetProperty
+	PyMac_PRECHECK(MediaRefConSetProperty);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lls",
+	                      CmpInstObj_Convert, &mh,
+	                      &refCon,
+	                      &propertyType,
+	                      &propertyValue))
+		return NULL;
+	_rv = MediaRefConSetProperty(mh,
+	                             refCon,
+	                             propertyType,
+	                             propertyValue);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaRefConGetProperty(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long refCon;
+	long propertyType;
+	void * propertyValue;
+#ifndef MediaRefConGetProperty
+	PyMac_PRECHECK(MediaRefConGetProperty);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&lls",
+	                      CmpInstObj_Convert, &mh,
+	                      &refCon,
+	                      &propertyType,
+	                      &propertyValue))
+		return NULL;
+	_rv = MediaRefConGetProperty(mh,
+	                             refCon,
+	                             propertyType,
+	                             propertyValue);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Qt_MediaNavigateTargetRefCon(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	long navigation;
+	long refCon;
+#ifndef MediaNavigateTargetRefCon
+	PyMac_PRECHECK(MediaNavigateTargetRefCon);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&l",
+	                      CmpInstObj_Convert, &mh,
+	                      &navigation))
+		return NULL;
+	_rv = MediaNavigateTargetRefCon(mh,
+	                                navigation,
+	                                &refCon);
+	_res = Py_BuildValue("ll",
+	                     _rv,
+	                     refCon);
+	return _res;
+}
+
+static PyObject *Qt_MediaGGetIdleManager(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	IdleManager pim;
+#ifndef MediaGGetIdleManager
+	PyMac_PRECHECK(MediaGGetIdleManager);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      CmpInstObj_Convert, &mh))
+		return NULL;
+	_rv = MediaGGetIdleManager(mh,
+	                           &pim);
+	_res = Py_BuildValue("lO&",
+	                     _rv,
+	                     IdleManagerObj_New, pim);
+	return _res;
+}
+
+static PyObject *Qt_MediaGSetIdleManager(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	ComponentResult _rv;
+	MediaHandler mh;
+	IdleManager im;
+#ifndef MediaGSetIdleManager
+	PyMac_PRECHECK(MediaGSetIdleManager);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&",
+	                      CmpInstObj_Convert, &mh,
+	                      IdleManagerObj_Convert, &im))
+		return NULL;
+	_rv = MediaGSetIdleManager(mh,
+	                           im);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
 static PyObject *Qt_AlignWindow(PyObject *_self, PyObject *_args)
 {
 	PyObject *_res = NULL;
@@ -24494,6 +26251,170 @@
 	 PyDoc_STR("(QTVideoOutputComponent vo, long index) -> (ComponentResult _rv, Component codec)")},
 	{"QTVideoOutputBaseSetEchoPort", (PyCFunction)Qt_QTVideoOutputBaseSetEchoPort, 1,
 	 PyDoc_STR("(QTVideoOutputComponent vo, CGrafPtr echoPort) -> (ComponentResult _rv)")},
+	{"MediaSetChunkManagementFlags", (PyCFunction)Qt_MediaSetChunkManagementFlags, 1,
+	 PyDoc_STR("(MediaHandler mh, UInt32 flags, UInt32 flagsMask) -> (ComponentResult _rv)")},
+	{"MediaGetChunkManagementFlags", (PyCFunction)Qt_MediaGetChunkManagementFlags, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, UInt32 flags)")},
+	{"MediaSetPurgeableChunkMemoryAllowance", (PyCFunction)Qt_MediaSetPurgeableChunkMemoryAllowance, 1,
+	 PyDoc_STR("(MediaHandler mh, Size allowance) -> (ComponentResult _rv)")},
+	{"MediaGetPurgeableChunkMemoryAllowance", (PyCFunction)Qt_MediaGetPurgeableChunkMemoryAllowance, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, Size allowance)")},
+	{"MediaEmptyAllPurgeableChunks", (PyCFunction)Qt_MediaEmptyAllPurgeableChunks, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv)")},
+	{"MediaSetHandlerCapabilities", (PyCFunction)Qt_MediaSetHandlerCapabilities, 1,
+	 PyDoc_STR("(MediaHandler mh, long flags, long flagsMask) -> (ComponentResult _rv)")},
+	{"MediaIdle", (PyCFunction)Qt_MediaIdle, 1,
+	 PyDoc_STR("(MediaHandler mh, TimeValue atMediaTime, long flagsIn, TimeRecord movieTime) -> (ComponentResult _rv, long flagsOut)")},
+	{"MediaGetMediaInfo", (PyCFunction)Qt_MediaGetMediaInfo, 1,
+	 PyDoc_STR("(MediaHandler mh, Handle h) -> (ComponentResult _rv)")},
+	{"MediaPutMediaInfo", (PyCFunction)Qt_MediaPutMediaInfo, 1,
+	 PyDoc_STR("(MediaHandler mh, Handle h) -> (ComponentResult _rv)")},
+	{"MediaSetActive", (PyCFunction)Qt_MediaSetActive, 1,
+	 PyDoc_STR("(MediaHandler mh, Boolean enableMedia) -> (ComponentResult _rv)")},
+	{"MediaSetRate", (PyCFunction)Qt_MediaSetRate, 1,
+	 PyDoc_STR("(MediaHandler mh, Fixed rate) -> (ComponentResult _rv)")},
+	{"MediaGGetStatus", (PyCFunction)Qt_MediaGGetStatus, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, ComponentResult statusErr)")},
+	{"MediaTrackEdited", (PyCFunction)Qt_MediaTrackEdited, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv)")},
+	{"MediaSetMediaTimeScale", (PyCFunction)Qt_MediaSetMediaTimeScale, 1,
+	 PyDoc_STR("(MediaHandler mh, TimeScale newTimeScale) -> (ComponentResult _rv)")},
+	{"MediaSetMovieTimeScale", (PyCFunction)Qt_MediaSetMovieTimeScale, 1,
+	 PyDoc_STR("(MediaHandler mh, TimeScale newTimeScale) -> (ComponentResult _rv)")},
+	{"MediaSetGWorld", (PyCFunction)Qt_MediaSetGWorld, 1,
+	 PyDoc_STR("(MediaHandler mh, CGrafPtr aPort, GDHandle aGD) -> (ComponentResult _rv)")},
+	{"MediaSetDimensions", (PyCFunction)Qt_MediaSetDimensions, 1,
+	 PyDoc_STR("(MediaHandler mh, Fixed width, Fixed height) -> (ComponentResult _rv)")},
+	{"MediaSetClip", (PyCFunction)Qt_MediaSetClip, 1,
+	 PyDoc_STR("(MediaHandler mh, RgnHandle theClip) -> (ComponentResult _rv)")},
+	{"MediaGetTrackOpaque", (PyCFunction)Qt_MediaGetTrackOpaque, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, Boolean trackIsOpaque)")},
+	{"MediaSetGraphicsMode", (PyCFunction)Qt_MediaSetGraphicsMode, 1,
+	 PyDoc_STR("(MediaHandler mh, long mode, RGBColor opColor) -> (ComponentResult _rv)")},
+	{"MediaGetGraphicsMode", (PyCFunction)Qt_MediaGetGraphicsMode, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, long mode, RGBColor opColor)")},
+	{"MediaGSetVolume", (PyCFunction)Qt_MediaGSetVolume, 1,
+	 PyDoc_STR("(MediaHandler mh, short volume) -> (ComponentResult _rv)")},
+	{"MediaSetSoundBalance", (PyCFunction)Qt_MediaSetSoundBalance, 1,
+	 PyDoc_STR("(MediaHandler mh, short balance) -> (ComponentResult _rv)")},
+	{"MediaGetSoundBalance", (PyCFunction)Qt_MediaGetSoundBalance, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, short balance)")},
+	{"MediaGetNextBoundsChange", (PyCFunction)Qt_MediaGetNextBoundsChange, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, TimeValue when)")},
+	{"MediaGetSrcRgn", (PyCFunction)Qt_MediaGetSrcRgn, 1,
+	 PyDoc_STR("(MediaHandler mh, RgnHandle rgn, TimeValue atMediaTime) -> (ComponentResult _rv)")},
+	{"MediaPreroll", (PyCFunction)Qt_MediaPreroll, 1,
+	 PyDoc_STR("(MediaHandler mh, TimeValue time, Fixed rate) -> (ComponentResult _rv)")},
+	{"MediaSampleDescriptionChanged", (PyCFunction)Qt_MediaSampleDescriptionChanged, 1,
+	 PyDoc_STR("(MediaHandler mh, long index) -> (ComponentResult _rv)")},
+	{"MediaHasCharacteristic", (PyCFunction)Qt_MediaHasCharacteristic, 1,
+	 PyDoc_STR("(MediaHandler mh, OSType characteristic) -> (ComponentResult _rv, Boolean hasIt)")},
+	{"MediaGetOffscreenBufferSize", (PyCFunction)Qt_MediaGetOffscreenBufferSize, 1,
+	 PyDoc_STR("(MediaHandler mh, short depth, CTabHandle ctab) -> (ComponentResult _rv, Rect bounds)")},
+	{"MediaSetHints", (PyCFunction)Qt_MediaSetHints, 1,
+	 PyDoc_STR("(MediaHandler mh, long hints) -> (ComponentResult _rv)")},
+	{"MediaGetName", (PyCFunction)Qt_MediaGetName, 1,
+	 PyDoc_STR("(MediaHandler mh, Str255 name, long requestedLanguage) -> (ComponentResult _rv, long actualLanguage)")},
+	{"MediaForceUpdate", (PyCFunction)Qt_MediaForceUpdate, 1,
+	 PyDoc_STR("(MediaHandler mh, long forceUpdateFlags) -> (ComponentResult _rv)")},
+	{"MediaGetDrawingRgn", (PyCFunction)Qt_MediaGetDrawingRgn, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, RgnHandle partialRgn)")},
+	{"MediaGSetActiveSegment", (PyCFunction)Qt_MediaGSetActiveSegment, 1,
+	 PyDoc_STR("(MediaHandler mh, TimeValue activeStart, TimeValue activeDuration) -> (ComponentResult _rv)")},
+	{"MediaInvalidateRegion", (PyCFunction)Qt_MediaInvalidateRegion, 1,
+	 PyDoc_STR("(MediaHandler mh, RgnHandle invalRgn) -> (ComponentResult _rv)")},
+	{"MediaGetNextStepTime", (PyCFunction)Qt_MediaGetNextStepTime, 1,
+	 PyDoc_STR("(MediaHandler mh, short flags, TimeValue mediaTimeIn, Fixed rate) -> (ComponentResult _rv, TimeValue mediaTimeOut)")},
+	{"MediaChangedNonPrimarySource", (PyCFunction)Qt_MediaChangedNonPrimarySource, 1,
+	 PyDoc_STR("(MediaHandler mh, long inputIndex) -> (ComponentResult _rv)")},
+	{"MediaTrackReferencesChanged", (PyCFunction)Qt_MediaTrackReferencesChanged, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv)")},
+	{"MediaReleaseSampleDataPointer", (PyCFunction)Qt_MediaReleaseSampleDataPointer, 1,
+	 PyDoc_STR("(MediaHandler mh, long sampleNum) -> (ComponentResult _rv)")},
+	{"MediaTrackPropertyAtomChanged", (PyCFunction)Qt_MediaTrackPropertyAtomChanged, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv)")},
+	{"MediaSetVideoParam", (PyCFunction)Qt_MediaSetVideoParam, 1,
+	 PyDoc_STR("(MediaHandler mh, long whichParam) -> (ComponentResult _rv, unsigned short value)")},
+	{"MediaGetVideoParam", (PyCFunction)Qt_MediaGetVideoParam, 1,
+	 PyDoc_STR("(MediaHandler mh, long whichParam) -> (ComponentResult _rv, unsigned short value)")},
+	{"MediaCompare", (PyCFunction)Qt_MediaCompare, 1,
+	 PyDoc_STR("(MediaHandler mh, Media srcMedia, ComponentInstance srcMediaComponent) -> (ComponentResult _rv, Boolean isOK)")},
+	{"MediaGetClock", (PyCFunction)Qt_MediaGetClock, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, ComponentInstance clock)")},
+	{"MediaSetSoundOutputComponent", (PyCFunction)Qt_MediaSetSoundOutputComponent, 1,
+	 PyDoc_STR("(MediaHandler mh, Component outputComponent) -> (ComponentResult _rv)")},
+	{"MediaGetSoundOutputComponent", (PyCFunction)Qt_MediaGetSoundOutputComponent, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, Component outputComponent)")},
+	{"MediaSetSoundLocalizationData", (PyCFunction)Qt_MediaSetSoundLocalizationData, 1,
+	 PyDoc_STR("(MediaHandler mh, Handle data) -> (ComponentResult _rv)")},
+	{"MediaGetInvalidRegion", (PyCFunction)Qt_MediaGetInvalidRegion, 1,
+	 PyDoc_STR("(MediaHandler mh, RgnHandle rgn) -> (ComponentResult _rv)")},
+	{"MediaSampleDescriptionB2N", (PyCFunction)Qt_MediaSampleDescriptionB2N, 1,
+	 PyDoc_STR("(MediaHandler mh, SampleDescriptionHandle sampleDescriptionH) -> (ComponentResult _rv)")},
+	{"MediaSampleDescriptionN2B", (PyCFunction)Qt_MediaSampleDescriptionN2B, 1,
+	 PyDoc_STR("(MediaHandler mh, SampleDescriptionHandle sampleDescriptionH) -> (ComponentResult _rv)")},
+	{"MediaFlushNonPrimarySourceData", (PyCFunction)Qt_MediaFlushNonPrimarySourceData, 1,
+	 PyDoc_STR("(MediaHandler mh, long inputIndex) -> (ComponentResult _rv)")},
+	{"MediaGetURLLink", (PyCFunction)Qt_MediaGetURLLink, 1,
+	 PyDoc_STR("(MediaHandler mh, Point displayWhere) -> (ComponentResult _rv, Handle urlLink)")},
+	{"MediaHitTestForTargetRefCon", (PyCFunction)Qt_MediaHitTestForTargetRefCon, 1,
+	 PyDoc_STR("(MediaHandler mh, long flags, Point loc) -> (ComponentResult _rv, long targetRefCon)")},
+	{"MediaHitTestTargetRefCon", (PyCFunction)Qt_MediaHitTestTargetRefCon, 1,
+	 PyDoc_STR("(MediaHandler mh, long targetRefCon, long flags, Point loc) -> (ComponentResult _rv, Boolean wasHit)")},
+	{"MediaDisposeTargetRefCon", (PyCFunction)Qt_MediaDisposeTargetRefCon, 1,
+	 PyDoc_STR("(MediaHandler mh, long targetRefCon) -> (ComponentResult _rv)")},
+	{"MediaTargetRefConsEqual", (PyCFunction)Qt_MediaTargetRefConsEqual, 1,
+	 PyDoc_STR("(MediaHandler mh, long firstRefCon, long secondRefCon) -> (ComponentResult _rv, Boolean equal)")},
+	{"MediaPrePrerollCancel", (PyCFunction)Qt_MediaPrePrerollCancel, 1,
+	 PyDoc_STR("(MediaHandler mh, void * refcon) -> (ComponentResult _rv)")},
+	{"MediaEnterEmptyEdit", (PyCFunction)Qt_MediaEnterEmptyEdit, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv)")},
+	{"MediaCurrentMediaQueuedData", (PyCFunction)Qt_MediaCurrentMediaQueuedData, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, long milliSecs)")},
+	{"MediaGetEffectiveVolume", (PyCFunction)Qt_MediaGetEffectiveVolume, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, short volume)")},
+	{"MediaGetSoundLevelMeteringEnabled", (PyCFunction)Qt_MediaGetSoundLevelMeteringEnabled, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, Boolean enabled)")},
+	{"MediaSetSoundLevelMeteringEnabled", (PyCFunction)Qt_MediaSetSoundLevelMeteringEnabled, 1,
+	 PyDoc_STR("(MediaHandler mh, Boolean enable) -> (ComponentResult _rv)")},
+	{"MediaGetEffectiveSoundBalance", (PyCFunction)Qt_MediaGetEffectiveSoundBalance, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, short balance)")},
+	{"MediaSetScreenLock", (PyCFunction)Qt_MediaSetScreenLock, 1,
+	 PyDoc_STR("(MediaHandler mh, Boolean lockIt) -> (ComponentResult _rv)")},
+	{"MediaGetErrorString", (PyCFunction)Qt_MediaGetErrorString, 1,
+	 PyDoc_STR("(MediaHandler mh, ComponentResult theError, Str255 errorString) -> (ComponentResult _rv)")},
+	{"MediaGetSoundEqualizerBandLevels", (PyCFunction)Qt_MediaGetSoundEqualizerBandLevels, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, UInt8 bandLevels)")},
+	{"MediaDoIdleActions", (PyCFunction)Qt_MediaDoIdleActions, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv)")},
+	{"MediaSetSoundBassAndTreble", (PyCFunction)Qt_MediaSetSoundBassAndTreble, 1,
+	 PyDoc_STR("(MediaHandler mh, short bass, short treble) -> (ComponentResult _rv)")},
+	{"MediaGetSoundBassAndTreble", (PyCFunction)Qt_MediaGetSoundBassAndTreble, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, short bass, short treble)")},
+	{"MediaTimeBaseChanged", (PyCFunction)Qt_MediaTimeBaseChanged, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv)")},
+	{"MediaMCIsPlayerEvent", (PyCFunction)Qt_MediaMCIsPlayerEvent, 1,
+	 PyDoc_STR("(MediaHandler mh, EventRecord e) -> (ComponentResult _rv, Boolean handledIt)")},
+	{"MediaGetMediaLoadState", (PyCFunction)Qt_MediaGetMediaLoadState, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, long mediaLoadState)")},
+	{"MediaVideoOutputChanged", (PyCFunction)Qt_MediaVideoOutputChanged, 1,
+	 PyDoc_STR("(MediaHandler mh, ComponentInstance vout) -> (ComponentResult _rv)")},
+	{"MediaEmptySampleCache", (PyCFunction)Qt_MediaEmptySampleCache, 1,
+	 PyDoc_STR("(MediaHandler mh, long sampleNum, long sampleCount) -> (ComponentResult _rv)")},
+	{"MediaGetPublicInfo", (PyCFunction)Qt_MediaGetPublicInfo, 1,
+	 PyDoc_STR("(MediaHandler mh, OSType infoSelector, void * infoDataPtr) -> (ComponentResult _rv, Size ioDataSize)")},
+	{"MediaSetPublicInfo", (PyCFunction)Qt_MediaSetPublicInfo, 1,
+	 PyDoc_STR("(MediaHandler mh, OSType infoSelector, void * infoDataPtr, Size dataSize) -> (ComponentResult _rv)")},
+	{"MediaRefConSetProperty", (PyCFunction)Qt_MediaRefConSetProperty, 1,
+	 PyDoc_STR("(MediaHandler mh, long refCon, long propertyType, void * propertyValue) -> (ComponentResult _rv)")},
+	{"MediaRefConGetProperty", (PyCFunction)Qt_MediaRefConGetProperty, 1,
+	 PyDoc_STR("(MediaHandler mh, long refCon, long propertyType, void * propertyValue) -> (ComponentResult _rv)")},
+	{"MediaNavigateTargetRefCon", (PyCFunction)Qt_MediaNavigateTargetRefCon, 1,
+	 PyDoc_STR("(MediaHandler mh, long navigation) -> (ComponentResult _rv, long refCon)")},
+	{"MediaGGetIdleManager", (PyCFunction)Qt_MediaGGetIdleManager, 1,
+	 PyDoc_STR("(MediaHandler mh) -> (ComponentResult _rv, IdleManager pim)")},
+	{"MediaGSetIdleManager", (PyCFunction)Qt_MediaGSetIdleManager, 1,
+	 PyDoc_STR("(MediaHandler mh, IdleManager im) -> (ComponentResult _rv)")},
 	{"AlignWindow", (PyCFunction)Qt_AlignWindow, 1,
 	 PyDoc_STR("(WindowPtr wp, Boolean front) -> None")},
 	{"DragAlignedWindow", (PyCFunction)Qt_DragAlignedWindow, 1,
diff --git a/Mac/Modules/qt/qtscan.py b/Mac/Modules/qt/qtscan.py
index c161b7c..b32fc6b 100644
--- a/Mac/Modules/qt/qtscan.py
+++ b/Mac/Modules/qt/qtscan.py
@@ -8,7 +8,13 @@
 
 LONG = "QuickTime"
 SHORT = "qt"
-HEADERFILES= ("Movies.h", "ImageCompression.h", "QuickTimeComponents.h")
+HEADERFILES= (
+	"Movies.h", 
+	"ImageCompression.h", 
+	"QuickTimeComponents.h",
+#	"ImageCodec.h"  -- seems not too useful, and difficult.
+	"MediaHandlers.h"
+	)
 OBJECTS = ("Movie", "Track", "Media", "UserData", "TimeBase", "MovieController", 
 	"IdleManager", "SGOutput")
 
@@ -90,6 +96,10 @@
 			"VDCompressDone",
 			"VDReleaseCompressBuffer",
 			"QTVideoOutputGetGWorldParameters", # How useful is this?
+			
+			# MediaHandlers
+			"MediaMakeMediaTimeTable", # just lazy
+			"MediaGetSampleDataPointer", # funny output pointer
 			]
 
 	def makeblacklisttypes(self):
@@ -205,6 +215,14 @@
             "XMLDoc",
             "UInt64", 	# XXXX lazy
             "UInt64_ptr", # XXXX lazy
+            
+            # From MediaHandlers
+            "ActionsUPP",
+            "PrePrerollCompleteUPP",
+            "CodecComponentHandle", # Difficult: handle containing list of components.
+            "GetMovieCompleteParams", # Immense struct
+            "LevelMeterInfoPtr", # Lazy. Also: can be an output parameter!!
+            "MediaEQSpectrumBandsRecordPtr", # ditto
 			]
 
 	def makerepairinstructions(self):
