mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| import sys
 | |
| import sv, SV
 | |
| import gl, GL, DEVICE
 | |
| import time
 | |
| 
 | |
| def main():
 | |
| 	v = sv.OpenVideo()
 | |
| 	# Determine maximum window size based on signal standard
 | |
| 	param = [SV.BROADCAST, 0]
 | |
| 	v.GetParam(param)
 | |
| 	if param[1] == SV.PAL:
 | |
| 		width = SV.PAL_XMAX
 | |
| 		height = SV.PAL_YMAX
 | |
| 	elif param[1] == SV.NTSC:
 | |
| 		width = SV.NTSC_XMAX
 | |
| 		height = SV.NTSC_YMAX
 | |
| 	else:
 | |
| 		print 'Unknown video standard', param[1]
 | |
| 		sys.exit(1)
 | |
| 
 | |
| 	# Initially all windows are half size
 | |
| 	grabwidth, grabheight = width/2, height/2
 | |
| 
 | |
| 	# Open still window
 | |
| 	gl.foreground()
 | |
| 	gl.prefsize(grabwidth, grabheight)
 | |
| 	still_win = gl.winopen('Grabbed frame')
 | |
| 	gl.keepaspect(width, height)
 | |
| 	gl.maxsize(width, height)
 | |
| 	gl.winconstraints()
 | |
| 	gl.RGBmode()
 | |
| 	gl.gconfig()
 | |
| 	gl.clear()
 | |
| 	gl.pixmode(GL.PM_SIZE, 8)
 | |
| 
 | |
| 	# Open live window
 | |
| 	gl.foreground()
 | |
| 	gl.prefsize(grabwidth, grabheight)
 | |
| 	live_win = gl.winopen('Live video')
 | |
| 	gl.keepaspect(width, height)
 | |
| 	gl.maxsize(width, height)
 | |
| 	gl.winconstraints()
 | |
| 
 | |
| 	# Bind live video
 | |
| 	v.SetSize(gl.getsize())
 | |
| 	v.BindGLWindow(live_win, SV.IN_REPLACE)
 | |
| 
 | |
| 	print 'Use leftmouse to grab frame'
 | |
| 
 | |
| 	gl.qdevice(DEVICE.LEFTMOUSE)
 | |
| 	gl.qdevice(DEVICE.WINQUIT)
 | |
| 	gl.qdevice(DEVICE.WINSHUT)
 | |
| 	gl.qdevice(DEVICE.ESCKEY)
 | |
| 	frame = None
 | |
| 	while 1:
 | |
| 		dev, val = gl.qread()
 | |
| 		if dev == DEVICE.LEFTMOUSE and val == 0:
 | |
| 			w, h, fields = v.CaptureOneFrame(SV.RGB8_FRAMES, \
 | |
| 				grabwidth, grabheight)
 | |
| 			frame = sv.InterleaveFields(1, fields, w, h)
 | |
| 			gl.winset(still_win)
 | |
| 			gl.lrectwrite(0, 0, w - 1, h - 1, frame)
 | |
| 			gl.winset(live_win)
 | |
| 		if dev in (DEVICE.ESCKEY, DEVICE.WINQUIT, DEVICE.WINSHUT):
 | |
| 			v.CloseVideo()
 | |
| 			gl.winclose(live_win)
 | |
| 			gl.winclose(still_win)
 | |
| 			break
 | |
| 		if dev == DEVICE.REDRAW and val == still_win:
 | |
| 			gl.winset(still_win)
 | |
| 			gl.reshapeviewport()
 | |
| 			gl.clear()
 | |
| 			grabwidth, grabheight = gl.getsize()
 | |
| 			if frame:
 | |
| 				gl.lrectwrite(0, 0, w - 1, h - 1, frame)
 | |
| 			gl.winset(live_win)
 | |
| 		if dev == DEVICE.REDRAW and val == live_win:
 | |
| 			v.SetSize(gl.getsize())
 | |
| 			v.BindGLWindow(live_win, SV.IN_REPLACE)
 | |
| 
 | |
| main()
 | 
