Moved stop button again; default form position next to video window.

This commit is contained in:
Guido van Rossum 1993-05-07 11:20:07 +00:00
parent bc6d3c37d1
commit c5a14331a0
2 changed files with 178 additions and 117 deletions

View File

@ -2,13 +2,20 @@
# Video bag-of-tricks
# XXX To do: audio; rationalize user interface; ...?
# XXX To do:
# - audio
# - single frame recording
# - improve user interface
# - help button?
# - command line options to set initial settings
# - save settings in a file
# - ...?
import sys
import getopt
import string
import os
sts = os.system('makemap') # Must be before "import fl"
sts = os.system('makemap') # Must be before "import fl" to work
import sgi
import gl
import GL
@ -28,6 +35,7 @@ WATCH = 1
watchcursor.defwatch(WATCH)
def main():
## fl.set_graphics_mode(0, 1)
vb = VideoBagOfTricks().init()
while 1:
dummy = fl.do_forms()
@ -46,16 +54,31 @@ class VideoBagOfTricks:
formdef = flp.parse_form('VbForm', 'form')
flp.create_full_form(self, formdef)
self.g_stop.hide_object()
self.g_burst.hide_object()
self.setdefaults()
self.openvideo()
self.makewindow()
self.bindvideo()
self.capturing = 0
self.form.show_form(FL.PLACE_SIZE, FL.TRUE, \
'Video Bag Of Tricks')
self.showform()
fl.set_event_call_back(self.do_event)
return self
def showform(self):
# Get position of video window
gl.winset(self.window)
x, y = gl.getorigin()
width, height = gl.getsize()
# Calculate position of form window
x1 = x + width + 10
x2 = x1 + int(self.form.w) - 1
y2 = y + height - 1
y1 = y2 - int(self.form.h) + 1
# Position and show form window
gl.prefposition(x1, x2, y1, y2)
self.form.show_form(FL.PLACE_FREE, FL.TRUE, \
'Video Bag Of Tricks')
def setdefaults(self):
self.mono_thresh = 128
self.format = 'rgb8'
@ -152,34 +175,6 @@ class VideoBagOfTricks:
self.rebindvideo()
self.settitle()
def get_format(self):
i = self.c_format.get_choice()
label = Labels[i-1]
format = Formats[i-1]
self.format = format
#
self.rgb = (format[:3] == 'rgb')
self.mono = (format == 'mono')
self.grey = (format[:4] == 'grey')
self.mono_use_thresh = (label == 'mono thresh')
s = format[4:]
if s:
self.greybits = string.atoi(s)
else:
self.greybits = 8
if label == 'grey2 dith':
self.greybits = -2
#
convertor = None
if self.grey:
if self.greybits == 2:
convertor = imageop.grey2grey2
elif self.greybits == 4:
convertor = imageop.grey2grey4
elif self.greybits == -2:
convertor = imageop.dither2grey2
self.convertor = convertor
def cb_format(self, *args):
self.get_format()
if self.mono_use_thresh:
@ -200,7 +195,16 @@ class VideoBagOfTricks:
self.rebindvideo()
def cb_burst(self, *args):
pass
if self.b_burst.get_button():
self.in_rate.set_input('1')
self.b_drop.set_button(1)
## self.g_stop.hide_object()
self.g_burst.show_object()
else:
self.in_rate.set_input('2')
self.b_drop.set_button(0)
## self.g_stop.show_object()
self.g_burst.hide_object()
def cb_maxmem(self, *args):
pass
@ -226,15 +230,6 @@ class VideoBagOfTricks:
self.in_file.set_input(filename)
self.cb_file()
def cb_play(self, *args):
filename = self.in_file.get_input()
sts = os.system('Vplay -q ' + filename + ' &')
def cb_stop(self, *args):
if self.capturing:
raise StopCapture
gl.ringbell()
def cb_capture(self, *args):
if not self.video:
gl.ringbell()
@ -244,6 +239,18 @@ class VideoBagOfTricks:
else:
self.cont_capture()
def cb_stop(self, *args):
if self.capturing:
raise StopCapture
gl.ringbell()
def cb_play(self, *args):
filename = self.in_file.get_input()
sts = os.system('Vplay -q ' + filename + ' &')
def cb_quit(self, *args):
raise SystemExit, 0
def burst_capture(self):
self.setwatch()
gl.winset(self.window)
@ -264,7 +271,6 @@ class VideoBagOfTricks:
self.mono or self.grey, memsize)
print 'nframes =', nframes
rate = string.atoi(self.in_rate.get_input())
# XXX Should check ranges and not crash if non-integer
info = (vformat, x, y, nframes, rate)
try:
info2, data, bitvec = self.video.CaptureBurst(info)
@ -272,7 +278,7 @@ class VideoBagOfTricks:
fl.show_message('Capture error:', str(msg), '')
self.setarrow()
return
print info2
if info <> info2: print info, '<>', info2
self.save_burst(info2, data, bitvec)
self.setarrow()
@ -361,6 +367,34 @@ class VideoBagOfTricks:
self.g_main.show_object()
self.setarrow()
def get_format(self):
i = self.c_format.get_choice()
label = Labels[i-1]
format = Formats[i-1]
self.format = format
#
self.rgb = (format[:3] == 'rgb')
self.mono = (format == 'mono')
self.grey = (format[:4] == 'grey')
self.mono_use_thresh = (label == 'mono thresh')
s = format[4:]
if s:
self.greybits = string.atoi(s)
else:
self.greybits = 8
if label == 'grey2 dith':
self.greybits = -2
#
convertor = None
if self.grey:
if self.greybits == 2:
convertor = imageop.grey2grey2
elif self.greybits == 4:
convertor = imageop.grey2grey4
elif self.greybits == -2:
convertor = imageop.dither2grey2
self.convertor = convertor
def open_file(self):
gl.winset(self.window)
x, y = gl.getsize()
@ -374,15 +408,6 @@ class VideoBagOfTricks:
vout.writeheader()
self.vout = vout
def close_file(self):
try:
self.vout.close()
except IOError, msg:
if msg == (0, 'Error 0'):
msg = 'disk full??'
fl.show_message('IOError', str(msg), '')
del self.vout
def write_frame(self, t, data):
if self.convertor:
data = self.convertor(data, len(data), 1)
@ -403,8 +428,14 @@ class VideoBagOfTricks:
return 0
return 1
def cb_quit(self, *args):
raise SystemExit, 0
def close_file(self):
try:
self.vout.close()
except IOError, msg:
if msg == (0, 'Error 0'):
msg = 'disk full??'
fl.show_message('IOError', str(msg), '')
del self.vout
def setwatch(self):
gl.winset(self.form.window)

