| 
									
										
										
										
											1992-09-03 17:01:36 +00:00
										 |  |  | 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() | 
					
						
							| 
									
										
										
										
											1992-12-14 15:51:53 +00:00
										 |  |  | 			except sv.error, val: | 
					
						
							| 
									
										
										
										
											1992-09-03 17:01:36 +00:00
										 |  |  | 				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() |