Initial revision
diff --git a/Demo/sgi/sv/contcapt.py b/Demo/sgi/sv/contcapt.py
new file mode 100755
index 0000000..4d2e888
--- /dev/null
+++ b/Demo/sgi/sv/contcapt.py
@@ -0,0 +1,107 @@
+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 RuntimeError, 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()