View File

@ -9,7 +9,7 @@ Number of forms: 1
Name: form
Width: 350.000000
Height: 240.000000
Number of Objects: 21
Number of Objects: 23
--------------------
class: 1
@ -31,61 +31,31 @@ class: 10000
type: 0
box: 0.000000 0.000000 0.000000 0.000000
boxtype: 0
colors: 0 0
colors: 5487 512
alignment: 4
style: 0
size: 11.000000
lcol: 0
label:
name: g_main
name: g_burst
callback:
argument:
--------------------
class: 1
type: 2
box: 140.000000 10.000000 120.000000 160.000000
boxtype: 2
type: 1
box: 140.000000 10.000000 120.000000 120.000000
boxtype: 1
colors: 47 47
alignment: 0
style: 0
size: 11.000000
lcol: 0
label: Burst mode:
label:
name:
callback:
argument:
--------------------
class: 1
type: 2
box: 10.000000 10.000000 120.000000 160.000000
boxtype: 2
colors: 47 47
alignment: 0
style: 0
size: 11.000000
lcol: 0
label: Options:
name:
callback:
argument:
--------------------
class: 31
type: 2
box: 60.000000 50.000000 40.000000 30.000000
boxtype: 2
colors: 13 5
alignment: 0
style: 0
size: 11.000000
lcol: 0
label: Capture rate:
name: in_rate
callback: cb_rate
argument: 0
--------------------
class: 31
type: 1
@ -116,10 +86,70 @@ name: in_nframes
callback: cb_nframes
argument: 0
--------------------
class: 20000
type: 0
box: 0.000000 0.000000 0.000000 0.000000
boxtype: 0
colors: -322390740 -895472437
alignment: 4
style: 0
size: 11.000000
lcol: 0
label:
name:
callback:
argument:
--------------------
class: 10000
type: 0
box: 0.000000 0.000000 0.000000 0.000000
boxtype: 0
colors: 1147496041 1852404841
alignment: 4
style: 0
size: 11.000000
lcol: 0
label:
name: g_main
callback:
argument:
--------------------
class: 1
type: 1
box: 10.000000 10.000000 120.000000 120.000000
boxtype: 1
colors: 47 47
alignment: 0
style: 0
size: 11.000000
lcol: 0
label:
name:
callback:
argument:
--------------------
class: 31
type: 2
box: 50.000000 70.000000 40.000000 30.000000
boxtype: 2
colors: 13 5
alignment: 0
style: 0
size: 11.000000
lcol: 0
label: Capture rate:
name: in_rate
callback: cb_rate
argument: 0
--------------------
class: 12
type: 1
box: 150.000000 130.000000 100.000000 30.000000
box: 140.000000 140.000000 120.000000 30.000000
boxtype: 1
colors: 39 3
alignment: 4
@ -164,7 +194,7 @@ argument: 0
--------------------
class: 11
type: 0
box: 270.000000 110.000000 70.000015 60.000004
box: 270.000000 140.000000 70.000015 30.000002
boxtype: 1
colors: 47 47
alignment: 4
@ -176,25 +206,10 @@ name: b_capture
callback: cb_capture
argument: 0
--------------------
class: 13
type: 1
box: 20.000000 20.000000 110.000000 30.000000
boxtype: 0
colors: 7 3
alignment: 4
style: 0
size: 11.000000
lcol: 0
label: "Fielddrop"
name: b_drop
callback: cb_drop
argument: 0
--------------------
class: 2
type: 0
box: 30.000000 50.000000 30.000000 30.000000
box: 20.000000 70.000000 30.000000 30.000000
boxtype: 0
colors: 47 47
alignment: 2
@ -209,7 +224,7 @@ argument:
--------------------
class: 2
type: 0
box: 100.000000 50.000000 30.000000 30.000000
box: 90.000000 70.000000 30.000000 30.000000
boxtype: 0
colors: 47 47
alignment: 2
@ -254,7 +269,7 @@ argument: 0
--------------------
class: 42
type: 0
box: 20.000000 110.000000 100.000000 30.000000
box: 10.000000 140.000000 120.000000 30.000000
boxtype: 5
colors: 7 0
alignment: 0
@ -266,12 +281,27 @@ name: c_format
callback: cb_format
argument: 0
--------------------
class: 12
type: 1
box: 20.000000 20.000000 100.000000 30.000000
boxtype: 1
colors: 39 3
alignment: 4
style: 0
size: 11.000000
lcol: 0
label: Fielddrop
name: b_drop
callback: cb_drop
argument: 0
--------------------
class: 20000
type: 0
box: 0.000000 0.000000 0.000000 0.000000
boxtype: 0
colors: 0 0
colors: 544171552 1331849829
alignment: 4
style: 0
size: 11.000000
@ -286,7 +316,7 @@ class: 10000
type: 0
box: 0.000000 0.000000 0.000000 0.000000
boxtype: 0
colors: 0 0
colors: 1147496041 1852404841
alignment: 4
style: 0
size: 11.000000
@ -299,14 +329,14 @@ argument:
--------------------
class: 11
type: 0
box: 10.000000 10.000000 330.000000 220.000000
box: 270.000000 140.000000 70.000000 30.000000
boxtype: 1
colors: 47 47
alignment: 4
style: 0
size: 11.000000
lcol: 0
label: Stop capture
label: Stop
name: b_stop
callback: cb_stop
argument: 0
@ -316,7 +346,7 @@ class: 20000
type: 0
box: 0.000000 0.000000 0.000000 0.000000
boxtype: 0
colors: 0 0
colors: 544171552 1331849829
alignment: 4
style: 0
size: 11.000000