Kaydet (Commit) c17c84fb authored tarafından Guido van Rossum's avatar Guido van Rossum

Disconnect from VCR when switching modes.

Wait for VCR ready and set VCR mode to DNR when initializing VCR.
Fix type error in getfloat().
üst 9f42f4fe
...@@ -228,6 +228,8 @@ class VideoBagOfTricks: ...@@ -228,6 +228,8 @@ class VideoBagOfTricks:
self.rebindvideo() self.rebindvideo()
def cb_vmode(self, *args): def cb_vmode(self, *args):
if self.vcr:
self.vcr = None
self.vmode = self.c_vmode.get_choice() self.vmode = self.c_vmode.get_choice()
self.form.freeze_form() self.form.freeze_form()
self.g_cont.hide_object() self.g_cont.hide_object()
...@@ -433,7 +435,10 @@ class VideoBagOfTricks: ...@@ -433,7 +435,10 @@ class VideoBagOfTricks:
import VCR import VCR
try: try:
self.vcr = VCR.VCR().init() self.vcr = VCR.VCR().init()
self.vcr.wait()
self.vcr.fmmode('dnr')
except VCR.error, msg: except VCR.error, msg:
self.vcr = None
self.b_capture.set_button(0) self.b_capture.set_button(0)
fl.show_message('VCR error', str(msg), '') fl.show_message('VCR error', str(msg), '')
return return
...@@ -615,7 +620,7 @@ class VideoBagOfTricks: ...@@ -615,7 +620,7 @@ class VideoBagOfTricks:
value = float(eval(field.get_input())) value = float(eval(field.get_input()))
except: except:
value = float(default) value = float(default)
field.set_input(value) field.set_input(`value`)
return value return value
# Audio stuff # Audio stuff
......
...@@ -48,6 +48,7 @@ def usage(): ...@@ -48,6 +48,7 @@ def usage():
print '-M value : monochrome tresholded with value' print '-M value : monochrome tresholded with value'
print '-f : Capture fields (instead of frames)' print '-f : Capture fields (instead of frames)'
print '-n number : Capture this many frames (default 60)' print '-n number : Capture this many frames (default 60)'
print '-N memsize : Capture frames fitting in this many kbytes'
print 'moviefile : here goes the movie data (default film.video)' print 'moviefile : here goes the movie data (default film.video)'
def help(): def help():
...@@ -75,10 +76,11 @@ def main(): ...@@ -75,10 +76,11 @@ def main():
greybits = 0 greybits = 0
monotreshold = -1 monotreshold = -1
fields = 0 fields = 0
number = 60 number = 0
memsize = 0
try: try:
opts, args = getopt.getopt(sys.argv[1:], 'ar:w:dg:mM:Gfn:') opts, args = getopt.getopt(sys.argv[1:], 'ar:w:dg:mM:Gfn:N:')
except getopt.error, msg: except getopt.error, msg:
sys.stdout = sys.stderr sys.stdout = sys.stderr
print 'Error:', msg, '\n' print 'Error:', msg, '\n'
...@@ -117,11 +119,24 @@ def main(): ...@@ -117,11 +119,24 @@ def main():
fields = 1 fields = 1
elif opt == '-n': elif opt == '-n':
number = string.atoi(arg) number = string.atoi(arg)
elif opt == '-N':
memsize = string.atoi(arg)
if 0 < memsize < 1024:
memsize = memsize * 1024
if 0 < memsize < 1024*1024:
memsize = memsize * 1024
print 'memsize', memsize
except string.atoi_error: except string.atoi_error:
sys.stdout = sys.stderr sys.stdout = sys.stderr
print 'Option', opt, 'requires integer argument' print 'Option', opt, 'requires integer argument'
sys.exit(2) sys.exit(2)
if number <> 0 and memsize <> 0:
sys.stderr.write('-n and -N are mutually exclusive\n')
sys.exit(2)
if number == 0 and memsize == 0:
number = 60
if not fields: if not fields:
print '-f option assumed until somebody fixes it' print '-f option assumed until somebody fixes it'
fields = 1 fields = 1
...@@ -180,7 +195,9 @@ def main(): ...@@ -180,7 +195,9 @@ def main():
gl.winconstraints() gl.winconstraints()
x, y = gl.getsize() x, y = gl.getsize()
print x, 'x', y print x, 'x', y
if memsize:
number = calcnumber(x, y, grey or mono, memsize)
print number, 'frames'
v.SetSize(x, y) v.SetSize(x, y)
if drop: if drop:
...@@ -215,6 +232,9 @@ def main(): ...@@ -215,6 +232,9 @@ def main():
# Window resize (or move) # Window resize (or move)
x, y = gl.getsize() x, y = gl.getsize()
print x, 'x', y print x, 'x', y
if memsize:
number = calcnumber(x, y, grey or mono, memsize)
print number, 'frames'
v.SetSize(x, y) v.SetSize(x, y)
v.BindGLWindow(win, SV.IN_REPLACE) v.BindGLWindow(win, SV.IN_REPLACE)
elif dev in (DEVICE.ESCKEY, DEVICE.WINQUIT, DEVICE.WINSHUT): elif dev in (DEVICE.ESCKEY, DEVICE.WINQUIT, DEVICE.WINSHUT):
...@@ -224,6 +244,14 @@ def main(): ...@@ -224,6 +244,14 @@ def main():
break break
def calcnumber(x, y, grey, memsize):
pixels = x*y
pixels = pixels/2 # XXX always assume fields
if grey: n = memsize/pixels
else: n = memsize/(4*pixels)
return max(1, n)
# Record until the mouse is released (or any other GL event) # Record until the mouse is released (or any other GL event)
# XXX audio not yet supported # XXX audio not yet supported
...@@ -318,11 +346,22 @@ def record(v, info, filename, audiofilename, \ ...@@ -318,11 +346,22 @@ def record(v, info, filename, audiofilename, \
nskipped = 0 nskipped = 0
realframeno = 0 realframeno = 0
tpf = 1000 / 50.0 #XXXX tpf = 1000 / 50.0 #XXXX
# Trying to find the pattern in frame skipping
okstretch = 0
skipstretch = 0
for frameno in range(0, number*2): for frameno in range(0, number*2):
if frameno <> 0 and \ if frameno <> 0 and \
bitvec[frameno] == bitvec[frameno-1]: bitvec[frameno] == bitvec[frameno-1]:
nskipped = nskipped + 1 nskipped = nskipped + 1
if okstretch:
print okstretch, 'ok',
okstretch = 0
skipstretch = skipstretch + 1
continue continue
if skipstretch:
print skipstretch, 'skipped'
skipstretch = 0
okstretch = okstretch + 1
# #
# Save field. # Save field.
# XXXX Works only for fields and top-to-bottom # XXXX Works only for fields and top-to-bottom
...@@ -337,9 +376,11 @@ def record(v, info, filename, audiofilename, \ ...@@ -337,9 +376,11 @@ def record(v, info, filename, audiofilename, \
elif mono: elif mono:
field = imageop.dither2mono( \ field = imageop.dither2mono( \
field, len(field), 1) field, len(field), 1)
vout.writeframe(int(realframeno*tpf), field, None)
realframeno = realframeno + 1 realframeno = realframeno + 1
print 'Skipped',nskipped,'duplicate frames' vout.writeframe(int(realframeno*tpf), field, None)
print okstretch, 'ok',
print skipstretch, 'skipped'
print 'Skipped', nskipped, 'duplicate frames'
vout.close() vout.close()
gl.wintitle('(done) ' + filename) gl.wintitle('(done) ' + filename)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment