home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-12-17 | 2.6 KB | 108 lines | [TEXT/R*ch] |
- 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()
-