cpython/Demo/sgi/video/tv.py

80 lines
1.3 KiB
Python
Executable File

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