1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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 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()
|