Commit 9cfea10b authored by Jack Jansen's avatar Jack Jansen

It now actually works. Also, MovieInWindow and VerySimplePlayer

example programs translated to python and added.
parent 232f3cd1
"""MovieInWindow converted to python
Jack Jansen, CWI, December 1995
"""
import addpack
addpack.addpack(':Tools:bgen:qt')
addpack.addpack(':Tools:bgen:qd')
addpack.addpack(':Tools:bgen:evt')
addpack.addpack(':Tools:bgen:win')
import Qt
import QuickTime
import Qd
import QuickDraw
import Evt
import Events
import Win
import Windows
import macfs
import sys
def main():
# skip the toolbox initializations, already done
# XXXX Should use gestalt here to check for quicktime version
Qt.EnterMovies()
# Get the movie file
fss, ok = macfs.StandardGetFile(QuickTime.MovieFileType)
if not ok:
sys.exit(0)
# Open the window
bounds = (175, 75, 175+160, 75+120)
theWindow = Win.NewCWindow(bounds, fss.as_tuple()[2], 1, 0, -1, 0, 0)
Qd.SetPort(theWindow)
# XXXX Needed? SetGWorld((CGrafPtr)theWindow, nil)
playMovieInWindow(theWindow, fss, theWindow.GetWindowPort().portRect)
def playMovieInWindow(theWindow, theFile, movieBox):
"""Play a movie in a window"""
# XXXX Needed? SetGWorld((CGrafPtr)theWindow, nil);
# Get the movie
theMovie = loadMovie(theFile)
# Set where we want it
theMovie.SetMovieBox(movieBox)
# Start at the beginning
theMovie.GoToBeginningOfMovie()
# Give a little time to preroll
theMovie.MoviesTask(0)
# Start playing
theMovie.StartMovie()
while not theMovie.IsMovieDone() and not Evt.Button():
theMovie.MoviesTask(0)
def loadMovie(theFile):
"""Load a movie given an fsspec. Return the movie object"""
movieResRef = Qt.OpenMovieFile(theFile, 1)
movie, dummy = Qt.NewMovieFromFile(movieResRef, QuickTime.newMovieActive)
return movie
if __name__ == '__main__':
main()
"""VerySimplePlayer converted to python
Jack Jansen, CWI, December 1995
"""
import addpack
addpack.addpack(':Tools:bgen:qt')
addpack.addpack(':Tools:bgen:qd')
addpack.addpack(':Tools:bgen:evt')
addpack.addpack(':Tools:bgen:win')
import Qt
import QuickTime
import Qd
import QuickDraw
import Evt
import Events
import Win
import Windows
import macfs
import sys
# XXXX maxbounds = (40, 40, 1000, 1000)
def main():
print 'hello world' # XXXX
# skip the toolbox initializations, already done
# XXXX Should use gestalt here to check for quicktime version
Qt.EnterMovies()
# Get the movie file
fss, ok = macfs.StandardGetFile(QuickTime.MovieFileType)
if not ok:
sys.exit(0)
# Open the window
bounds = (175, 75, 175+160, 75+120)
theWindow = Win.NewCWindow(bounds, fss.as_tuple()[2], 0, 0, -1, 1, 0)
# XXXX Needed? SetGWorld((CGrafPtr)theWindow, nil)
Qd.SetPort(theWindow)
# Get the movie
theMovie = loadMovie(fss)
# Relocate to (0, 0)
bounds = theMovie.GetMovieBox()
bounds = 0, 0, bounds[2]-bounds[0], bounds[3]-bounds[1]
theMovie.SetMovieBox(bounds)
# Create a controller
theController = theMovie.NewMovieController(bounds, QuickTime.mcTopLeftMovie)
# Get movie size and update window parameters
rv, bounds = theController.MCGetControllerBoundsRect()
theWindow.SizeWindow(bounds[2], bounds[3], 0) # XXXX or [3] [2]?
Qt.AlignWindow(theWindow, 0)
theWindow.ShowWindow()
# XXXX MCDoAction(theController, mcActionSetGrowBoxBounds, &maxBounds)
theController.MCDoAction(QuickTime.mcActionSetKeysEnabled, '1')
# XXXX MCSetActionFilterWithRefCon(theController, movieControllerEventFilter, (long)theWindow)
done = 0
while not done:
gotone, evt = Evt.WaitNextEvent(-1, 0)
(what, message, when, where, modifiers) = evt
## print what, message, when, where, modifiers # XXXX
if theController.MCIsPlayerEvent(evt):
continue
if what == Events.mouseDown:
part, whichWindow = Win.FindWindow(where)
if part == Windows.inGoAway:
done = whichWindow.TrackGoAway(where)
elif part == Windows.inDrag:
Qt.DragAlignedWindow(whichWindow, where, (0, 0, 4000, 4000))
elif what == Events.updateEvt:
whichWindow = Win.WhichWindow(message)
if not whichWindow:
# Probably the console window. Print something, hope it helps.
print 'update'
else:
Qd.SetPort(whichWindow)
whichWindow.BeginUpdate()
Qd.EraseRect(whichWindow.GetWindowPort().portRect)
whichWindow.EndUpdate()
def loadMovie(theFile):
"""Load a movie given an fsspec. Return the movie object"""
movieResRef = Qt.OpenMovieFile(theFile, 1)
movie, dummy = Qt.NewMovieFromFile(movieResRef, QuickTime.newMovieActive)
return movie
if __name__ == '__main__':
main()
This diff is collapsed.
......@@ -1160,8 +1160,8 @@ functions.append(f)
f = Function(OSErr, 'NewMovieFromFile',
(Movie, 'theMovie', OutMode),
(short, 'resRefNum', InMode),
(short, 'resId', OutMode),
(StringPtr, 'resName', InMode),
(dummyshortptr, 'resId', InMode),
(dummyStringPtr, 'resName', InMode),
(short, 'newMovieFlags', InMode),
(Boolean, 'dataRefWasChanged', OutMode),
)
......@@ -1350,18 +1350,13 @@ f = Method(ComponentResult, 'GetMovieStatus',
)
Movie_methods.append(f)
f = Method(ComponentInstance, 'NewMovieController',
f = Method(MovieController, 'NewMovieController',
(Movie, 'theMovie', InMode),
(Rect_ptr, 'movieRect', InMode),
(long, 'someFlags', InMode),
)
Movie_methods.append(f)
f = Function(void, 'DisposeMovieController',
(ComponentInstance, 'mc', InMode),
)
functions.append(f)
f = Method(OSErr, 'PutMovieOnScrap',
(Movie, 'theMovie', InMode),
(long, 'movieScrapFlags', InMode),
......@@ -1443,222 +1438,229 @@ f = Method(void, 'GetTrackLoadSettings',
)
Track_methods.append(f)
f = Function(ComponentResult, 'MCSetMovie',
f = Method(ComponentResult, 'MCSetMovie',
(MovieController, 'mc', InMode),
(Movie, 'theMovie', InMode),
(WindowPtr, 'movieWindow', InMode),
(Point, 'where', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(Movie, 'MCGetIndMovie',
f = Method(Movie, 'MCGetIndMovie',
(MovieController, 'mc', InMode),
(short, 'index', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCRemoveMovie',
f = Method(ComponentResult, 'MCRemoveMovie',
(MovieController, 'mc', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCIsPlayerEvent',
f = Method(ComponentResult, 'MCIsPlayerEvent',
(MovieController, 'mc', InMode),
(EventRecord_ptr, 'e', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Method(ComponentResult, 'MCDoAction',
(MovieController, 'mc', InMode),
(short, 'action', InMode),
(mcactionparams, 'params', InMode),
)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCSetControllerAttached',
f = Method(ComponentResult, 'MCSetControllerAttached',
(MovieController, 'mc', InMode),
(Boolean, 'attach', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCIsControllerAttached',
f = Method(ComponentResult, 'MCIsControllerAttached',
(MovieController, 'mc', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCSetVisible',
f = Method(ComponentResult, 'MCSetVisible',
(MovieController, 'mc', InMode),
(Boolean, 'visible', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCGetVisible',
f = Method(ComponentResult, 'MCGetVisible',
(MovieController, 'mc', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCGetControllerBoundsRect',
f = Method(ComponentResult, 'MCGetControllerBoundsRect',
(MovieController, 'mc', InMode),
(Rect, 'bounds', OutMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCSetControllerBoundsRect',
f = Method(ComponentResult, 'MCSetControllerBoundsRect',
(MovieController, 'mc', InMode),
(Rect_ptr, 'bounds', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(RgnHandle, 'MCGetControllerBoundsRgn',
f = Method(RgnHandle, 'MCGetControllerBoundsRgn',
(MovieController, 'mc', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(RgnHandle, 'MCGetWindowRgn',
f = Method(RgnHandle, 'MCGetWindowRgn',
(MovieController, 'mc', InMode),
(WindowPtr, 'w', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCMovieChanged',
f = Method(ComponentResult, 'MCMovieChanged',
(MovieController, 'mc', InMode),
(Movie, 'm', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCSetDuration',
f = Method(ComponentResult, 'MCSetDuration',
(MovieController, 'mc', InMode),
(TimeValue, 'duration', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(TimeValue, 'MCGetCurrentTime',
f = Method(TimeValue, 'MCGetCurrentTime',
(MovieController, 'mc', InMode),
(TimeScale, 'scale', OutMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCNewAttachedController',
f = Method(ComponentResult, 'MCNewAttachedController',
(MovieController, 'mc', InMode),
(Movie, 'theMovie', InMode),
(WindowPtr, 'w', InMode),
(Point, 'where', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCDraw',
f = Method(ComponentResult, 'MCDraw',
(MovieController, 'mc', InMode),
(WindowPtr, 'w', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCActivate',
f = Method(ComponentResult, 'MCActivate',
(MovieController, 'mc', InMode),
(WindowPtr, 'w', InMode),
(Boolean, 'activate', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCIdle',
f = Method(ComponentResult, 'MCIdle',
(MovieController, 'mc', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCKey',
f = Method(ComponentResult, 'MCKey',
(MovieController, 'mc', InMode),
(SInt8, 'key', InMode),
(long, 'modifiers', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCClick',
f = Method(ComponentResult, 'MCClick',
(MovieController, 'mc', InMode),
(WindowPtr, 'w', InMode),
(Point, 'where', InMode),
(long, 'when', InMode),
(long, 'modifiers', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCEnableEditing',
f = Method(ComponentResult, 'MCEnableEditing',
(MovieController, 'mc', InMode),
(Boolean, 'enabled', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(long, 'MCIsEditingEnabled',
f = Method(long, 'MCIsEditingEnabled',
(MovieController, 'mc', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(Movie, 'MCCopy',
f = Method(Movie, 'MCCopy',
(MovieController, 'mc', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(Movie, 'MCCut',
f = Method(Movie, 'MCCut',
(MovieController, 'mc', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCPaste',
f = Method(ComponentResult, 'MCPaste',
(MovieController, 'mc', InMode),
(Movie, 'srcMovie', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCClear',
f = Method(ComponentResult, 'MCClear',
(MovieController, 'mc', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCUndo',
f = Method(ComponentResult, 'MCUndo',
(MovieController, 'mc', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCPositionController',
f = Method(ComponentResult, 'MCPositionController',
(MovieController, 'mc', InMode),
(Rect_ptr, 'movieRect', InMode),
(Rect_ptr, 'controllerRect', InMode),
(long, 'someFlags', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCGetControllerInfo',
f = Method(ComponentResult, 'MCGetControllerInfo',
(MovieController, 'mc', InMode),
(long, 'someFlags', OutMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCSetClip',
f = Method(ComponentResult, 'MCSetClip',
(MovieController, 'mc', InMode),
(RgnHandle, 'theClip', InMode),
(RgnHandle, 'movieClip', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCGetClip',
f = Method(ComponentResult, 'MCGetClip',
(MovieController, 'mc', InMode),
(RgnHandle, 'theClip', OutMode),
(RgnHandle, 'movieClip', OutMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCDrawBadge',
f = Method(ComponentResult, 'MCDrawBadge',
(MovieController, 'mc', InMode),
(RgnHandle, 'movieRgn', InMode),
(RgnHandle, 'badgeRgn', OutMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCSetUpEditMenu',
f = Method(ComponentResult, 'MCSetUpEditMenu',
(MovieController, 'mc', InMode),
(long, 'modifiers', InMode),
(MenuHandle, 'mh', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(ComponentResult, 'MCGetMenuString',
f = Method(ComponentResult, 'MCGetMenuString',
(MovieController, 'mc', InMode),
(long, 'modifiers', InMode),
(short, 'item', InMode),
(Str255, 'aString', InMode),
)
functions.append(f)
MovieController_methods.append(f)
f = Function(TimeBase, 'NewTimeBase',
)
......
......@@ -6,7 +6,7 @@ from scantools import Scanner
LONG = "QuickTime"
SHORT = "qt"
OBJECTS = ("Movie", "Track", "Media", "UserData", "TimeBase")
OBJECTS = ("Movie", "Track", "Media", "UserData", "TimeBase", "MovieController")
def main():
input = "Movies.h"
......@@ -38,6 +38,7 @@ class MyScanner(Scanner):
"DisposeTrackMedia", # ditto
"DisposeUserData", # ditto
"DisposeTimeBase", # ditto
"DisposeMovieController", # ditto
"GetMovieCreationTime", # type "unsigned long" in C, inparseable
"GetMovieModificationTime", # Ditto
"GetTrackCreationTime", # ditto
......@@ -49,7 +50,6 @@ class MyScanner(Scanner):
"GetUserDataItem",
"SetUserDataItem",
"SetTextSampleData",
"MCDoAction",
# bgen gets the argument in/out wrong..
"AddTextSample",
"AddTESample",
......@@ -95,6 +95,17 @@ class MyScanner(Scanner):
def makerepairinstructions(self):
return [
([('FSSpec', '*', 'OutMode')], [('FSSpec_ptr', '*', 'InMode')]),
# Movie controller creation
([('ComponentInstance', 'NewMovieController', 'ReturnMode')],
[('MovieController', '*', 'ReturnMode')]),
# NewMovieFromFile
([('short', 'resId', 'OutMode'), ('StringPtr', 'resName', 'InMode')],
[('dummyshortptr', 'resId', 'InMode'), ('dummyStringPtr', 'resName', 'InMode')]),
# MCDoAction
([('void', 'params', 'OutMode')], [('mcactionparams', 'params', 'InMode')]),
]
if __name__ == "__main__":
......
......@@ -3,6 +3,8 @@
# The function specifications are generated by scanning the mamager's header file,
# using the "scantools" package (customized for this particular manager).
#error missing SetActionFilter
import string
# Declarations that change for each manager
......@@ -39,6 +41,8 @@ staticforward PyObject *TrackObj_New(Track);
staticforward int TrackObj_Convert(PyObject *, Track *);
staticforward PyObject *MovieObj_New(Movie);
staticforward int MovieObj_Convert(PyObject *, Movie *);
staticforward PyObject *MovieCtlObj_New(MovieController);
staticforward int MovieCtlObj_Convert(PyObject *, MovieController *);
"""
......@@ -49,6 +53,7 @@ Track = OpaqueByValueType('Track', 'TrackObj')
Media = OpaqueByValueType('Media', 'MediaObj')
UserData = OpaqueByValueType('UserData', 'UserDataObj')
TimeBase = OpaqueByValueType('TimeBase', 'TimeBaseObj')
MovieController = OpaqueByValueType('MovieController', 'MovieCtlObj')
# Other opaque objects
Component = OpaqueByValueType('Component', 'CmpObj')
......@@ -58,10 +63,6 @@ DataHandlerComponent = OpaqueByValueType('DataHandlerComponent', 'CmpObj')
ComponentInstance = OpaqueByValueType('ComponentInstance', 'CmpInstObj')
MediaHandler = OpaqueByValueType('MediaHandler', 'CmpInstObj')
DataHandler = OpaqueByValueType('DataHandler', 'CmpInstObj')
# XXXX The next one should really be a full-fledged object here, but the
# type is sometimes specified as MovieController and some times as
# ComponentInstance.
MovieController = OpaqueByValueType('MovieController', 'CmpInstObj')
RgnHandle = OpaqueByValueType("RgnHandle", "ResObj")
PicHandle = OpaqueByValueType("PicHandle", "ResObj")
......@@ -91,8 +92,12 @@ mediaHandlerFlagsEnum = Type("mediaHandlerFlagsEnum", "l")
ComponentResult = Type("ComponentResult", "l")
HandlerError = Type("HandlerError", "l")
Ptr = InputOnlyType("Ptr", "s")
StringPtr = InputOnlyType("StringPtr", "s")
StringPtr = Type("StringPtr", "s")
mcactionparams = InputOnlyType("void *", "s")
# Could-not-be-bothered-types (NewMovieFromFile)
dummyshortptr = FakeType('(short *)0')
dummyStringPtr = FakeType('(StringPtr)0')
class MovieObjectDefinition(GlobalObjectDefinition):
def outputCheckNewArg(self):
......@@ -139,6 +144,15 @@ class TimeBaseObjectDefinition(GlobalObjectDefinition):
def outputFreeIt(self, itselfname):
Output("DisposeTimeBase(%s);", itselfname)
class MovieCtlObjectDefinition(GlobalObjectDefinition):
def outputCheckNewArg(self):
Output("""if (itself == NULL) {
PyErr_SetString(Qt_Error,"Cannot create null MovieController");
return NULL;
}""")
def outputFreeIt(self, itselfname):
Output("DisposeMovieController(%s);", itselfname)
# From here on it's basically all boiler plate...
# Create the generator groups and link them
......@@ -148,7 +162,9 @@ Track_object = TrackObjectDefinition('Track', 'TrackObj', 'Track')
Media_object = MediaObjectDefinition('Media', 'MediaObj', 'Media')
UserData_object = UserDataObjectDefinition('UserData', 'UserDataObj', 'UserData')
TimeBase_object = TimeBaseObjectDefinition('TimeBase', 'TimeBaseObj', 'TimeBase')
MovieController_object = MovieCtlObjectDefinition('MovieController', 'MovieCtlObj', 'MovieController')
module.addobject(MovieController_object)
module.addobject(TimeBase_object)
module.addobject(UserData_object)
module.addobject(Media_object)
......@@ -161,6 +177,7 @@ Method = OSErrMethodGenerator
# Create and populate the lists
functions = []
MovieController_methods = []
TimeBase_methods = []
UserData_methods = []
Media_methods = []
......@@ -168,9 +185,33 @@ Track_methods = []
Movie_methods = []
execfile(INPUTFILE)
#
# Some functions from ImageCompression.h that we need:
ICMAlignmentProcRecordPtr = FakeType('(ICMAlignmentProcRecordPtr)0')
dummyRect = FakeType('(Rect *)0')
f = Function(void, 'AlignWindow',
(WindowPtr, 'wp', InMode),
(Boolean, 'front', InMode),
(dummyRect, 'alignmentRect', InMode),
(ICMAlignmentProcRecordPtr, 'alignmentProc', InMode),
)
functions.append(f)
f = Function(void, 'DragAlignedWindow',
(WindowPtr, 'wp', InMode),
(Point, 'startPt', InMode),
(Rect_ptr, 'boundsRect', InMode),
(dummyRect, 'alignmentRect', InMode),
(ICMAlignmentProcRecordPtr, 'alignmentProc', InMode),
)
functions.append(f)
# add the populated lists to the generator groups
# (in a different wordl the scan program would generate this)
for f in functions: module.add(f)
for f in MovieController_methods: MovieController_object.add(f)
for f in TimeBase_methods: TimeBase_object.add(f)
for f in UserData_methods: UserData_object.add(f)
for f in Media_methods: Media_object.add(f)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment