diff options
Diffstat (limited to 'Demo/sgi/video/Vreceive.py')
-rwxr-xr-x | Demo/sgi/video/Vreceive.py | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/Demo/sgi/video/Vreceive.py b/Demo/sgi/video/Vreceive.py deleted file mode 100755 index 84aa5a5..0000000 --- a/Demo/sgi/video/Vreceive.py +++ /dev/null @@ -1,135 +0,0 @@ -#! /usr/bin/env python - -# Receive live video UDP packets. -# Usage: Vreceive [port] - -import sys -import struct -from socket import * # syscalls and support functions -from SOCKET import * # <sys/socket.h> -from IN import * # <netinet/in.h> -import select -import struct -import gl, GL, DEVICE -sys.path.append('/ufs/guido/src/video') -import LiveVideoOut -import regsub -import getopt - -from senddefs import * - - -# Print usage message and exit(2). - -def usage(msg): - print msg - print 'usage: Vreceive [-m mcastgrp] [-p port] [-c type]' - print '-m mcastgrp: multicast group (default ' + `DEFMCAST` + ')' - print '-p port : port (default ' + `DEFPORT` + ')' - print '-c type : signal type: rgb8, grey or mono (default rgb8)' - sys.exit(2) - - -# Main program: parse options and main loop. - -def main(): - - sys.stdout = sys.stderr - - group = DEFMCAST - port = DEFPORT - width = DEFWIDTH - height = DEFHEIGHT - vtype = 'rgb8' - - try: - opts, args = getopt.getopt(sys.argv[1:], 'm:p:c:') - except getopt.error, msg: - usage(msg) - - try: - for opt, optarg in opts: - if opt == '-p': - port = string.atoi(optarg) - if opt == '-m': - group = gethostbyname(optarg) - if opt == '-c': - vtype = optarg - except string.atoi_error, msg: - usage('bad integer: ' + msg) - - s = opensocket(group, port) - - gl.foreground() - gl.prefsize(width, height) - wid = gl.winopen('Vreceive') - gl.winconstraints() - gl.qdevice(DEVICE.ESCKEY) - gl.qdevice(DEVICE.WINSHUT) - gl.qdevice(DEVICE.WINQUIT) - - lvo = LiveVideoOut.LiveVideoOut(wid, width, height, vtype) - - ifdlist = [gl.qgetfd(), s.fileno()] - ofdlist = [] - xfdlist = [] - timeout = 1.0 - selectargs = (ifdlist, ofdlist, xfdlist, timeout) - - while 1: - - if gl.qtest(): - dev, val = gl.qread() - if dev in (DEVICE.ESCKEY, \ - DEVICE.WINSHUT, DEVICE.WINQUIT): - break - if dev == DEVICE.REDRAW: - lvo.reshapewindow() - elif s.avail(): - data = s.recv(16*1024) - pos, w, h = struct.unpack('hhh', data[:6]) - if (w, h) <> (width, height): - x, y = gl.getorigin() - y = y + height - h - gl.winposition(x, x+w-1, y, y+h-1) - width, height = w, h - lvo.resizevideo(width, height) - lvo.putnextpacket(pos, data[6:]) - else: - x = select.select(selectargs) - - lvo.close() - - -# Subroutine to create and properly initialize the receiving socket - -def opensocket(group, port): - - # Create the socket - s = socket(AF_INET, SOCK_DGRAM) - - # Allow multiple copies of this program on one machine - s.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1) # (Not strictly needed) - - # Bind the port to it - s.bind('', port) - - # Look up the group once - group = gethostbyname(group) - - # Construct binary group address - group_bytes = eval(regsub.gsub('\.', ',', group)) - grpaddr = 0 - for byte in group_bytes: grpaddr = (grpaddr << 8) | byte - - # Construct struct mreq from grpaddr and ifaddr - ifaddr = INADDR_ANY - mreq = struct.pack('ll', grpaddr, ifaddr) - - # Add group membership - s.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, mreq) - - return s - - -main() |