Oops -- Lib/Test should be Lib/test, of course!
[python/dscho.git] / Demo / sgi / video / cam.py
blobfa8966f8b3b0e93ecf89cca8a4eabc5e34d14f6d
1 import sys
2 from socket import *
3 from gl import *
4 from GL import *
5 from DEVICE import *
6 from time import millitimer
8 HS = 40 # Header size (must be same as in tv.py)
10 # Rely on UDP packet (de)fragmentation for smoother images
11 # (Changed for broadcast)
12 MAX = 16000
14 PF = 2 # Default packfactor
16 # Default receiver station is voorn.
17 # Kwik has no yellow pages, so...
18 HOST = '192.16.201.121'
19 PORT = 5555
21 if sys.argv[1:]:
22 PF = eval(sys.argv[1])
24 if sys.argv[2:]:
25 HOST = sys.argv[2]
26 if HOST == 'all':
27 HOST = '<broadcast>'
28 MAX = 1400
30 PF2 = PF*PF
32 def main():
33 centerx, centery = 400, 300
35 foreground()
36 wid = winopen('cam')
37 RGBmode()
38 doublebuffer()
39 gconfig()
40 qdevice(ESCKEY)
42 w, h = getsize()
43 ortho2(0, w, 0, h)
44 w = w/PF*PF
45 h = h/PF*PF
47 readsource(SRC_FRAMEGRABBER)
49 s = socket(AF_INET, SOCK_DGRAM)
50 if HOST == '<broadcast>':
51 s.allowbroadcast(1)
52 addr = HOST, PORT
54 bytesperline = w/PF2
55 linesperchunk = MAX/bytesperline
56 linesperchunk = linesperchunk/PF*PF
57 nchunks = (h+linesperchunk-1)/linesperchunk
59 print 'MAX=', MAX,
60 print 'linesperchunk=', linesperchunk,
61 print 'nchunks=', nchunks,
62 print 'w=', w, 'h=', h
64 x1, x2 = 0, w-1
66 t1 = millitimer()
67 nframes = 0
68 fps = 0
70 msg = ''
72 while 1:
73 while qtest():
74 dev, val = qread()
75 if dev == REDRAW:
76 reshapeviewport()
77 w, h = getsize()
78 ortho2(0, w, 0, h)
79 w = w/PF*PF
80 h = h/PF*PF
82 bytesperline = w/PF2
83 linesperchunk = MAX/bytesperline
84 linesperchunk = linesperchunk/PF*PF
85 nchunks = (h+linesperchunk-1)/linesperchunk
87 print 'MAX=', MAX,
88 print 'linesperchunk=', linesperchunk,
89 print 'nchunks=', nchunks,
90 print 'w=', w, 'h=', h
92 x1, x2 = 0, w-1
94 fps = 0
96 elif dev == ESCKEY:
97 winclose(wid)
98 return
100 readsource(SRC_FRAMEGRABBER)
102 nframes = nframes+1
103 if nframes >= fps:
104 t2 = millitimer()
105 if t2 <> t1:
106 fps = int(10000.0*nframes/(t2-t1)) * 0.1
107 msg = `fps` + ' frames/sec'
108 t1 = t2
109 nframes = 0
111 RGBcolor(255,255,255)
112 cmov2i(9,9)
113 charstr(msg)
115 swapbuffers()
116 rectcopy(centerx-w/2, centery-w/2, centerx+w/2, centery+w/2, 0, 0)
118 for i in range(nchunks):
119 y1 = i*linesperchunk
120 y2 = y1 + linesperchunk-1
121 if y2 >= h: y2 = h-1
122 data = lrectread(x1, y1, x2, y2)
123 data2 = packrect(x2-x1+1, y2-y1+1, PF, data)
124 prefix = `w, h, PF, x1, y1, x2, y2`
125 prefix = prefix + ' ' * (HS-len(prefix))
126 data3 = prefix + data2
127 s.sendto(data3, addr)
129 main()