mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			107 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| import sys
 | |
| import sv, SV
 | |
| import gl, GL, DEVICE
 | |
| 
 | |
| def main():
 | |
| 	format = SV.RGB8_FRAMES
 | |
| 	framerate = 25
 | |
| 	queuesize = 16
 | |
| 	samplingrate = 2
 | |
| 
 | |
| 	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
 | |
| 		framefreq = 25
 | |
| 	else:
 | |
| 		width = SV.NTSC_XMAX
 | |
| 		height = SV.NTSC_YMAX
 | |
| 		framefreq = 30
 | |
| 
 | |
| 	# Allow resizing window if capturing RGB frames, which can be scaled
 | |
| 	if format == SV.RGB8_FRAMES:
 | |
| 		gl.keepaspect(width, height)
 | |
| 		gl.maxsize(width, height)
 | |
| 		gl.stepunit(8, 6)
 | |
| 		gl.minsize(120, 90)
 | |
| 	else:
 | |
| 		if format == SV.YUV411_FRAMES_AND_BLANKING_BUFFER:
 | |
| 			height = height + SV.BLANKING_BUFFER_SIZE
 | |
| 		gl.prefposition(300, 300+width-1, 100, 100+height-1)
 | |
| 
 | |
| 	# Open the window
 | |
| 	gl.foreground()
 | |
| 	win = gl.winopen('Continuous Capture')
 | |
| 	gl.RGBmode()
 | |
| 	gl.gconfig()
 | |
| 	if format == SV.RGB8_FRAMES:
 | |
| 		width, height = gl.getsize()
 | |
| 		gl.pixmode(GL.PM_SIZE, 8)
 | |
| 	else:
 | |
| 		gl.pixmode(GL.PM_SIZE, 32)
 | |
| 
 | |
| 	svci = (format, width, height, queuesize, samplingrate)
 | |
| 	[svci]
 | |
| 
 | |
| 	svci = v.InitContinuousCapture(svci)
 | |
| 	width, height = svci[1:3]
 | |
| 	[svci]
 | |
| 
 | |
| 	hz = gl.getgdesc(GL.GD_TIMERHZ)
 | |
| 	gl.noise(DEVICE.TIMER0, hz / framerate)
 | |
| 	gl.qdevice(DEVICE.TIMER0)
 | |
| 	gl.qdevice(DEVICE.WINQUIT)
 | |
| 	gl.qdevice(DEVICE.WINSHUT)
 | |
| 	gl.qdevice(DEVICE.ESCKEY)
 | |
| 
 | |
| 	ndisplayed = 0
 | |
| 	lastfieldID = 0
 | |
| 
 | |
| 	while 1:
 | |
| 		dev, val = gl.qread()
 | |
| 		if dev == DEVICE.REDRAW:
 | |
| 			oldw = width
 | |
| 			oldh = height
 | |
| 			width, height = gl.getsize()
 | |
| 			if oldw != width or oldh != height:
 | |
| 				v.EndContinuousCapture()
 | |
| 				gl.viewport(0, width-1, 0, height-1)
 | |
| 				svci = (svci[0], width, height) + svci[3:]
 | |
| 				svci = v.InitContinuousCapture(svci)
 | |
| 				width, height = svci[1:3]
 | |
| 				[svci]
 | |
| 				if ndisplayed:
 | |
| 					print 'lost',
 | |
| 					print fieldID/(svci[4]*2) - ndisplayed,
 | |
| 					print 'frames'
 | |
| 				ndisplayed = 0
 | |
| 		elif dev == DEVICE.TIMER0:
 | |
| 			try:
 | |
| 				captureData, fieldID = v.GetCaptureData()
 | |
| 			except sv.error, val:
 | |
| 				if val <> 'no data available':
 | |
| 					print val
 | |
| 				continue
 | |
| 			if fieldID - lastfieldID <> 2*samplingrate:
 | |
| 				print lastfieldID, fieldID
 | |
| 			lastfieldID = fieldID
 | |
| 			if svci[0] == SV.RGB8_FRAMES:
 | |
| 				rgbbuf = captureData.InterleaveFields(1)
 | |
| 			else:
 | |
| 				rgbbuf = captureData.YUVtoRGB(1)
 | |
| 			captureData.UnlockCaptureData()
 | |
| 			gl.lrectwrite(0, 0, width-1, height-1, rgbbuf)
 | |
| 			ndisplayed = ndisplayed + 1
 | |
| 		elif dev in (DEVICE.ESCKEY, DEVICE.WINQUIT, DEVICE.WINSHUT):
 | |
| 			v.EndContinuousCapture()
 | |
| 			v.CloseVideo()
 | |
| 			gl.winclose(win)
 | |
| 			print fieldID, ndisplayed, svci[4]
 | |
| 			print 'lost', fieldID/(svci[4]*2) - ndisplayed,
 | |
| 			print 'frames'
 | |
| 			return
 | |
| 
 | |
| main()
 | 
