home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyos2bin.zip / Demo / sgi / sv / rgbgrab.py < prev    next >
Text File  |  1992-09-03  |  2KB  |  82 lines

  1. import sys
  2. import sv, SV
  3. import gl, GL, DEVICE
  4. import time
  5.  
  6. def main():
  7.     v = sv.OpenVideo()
  8.     # Determine maximum window size based on signal standard
  9.     param = [SV.BROADCAST, 0]
  10.     v.GetParam(param)
  11.     if param[1] == SV.PAL:
  12.         width = SV.PAL_XMAX
  13.         height = SV.PAL_YMAX
  14.     elif param[1] == SV.NTSC:
  15.         width = SV.NTSC_XMAX
  16.         height = SV.NTSC_YMAX
  17.     else:
  18.         print 'Unknown video standard', param[1]
  19.         sys.exit(1)
  20.  
  21.     # Initially all windows are half size
  22.     grabwidth, grabheight = width/2, height/2
  23.  
  24.     # Open still window
  25.     gl.foreground()
  26.     gl.prefsize(grabwidth, grabheight)
  27.     still_win = gl.winopen('Grabbed frame')
  28.     gl.keepaspect(width, height)
  29.     gl.maxsize(width, height)
  30.     gl.winconstraints()
  31.     gl.RGBmode()
  32.     gl.gconfig()
  33.     gl.clear()
  34.     gl.pixmode(GL.PM_SIZE, 8)
  35.  
  36.     # Open live window
  37.     gl.foreground()
  38.     gl.prefsize(grabwidth, grabheight)
  39.     live_win = gl.winopen('Live video')
  40.     gl.keepaspect(width, height)
  41.     gl.maxsize(width, height)
  42.     gl.winconstraints()
  43.  
  44.     # Bind live video
  45.     v.SetSize(gl.getsize())
  46.     v.BindGLWindow(live_win, SV.IN_REPLACE)
  47.  
  48.     print 'Use leftmouse to grab frame'
  49.  
  50.     gl.qdevice(DEVICE.LEFTMOUSE)
  51.     gl.qdevice(DEVICE.WINQUIT)
  52.     gl.qdevice(DEVICE.WINSHUT)
  53.     gl.qdevice(DEVICE.ESCKEY)
  54.     frame = None
  55.     while 1:
  56.         dev, val = gl.qread()
  57.         if dev == DEVICE.LEFTMOUSE and val == 0:
  58.             w, h, fields = v.CaptureOneFrame(SV.RGB8_FRAMES, \
  59.                 grabwidth, grabheight)
  60.             frame = sv.InterleaveFields(1, fields, w, h)
  61.             gl.winset(still_win)
  62.             gl.lrectwrite(0, 0, w - 1, h - 1, frame)
  63.             gl.winset(live_win)
  64.         if dev in (DEVICE.ESCKEY, DEVICE.WINQUIT, DEVICE.WINSHUT):
  65.             v.CloseVideo()
  66.             gl.winclose(live_win)
  67.             gl.winclose(still_win)
  68.             break
  69.         if dev == DEVICE.REDRAW and val == still_win:
  70.             gl.winset(still_win)
  71.             gl.reshapeviewport()
  72.             gl.clear()
  73.             grabwidth, grabheight = gl.getsize()
  74.             if frame:
  75.                 gl.lrectwrite(0, 0, w - 1, h - 1, frame)
  76.             gl.winset(live_win)
  77.         if dev == DEVICE.REDRAW and val == live_win:
  78.             v.SetSize(gl.getsize())
  79.             v.BindGLWindow(live_win, SV.IN_REPLACE)
  80.  
  81. main()
  82.