summaryrefslogtreecommitdiffstats
path: root/Demo/sgi/video/camcorder.py
diff options
context:
space:
mode:
Diffstat (limited to 'Demo/sgi/video/camcorder.py')
-rwxr-xr-xDemo/sgi/video/camcorder.py266
1 files changed, 0 insertions, 266 deletions
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()