diff options
-rwxr-xr-x | Demo/sgi/video/makemovie.py | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/Demo/sgi/video/makemovie.py b/Demo/sgi/video/makemovie.py new file mode 100755 index 0000000..d8b49d0 --- /dev/null +++ b/Demo/sgi/video/makemovie.py @@ -0,0 +1,124 @@ +# Capture a movie using the Indigo video library and board + +import sv, SV +import VFile +import gl, GL, DEVICE + +import time +import sys +import posix +import getopt +import string + +def main(): + QSIZE = 16 + TIME = 5 + + opts, args = getopt.getopt(sys.argv[1:], 'q:t:') + for opt, arg in opts: + if opt == '-q': + QSIZE = string.atoi(arg) + elif opt == '-t': + TIME = string.atoi(arg) + + if args: + filename = args[0] + if args[1:]: + print 'Warning: only first filename arg is used' + else: + filename = 'film.video' + + gl.foreground() + + x, y = SV.PAL_XMAX / 4, SV.PAL_YMAX / 4 + print x, 'x', y + + gl.minsize(40, 30) + gl.stepunit(8, 6) + gl.maxsize(SV.PAL_XMAX, SV.PAL_YMAX) + gl.keepaspect(SV.PAL_XMAX, SV.PAL_YMAX) + win = gl.winopen(filename) + x, y = gl.getsize() + print x, 'x', y + + v = sv.OpenVideo() + v.BindGLWindow(win, SV.IN_REPLACE) + v.SetSize(x, y) + v.BindGLWindow(win, SV.IN_REPLACE) + + v.SetCaptureFormat(SV.RGB_FRAMES) + v.SetCaptureMode(SV.BLOCKING_CAPTURE) + v.SetQueueSize(QSIZE) + v.InitCapture() + if v.GetQueueSize() != QSIZE: + QSIZE = v.GetQueueSize() + print 'Warning: QSIZE reduced to', QSIZE + + gl.qdevice(DEVICE.LEFTMOUSE) + gl.qdevice(DEVICE.WINQUIT) + gl.qdevice(DEVICE.WINSHUT) + gl.qdevice(DEVICE.ESCKEY) + + print 'Click left mouse to start recording', TIME, 'seconds' + ofile = None + # Mouse down opens the file & freezes window + # Mouse up starts recording frames + + while 1: + dev, val = gl.qread() + if dev == DEVICE.LEFTMOUSE: + # Start recording + if val == 1: + # Mouse down -- preparations + if ofile == None: + ofile = VFile.VoutFile().init(filename) + ofile.format = 'rgb8' + ofile.width = x + ofile.height = y + ofile.writeheader() + # XXX other format bits? + # The window can't be resized from now + gl.prefsize(x, y) + gl.winconstraints() + gl.wintitle('* ' + filename) + continue + + # Mouse up -- actual recording + t0 = time.millitimer() + v.StartCapture() + while 1: + t = time.millitimer() - t0 + if t >= TIME*1000: + break + if v.GetCaptured() > 2: + print '(1)', + doframe(v, ofile, x, y, t) + v.StopCapture() + while v.GetCaptured() > 0: + print '(2)', + doframe(v, ofile, x, y, t) + t = time.millitimer() - t0 + gl.wintitle(filename) + elif dev == DEVICE.REDRAW: + # Window resize (or move) + x, y = gl.getsize() + print x, 'x', y + v.SetSize(x, y) + v.BindGLWindow(win, SV.IN_REPLACE) + elif dev in (DEVICE.ESCKEY, DEVICE.WINQUIT, DEVICE.WINSHUT): + # Quit + if ofile: + ofile.close() + posix._exit(0) + # EndCapture dumps core... + v.EndCapture() + v.CloseVideo() + gl.winclose(win) + +def doframe(v, ofile, x, y, t): + cd, start = v.GetCaptureData() + data = cd.interleave(x, y) + cd.UnlockCaptureData() + ofile.writeframe(t, data, None) + +main() |