summaryrefslogtreecommitdiffstats
path: root/Demo/sgi/sv
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1992-09-03 17:01:36 (GMT)
committerGuido van Rossum <guido@python.org>1992-09-03 17:01:36 (GMT)
commitdb96c5a7d9e3b7f7d84e98fe95003b61d7be72f6 (patch)
treec0dbef730860c49992e036dd9df3e9a42697b200 /Demo/sgi/sv
parent62f6bc8e55ef2d0e226b1c3ad7b9aca58407ab7a (diff)
downloadcpython-db96c5a7d9e3b7f7d84e98fe95003b61d7be72f6.zip
cpython-db96c5a7d9e3b7f7d84e98fe95003b61d7be72f6.tar.gz
cpython-db96c5a7d9e3b7f7d84e98fe95003b61d7be72f6.tar.bz2
Initial revision
Diffstat (limited to 'Demo/sgi/sv')
-rw-r--r--Demo/sgi/sv/README9
-rwxr-xr-xDemo/sgi/sv/burstcapt.py43
-rwxr-xr-xDemo/sgi/sv/contcapt.py107
-rwxr-xr-xDemo/sgi/sv/rgbgrab.py81
-rwxr-xr-xDemo/sgi/sv/simpleinput.py22
5 files changed, 262 insertions, 0 deletions
diff --git a/Demo/sgi/sv/README b/Demo/sgi/sv/README
new file mode 100644
index 0000000..ac0d497
--- /dev/null
+++ b/Demo/sgi/sv/README
@@ -0,0 +1,9 @@
+Demo programs for the SGI Video library for the Indigo (IRIX 4.0.5).
+These are more-or-less literal translations of the C programs from the
+Indigo Video Programming Guide, by Sjoerd Mullender, with minor
+changes by Guido.
+
+simpleinput.py Live video in a resizable window
+rgbgrab.py Grab still frames
+contcapt.py Continuous capturing (to a window)
+burstcapt.py Burst capturing
diff --git a/Demo/sgi/sv/burstcapt.py b/Demo/sgi/sv/burstcapt.py
new file mode 100755
index 0000000..b1f0a16
--- /dev/null
+++ b/Demo/sgi/sv/burstcapt.py
@@ -0,0 +1,43 @@
+import sv, SV
+import gl, GL, DEVICE
+
+def main():
+ format = SV.RGB8_FRAMES
+ requestedwidth = SV.PAL_XMAX
+ queuesize = 2
+
+ v = sv.OpenVideo()
+ svci = (format, requestedwidth, 0, queuesize, 0)
+
+ svci, buffer, bitvec = v.CaptureBurst(svci)
+ [bitvec]
+
+ w, h = svci[1:3]
+ framesize = w * h
+
+ gl.prefposition(300, 300+w-1, 100, 100+h-1)
+ gl.foreground()
+ win = gl.winopen('Burst Capture')
+ gl.RGBmode()
+ gl.gconfig()
+ gl.qdevice(DEVICE.LEFTMOUSE)
+ gl.qdevice(DEVICE.ESCKEY)
+
+ for i in range(svci[3]):
+ inverted_frame = sv.RGB8toRGB32(1, \
+ buffer[i*framesize:(i+1)*framesize], w, h)
+ gl.lrectwrite(0, 0, w-1, h-1, inverted_frame)
+ while 1:
+ dev, val = gl.qread()
+ if dev == DEVICE.LEFTMOUSE and val == 1:
+ break
+ if dev == DEVICE.REDRAW:
+ gl.lrectwrite(0, 0, w-1, h-1, inverted_frame)
+ if dev == DEVICE.ESCKEY:
+ v.CloseVideo()
+ gl.winclose(win)
+ return
+ v.CloseVideo()
+ gl.winclose(win)
+
+main()
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()
diff --git a/Demo/sgi/sv/rgbgrab.py b/Demo/sgi/sv/rgbgrab.py
new file mode 100755
index 0000000..8013a53
--- /dev/null
+++ b/Demo/sgi/sv/rgbgrab.py
@@ -0,0 +1,81 @@
+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()
diff --git a/Demo/sgi/sv/simpleinput.py b/Demo/sgi/sv/simpleinput.py
new file mode 100755
index 0000000..97b75fa
--- /dev/null
+++ b/Demo/sgi/sv/simpleinput.py
@@ -0,0 +1,22 @@
+import sv, SV
+import gl, DEVICE
+
+def main():
+ gl.foreground()
+ gl.prefsize(SV.PAL_XMAX, SV.PAL_YMAX)
+ win = gl.winopen('video test')
+ v = sv.OpenVideo()
+ params = [SV.VIDEO_MODE, SV.COMP, SV.BROADCAST, SV.PAL]
+ v.SetParam(params)
+ v.BindGLWindow(win, SV.IN_REPLACE)
+ gl.qdevice(DEVICE.ESCKEY)
+ gl.qdevice(DEVICE.WINQUIT)
+ gl.qdevice(DEVICE.WINSHUT)
+ while 1:
+ dev, val = gl.qread()
+ if dev in (DEVICE.ESCKEY, DEVICE.WINSHUT, DEVICE.WINQUIT):
+ v.CloseVideo()
+ gl.winclose(win)
+ return
+
+main()