def open(title): h, v = G.def_pos width, height = G.def_size if h > 0 or v > 0: # Choose arbitrary defaults if h < 0: h = 10 if v < 0: v = 30 if width <= 0: width = 400 if height <= 0: height = 300 gl.prefposition(h, h + width, 1024 - v, 1024 - v - height) elif width > 0 or height > 0: if width <= 0: width = 400 if height <= 0: height = 300 gl.prefsize(width, height) from glstdwwin import WindowObject win = WindowObject()._init(title) G.windowmap[` win._gid `] = win return win
def show(file): import gl, GL, DEVICE jpegdata = open(file, 'r').read() imgdata, width, height, bytesperpixel = decompress(jpegdata) gl.foreground() gl.prefsize(width, height) win = gl.winopen(file) if bytesperpixel == 1: gl.cmode() gl.pixmode(GL.PM_SIZE, 8) gl.gconfig() for i in range(256): gl.mapcolor(i, i, i, i) else: gl.RGBmode() gl.pixmode(GL.PM_SIZE, 32) gl.gconfig() gl.qdevice(DEVICE.REDRAW) gl.qdevice(DEVICE.ESCKEY) gl.qdevice(DEVICE.WINQUIT) gl.qdevice(DEVICE.WINSHUT) gl.lrectwrite(0, 0, width - 1, height - 1, imgdata) while 1: dev, val = gl.qread() if dev in (DEVICE.ESCKEY, DEVICE.WINSHUT, DEVICE.WINQUIT): break if dev == DEVICE.REDRAW: gl.lrectwrite(0, 0, width - 1, height - 1, imgdata) gl.winclose(win) newjpegdata = compress(imgdata, width, height, bytesperpixel) open('/tmp/j.jpg', 'w').write(newjpegdata)
def show(self): if self.wid < 0: gl.foreground() gl.prefsize(self.vin.width, self.vin.height) self.wid = gl.winopen(self.title) gl.clear() self.vin.initcolormap() gl.winset(self.wid) if self.qindex >= self.qsize: self.vin.clear() return dt, d, cd = self.vin.getrandomframe(self.qindex) self.vin.showframe(d, cd)
def show(self): if self.wid < 0: gl.foreground() gl.prefsize(self.vout.width, self.vout.height) self.wid = gl.winopen(self.title) gl.clear() self.vout.initcolormap() gl.winset(self.wid) if not self.queue: self.vout.clear() return dt, d, cd = self.queue[-1] self.vout.showframe(d, cd)
def __init__(self, filename, title, *args): try: self.vin = VFile.VinFile(filename) except (EOFError, VFile.Error): raise IOError, 'bad video input file' self.vin.warmcache() if not title: title = os.path.split(filename)[1] self.filename = filename self.title = title self.qsize = len(self.vin.index) gl.foreground() gl.prefsize(self.vin.width, self.vin.height) self.wid = -1 self.reset()
def main(): gl.foreground() gl.prefsize(SV.PAL_XMAX, SV.PAL_YMAX) win = gl.winopen('video test') v = sv.OpenVideo() params = [SV.VIDEO_MODE, SV.COMP, SV.BROADCAST, SV.PAL] v.SetParam(params) v.BindGLWindow(win, SV.IN_REPLACE) gl.qdevice(DEVICE.ESCKEY) gl.qdevice(DEVICE.WINQUIT) gl.qdevice(DEVICE.WINSHUT) while 1: dev, val = gl.qread() if dev in (DEVICE.ESCKEY, DEVICE.WINSHUT, DEVICE.WINQUIT): v.CloseVideo() gl.winclose(win) return
def gltest(): import gl, fm gl.foreground() W, H = 1000, 800 gl.prefsize(W, H) wid = gl.winopen('gltest') gl.ortho2(0, W, H, 0) gl.color(7) gl.clear() gl.color(0) fp = openfile() TSTART() fmt = GLFormatter().init(5, 0, W) feedfile(fp, fmt) fmt.flush() TSTOP() import time time.sleep(5)
def test(): import time if sys.argv[1:]: filename = sys.argv[1] else: filename = 'film.video' vin = VinFile(filename) vin.printinfo() gl.foreground() gl.prefsize(vin.getsize()) wid = gl.winopen(filename) vin.initcolormap() t0 = time.time() while 1: try: t, data, cdata = vin.getnextframe() except EOFError: break dt = t0 + t - time.time() if dt > 0: time.time(dt) vin.showframe(data, cdata) time.sleep(2)
def open(title): h, v = G.def_pos width, height = G.def_size if h > 0 or v > 0: # Choose arbitrary defaults if h < 0: h = 10 if v < 0: v = 30 if width <= 0: width = 400 if height <= 0: height = 300 gl.prefposition(h, h + width, 1024 - v, 1024 - v - height) elif width > 0 or height > 0: if width <= 0: width = 400 if height <= 0: height = 300 gl.prefsize(width, height) from glstdwwin import WindowObject win = WindowObject()._init(title) G.windowmap[ ` win._gid `] = win return win
def imageview(file): import cl, CL, gl, GL, DEVICE filep = open(file, 'r') header = filep.read(16) filep.seek(0) scheme = cl.QueryScheme(header) decomp = cl.OpenDecompressor(scheme) headersize = cl.QueryMaxHeaderSize(scheme) header = filep.read(headersize) filep.seek(0) headersize = decomp.ReadHeader(header) width = decomp.GetParam(CL.IMAGE_WIDTH) height = decomp.GetParam(CL.IMAGE_HEIGHT) params = [CL.ORIGINAL_FORMAT, CL.RGBX, \ CL.ORIENTATION, CL.BOTTOM_UP, \ CL.FRAME_BUFFER_SIZE, width*height*CL.BytesPerPixel(CL.RGBX)] decomp.SetParams(params) image = decomp.Decompress(1, filep.read()) filep.close() decomp.CloseDecompressor() gl.foreground() gl.prefsize(width, height) win = gl.winopen(file) gl.RGBmode() gl.pixmode(GL.PM_SIZE, 32) gl.gconfig() gl.qdevice(DEVICE.REDRAW) gl.qdevice(DEVICE.ESCKEY) gl.qdevice(DEVICE.WINQUIT) gl.qdevice(DEVICE.WINSHUT) gl.lrectwrite(0, 0, width-1, height-1, image) while 1: dev, val = gl.qread() if dev in (DEVICE.ESCKEY, DEVICE.WINSHUT, DEVICE.WINQUIT): break if dev == DEVICE.REDRAW: gl.lrectwrite(0, 0, width-1, height-1, image) gl.winclose(win)
def testGL(): import gl, GL, fmt if sys.argv[1:]: file = sys.argv[1] else: file = 'test.html' data = open(file, 'r').read() W, H = 600, 600 gl.foreground() gl.prefsize(W, H) wid = gl.winopen('testGL') gl.ortho2(0, W, H, 0) gl.color(GL.WHITE) gl.clear() gl.color(GL.BLACK) b = fmt.GLBackEnd(wid) f = fmt.BaseFormatter(b.d, b) p = FormattingParser(f, GLStylesheet) p.feed(data) p.close() b.finish() # import time time.sleep(5)
#! /usr/bin/env python # Play CMIF movie files # Help function def help(): print 'Usage: Vplay [options] [file] ...' print print 'Options:' print '-M magnify : magnify the image by the given factor' print '-d : write some debug stuff on stderr' print '-l : loop, playing the movie over and over again' print '-m delta : drop frames closer than delta seconds (default 0.)' print '-n : don\'t wait after each file' print '-q : quiet, no informative messages' print '-r delta : regenerate input time base delta seconds apart' print '-s speed : speed change factor (default 1.0)' print '-t : use a 2nd thread for read-ahead' print '-x left : window offset from left of screen' print '-y top : window offset from top of screen' print '-w width : window width' print '-h height : window height' print '-b color : background color (white,black or (r,g,b))' print 'file ... : file(s) to play; default film.video' print print 'User interface:' print 'Press the left mouse button to stop or restart the movie.' print 'Press ESC or use the window manager Close or Quit command' print 'to close the window and play the next file (if any).' # Imported modules
#! /usr/bin/env python # Send live video UDP packets. # Usage: Vsend [-b] [-h height] [-p port] [-s size] [-t ttl] [-w width] # [host] .. import sys import time import struct import string from socket import * from SOCKET import * import gl, GL, DEVICE sys.path.append('/ufs/guido/src/video') import LiveVideoIn import LiveVideoOut import SV import getopt from IN import * from senddefs import * def usage(msg): print msg print 'usage: Vsend [-b] [-h height] [-p port] [-s size] [-t ttl] [-c type] [-m]', print '[-w width] [host] ...' print '-b : broadcast on local net' print '-h height : window height (default ' + ` DEFHEIGHT ` + ')' print '-p port : port to use (default ' + ` DEFPORT ` + ')' print '-t ttl : time-to-live (multicast only; default 1)' print '-s size : max packet size (default ' + ` DEFPKTMAX ` + ')' print '-w width : window width (default ' + ` DEFWIDTH ` + ')' print '-c type : Type: rgb8, mono or grey (default rgb8)'
gl.foreground() width, height = int(vin.width * magnify), int(vin.height * magnify) xborder = yborder = 0 if xwsiz: vin.xorigin = (xwsiz - width)/2 width = xwsiz if ywsiz: vin.yorigin = (ywsiz - height)/2 height = ywsiz if xoff <> None and yoff <> None: scrheight = gl.getgdesc(GL.GD_YPMAX) gl.prefposition(xoff, xoff+width-1, \ scrheight-yoff-height, scrheight-yoff-1) else: gl.prefsize(width, height) win = gl.winopen(filename) gl.clear() if quiet: vin.quiet = 1 vin.initcolormap() if bgcolor: r, g, b = bgcolor vin.clearto(r,g,b) gl.qdevice(ESCKEY) gl.qdevice(WINSHUT) gl.qdevice(WINQUIT) gl.qdevice(LEFTMOUSE)
import T if not sys.argv[1:]: print 'usage: www file' sys.exit(2) file = sys.argv[1] try: fp = open(file, 'r') data = fp.read() fp.close() except IOError, msg: print file, ':', msg sys.exit(1) W, H = 600, 600 gl.foreground() gl.prefsize(W, H) wid = gl.winopen('glwww') gl.color(GL.WHITE) gl.clear() gl.ortho2(0, W, H, 0) gl.color(GL.BLACK) T.TSTART() fmt = GLFormatter().init(5, 0, W-5) p = html.FormattingParser().init(fmt, GLStylesheet) p.feed(data) p.close() T.TSTOP() gl.wintitle(p.title) import time time.sleep(5)
import sys
import T if not sys.argv[1:]: print 'usage: www file' sys.exit(2) file = sys.argv[1] try: fp = open(file, 'r') data = fp.read() fp.close() except IOError, msg: print file, ':', msg sys.exit(1) W, H = 600, 600 gl.foreground() gl.prefsize(W, H) wid = gl.winopen('glwww') gl.color(GL.WHITE) gl.clear() gl.ortho2(0, W, H, 0) gl.color(GL.BLACK) T.TSTART() fmt = GLFormatter().init(5, 0, W - 5) p = html.FormattingParser().init(fmt, GLStylesheet) p.feed(data) p.close() T.TSTOP() gl.wintitle(p.title) import time time.sleep(5)
# Classes to read and write CMIF video files.
#! /usr/bin/env python # Play synchronous video and audio. # Highly experimental! import sys import getopt import string import os import VFile import aifc import gl, GL, DEVICE import al, AL def usage(): sys.stderr.write( \ 'usage: aplay [-o offset] [-q qsize] videofile audiofile\n') sys.exit(2) def main(): offset = 0 qsize = 0 # This defaults to 1/10 second of sound videofile = 'film.video' audiofile = 'film.aiff' try: opts, args = getopt.getopt(sys.argv[1:], 'o:q:') except getopt.error, msg: sys.stderr.write(msg + '\n') usage() try: for o, a in opts: if o == '-o': offset = string.atoi(a)
import gl, GL
try: for opt, optarg in opts: if opt == '-p': port = string.atoi(optarg) if opt == '-m': group = gethostbyname(optarg) if opt == '-c': vtype = optarg except string.atoi_error, msg: usage('bad integer: ' + msg) s = opensocket(group, port) gl.foreground() gl.prefsize(width, height) wid = gl.winopen('Vreceive') gl.winconstraints() gl.qdevice(DEVICE.ESCKEY) gl.qdevice(DEVICE.WINSHUT) gl.qdevice(DEVICE.WINQUIT) lvo = LiveVideoOut.LiveVideoOut(wid, width, height, vtype) ifdlist = [gl.qgetfd(), s.fileno()] ofdlist = [] xfdlist = [] timeout = 1.0 selectargs = (ifdlist, ofdlist, xfdlist, timeout) while 1:
# Implement 'jpeg' interface using SGI's compression library
#! /usr/bin/env python # Send live video UDP packets. # Usage: Vsend [-b] [-h height] [-p port] [-s size] [-t ttl] [-w width] # [host] .. import sys import time import struct import string import math from socket import * from SOCKET import * import gl, GL, DEVICE sys.path.append('/ufs/guido/src/video') import DisplayVideoIn import LiveVideoOut import SV import getopt from IN import * from senddefs import * def usage(msg): print msg print 'usage: Vsend [-b] [-h height] [-p port] [-s size] [-t ttl] [-c type] [-m]', print '[-w width] [host] ...' print '-b : broadcast on local net' print '-h height : window height (default ' + ` DEFHEIGHT ` + ')' print '-p port : port to use (default ' + ` DEFPORT ` + ')' print '-t ttl : time-to-live (multicast only; default 1)' print '-s size : max packet size (default ' + ` DEFPKTMAX ` + ')' print '-S size : use this packet size/window size'
c.setchannels(ain.getnchannels()) c.setwidth(ain.getsampwidth()) nullsample = '\0' * ain.getsampwidth() samples_per_second = ain.getnchannels() * ain.getframerate() if qsize <= 0: qsize = samples_per_second / 10 qsize = max(qsize, 512) c.setqueuesize(qsize) saveparams = [AL.OUTPUT_RATE, 0] al.getparams(AL.DEFAULT_DEVICE, saveparams) newparams = [AL.OUTPUT_RATE, ain.getframerate()] al.setparams(AL.DEFAULT_DEVICE, newparams) aport = al.openport(audiofile, 'w', c) print 'Opening video output window..' gl.foreground() gl.prefsize(vin.width, vin.height) wid = gl.winopen(videofile + ' + ' + audiofile) gl.clear() vin.initcolormap() print 'Playing..' gl.qdevice(DEVICE.ESCKEY) gl.qdevice(DEVICE.LEFTARROWKEY) gl.qdevice(DEVICE.RIGHTARROWKEY) ## gl.qdevice(DEVICE.UPARROWKEY) ## gl.qdevice(DEVICE.DOWNARROWKEY) gl.qdevice(DEVICE.SPACEKEY) while 1: samples_written = 0 samples_read = 0
#! /usr/bin/env python # Send live video UDP packets. # Usage: Vsend [-b] [-h height] [-p port] [-s size] [-t ttl] [-w width] # [host] .. import sys import time import struct import string import math from socket import * from SOCKET import * import gl, GL, DEVICE sys.path.append('/ufs/guido/src/video') import DisplayVideoIn import LiveVideoOut import SV import getopt from IN import * from senddefs import * def usage(msg): print msg print 'usage: Vsend [-b] [-h height] [-p port] [-s size] [-t ttl] [-c type] [-m]', print '[-w width] [host] ...' print '-b : broadcast on local net' print '-h height : window height (default ' + `DEFHEIGHT` + ')' print '-p port : port to use (default ' + `DEFPORT` + ')' print '-t ttl : time-to-live (multicast only; default 1)' print '-s size : max packet size (default ' + `DEFPKTMAX` + ')' print '-S size : use this packet size/window size' print '-w width : window width (default ' + `DEFWIDTH` + ')'
def main(): format = SV.RGB8_FRAMES rate = 1 width = 0 drop = 0 mono = 0 grey = 0 greybits = 0 monotreshold = -1 fields = 0 number = 60 opts, args = getopt.getopt(sys.argv[1:], 'r:w:dg:mM:Gfn:') for opt, arg in opts: if opt == '-r': rate = string.atoi(arg) if rate < 2: sys.stderr.write('-r rate must be >= 2\n') sys.exit(2) elif opt == '-w': width = string.atoi(arg) elif opt == '-d': drop = 1 elif opt == '-g': grey = 1 greybits = string.atoi(arg) if not greybits in (2, 4, 8): print 'Only 2, 4 or 8 bit greyscale supported' elif opt == '-G': grey = 1 greybits = -2 elif opt == '-m': mono = 1 elif opt == '-M': mono = 1 monotreshold = string.atoi(arg) elif opt == '-f': fields = 1 elif opt == '-n': number = string.atoi(arg) if args[2:]: sys.stderr.write('usage: Vrec [options] [file]\n') sys.exit(2) if args: filename = args[0] else: filename = 'film.video' v = sv.OpenVideo() # Determine maximum window size based on signal standard param = [SV.BROADCAST, 0] v.GetParam(param) if param[1] == SV.PAL: x = SV.PAL_XMAX y = SV.PAL_YMAX elif param[1] == SV.NTSC: x = SV.NTSC_XMAX y = SV.NTSC_YMAX else: print 'Unknown video standard', param[1] sys.exit(1) gl.foreground() gl.maxsize(x, y) gl.keepaspect(x, y) gl.stepunit(8, 6) if width: gl.prefsize(width, width * 3 / 4) win = gl.winopen(filename) if width: gl.maxsize(x, y) gl.keepaspect(x, y) gl.stepunit(8, 6) gl.winconstraints() x, y = gl.getsize() print x, 'x', y v.SetSize(x, y) if drop: param = [SV.FIELDDROP, 1, SV.GENLOCK, SV.GENLOCK_OFF] else: param = [SV.FIELDDROP, 0, SV.GENLOCK, SV.GENLOCK_ON] if mono or grey: param = param + [SV.COLOR, SV.MONO, SV.INPUT_BYPASS, 1] else: param = param + [SV.COLOR, SV.DEFAULT_COLOR, SV.INPUT_BYPASS, 0] v.SetParam(param) v.BindGLWindow(win, SV.IN_REPLACE) gl.qdevice(DEVICE.LEFTMOUSE) gl.qdevice(DEVICE.WINQUIT) gl.qdevice(DEVICE.WINSHUT) gl.qdevice(DEVICE.ESCKEY) print 'Press left mouse to start recording' while 1: dev, val = gl.qread() if dev == DEVICE.LEFTMOUSE: if val == 1: info = format, x, y, number, rate record(v, info, filename, mono, grey, \ greybits, monotreshold, fields) 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 v.CloseVideo() gl.winclose(win) break
#! /usr/bin/env python # Send live video UDP packets. # Usage: Vsend [-b] [-h height] [-p port] [-s size] [-t ttl] [-w width] # [host] .. import sys import time import struct import string from socket import * from SOCKET import * import gl, GL, DEVICE sys.path.append('/ufs/guido/src/video') import LiveVideoIn import LiveVideoOut import SV import getopt from IN import * from senddefs import * def usage(msg): print msg print 'usage: Vsend [-b] [-h height] [-p port] [-s size] [-t ttl] [-c type] [-m]', print '[-w width] [host] ...' print '-b : broadcast on local net' print '-h height : window height (default ' + `DEFHEIGHT` + ')' print '-p port : port to use (default ' + `DEFPORT` + ')' print '-t ttl : time-to-live (multicast only; default 1)' print '-s size : max packet size (default ' + `DEFPKTMAX` + ')' print '-w width : window width (default ' + `DEFWIDTH` + ')' print '-c type : Type: rgb8, mono or grey (default rgb8)' print '[host] ...: host(s) to send to (default multicast to ' + \
def main(): QSIZE = 16 TIME = 5 audio = 0 opts, args = getopt.getopt(sys.argv[1:], 'aq:t:') for opt, arg in opts: if opt == '-a': audio = 1 elif opt == '-q': QSIZE = string.atoi(arg) elif opt == '-t': TIME = string.atoi(arg) if args: filename = args[0] else: filename = 'film.video' if audio: if args[1:]: audiofilename = args[1] else: audiofilename = 'film.aiff' 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 afile = 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) if audio: afile = initaudio(audiofilename) continue # Mouse up -- start actual recording global recording, stop_recording if audio: stop_recording = 0 recording.release() t0 = time.millitimer() v.StartCapture() while 1: t = time.millitimer() - t0 if t >= TIME*1000: break if v.GetCaptured() > 2: doframe(v, ofile, x, y, t) v.StopCapture() stop_recording = 1 while v.GetCaptured() > 0: 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() if afile: afile.destroy() posix._exit(0) # EndCapture dumps core... v.EndCapture() v.CloseVideo() gl.winclose(win)