diff options
Diffstat (limited to 'Demo/sgi/video/vcopy.py')
-rwxr-xr-x | Demo/sgi/video/vcopy.py | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/Demo/sgi/video/vcopy.py b/Demo/sgi/video/vcopy.py new file mode 100755 index 0000000..a492073 --- /dev/null +++ b/Demo/sgi/video/vcopy.py @@ -0,0 +1,108 @@ +# Copy a video file, interactively, frame-by-frame. + +import sys +import getopt +from gl import * +from DEVICE import * + +def loadframe(f, w, h, pf): + line = f.readline() + if not line or line = '\n': + raise EOFError + x = eval(line[:-1]) + if type(x) = type(0): + if pf: size = w*h*4 + else: size = w*h*pf + else: + time, size = x + data = f.read(size) + if len(data) <> size: + raise EOFError + if pf: + windata = unpackrect(w/pf, h/pf, 1, data) + rectzoom(pf, pf) + lrectwrite(0, 0, w/pf-1, h/pf-1, windata) + else: + lrectwrite(0, 0, w-1, h-1, data) + return time, data + +def report(time, iframe): + print 'Frame', iframe, ': t =', time + +def usage(): + sys.write('usage: vcopy infile outfile\n') + sys.exit(2) + +def help(): + print 'Command summary:' + print 'n get next image from input' + print 'w write current image to output' + +def main(): + opts, args = getopt.getopt(sys.argv[1:], '') + if len(args) <> 2: + usage() + [ifile, ofile] = args + ifp = open(ifile, 'r') + ofp = open(ofile, 'w') + # + line = ifp.readline() + if line[:4] = 'CMIF': + line = ifp.readline() + x = eval(line[:-1]) + if len(x) = 3: + w, h, pf = x + else: + w, h = x + pf = 2 + if pf: + w = (w/pf)*pf + h = (h/pf)*pf + # + ofp.write('CMIF video 1.0\n') + ofp.write(`w, h, pf` + '\n') + # + foreground() + prefsize(w, h) + wid = winopen(ifile + ' -> ' + ofile) + RGBmode() + gconfig() + qdevice(KEYBD) + qdevice(ESCKEY) + qdevice(WINQUIT) + qdevice(WINSHUT) + # + help() + # + time, data = loadframe(ifp, w, h, pf) + iframe = 1 + report(time, iframe) + # + while 1: + dev, val = qread() + if dev in (ESCKEY, WINQUIT, WINSHUT): + break + if dev = REDRAW: + reshapeviewport() + elif dev = KEYBD: + c = chr(val) + if c = 'n': + try: + time, data = loadframe(ifp, w, h, pf) + iframe = iframe+1 + report(time, iframe) + except EOFError: + print 'EOF' + ringbell() + elif c = 'w': + ofp.write(`time, len(data)` + '\n') + ofp.write(data) + print 'Frame', iframe, 'written.' + else: + print 'Character', `c`, 'ignored' + elif dev = INPUTCHANGE: + pass + else: + print '(dev, val) =', (dev, val) + +main() |