summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xDemo/sgi/video/Vb.py141
-rw-r--r--Demo/sgi/video/VbForm.fd142
2 files changed, 172 insertions, 111 deletions
diff --git a/Demo/sgi/video/Vb.py b/Demo/sgi/video/Vb.py
index 2a46571..92b3e061 100755
--- a/Demo/sgi/video/Vb.py
+++ b/Demo/sgi/video/Vb.py
@@ -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)
diff --git a/Demo/sgi/video/VbForm.fd b/Demo/sgi/video/VbForm.fd
index 8c53257..e305612 100644
--- a/Demo/sgi/video/VbForm.fd
+++ b/Demo/sgi/video/VbForm.fd
@@ -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,95 +31,125 @@ 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
+class: 31
+type: 1
+box: 150.000000 70.000000 100.000000 30.000000
boxtype: 2
-colors: 47 47
+colors: 13 5
alignment: 0
style: 0
size: 11.000000
lcol: 0
-label: Options:
-name:
-callback:
-argument:
+label: Max Mbytes:
+name: in_maxmem
+callback: cb_maxmem
+argument: 0
--------------------
class: 31
type: 2
-box: 60.000000 50.000000 40.000000 30.000000
+box: 150.000000 20.000000 100.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
+label: Nr. of fields:
+name: in_nframes
+callback: cb_nframes
argument: 0
--------------------
-class: 31
+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: 150.000000 70.000000 100.000000 30.000000
-boxtype: 2
-colors: 13 5
+box: 10.000000 10.000000 120.000000 120.000000
+boxtype: 1
+colors: 47 47
alignment: 0
style: 0
size: 11.000000
lcol: 0
-label: Max Mbytes:
-name: in_maxmem
-callback: cb_maxmem
-argument: 0
+label:
+name:
+callback:
+argument:
--------------------
class: 31
type: 2
-box: 150.000000 20.000000 100.000000 30.000000
+box: 50.000000 70.000000 40.000000 30.000000
boxtype: 2
colors: 13 5
alignment: 0
style: 0
size: 11.000000
lcol: 0
-label: Nr. of fields:
-name: in_nframes
-callback: cb_nframes
+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
@@ -177,24 +207,9 @@ 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
@@ -267,11 +282,26 @@ 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