mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			95 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			95 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | #!/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() |