blob: f38e965c27dcdd999da1e76be5830a893b43dbf8 [file] [log] [blame]
Guido van Rossumba066151992-09-22 17:23:17 +00001#!/ufs/guido/bin/sgi/python-405
2
3# Send live video UDP packets.
4# Usage: Vsend [host [port]]
5
6import sys
7import time
8import struct
9from socket import *
Guido van Rossum67b48951992-09-24 12:54:35 +000010from SOCKET import *
Guido van Rossumba066151992-09-22 17:23:17 +000011import gl, GL, DEVICE
12sys.path.append('/ufs/guido/src/video')
13import LiveVideoIn
14import LiveVideoOut
Guido van Rossum67b48951992-09-24 12:54:35 +000015import SV
Guido van Rossumba066151992-09-22 17:23:17 +000016
17PKTMAX_UCAST = 16*1024 - 6
18PKTMAX_BCAST = 1450
19WIDTH = 400
20HEIGHT = 300
Guido van Rossum67b48951992-09-24 12:54:35 +000021HOST = '225.0.0.250' # Multicast address!
Guido van Rossumba066151992-09-22 17:23:17 +000022PORT = 5555
23
24def main():
25 if not LiveVideoIn.have_video:
26 print 'Sorry, no video (use python-405 on roos)'
27 sys.exit(1)
28
29 host = HOST
30 port = PORT
31 if sys.argv[1:]:
32 host = sys.argv[1]
Guido van Rossum67b48951992-09-24 12:54:35 +000033 if host == '-b':
34 host = '<broadcast>'
Guido van Rossumba066151992-09-22 17:23:17 +000035 if sys.argv[2:]:
36 port = eval(sys.argv[2])
37
38 if host == '<broadcast>':
39 pktmax = PKTMAX_BCAST
40 else:
41 pktmax = PKTMAX_UCAST
42
43 gl.foreground()
44 gl.prefsize(WIDTH, HEIGHT)
45 wid = gl.winopen('Vsend')
46 gl.keepaspect(WIDTH, HEIGHT)
47 gl.stepunit(8, 6)
Guido van Rossum67b48951992-09-24 12:54:35 +000048 gl.maxsize(SV.PAL_XMAX, SV.PAL_YMAX)
Guido van Rossumba066151992-09-22 17:23:17 +000049 gl.winconstraints()
50 gl.qdevice(DEVICE.ESCKEY)
51 gl.qdevice(DEVICE.WINSHUT)
52 gl.qdevice(DEVICE.WINQUIT)
Guido van Rossum67b48951992-09-24 12:54:35 +000053 gl.qdevice(DEVICE.WINFREEZE)
54 gl.qdevice(DEVICE.WINTHAW)
Guido van Rossumba066151992-09-22 17:23:17 +000055 width, height = gl.getsize()
56
57 x, y = gl.getorigin()
58 lvo = LiveVideoOut.LiveVideoOut().init(wid, (x, y, width, height), \
59 width, height)
60
61 lvi = LiveVideoIn.LiveVideoIn().init(pktmax, width, height)
62
63 s = socket(AF_INET, SOCK_DGRAM)
Guido van Rossum67b48951992-09-24 12:54:35 +000064 s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
65
66 frozen = 0
Guido van Rossumba066151992-09-22 17:23:17 +000067
68 while 1:
69
70 if gl.qtest():
71 dev, val = gl.qread()
72 if dev in (DEVICE.ESCKEY, \
73 DEVICE.WINSHUT, DEVICE.WINQUIT):
74 break
Guido van Rossum67b48951992-09-24 12:54:35 +000075 if dev == DEVICE.WINFREEZE:
76 frozen = 1
77 if dev == DEVICE.WINTHAW:
78 frozen = 0
Guido van Rossumba066151992-09-22 17:23:17 +000079 if dev == DEVICE.REDRAW:
80 w, h = gl.getsize()
81 x, y = gl.getorigin()
82 if (w, h) <> (width, height):
83 lvi.close()
84 width, height = w, h
85 lvi = LiveVideoIn.LiveVideoIn() \
86 .init(pktmax, width, height)
87 lvo.close()
88 lvo = LiveVideoOut.LiveVideoOut() \
89 .init(wid, \
90 (x, y, width, height), \
91 width, height)
92
93 rv = lvi.getnextpacket()
94 if not rv:
95 time.millisleep(10)
96 continue
97
98 pos, data = rv
Guido van Rossum67b48951992-09-24 12:54:35 +000099
100 if not frozen:
101 lvo.putnextpacket(pos, data)
Guido van Rossumba066151992-09-22 17:23:17 +0000102
103 hdr = struct.pack('hhh', pos, width, height)
104 s.sendto(hdr + data, (host, port))
105
106 lvi.close()
107 lvo.close()
108
109main()