Deleting zombies

This commit is contained in:
Guido van Rossum 2001-07-17 15:45:08 +00:00
parent f8a17b14c4
commit b1a77dd248
22 changed files with 0 additions and 2716 deletions

View file

@ -1 +0,0 @@
test

View file

@ -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

View file

@ -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

View file

@ -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]'

View file

@ -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()

View file

@ -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()

View file

@ -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'

View file

@ -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);
}
}

View file

@ -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()

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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()

View file

@ -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()

View file

@ -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;
}

View file

@ -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()

View file

@ -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);
}

View file

@ -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()

View file

@ -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)