summaryrefslogtreecommitdiffstats
path: root/Demo/sgi/video/Vsend.py
diff options
context:
space:
mode:
Diffstat (limited to 'Demo/sgi/video/Vsend.py')
-rwxr-xr-xDemo/sgi/video/Vsend.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/Demo/sgi/video/Vsend.py b/Demo/sgi/video/Vsend.py
new file mode 100755
index 0000000..32385f0
--- /dev/null
+++ b/Demo/sgi/video/Vsend.py
@@ -0,0 +1,94 @@
+#!/ufs/guido/bin/sgi/python-405
+
+# Send live video UDP packets.
+# Usage: Vsend [host [port]]
+
+import sys
+import time
+import struct
+from socket import *
+import gl, GL, DEVICE
+sys.path.append('/ufs/guido/src/video')
+import LiveVideoIn
+import LiveVideoOut
+
+PKTMAX_UCAST = 16*1024 - 6
+PKTMAX_BCAST = 1450
+WIDTH = 400
+HEIGHT = 300
+HOST = '<broadcast>'
+PORT = 5555
+
+def main():
+ if not LiveVideoIn.have_video:
+ print 'Sorry, no video (use python-405 on roos)'
+ sys.exit(1)
+
+ host = HOST
+ port = PORT
+ if sys.argv[1:]:
+ host = sys.argv[1]
+ if sys.argv[2:]:
+ port = eval(sys.argv[2])
+
+ if host == '<broadcast>':
+ pktmax = PKTMAX_BCAST
+ else:
+ pktmax = PKTMAX_UCAST
+
+ gl.foreground()
+ gl.prefsize(WIDTH, HEIGHT)
+ wid = gl.winopen('Vsend')
+ gl.keepaspect(WIDTH, HEIGHT)
+ gl.stepunit(8, 6)
+ gl.winconstraints()
+ gl.qdevice(DEVICE.ESCKEY)
+ gl.qdevice(DEVICE.WINSHUT)
+ gl.qdevice(DEVICE.WINQUIT)
+ width, height = gl.getsize()
+
+ x, y = gl.getorigin()
+ lvo = LiveVideoOut.LiveVideoOut().init(wid, (x, y, width, height), \
+ width, height)
+
+ lvi = LiveVideoIn.LiveVideoIn().init(pktmax, width, height)
+
+ s = socket(AF_INET, SOCK_DGRAM)
+ s.allowbroadcast(1)
+
+ while 1:
+
+ if gl.qtest():
+ dev, val = gl.qread()
+ if dev in (DEVICE.ESCKEY, \
+ DEVICE.WINSHUT, DEVICE.WINQUIT):
+ break
+ if dev == DEVICE.REDRAW:
+ w, h = gl.getsize()
+ x, y = gl.getorigin()
+ if (w, h) <> (width, height):
+ lvi.close()
+ width, height = w, h
+ lvi = LiveVideoIn.LiveVideoIn() \
+ .init(pktmax, width, height)
+ lvo.close()
+ lvo = LiveVideoOut.LiveVideoOut() \
+ .init(wid, \
+ (x, y, width, height), \
+ width, height)
+
+ rv = lvi.getnextpacket()
+ if not rv:
+ time.millisleep(10)
+ continue
+
+ pos, data = rv
+ lvo.putnextpacket(pos, data)
+
+ hdr = struct.pack('hhh', pos, width, height)
+ s.sendto(hdr + data, (host, port))
+
+ lvi.close()
+ lvo.close()
+
+main()