summaryrefslogtreecommitdiffstats
path: root/Demo/sgi
diff options
context:
space:
mode:
Diffstat (limited to 'Demo/sgi')
-rwxr-xr-xDemo/sgi/video/IN.py54
-rwxr-xr-xDemo/sgi/video/Makefile7
-rwxr-xr-xDemo/sgi/video/Vrecc.py281
-rwxr-xr-xDemo/sgi/video/cam.py129
-rwxr-xr-xDemo/sgi/video/camcorder.py266
-rwxr-xr-xDemo/sgi/video/colorsys.py106
-rwxr-xr-xDemo/sgi/video/i2v.c80
-rwxr-xr-xDemo/sgi/video/makemovie.py218
-rwxr-xr-xDemo/sgi/video/squash.c130
-rwxr-xr-xDemo/sgi/video/squash2.c72
-rwxr-xr-xDemo/sgi/video/statit.py115
-rwxr-xr-xDemo/sgi/video/syncaudio.py94
-rwxr-xr-xDemo/sgi/video/tomono.c165
-rwxr-xr-xDemo/sgi/video/tv.py79
-rwxr-xr-xDemo/sgi/video/v2i.c79
-rwxr-xr-xDemo/sgi/video/video.py218
-rwxr-xr-xDemo/sgi/video/vpregs.py28
17 files changed, 0 insertions, 2121 deletions
diff --git a/Demo/sgi/video/IN.py b/Demo/sgi/video/IN.py
deleted file mode 100755
index ffc2852..0000000
--- a/Demo/sgi/video/IN.py
+++ /dev/null
@@ -1,54 +0,0 @@
-IPPROTO_IP = 0
-IPPROTO_ICMP = 1
-IPPROTO_IGMP = 2
-IPPROTO_GGP = 3
-IPPROTO_TCP = 6
-IPPROTO_EGP = 8
-IPPROTO_PUP = 12
-IPPROTO_UDP = 17
-IPPROTO_IDP = 22
-IPPROTO_TP = 29
-IPPROTO_XTP = 36
-IPPROTO_EON = 80
-IPPROTO_RAW = 255
-IPPROTO_MAX = 256
-IPPORT_RESERVED = 1024
-IPPORT_USERRESERVED = 5000
-IN_CLASSA_NET = 0xff000000
-IN_CLASSA_NSHIFT = 24
-IN_CLASSA_HOST = 0x00ffffff
-IN_CLASSA_MAX = 128
-IN_CLASSB_NET = 0xffff0000
-IN_CLASSB_NSHIFT = 16
-IN_CLASSB_HOST = 0x0000ffff
-IN_CLASSB_MAX = 65536
-IN_CLASSC_NET = 0xffffff00
-IN_CLASSC_NSHIFT = 8
-IN_CLASSC_HOST = 0x000000ff
-IN_CLASSD_NET = 0xf0000000
-IN_CLASSD_NSHIFT = 28
-IN_CLASSD_HOST = 0x0fffffff
-INADDR_ANY = 0x00000000
-INADDR_BROADCAST = 0xffffffff
-INADDR_LOOPBACK = 0x7F000001
-INADDR_UNSPEC_GROUP = 0xe0000000
-INADDR_ALLHOSTS_GROUP = 0xe0000001
-INADDR_MAX_LOCAL_GROUP = 0xe00000ff
-INADDR_NONE = 0xffffffff
-IN_LOOPBACKNET = 127
-IP_OPTIONS = 1
-IP_HDRINCL = 7
-IP_TOS = 8
-IP_TTL = 9
-IP_RECVOPTS = 10
-IP_RECVRETOPTS = 11
-IP_RECVDSTADDR = 12
-IP_RETOPTS = 13
-IP_MULTICAST_IF = 2
-IP_MULTICAST_TTL = 3
-IP_MULTICAST_LOOP = 4
-IP_ADD_MEMBERSHIP = 5
-IP_DROP_MEMBERSHIP = 6
-IP_DEFAULT_MULTICAST_TTL = 1
-IP_DEFAULT_MULTICAST_LOOP = 1
-IP_MAX_MEMBERSHIPS = 20
diff --git a/Demo/sgi/video/Makefile b/Demo/sgi/video/Makefile
deleted file mode 100755
index 266ea52..0000000
--- a/Demo/sgi/video/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-all: v2i i2v
-
-v2i: v2i.o
- $(CC) v2i.o -limage -o v2i
-
-i2v: i2v.o
- $(CC) i2v.o -limage -o i2v
diff --git a/Demo/sgi/video/Vrecc.py b/Demo/sgi/video/Vrecc.py
deleted file mode 100755
index 6a539f8..0000000
--- a/Demo/sgi/video/Vrecc.py
+++ /dev/null
@@ -1,281 +0,0 @@
-#! /ufs/guido/bin/sgi/python-405
-#! /ufs/guido/bin/sgi/python
-
-# Capture a continuous CMIF movie using the Indigo video library and board
-
-
-# Usage:
-#
-# makemovie [-r rate] [-w width] [moviefile]
-
-
-# Options:
-#
-# -r rate : capture 1 out of every 'rate' frames (default 1)
-# -w width : initial window width (default interactive placement)
-# -d : drop fields if needed
-# -g bits : greyscale (2, 4 or 8 bits)
-# -G : 2-bit greyscale dithered
-# -m : monochrome dithered
-# -M value : monochrome tresholded with value
-# -f : Capture fields (in stead of frames)
-# -n number : Capture 'number' fields (default 60)
-#
-# moviefile : here goes the movie data (default film.video);
-# the format is documented in cmif-film.ms
-
-
-# User interface:
-#
-# Start the application. Resize the window to the desired movie size.
-# Press the left mouse button to start recording, release it to end
-# recording. You can record as many times as you wish, but each time
-# you overwrite the output file(s), so only the last recording is
-# kept.
-#
-# Press ESC or select the window manager Quit or Close window option
-# to quit. If you quit before recording anything, the output file(s)
-# are not touched.
-
-
-import sys
-sys.path.append('/ufs/guido/src/video')
-import sv, SV
-import VFile
-import gl, GL, DEVICE
-import al, AL
-import time
-import posix
-import getopt
-import string
-import imageop
-import sgi
-
-# Main program
-
-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
-
-
-# Record until the mouse is released (or any other GL event)
-# XXX audio not yet supported
-
-def record(v, info, filename, mono, grey, greybits, monotreshold, fields):
- import thread
- format, x, y, number, rate = info
- fps = 59.64 # Fields per second
- # XXX (Strange: need fps of Indigo monitor, not of PAL or NTSC!)
- tpf = 1000.0 / fps # Time per field in msec
- #
- # Go grab
- #
- gl.wintitle('(rec) ' + filename)
- try:
- ninfo, data, bitvec = v.CaptureBurst(info)
- except sv.error, arg:
- print 'CaptureBurst failed:', arg
- print 'info:', info
- gl.wintitle(filename)
- return
- gl.wintitle('(save) '+ filename)
- #
- # Check results
- #
- if info <> ninfo:
- print 'Sorry, format changed.'
- print 'Wanted:',info
- print 'Got :',ninfo
- gl.wintitle(filename)
- return
- # print bitvec
- if x*y*number <> len(data):
- print 'Funny data length: wanted',x,'*',y,'*', number,'=',\
- x*y*number,'got',len(data)
- gl.wintitle(filename)
- return
- #
- # Save
- #
- if filename:
- #
- # Construct header and write it
- #
- vout = VFile.VoutFile().init(filename)
- if mono:
- vout.format = 'mono'
- elif grey and greybits == 8:
- vout.format = 'grey'
- elif grey:
- vout.format = 'grey'+`abs(greybits)`
- else:
- vout.format = 'rgb8'
- vout.width = x
- vout.height = y
- if fields:
- vout.packfactor = (1,-2)
- else:
- print 'Sorry, can only save fields at the moment'
- gl.wintitle(filename)
- return
- vout.writeheader()
- #
- # Compute convertor, if needed
- #
- convertor = None
- if grey:
- if greybits == 2:
- convertor = imageop.grey2grey2
- elif greybits == 4:
- convertor = imageop.grey2grey4
- elif greybits == -2:
- convertor = imageop.dither2grey2
- fieldsize = x*y/2
- nskipped = 0
- realframeno = 0
- tpf = 1000 / 50.0 #XXXX
- for frameno in range(0, number*2):
- if frameno <> 0 and \
- bitvec[frameno] == bitvec[frameno-1]:
- nskipped = nskipped + 1
- continue
- #
- # Save field.
- # XXXX Works only for fields and top-to-bottom
- #
- start = frameno*fieldsize
- field = data[start:start+fieldsize]
- if convertor:
- field = convertor(field, x, y)
- elif mono and monotreshold >= 0:
- field = imageop.grey2mono(field, x, y, \
- 1, monotreshold)
- elif mono:
- field = imageop.dither2mono(field, x, y)
- vout.writeframe(int(realframeno*tpf), field, None)
- print 'Skipped',nskipped,'duplicate frames'
- vout.close()
-
- gl.wintitle('(done) ' + filename)
-
-# Don't forget to call the main program
-
-try:
- main()
-except KeyboardInterrupt:
- print '[Interrupt]'
diff --git a/Demo/sgi/video/cam.py b/Demo/sgi/video/cam.py
deleted file mode 100755
index fa8966f..0000000
--- a/Demo/sgi/video/cam.py
+++ /dev/null
@@ -1,129 +0,0 @@
-import sys
-from socket import *
-from gl import *
-from GL import *
-from DEVICE import *
-from time import millitimer
-
-HS = 40 # Header size (must be same as in tv.py)
-
-# Rely on UDP packet (de)fragmentation for smoother images
-# (Changed for broadcast)
-MAX = 16000
-
-PF = 2 # Default packfactor
-
-# Default receiver station is voorn.
-# Kwik has no yellow pages, so...
-HOST = '192.16.201.121'
-PORT = 5555
-
-if sys.argv[1:]:
- PF = eval(sys.argv[1])
-
-if sys.argv[2:]:
- HOST = sys.argv[2]
- if HOST == 'all':
- HOST = '<broadcast>'
- MAX = 1400
-
-PF2 = PF*PF
-
-def main():
- centerx, centery = 400, 300
-
- foreground()
- wid = winopen('cam')
- RGBmode()
- doublebuffer()
- gconfig()
- qdevice(ESCKEY)
-
- w, h = getsize()
- ortho2(0, w, 0, h)
- w = w/PF*PF
- h = h/PF*PF
-
- readsource(SRC_FRAMEGRABBER)
-
- s = socket(AF_INET, SOCK_DGRAM)
- if HOST == '<broadcast>':
- s.allowbroadcast(1)
- addr = HOST, PORT
-
- bytesperline = w/PF2
- linesperchunk = MAX/bytesperline
- linesperchunk = linesperchunk/PF*PF
- nchunks = (h+linesperchunk-1)/linesperchunk
-
- print 'MAX=', MAX,
- print 'linesperchunk=', linesperchunk,
- print 'nchunks=', nchunks,
- print 'w=', w, 'h=', h
-
- x1, x2 = 0, w-1
-
- t1 = millitimer()
- nframes = 0
- fps = 0
-
- msg = ''
-
- while 1:
- while qtest():
- dev, val = qread()
- if dev == REDRAW:
- reshapeviewport()
- w, h = getsize()
- ortho2(0, w, 0, h)
- w = w/PF*PF
- h = h/PF*PF
-
- bytesperline = w/PF2
- linesperchunk = MAX/bytesperline
- linesperchunk = linesperchunk/PF*PF
- nchunks = (h+linesperchunk-1)/linesperchunk
-
- print 'MAX=', MAX,
- print 'linesperchunk=', linesperchunk,
- print 'nchunks=', nchunks,
- print 'w=', w, 'h=', h
-
- x1, x2 = 0, w-1
-
- fps = 0
-
- elif dev == ESCKEY:
- winclose(wid)
- return
-
- readsource(SRC_FRAMEGRABBER)
-
- nframes = nframes+1
- if nframes >= fps:
- t2 = millitimer()
- if t2 <> t1:
- fps = int(10000.0*nframes/(t2-t1)) * 0.1
- msg = `fps` + ' frames/sec'
- t1 = t2
- nframes = 0
-
- RGBcolor(255,255,255)
- cmov2i(9,9)
- charstr(msg)
-
- swapbuffers()
- rectcopy(centerx-w/2, centery-w/2, centerx+w/2, centery+w/2, 0, 0)
-
- for i in range(nchunks):
- y1 = i*linesperchunk
- y2 = y1 + linesperchunk-1
- if y2 >= h: y2 = h-1
- data = lrectread(x1, y1, x2, y2)
- data2 = packrect(x2-x1+1, y2-y1+1, PF, data)
- prefix = `w, h, PF, x1, y1, x2, y2`
- prefix = prefix + ' ' * (HS-len(prefix))
- data3 = prefix + data2
- s.sendto(data3, addr)
-
-main()
diff --git a/Demo/sgi/video/camcorder.py b/Demo/sgi/video/camcorder.py
deleted file mode 100755
index 9b7618c..0000000
--- a/Demo/sgi/video/camcorder.py
+++ /dev/null
@@ -1,266 +0,0 @@
-from gl import *
-from GL import *
-from DEVICE import *
-import time
-import sys
-import getopt
-import socket
-import posix
-import vtime
-
-# Preallocation parameter
-PREALLOC = 4 # Megabyte
-
-# Sync audio parameters
-SYNCPORT = 10000
-CTLPORT = 10001
-
-from vpregs import *
-
-class Struct(): pass
-epoch = Struct()
-
-def getvideosize():
- w = getvideo(VP_WIDTH)
- h = getvideo(VP_HEIGHT)
- print 'WIDTH,HEIGHT:', w, h
- print 'GB{X,Y}ORG:', getvideo(VP_GBXORG), getvideo(VP_GBYORG)
- print 'FB{X,Y}ORG:', getvideo(VP_FBXORG), getvideo(VP_FBYORG)
- x = 0
- y = 0
- return x,y,w,h
-
-framelist = []
-
-def prealloc(w, h):
- nbytes = w*h*4
- limit = PREALLOC*1024*1024
- total = 0
- list = []
- print 'Prealloc to', PREALLOC, 'Megabytes...'
- while total+nbytes <= limit:
- list.append('x'*nbytes)
- total = total + nbytes
- print 'Done.'
-
-def grabframe(f,x,y,w,h,pf):
- readsource(SRC_FRONT)
- if pf:
- w = w/pf*pf
- h = h/pf*pf
- data = lrectread(x,y,x+w-1,y+h-1)
- t = time.millitimer()-epoch.epoch
- framelist.append(data, t)
- readsource(SRC_FRAMEGRABBER)
-
-def saveframes(f, w, h, pf):
- for data, t in framelist:
- if pf:
- w = w/pf*pf
- h = h/pf*pf
- data = packrect(w,h,pf,data)
- f.write(`t` + ',' + `len(data)` + '\n')
- f.write(data)
- framelist[:] = []
-
-def saveframe(f,x,y,w,h,pf, notime):
- readsource(SRC_FRONT)
- if pf:
- w = w/pf*pf
- h = h/pf*pf
- data = lrectread(x,y,x+w-1,y+h-1)
- if pf: data = packrect(w,h,pf,data)
- if notime: t = 0
- else: t = time.millitimer()-epoch.epoch
- f.write(`t` + ',' + `len(data)` + '\n')
- f.write(data)
- readsource(SRC_FRAMEGRABBER)
-
-def drawframe(x,y,w,h,col):
- drawmode(OVERDRAW)
- color(col)
- bgnline()
- v2i(x-1,y-1) ; v2i(x+w,y-1); v2i(x+w,y+h); v2i(x-1,y+h); v2i(x-1,y-1)
- endline()
- drawmode(NORMALDRAW)
-
-def usage():
- sys.stderr.write('Usage: camcorder ' + \
- '[-c] [-p packfactor] [-a audiomachine [-s]] [outputfile]\n')
- sys.exit(2)
-
-def wrheader(f, w, h, pf):
- f.write('CMIF video 1.0\n')
- f.write(`w,h,pf` + '\n')
- print 'width,height,pf:', w, h, pf,
- if pf == 0: pf = 4
- print '(i.e.,', w*h*pf, 'bytes/frame)'
-
-def main():
- foreground()
- pf = 2
- ausync = 0
- austart = 0
- optlist, args = getopt.getopt(sys.argv[1:],'ca:sp:')
- for opt, arg in optlist:
- if opt == '-c':
- pf = 0
- elif opt == '-a':
- ausync = 1
- aumachine = arg
- elif opt == '-s':
- austart = 1
- elif opt == '-p':
- pf = int(eval(arg))
- else:
- usage()
- if args:
- if len(args) > 1:
- print 'Too many arguments'
- usage()
- filename = args[0]
- else:
- filename = 'film.video'
- if austart:
- if not ausync:
- print 'Cannot use -s without -a'
- usage()
- print 'Starting audio recorder...'
- posix.system('rsh '+aumachine+' syncrecord '+socket.gethostname()+' &')
- if ausync:
- print 'Syncing to audio recorder...'
- globtime = vtime.VTime().init(1,aumachine,SYNCPORT)
- ctl = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
- ctl.bind((socket.gethostname(),CTLPORT))
- aua = (socket.gethostbyname(aumachine), CTLPORT)
- print 'Done.'
- vidx, vidy, w, h = getvideosize()
- #prefsize(w,h)
- winx, winy = 1280-w-10, 1024-h-30
- prefposition(winx,winx+w-1,winy,winy+h-1)
- win = winopen(filename)
- f = open(filename, 'w')
- w, h = getsize()
- realw, realh = w, h
- ####doublebuffer()
- RGBmode()
- gconfig()
- qdevice(LEFTMOUSE)
- qdevice(RKEY)
- qdevice(SKEY)
- qdevice(CKEY)
- qdevice(PKEY)
- qdevice(ESCKEY)
- qdevice(WINQUIT)
- qdevice(WINSHUT)
- inrunning = 1
- outrunning = 0
- stop = 'stop'
- readsource(SRC_FRAMEGRABBER)
- mousing = 0
- epoch.epoch = time.millitimer()
- stoptime = epoch.epoch
- sizewritten = 0
- x, y = realw/4, realh/4
- w, h = w/2, h/2
- prealloc(w, h)
- try:
- drawframe(x,y,w,h,1)
- nframe = 0
- num = 0
- while 1:
- insingle = 0
- outsingle = 0
- if mousing:
- drawframe(x,y,w,h,0)
- ox, oy = getorigin()
- if sizewritten:
- x = getvaluator(MOUSEX)-ox
- y = getvaluator(MOUSEY)-oy
- else:
- w = getvaluator(MOUSEX)-x-ox
- h = getvaluator(MOUSEY)-y-oy
- drawframe(x,y,w,h,1)
- if qtest() or \
- not (mousing or inrunning or insingle or outrunning or outsingle):
- ev, val = qread()
- if ev == LEFTMOUSE and val == 1:
- drawframe(x,y,w,h,0)
- mousing = 1
- ox, oy = getorigin()
- x = getvaluator(MOUSEX)-ox
- y = getvaluator(MOUSEY)-oy
- elif ev == LEFTMOUSE and val == 0:
- if h < 0:
- y, h = y+h, -h
- if w < 0:
- x, w = x+w, -w
- mousing = 0
- if not sizewritten:
- wrheader(f, w, h, pf)
- sizewritten = 1
- prealloc(w, h)
- elif ev == RKEY and val == 1:
- if not inrunning:
- ringbell()
- else:
- outrunning = 1
- wasstopped = time.millitimer() - stoptime
- epoch.epoch = epoch.epoch + wasstopped
- nframe = 0
- starttime = time.millitimer()
- if ausync:
- ctl.sendto(`(1,starttime)`, aua)
- elif ev == PKEY and val == 1 and outrunning:
- outrunning = 0
- stoptime = time.millitimer()
- if ausync:
- ctl.sendto(`(0,stoptime)`, aua)
- fps = nframe * 1000.0 / (time.millitimer()-starttime)
- print 'Recorded', nframe,
- print 'frames at', 0.1*int(fps*10),'frames/sec'
- print 'Saving...'
- saveframes(f, w, h, pf)
- print 'Done.'
- elif ev == PKEY and val == 1 and not outrunning:
- outsingle = 1
- elif ev == CKEY and val == 1:
- inrunning = 1
- elif ev == SKEY and val == 1:
- if outrunning:
- ringbell()
- elif inrunning:
- inrunning = 0
- else:
- insingle = 1
- elif ev in (ESCKEY, WINQUIT, WINSHUT):
- if ausync:
- ctl.sendto(`(2,time.millitimer())`, aua)
- raise stop
- elif ev == REDRAW:
- drawframe(x,y,w,h,0)
- reshapeviewport()
- drawframe(x,y,w,h,1)
- if inrunning or insingle:
- if outrunning:
- rectcopy(vidx+x,vidy+y,vidx+x+w-1,vidy+y+h-1,x,y)
- else:
- rectcopy(vidx,vidy,vidx+realw-1,vidx+realh-1,0,0)
- ####swapbuffers()
- if outrunning or outsingle:
- nframe = nframe + 1
- if not sizewritten:
- wrheader(f, w, h, pf)
- sizewritten = 1
- if outrunning:
- grabframe(f, x, y, w, h, pf)
- else:
- saveframe(f, x, y, w, h, pf, outsingle)
- except stop:
- pass
- finally:
- drawmode(OVERDRAW)
- color(0)
- clear()
-
-main()
diff --git a/Demo/sgi/video/colorsys.py b/Demo/sgi/video/colorsys.py
deleted file mode 100755
index dd3a033..0000000
--- a/Demo/sgi/video/colorsys.py
+++ /dev/null
@@ -1,106 +0,0 @@
-#
-# Module color - do color conversions
-#
-
-ONE_THIRD=1.0/3.0
-ONE_SIXTH=1.0/6.0
-TWO_THIRD=2.0/3.0
-
-def rgb_to_yiq(r,g,b):
- y = 0.3*r + 0.59*g + 0.11*b
- i = 0.6*r - 0.28*g - 0.32*b
- q = 0.21*r- 0.52*g + 0.31*b
- return (y,i,q)
-def yiq_to_rgb(y,i,q):
- r = y + 0.948262*i + 0.624013*q
- g = y - 0.276066*i - 0.639810*q
- b = y - 1.105450*i + 1.729860*q
- if r < 0.0: r = 0.0
- if g < 0.0: g = 0.0
- if b < 0.0: b = 0.0
- if r > 1.0: r = 1.0
- if g > 1.0: g = 1.0
- if b > 1.0: b = 1.0
- return (r,g,b)
-
-def _v(m1,m2,hue):
- if hue >= 1.0: hue = hue - 1.0
- if hue < 0.0: hue = hue + 1.0
- if hue < ONE_SIXTH:
- return m1 + (m2-m1)*hue*6.0
- if hue < 0.5:
- return m2
- if hue < TWO_THIRD:
- return m1 + (m2-m1)*(TWO_THIRD-hue)*6.0
- return m1
-
-def rgb_to_hls(r,g,b):
- maxc = max(r,g,b)
- minc = min(r,g,b)
- l = (minc+maxc)/2.0
- if minc == maxc:
- return 0.0, l, 0.0
- if l <= 0.5:
- s = (maxc-minc)/(maxc+minc)
- else:
- s = (maxc-minc)/(2-maxc-minc)
- rc = (maxc-r)/(maxc-minc)
- gc = (maxc-g)/(maxc-minc)
- bc = (maxc-b)/(maxc-minc)
- if r == maxc:
- h = bc-gc
- elif g == maxc:
- h = 2.0+rc-bc
- else:
- h = 4.0+gc-rc
- h = h/6.0
- if h < 0.0:
- h = h + 1.0
- return h,l,s
-def hls_to_rgb(h,l,s):
- if s == 0.0:
- return l,l,l
- if l <= 0.5:
- m2 = l * (1.0+s)
- else:
- m2 = l+s-(l*s)
- m1 = 2.0*l - m2
- return (_v(m1,m2,h+ONE_THIRD), _v(m1,m2,h), _v(m1,m2,h-ONE_THIRD))
-
-def rgb_to_hsv(r,g,b):
- maxc = max(r,g,b)
- minc = min(r,g,b)
- v = maxc
- if minc == maxc:
- return 0.0, 0.0, v
- s = (maxc-minc)/maxc
- rc = (maxc-r)/(maxc-minc)
- gc = (maxc-g)/(maxc-minc)
- bc = (maxc-b)/(maxc-minc)
- if r == maxc:
- h = bc-gc
- elif g == maxc:
- h = 2.0+rc-bc
- else:
- h = 4.0+gc-rc
- h = h/6.0
- if h < 0.0:
- h = h + 1.0
- return h,s,v
-def hsv_to_rgb(h,s,v):
- if s == 0.0:
- return v,v,v
- i = int(h*6.0)
- f = (h*6.0)-i
- p = v*(1.0-s)
- q = v*(1.0-s*f)
- t = v*(1.0-s*(1.0-f))
- if i in (0,6): return v,t,p
- if i == 1: return q,v,p
- if i == 2: return p,v,t
- if i == 3: return p,q,v
- if i == 4: return t,p,v
- if i == 5: return v,p,q
- print i, h, f
- print h, s, v
- raise 'Bad color'
diff --git a/Demo/sgi/video/i2v.c b/Demo/sgi/video/i2v.c
deleted file mode 100755
index 21dfabe..0000000
--- a/Demo/sgi/video/i2v.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * i2v -- image-to-video.
- * Convert an SGI image file to a format that is immediately usable
- * by lrectwrite.
- * The header of the file contains a description (in ASCII)
- * padded to 8196 byte for fast access of the rest of the file.
- *
- * Based upon "showimg.c" by Paul Haeberli.
- * --Guido van Rossum, CWI, Amsterdam
- */
-#include <stdio.h>
-#include <gl/gl.h>
-#include <gl/device.h>
-#include <gl/image.h>
-
-unsigned short rs[8192];
-unsigned short gs[8192];
-unsigned short bs[8192];
-
-IMAGE *image;
-int xsize, ysize, zsize;
-FILE *fp;
-
-char header[100];
-char *progname = "i2v";
-
-main(argc,argv)
-int argc;
-char **argv;
-{
- int y;
- if (argc > 0) progname = argv[0];
- if( argc != 3 ) {
- fprintf(stderr, "usage: %s infile outfile\n", progname);
- exit(2);
- }
- if( (image=iopen(argv[1],"r")) == NULL ) {
- fprintf(stderr, "%s: can't open input file %s\n",progname, argv[1]);
- exit(1);
- }
- xsize = image->xsize;
- ysize = image->ysize;
- zsize = image->zsize;
- if ((fp = fopen(argv[2], "w")) == NULL) {
- fprintf(stderr,"%s: can't open output file %s\n", progname, argv[2]);
- exit(1);
- }
- fprintf(fp, "CMIF video 1.0\n");
- fprintf(fp, "(%d, %d, %d)\n", xsize, ysize, 0);
- fprintf(fp, "0, %ld\n", (long)xsize * (long)ysize * sizeof(long));
- fflush(fp);
- for(y = 0; y < ysize; y++) {
- if(zsize<3) {
- getrow(image, rs, y, 0);
- writepacked(xsize, rs, rs, rs);
- } else {
- getrow(image, rs, y, 0);
- getrow(image, gs, y, 1);
- getrow(image, bs, y, 2);
- writepacked(xsize, rs, gs, bs);
- }
- }
- exit(0);
-}
-
-writepacked(n, rsptr, gsptr, bsptr)
- int n;
- short *rsptr, *gsptr, *bsptr;
-{
- long parray[8192];
- long *pptr = parray;
- int i = n;
- while (--i >= 0) {
- *pptr++ = *rsptr++ | (*gsptr++<<8) | (*bsptr++<<16);
- }
- if (fwrite((char *) parray, sizeof(long), n, fp) != n) {
- perror("fwrite");
- exit(1);
- }
-}
diff --git a/Demo/sgi/video/makemovie.py b/Demo/sgi/video/makemovie.py
deleted file mode 100755
index 5cb41cd..0000000
--- a/Demo/sgi/video/makemovie.py
+++ /dev/null
@@ -1,218 +0,0 @@
-#! /ufs/guido/bin/sgi/python
-#! /ufs/guido/src/video/py
-
-# Capture a CMIF movie using the Indigo video library and board
-
-
-# Usage:
-#
-# makemovie [-q queuesize] [-t recordtime] [-a] [moviefile [audiofile]]
-
-
-# Options:
-#
-# -q queuesize : set the capture queue size (default and max 16)
-# -t recordtime : set the record time in seconds (default 5 seconds)
-# -a : record audio as well
-# moviefile : here goes the movie data (default film.video);
-# the format is documented in cmif-film.ms
-# audiofile : with -a, here goes the audio data (default film.aiff);
-# audio data is recorded in AIFF format, using the
-# input sampling rate, source and volume set by the
-# audio panel, in mono, 8 bits/sample
-
-
-# User interface:
-#
-# Start the application. Resize the window to the desired movie size.
-# Click the left mouse button to start recording (recording starts
-# when you release the mouse button). Recording time is specified by
-# the -t option (XXX this should change).
-#
-# Press ESC or select the window manager Quit or Close window option
-# to quit. (You can do this without recording -- then the output
-# files are untouched.)
-#
-# (It is possible to record more than once; but this doesn't set the
-# time stamps correctly yet, and doesn't work at all with audio. So
-# don't use.)
-
-
-# XXX To do:
-#
-# fix timestamps for second and further recordings
-# fix audio " " " " "
-# flush audio buffer when recording starts
-# make code more readable
-
-
-import sys
-sys.path.append('/ufs/guido/src/video')
-import sv, SV
-import VFile
-import gl, GL, DEVICE
-import al, AL
-import time
-import posix
-import getopt
-import string
-
-
-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)
-
-def doframe(v, ofile, x, y, t):
- cd, start = v.GetCaptureData()
- data = cd.interleave(x, y)
- cd.UnlockCaptureData()
- ofile.writeframe(t, data, None)
-
-AQSIZE = 16000
-
-def initaudio(filename):
- import thread, aiff
- global recording, stop_recording
- afile = aiff.Aiff().init(filename, 'w')
- afile.nchannels = AL.MONO
- afile.sampwidth = AL.SAMPLE_8
- params = [AL.INPUT_RATE, 0]
- al.getparams(AL.DEFAULT_DEVICE, params)
- print 'rate =', params[1]
- afile.samprate = params[1]
- c = al.newconfig()
- c.setchannels(AL.MONO)
- c.setqueuesize(AQSIZE)
- c.setwidth(AL.SAMPLE_8)
- aport = al.openport(filename, 'r', c)
- recording = thread.allocate_lock()
- recording.acquire()
- stop_recording = 0
- thread.start_new_thread(recorder, (afile, aport))
- return afile
-
-def recorder(afile, aport):
- # XXX recording more than one fragment doesn't work
- # XXX (the thread never dies)
- recording.acquire()
- while not stop_recording:
- data = aport.readsamps(AQSIZE/2)
- afile.writesampsraw(data)
- del data
-
-main()
diff --git a/Demo/sgi/video/squash.c b/Demo/sgi/video/squash.c
deleted file mode 100755
index d5ea946..0000000
--- a/Demo/sgi/video/squash.c
+++ /dev/null
@@ -1,130 +0,0 @@
-#include <stdio.h>
-
-long *bm;
-long h, w;
-long factor;
-
-#define OC(x,xi) ((x)*factor+(xi))
-#define BM(x,xi,y,yi) bm[OC(y,yi)*w+OC(x,xi)]
-
-#define COMP(r,g,b) ((r) | ((g)<<8) | ((b) << 16))
-
-#define R(comp) ((comp) & 0xff)
-#define G(comp) (((comp)>>8) & 0xff)
-#define B(comp) (((comp)>>16) & 0xff)
-
-main(argc, argv)
- char **argv;
-{
- char lbuf[100];
- int nh, nw;
- int x, y, xi, yi;
- int num;
- int r, g, b;
- long data;
- long *nbm, *nbmp;
- int i;
- int bits, mask, roundbit, addbit;
- int pf;
- int newfmt = 0;
-
- if( argc != 2 && argc != 3) {
- fprintf(stderr, "Usage: squash factor [bits]\n");
- exit(1);
- }
- factor = atoi(argv[1]);
- if ( argc > 2 ) {
- bits = atoi(argv[2]);
- mask = (1 << bits) - 1;
- mask <<= (8-bits);
- roundbit = 1 << (7-bits);
- addbit = 1 << (8-bits);
- fprintf(stderr, "%x %x %x\n", mask, roundbit, addbit);
- } else {
- mask = 0xff;
- roundbit = 0;
- addbit = 0;
- }
- gets(lbuf);
- if ( strncmp( lbuf, "CMIF", 4) == 0 ) {
- newfmt = 1;
- gets(lbuf);
- if( sscanf(lbuf, "(%d,%d,%d)", &w, &h, &pf) != 3) {
- fprintf(stderr, "%s: bad size spec: %s\n", argv[0], lbuf);
- exit(1);
- }
- if ( pf != 0 ) {
- fprintf(stderr, "%s: packed file\n", argv[0]);
- exit(1);
- }
- } else {
- if ( sscanf(lbuf, "(%d,%d)", &w, &h) != 2) {
- fprintf(stderr, "%s: bad size spec: %s\n", argv[0], lbuf);
- exit(1);
- }
- }
- nh = h / factor;
- nw = w / factor;
- if ( newfmt )
- printf("CMIF video 1.0\n(%d,%d,%d)\n", nw, nh, 0);
- else
- printf("(%d,%d)\n", nw, nh);
- if ( (bm = (long *)malloc(h*w*sizeof(long))) == 0) {
- fprintf(stderr, "%s: No memory\n", argv[0]);
- exit(1);
- }
- if ( (nbm = (long *)malloc(nh*nw*sizeof(long))) == 0) {
- fprintf(stderr, "%s: No memory\n", argv[0]);
- exit(1);
- }
- while( !feof(stdin) ) {
- { int t, s;
- gets(lbuf);
- if ( feof(stdin) ) break;
- if ( sscanf(lbuf, "%d,%d", &t,&s) == 2) {
- if ( s != h*w*4 ) {
- fprintf(stderr, "Size changed from %d to %d: %s\n",4*h*w,s, lbuf);
- exit(1);
- }
- printf("%d, %d\n", t, nh*nw*4);
- } else {
- puts(lbuf);
- }
- }
- fprintf(stderr, "Reading %d\n", h*w*sizeof(long));
- if ( (i=fread(bm, 1, h*w*sizeof(long), stdin)) != h*w*sizeof(long)) {
- fprintf(stderr, "%s: short read, %d wanted %d\n", argv[0],
- i, h*w*sizeof(long));
- exit(1);
- }
- nbmp = nbm;
- for( y=0; y<nh; y++) {
- for ( x=0; x<nw; x++) {
- r = g = b = 0;
- num = 0;
- for( xi=0; xi<factor; xi++ ) {
- for(yi=0; yi<factor; yi++) {
- if ( y*factor+yi < h && x*factor+xi < w ) {
- num++;
- data = BM(x,xi,y,yi);
- r += R(data);
- g += G(data);
- b += B(data);
- }
- else fprintf(stderr, "skip %d %d %d %d\n", x, xi, y, yi);
- }
- }
- r = r/num; g = g/num; b = b/num;
- if ( (r & mask) != mask && ( r & roundbit) ) r += addbit;
- if ( (g & mask) != mask && ( g & roundbit) ) g += addbit;
- if ( (b & mask) != mask && ( b & roundbit) ) b += addbit;
- data = COMP(r, g, b);
- *nbmp++ = data;
- }
- }
- if (nbmp - nbm != nh * nw ) fprintf(stderr, "%d %d\n", nbmp-nbm, nh*nw);
- fprintf(stderr, "Writing %d\n", (nbmp-nbm)*sizeof(long));
- fwrite(nbm, 1, (nbmp-nbm)*sizeof(long), stdout);
- }
- exit(0);
-}
diff --git a/Demo/sgi/video/squash2.c b/Demo/sgi/video/squash2.c
deleted file mode 100755
index c4d03e9..0000000
--- a/Demo/sgi/video/squash2.c
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <stdio.h>
-
-long *bm;
-long h, w;
-long factor;
-
-#define OC(x,xi) ((x)*factor+(xi))
-#define BM(x,xi,y,yi) bm[OC(y,yi)*w+OC(x,xi)]
-
-#define COMP(r,g,b) ((r) | ((g)<<8) | ((b) << 16))
-
-#define R(comp) ((comp) & 0xff)
-#define G(comp) (((comp)>>8) & 0xff)
-#define B(comp) (((comp)>>16) & 0xff)
-
-main(argc, argv)
- char **argv;
-{
- char lbuf[100];
- int nh, nw;
- int x, y, xi, yi;
- int num;
- int r, g, b;
- long data;
- long *nbm, *nbmp;
- int i;
-
- if( argc != 2) {
- fprintf(stderr, "Usage: squash factor\n");
- exit(1);
- }
- factor = atoi(argv[1]);
- gets(lbuf);
- if ( sscanf(lbuf, "(%d,%d)", &w, &h) != 2) {
- fprintf(stderr, "%s: bad size spec: %s\n", argv[0], lbuf);
- exit(1);
- }
- nh = h / factor;
- nw = w / factor;
- printf("(%d,%d)\n", nw, nh);
- if ( (bm = (long *)malloc(h*w*sizeof(long))) == 0) {
- fprintf(stderr, "%s: No memory\n", argv[0]);
- exit(1);
- }
- if ( (nbm = (long *)malloc(nh*nw*sizeof(long))) == 0) {
- fprintf(stderr, "%s: No memory\n", argv[0]);
- exit(1);
- }
- while( !feof(stdin) ) {
- gets(lbuf);
- if ( feof(stdin) ) break;
- puts(lbuf);
- fprintf(stderr, "Reading %d\n", h*w*sizeof(long));
- if ( (i=fread(bm, 1, h*w*sizeof(long), stdin)) != h*w*sizeof(long)) {
- fprintf(stderr, "%s: short read, %d wanted %d\n", argv[0],
- i, h*w*sizeof(long));
- exit(1);
- }
- nbmp = nbm;
- for( y=0; y<nh; y++) {
- for ( x=0; x<nw; x++) {
- r = g = b = 0;
- num = 0;
- *nbmp++ = BM(x,0,y,0);
- }
- }
- if (nbmp - nbm != nh * nw ) fprintf(stderr, "%d %d\n", nbmp-nbm, nh*nw);
- fprintf(stderr, "Writing %d\n", (nbmp-nbm)*sizeof(long));
- fwrite(nbm, 1, (nbmp-nbm)*sizeof(long), stdout);
- }
- exit(0);
-}
diff --git a/Demo/sgi/video/statit.py b/Demo/sgi/video/statit.py
deleted file mode 100755
index b0c1782..0000000
--- a/Demo/sgi/video/statit.py
+++ /dev/null
@@ -1,115 +0,0 @@
-import sys
-from time import millitimer
-
-def main():
- filename = 'film2.video'
- if sys.argv[1:]: filename = sys.argv[1]
- f = open(filename, 'r')
-
- line = f.readline()
- w, h = eval(line[:-1])
- w2, h2 = w/2, h/2
- size = w2 * h2
-
- data = data2 = t = t0 = t1 = None
- nframes = 0
- t0 = millitimer()
- while 1:
- line = f.readline()
- if not line: break
- t = eval(line[:-1])
- data = None
- data = f.read(size)
- if len(data) <> size:
- raise EOFError
- dostat(w2, h2, data)
- nframes = nframes+1
- t1 = millitimer()
-
- t = 0.001 * (t1-t0)
- fps = 0.1 * int(10*nframes/t)
- print nframes, 'frames in', t, 'sec. =', fps, 'frames/sec.'
-
-def dostat(w, h, data):
- print
- stat3(w, h, data)
-
-# Statistic op 1: frequencies of byte values
-def stat1(w, h, data):
- bins = [0]*256
- for c in data:
- i = ord(c)
- bins[i] = bins[i]+1
- prbins(bins)
-
-def prbins(bins):
- import string
- s = ''
- tot = 0
- for i in range(256):
- tot = tot + bins[i]
- s = s + string.rjust(`bins[i]`, 4)
- if len(s) >= 4*16:
- print s, string.rjust(`tot`, 7)
- s = ''
- tot = 0
-
-# Statistic op 2: run lengths
-def stat2(w, h, data):
- runs = []
- for y in range(h):
- count, value = 0, ord(data[y*w])
- for c in data[y*w : y*w+w]:
- i = ord(c)
- if i <> value:
- runs.append(count, value)
- count, value = 0, i
- count = count+1
- runs.append(count, value)
- print len(runs), 'runs =', 0.1 * (10*w*h/len(runs)), 'bytes/run'
-
-# Statistic op 3: frequencies of byte differences
-def stat3(w, h, data):
- bins = [0]*256
- prev = 0
- for c in data:
- i = ord(c)
- delta = divmod(i-prev, 256)[1]
- prev = i
- bins[delta] = bins[delta]+1
- prbins(bins)
-
-# Try packing
-def packblock(w, h, data):
- res = ''
- for y in range(h):
- res = res + packline(data[y*w : y*w+w])
- return res
-
-def packline(line):
- bytes = []
- for c in line:
- bytes.append(ord(c))
- prev = bytes[0]
- i, n = 1, len(bytes)
- while i < n:
- for pack in (0, 2, 4, 8):
- if pack == 0:
- lo, hi = 0, 0
- else:
- hi = pow(2, pack-1)-1
- lo = -hi-1
- p = prev
- j = i
- count = 0
- while j < n:
- x = bytes[j]
- delta = byte(x-p)
- if not lo <= delta <= hi:
- break
- p = x
- j = j+1
-
-def byte(x): return divmod(x, 256)[1]
-
-main()
diff --git a/Demo/sgi/video/syncaudio.py b/Demo/sgi/video/syncaudio.py
deleted file mode 100755
index fd09d28..0000000
--- a/Demo/sgi/video/syncaudio.py
+++ /dev/null
@@ -1,94 +0,0 @@
-import AL
-import al
-import sys
-import vtime
-import socket
-import time
-
-
-SLEEPTIME = 500 # 500 ms sleeps
-SAMPLEFREQ = 16000 # 16Khz samples
-SAMPLERATE = AL.RATE_16000
-NEEDBUFFERED = SAMPLEFREQ # Buffer 1 second of sound
-BUFFERSIZE = NEEDBUFFERED*4 # setqueuesize() par for 2 second sound
-
-AVSYNCPORT = 10000 # Port for time syncing
-AVCTLPORT = 10001 # Port for record start/stop
-
-def main():
- if len(sys.argv) <> 3:
- print 'Usage: ', sys.argv[0], 'videohostname soundfile'
- sys.exit(1)
- #
- ofile = open(sys.argv[2], 'w')
- #
- globaltime = vtime.VTime().init(0,sys.argv[1],AVSYNCPORT)
- #
- ctl = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
- ctl.bind((socket.gethostname(),AVCTLPORT))
- #
- inp = openmic()
- #
- out = 0 # Open aiff file
- #
- while 1:
- if mainloop(None, ctl, inp, out, globaltime):
- break
- if mainloop(ofile, ctl, inp, out, globaltime):
- break
- pass # Close aiff file
- sys.exit(0)
-#
-def openmic():
- conf = al.newconfig()
- conf.setqueuesize(BUFFERSIZE)
- conf.setwidth(AL.SAMPLE_16)
- conf.setchannels(AL.MONO)
- return al.openport('micr','r',conf)
-#
-def mainloop(ofile, ctl, inp, out, globaltime):
- #
- # Wait for sync packet, keeping 1-2 seconds of sound in the
- # buffer
- #
- totsamps = 0
- totbytes = 0
- starttime = time.millitimer()
- while 1:
- time.millisleep(SLEEPTIME)
- if ctl.avail():
- break
- nsamples = inp.getfilled()-NEEDBUFFERED
- if nsamples>0:
- data = inp.readsamps(nsamples)
- totsamps = totsamps + nsamples
- totbytes = totbytes + len(data)
- if ofile <> None:
- ofile.write(data)
- #
- # Compute his starttime and the timestamp of the first byte in the
- # buffer. Discard all buffered data upto his starttime
- #
- startstop,histime = eval(ctl.recv(100))
- if (ofile == None and startstop == 0) or \
- (ofile <> None and startstop == 1):
- print 'Sync error: saving=',save,' request=',startstop
- sys.exit(1)
- filllevel = inp.getfilled()
- filltime = time.millitimer()
- filltime = filltime - filllevel / (SAMPLEFREQ/1000)
- starttime = globaltime.his2mine(histime)
- nsamples = starttime - filltime
- if nsamples < 0:
- print 'Start/stop signal came too late'
- sys.exit(1)
- nsamples = nsamples * (SAMPLEFREQ / 1000)
- data = inp.readsamps(nsamples)
- totsamps = totsamps + nsamples
- totbytes = totbytes + len(data)
- print 'Time: ', time.millitimer()-starttime, ', Bytes: ', totbytes, ', Samples: ', totsamps
- if ofile <> None:
- ofile.write(data)
- return (startstop == 2)
-
-main()
diff --git a/Demo/sgi/video/tomono.c b/Demo/sgi/video/tomono.c
deleted file mode 100755
index 546af68..0000000
--- a/Demo/sgi/video/tomono.c
+++ /dev/null
@@ -1,165 +0,0 @@
-#include <stdio.h>
-
-long *bm;
-long *nbm;
-long h, w;
-int nh, nw;
-long factor;
-
-#define OC(x,xi) ((x)*factor+(xi))
-#define BM(x,xi,y,yi) bm[OC(y,yi)*w+OC(x,xi)]
-
-#define COMP(r,g,b) ((r) | ((g)<<8) | ((b) << 16))
-
-#define R(comp) ((comp) & 0xff)
-#define G(comp) (((comp)>>8) & 0xff)
-#define B(comp) (((comp)>>16) & 0xff)
-
-#define CHOICEFUNC(np1, np2) ( random() & 1 )
-
-int inlevels = 3*255;
-int outlevels = 1;
-
-main(argc, argv)
- char **argv;
-{
- char lbuf[100];
- int x, y, xi, yi;
- int num;
- int r, g, b;
- long data;
- int i;
- double greyness;
- int inpixels, outpixels;
- int resid;
-
- setvbuf(stdout, 0, _IOFBF, 1024*128);
- if( argc != 2) {
- fprintf(stderr, "Usage: tomono factor\n");
- exit(1);
- }
- factor = atoi(argv[1]);
- gets(lbuf);
- if ( sscanf(lbuf, "(%d,%d)", &w, &h) != 2) {
- fprintf(stderr, "%s: bad size spec: %s\n", argv[0], lbuf);
- exit(1);
- }
- nh = h / factor;
- nw = w / factor;
- printf("(%d,%d)\n", nw, nh);
- if ( (bm = (long *)malloc(h*w*sizeof(long))) == 0) {
- fprintf(stderr, "%s: No memory\n", argv[0]);
- exit(1);
- }
- if ( (nbm = (long *)malloc(nh*nw*sizeof(long))) == 0) {
- fprintf(stderr, "%s: No memory\n", argv[0]);
- exit(1);
- }
- while( !feof(stdin) ) {
- gets(lbuf);
- if ( feof(stdin) ) break;
- puts(lbuf);
- fprintf(stderr, "Reading %d\n", h*w*sizeof(long));
- if ( (i=fread(bm, 1, h*w*sizeof(long), stdin)) != h*w*sizeof(long)) {
- fprintf(stderr, "%s: short read, %d wanted %d\n", argv[0],
- i, h*w*sizeof(long));
- exit(1);
- }
- /*
- ** Compute picture blackness.
- */
- inpixels = 0;
- inpixels = countpixels(0,0,w,h);
- greyness = (double)inpixels/(h*w*inlevels);
- fprintf(stderr, "%3.1f%% grey\n", 100.0*greyness);
- outpixels = (int)(greyness*outlevels*nh*nw);
- fprintf(stderr, "Inpixels: %d (%d) Outpixels %d\n", inpixels, inpixels/inlevels, outpixels);
- resid = fillpixels(0,0,nw,nh,0,0,w,h,outpixels);
- if ( resid > 1 ) fprintf(stderr, "Residue: %d pixels\n", resid);
- fprintf(stderr, "Writing %d\n", (nh*nw)*sizeof(long));
- fwrite(nbm, 1, (nh*nw)*sizeof(long), stdout);
- }
- exit(0);
-}
-
-countpixels(x0,y0,x1,y1)
-{
- int x, y, tot, data;
-
- tot = 0;
- for( y=y0; y<y1; y++)
- for(x=x0; x<x1; x++) {
- data = bm[y*w+x];
- tot += R(data);
- tot += G(data);
- tot += B(data);
- }
- return tot;
-}
-
-fillpixels(x0,y0,x1,y1,ox0,oy0,ox1,oy1,npixels)
-{
- int m, om, p1, p2, np1, np2, rp, resid;
-
- if ( npixels == 0 ) return 0;
- if ( x0+1 >= x1 && y0+1 >= y1 ) {
- if ( npixels ) {
- nbm[y0*nw+x0] = 0xffffff;
-/* fprintf(stderr, "->%d,%d\n", x0,y0); */
- return npixels - 1;
- }
- return 0;
- }
- if ( x1-x0 < y1-y0 ) {
- if ( y1 - y0 <= 2 )
- m = y0 + 1;
- else
- m = y0+1+(random()%(y1-y0-1));
-/* fprintf(stderr,"%d,%d %d,%d Y %d\n", x0, x1, y0, y1, m); */
- /* om = (oy0+oy1)/2; */ om = m;
- p1 = countpixels(ox0,oy0,ox1,om);
- p2 = countpixels(ox0,om,ox1,oy1);
- np1 = (int)(((float)p1/(p1+p2))*npixels);
- np2 = (int)(((float)p2/(p1+p2))*npixels);
- rp = npixels - np1 - np2;
- if ( rp ) {
- np1 += rp/2;
- rp = rp - rp/2;
- np2 += rp;
- }
- resid = 0;
- if ( CHOICEFUNC(np1, np2) ) {
- resid = fillpixels(x0,y0,x1,m,ox0,oy0,ox1,om,np1+resid);
- resid = fillpixels(x0,m,x1,y1,ox0,om,ox1,oy1,np2+resid);
- } else {
- resid = fillpixels(x0,m,x1,y1,ox0,om,ox1,oy1,np2+resid);
- resid = fillpixels(x0,y0,x1,m,ox0,oy0,ox1,om,np1+resid);
- }
- } else {
- if ( x1 - x0 <= 2 )
- m = x0 + 1;
- else
- m = x0+1+(random()%(x1-x0-1));
-/* fprintf(stderr,"%d,%d %d,%d X %d\n", x0, x1, y0, y1, m); */
- /* om = (ox0+ox1)/2; */ om = m;
- p1 = countpixels(ox0,oy0,om,oy1);
- p2 = countpixels(om,oy0,ox1,oy1);
- np1 = (int)(((float)p1/(p1+p2))*npixels);
- np2 = (int)(((float)p2/(p1+p2))*npixels);
- rp = npixels - np1 - np2;
- if ( rp ) {
- np1 += rp/2;
- rp = rp - rp/2;
- np2 += rp;
- }
- resid = 0;
- if ( CHOICEFUNC(np1, np2) ) {
- resid = fillpixels(x0,y0,m,y1,ox0,oy0,om,oy1,np1+resid);
- resid = fillpixels(m,y0,x1,y1,om,oy0,ox1,oy1,np2+resid);
- } else {
- resid = fillpixels(m,y0,x1,y1,om,oy0,ox1,oy1,np2+resid);
- resid = fillpixels(x0,y0,m,y1,ox0,oy0,om,oy1,np1+resid);
- }
- }
- return resid;
-}
diff --git a/Demo/sgi/video/tv.py b/Demo/sgi/video/tv.py
deleted file mode 100755
index da4bacb..0000000
--- a/Demo/sgi/video/tv.py
+++ /dev/null
@@ -1,79 +0,0 @@
-import string
-
-from socket import *
-from gl import *
-from GL import *
-from DEVICE import *
-from time import millisleep, millitimer
-
-PORT = 5555
-
-PF = 2 # packfactor
-HS = 40 # Header size
-
-def testimage():
- RGBcolor(0, 0, 0)
- clear()
- RGBcolor(0, 255, 0)
- cmov2i(10, 10)
- charstr('Waiting...')
-
-def reshape():
- reshapeviewport()
- w, h = getsize()
- ortho2(0, w, 0, h)
- testimage()
- return w, h
-
-def main():
- s = socket(AF_INET, SOCK_DGRAM)
- s.bind('', PORT)
-
- foreground()
- wid = winopen('tv')
- RGBmode()
- gconfig()
- qdevice(ESCKEY)
-
- oldw, oldh = getsize()
- ortho2(0, oldw, 0, oldh)
- testimage()
-
- t1 = millitimer()
-
- while 1:
- if qtest():
- dev, val = qread()
- if dev == ESCKEY:
- winclose(wid)
- return
- elif dev == REDRAW:
- oldw, oldh = reshape()
- elif s.avail():
- data = s.recv(17000)
- header = string.strip(data[:HS])
- w, h, pf, x1, y1, x2, y2 = eval(header)
- if (w, h) <> (oldw, oldh):
- x, y = getorigin()
- x, y = x-1, y+21 # TWM correction
- winposition(x, x+w-1, y+oldh-h, y+oldh-1)
- oldw, oldh = reshape()
- data2 = data[HS:]
- dx = (x2-x1+1)/pf
- dy = (y2-y1+1)/pf
- data3 = unpackrect(dx, dy, 1, data2)
- rectzoom(pf, pf)
- lrectwrite(x1, y1, x1+dx-1, y1+dy-1, data3)
- t1 = millitimer()
- else:
- t2 = millitimer()
- if t2-t1 >= 5000:
- testimage()
- t1 = t2
- else:
- millisleep(10)
-
- winclose(wid)
- return data
-
-main()
diff --git a/Demo/sgi/video/v2i.c b/Demo/sgi/video/v2i.c
deleted file mode 100755
index 5f8f3b5..0000000
--- a/Demo/sgi/video/v2i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Convert the first image of a CMIF video movie file to SGI .rgb format.
- usage: v2i videofile imagefile [planemask]
- link with -limage
-*/
-
-#include <stdio.h>
-#include <gl/image.h>
-
-long bm[1280];
-short rb[1280], gb[1280], bb[1280];
-long w, h, pf;
-
-#define R(comp) ((comp) & 0xff)
-#define G(comp) (((comp)>>8) & 0xff)
-#define B(comp) (((comp)>>16) & 0xff)
-
-main(argc, argv)
- char **argv;
-{
- char lbuf[100];
- int x, y;
- int i;
- IMAGE * of;
- int pmask;
-
- if( argc != 3 && argc != 4) {
- fprintf(stderr, "Usage: v2i videofile imgfile [planemask]\n");
- exit(2);
- }
- if ( argc == 4)
- pmask = atoi(argv[3]);
- else
- pmask = 7;
- if ( freopen(argv[1], "r", stdin) == NULL ) {
- perror(argv[1]);
- exit(1);
- }
- if (fgets(lbuf, sizeof lbuf, stdin) == NULL) {
- fprintf(stderr, "Immediate EOF\n");
- exit(1);
- }
- if (strncmp(lbuf, "CMIF", 4) == 0) {
- /* Skip optional header line */
- if (fgets(lbuf, sizeof lbuf, stdin) == NULL) {
- fprintf(stderr, "Immediate EOF after header\n");
- exit(1);
- }
- }
- pf = 2; /* Default */
- if ( sscanf(lbuf, "(%d,%d,%d)", &w, &h, &pf) < 2) {
- fprintf(stderr, "%s: bad size spec: %s\n", argv[0], lbuf);
- exit(1);
- }
- fgets(lbuf, sizeof lbuf, stdin); /* Skip time info */
- if ( w > 1280 ) {
- fprintf(stderr, "%s: Sorry, too wide\n", argv[0]);
- exit(1);
- }
- if ( (of=iopen(argv[2], "w", RLE(1), 3, w, h, 3)) == 0) {
- perror(argv[2]);
- exit(1);
- }
- for( y=0; y<h; y++) {
- if( fread(bm, sizeof(long), w, stdin) != w) {
- fprintf(stderr, "%s: short read\n", argv[0]);
- exit(1);
- }
- for( x=0; x<w; x++) {
- if ( pmask & 1) rb[x] = R(bm[x]);
- if ( pmask & 2) gb[x] = G(bm[x]);
- if ( pmask & 4) bb[x] = B(bm[x]);
- }
- putrow(of, rb, y, 0);
- putrow(of, gb, y, 1);
- putrow(of, bb, y, 2);
- }
- iclose(of);
- exit(0);
-}
diff --git a/Demo/sgi/video/video.py b/Demo/sgi/video/video.py
deleted file mode 100755
index 1b81bd8..0000000
--- a/Demo/sgi/video/video.py
+++ /dev/null
@@ -1,218 +0,0 @@
-import getopt
-from gl import *
-from GL import *
-from DEVICE import *
-import time
-import sys
-import al
-import AL
-
-sys.path.append('/ufs/guido/src/video') # Increase chance to find colorsys
-import colorsys
-
-BUFFERSIZE = 32000
-
-class Struct(): pass
-epoch = Struct()
-epoch.correcttiming = 1
-EndOfFile = 'End of file'
-bye = 'bye'
-
-def openspkr():
- conf = al.newconfig()
- conf.setqueuesize(BUFFERSIZE)
- conf.setwidth(AL.SAMPLE_16)
- conf.setchannels(AL.MONO)
- return al.openport('spkr','w',conf)
-
-def openvideo(name):
- try:
- f = open(name, 'r')
- except:
- sys.stderr.write(name + ': cannot open\n')
- sys.exit(1)
- line = f.readline()
- if not line: raise EndOfFile
- colorinfo = (8, 0, 0, 0)
- if line[:4] == 'CMIF':
- if line[:14] == 'CMIF video 2.0':
- line = f.readline()
- colorinfo = eval(line[:-1])
- line = f.readline()
- x = eval(line[:-1])
- if len(x) == 3: w, h, pf = x
- else: w, h = x; pf = 2
- if pf and w/pf % 4 <> 0:
- sys.stderr.write( \
- 'warning: stride not a multiple of 4 -- may not work on Indigo XS\n')
- return f, w, h, pf, colorinfo
-
-def loadframe(f,w,h,pf,af,spkr, (ybits,ibits,qbits,chrompack),mf):
- line = f.readline()
- if line == '':
- raise EndOfFile
- x = eval(line[:-1])
- if type(x) == type(0) or type(x) == type(0.0):
- tijd = x
- if pf == 0:
- size = w*h*4
- else:
- size = (w/pf) * (h/pf)
- else:
- tijd, size = x
- data = f.read(size)
- if len(data) <> size:
- raise EndOfFile
- if pf:
- w = w/pf
- h = h/pf
- if chrompack:
- cw = (w+chrompack-1)/chrompack
- ch = (h+chrompack-1)/chrompack
- chromdata = f.read(2*cw*ch)
- rectzoom(pf*chrompack*mf,pf*chrompack*mf)
- pixmode(PM_SIZE,16)
- writemask(0x7ff - ((1<<ybits)-1))
- lrectwrite(0,0,cw-1,ch-1,chromdata)
- writemask((1<<ybits)-1)
- pixmode(PM_SIZE,8)
- if pf:
- rectzoom(pf*mf, pf*mf)
- elif mf <> 1:
- rectzoom(mf,mf)
- lrectwrite(0,0,w-1,h-1,data)
- # This is ugly here, but the only way to get the two
- # channels started in sync
- #if af <> None:
- # playsound(af,spkr)
- ct = time.millitimer() - epoch.epoch
- if epoch.correcttiming and tijd > 0 and ct < tijd:
- time.millisleep(tijd-ct)
- #swapbuffers()
- return tijd
-
-def initcmap(ybits,ibits,qbits,chrompack):
- if ybits+ibits+qbits > 11:
- raise 'Sorry, 11 bits max'
- maxy = pow(2,ybits)
- maxi = pow(2,ibits)
- maxq = pow(2,qbits)
- for i in range(2048,4096-256):
- mapcolor(i, 0, 255, 0)
- for y in range(maxy):
- yv = float(y)/float(maxy-1)
- for i in range(maxi):
- if maxi == 1: iv = 0
- else: iv = (float(i)/float(maxi-1))-0.5
- for q in range(maxq):
- if maxq == 1: qv = 0
- else: qv = (float(q)/float(maxq-1))-0.5
- index = 2048 + y + (i << ybits) + (q << (ybits+ibits))
- rv,gv,bv = colorsys.yiq_to_rgb(yv,iv,qv)
- r,g,b = int(rv*255.0), int(gv*255.0), int(bv*255.0)
- if index < 4096 - 256:
- mapcolor(index, r,g,b)
-
-def playsound(af, spkr):
- nsamp = spkr.getfillable()
- data = af.read(nsamp*2)
- spkr.writesamps(data)
-
-def main():
- looping = 0
- packfactor = 0
- magfactor = 1
- try:
- opts, args = getopt.getopt(sys.argv[1:], 'm:p:lF')
- except getopt.error:
- sys.stderr.write('usage: video ' + \
- '[-l] [-p pf] [-m mag] [-F] [moviefile [soundfile [skipbytes]]]\n')
- sys.exit(2)
- for opt, arg in opts:
- if opt == '-m':
- magfactor = int(eval(arg))
- elif opt == '-p':
- packfactor = int(eval(arg))
- elif opt == '-l':
- looping = 1
- elif opt == '-F':
- epoch.correcttiming = 0
- if args:
- filename = args[0]
- else:
- filename = 'film.video'
- f, w, h, pf, cinfo = openvideo(filename)
- if 0 < packfactor <> pf:
- w = w/pf*packfactor
- h = h/pf*packfactor
- pf = packfactor
- if args[1:]:
- audiofilename = args[1]
- af = open(audiofilename, 'r')
- spkr = openspkr()
- afskip = 0
- if args[2:]:
- afskip = eval(args[2])
- af.seek(afskip)
- else:
- af, spkr = None, None
- foreground()
- prefsize(w*magfactor,h*magfactor)
- win = winopen(filename)
- if pf:
- #doublebuffer()
- cmode()
- else:
- RGBmode()
- #doublebuffer()
- gconfig()
- if pf:
- initcmap(cinfo)
- color(2048)
- clear()
- writemask(2047)
- pixmode(PM_SIZE,8) # 8 bit pixels
- qdevice(ESCKEY)
- qdevice(WINSHUT)
- qdevice(WINQUIT)
- running = 1
- epoch.epoch = time.millitimer()
- nframe = 0
- tijd = 1
- if looping:
- looping = f.tell()
- try:
- while 1:
- if running:
- try:
- tijd = loadframe(f, w, h, pf, af, spkr, cinfo,magfactor)
- nframe = nframe + 1
- except EndOfFile:
- running = 0
- t = time.millitimer()
- if tijd > 0:
- print 'Recorded at',
- print 0.1 * int(nframe * 10000.0 / tijd),
- print 'frames/sec'
- print 'Played', nframe, 'frames at',
- print 0.1 * int(nframe * 10000.0 / (t-epoch.epoch)),
- print 'frames/sec'
- if looping:
- f.seek(looping)
- epoch.epoch = time.millitimer()
- nframe = 0
- running = 1
- if af <> None:
- af.seek(afskip)
- if af <> None:
- playsound(af,spkr)
- if not running or qtest():
- dev, val = qread()
- if dev in (ESCKEY, WINSHUT, WINQUIT):
- raise bye
- elif dev == REDRAW:
- reshapeviewport()
- except bye:
- pass
-
-main()
diff --git a/Demo/sgi/video/vpregs.py b/Demo/sgi/video/vpregs.py
deleted file mode 100755
index d33f1fe..0000000
--- a/Demo/sgi/video/vpregs.py
+++ /dev/null
@@ -1,28 +0,0 @@
-VID_VP = 0x1000000
-
-# Set vp1 register tokens
-VP_GBXORG = (VID_VP +0x01)
-VP_GBYORG = (VID_VP +0x02)
-VP_FBXORG = (VID_VP +0x03)
-VP_FBYORG = (VID_VP +0x04)
-VP_WIDTH = (VID_VP +0x05)
-VP_HEIGHT = (VID_VP +0x06)
-VP_PIXCNT = (VID_VP +0x07)
-VP_HBLANK = (VID_VP +0x08)
-VP_VBLANK = (VID_VP +0x09)
-VP_BRITE = (VID_VP +0x0A)
-VP_CONT = (VID_VP +0x0B)
-VP_HUE = (VID_VP +0x0C)
-VP_SAT = (VID_VP +0x0D)
-VP_ALPHA = (VID_VP +0X0E)
-VP_FGMODE = (VID_VP +0x0F)
-VP_MAPSRC = (VID_VP +0x10)
-VP_MAPADD = (VID_VP +0x11)
-VP_MAPRED = (VID_VP +0x12)
-VP_MAPGREEN = (VID_VP +0x13)
-VP_MAPBLUE = (VID_VP +0x14)
-VP_MAPSTROBE = (VID_VP +0x15)
-VP_DIGVAL = (VID_VP +0x16)
-VP_STATUS0 = (VID_VP +0x17)
-VP_STATUS1 = (VID_VP +0x18)
-VP_CMD = (VID_VP +0x19)