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 = '' 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 == '': 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()