summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xDemo/sgi/video/Vrec.py188
1 files changed, 110 insertions, 78 deletions
diff --git a/Demo/sgi/video/Vrec.py b/Demo/sgi/video/Vrec.py
index 689e8cf..d952566 100755
--- a/Demo/sgi/video/Vrec.py
+++ b/Demo/sgi/video/Vrec.py
@@ -1,49 +1,50 @@
-#! /ufs/guido/bin/sgi/python-405
#! /ufs/guido/bin/sgi/python
+#! /ufs/guido/bin/sgi/python-405
# Capture a CMIF movie using the Indigo video library and board
+# The CMIF video file format is documented in cmif-film.ms.
+# Audio data is recorded in AIFF format, using the input sampling
+# rate, source and volume set by the audio panel, in mono, 8
+# bits/sample.
+
+
+# Usage and help functions (keep this up-to-date if you change the program!)
+
+def usage():
+ print 'Usage: Vrec [options] [moviefile [audiofile]]'
+ print
+ print 'Options:'
+ print '-a : record audio as well'
+ print '-q queuesize : set the capture queue size (default 2)'
+ print '-r rate : capture 1 out of every "rate" frames', \
+ '(default and min 2)'
+ print '-w width : initial window width', \
+ '(default interactive placement)'
+ print '-n : Don\'t write to file, only timing info'
+ print '-d : drop fields if needed'
+ print '-g bits : greyscale (2, 4 or 8 bits)'
+ print '-G : 2-bit greyscale dithered'
+ print '-m : monochrome dithered'
+ print '-M value : monochrome tresholded with value'
+ print '-f : Capture fields (in stead of frames)'
+ print '-P frames : preallocate space for "frames" frames'
+ print 'moviefile : here goes the movie data (default film.video)'
+ print 'audiofile : with -a, here goes the audio data', \
+ '(default film.aiff)'
+
+def help():
+ print 'Press the left mouse button to start recording, release it to'
+ print 'end recording. You can record as many times as you wish, but'
+ print 'each recording overwrites the output file(s) -- only the last'
+ print 'recording is kept.'
+ print
+ print 'Press ESC or use the window manager Quit or Close window option'
+ print 'to quit. If you quit before recording anything, the output'
+ print 'file(s) are not touched.'
-# Usage:
-#
-# makemovie [-a] [-q queuesize] [-r rate] [-w width] [moviefile [audiofile]]
-
-
-# Options:
-#
-# -a : record audio as well
-# -q queuesize : set the capture queue size (default 2)
-# -r rate : capture 1 out of every 'rate' frames (default and min 2)
-# -w width : initial window width (default interactive placement)
-# -n : Don't write to file, only timing info
-# -d : drop fields if needed
-# -g bits : greyscale (2, 4 or 8 bits)
-# -G : 2-bit greyscale dithered
-# -m : monochrome dithered
-# -M value : monochrome tresholded with value
-# -f : Capture fields (in stead of frames)
-# -P frames : preallocate space for 'frames' frames
-#
-# moviefile : here goes the movie data (default film.video);
-# the format is documented in cmif-film.ms
-# audiofile : with -a, here goes the audio data (default film.aiff);
-# audio data is recorded in AIFF format, using the
-# input sampling rate, source and volume set by the
-# audio panel, in mono, 8 bits/sample
-
-
-# User interface:
-#
-# Start the application. Resize the window to the desired movie size.
-# Press the left mouse button to start recording, release it to end
-# recording. You can record as many times as you wish, but each time
-# you overwrite the output file(s), so only the last recording is
-# kept.
-#
-# Press ESC or select the window manager Quit or Close window option
-# to quit. If you quit before recording anything, the output file(s)
-# are not touched.
+# Imported modules
import sys
sys.path.append('/ufs/guido/src/video')
@@ -58,6 +59,7 @@ import string
import imageop
import sgi
+
# Main program
def main():
@@ -75,45 +77,73 @@ def main():
fields = 0
preallocspace = 0
- opts, args = getopt.getopt(sys.argv[1:], 'aq:r:w:ndg:mM:GfP:')
- for opt, arg in opts:
- if opt == '-a':
- audio = 1
- elif opt == '-q':
- qsize = string.atoi(arg)
- elif opt == '-r':
- rate = string.atoi(arg)
- if rate < 2:
- sys.stderr.write('-r rate must be >= 2\n')
- sys.exit(2)
- elif opt == '-w':
- width = string.atoi(arg)
- elif opt == '-n':
- norecord = 1
- elif opt == '-d':
- drop = 1
- elif opt == '-g':
- grey = 1
- greybits = string.atoi(arg)
- if not greybits in (2,4,8):
- print 'Only 2, 4 or 8 bit greyscale supported'
- elif opt == '-G':
- grey = 1
- greybits = -2
- elif opt == '-m':
- mono = 1
- elif opt == '-M':
- mono = 1
- monotreshold = string.atoi(arg)
- elif opt == '-f':
- fields = 1
- elif opt == '-P':
- preallocspace = string.atoi(arg)
-
- if args[2:]:
- sys.stderr.write('usage: Vrec [options] [file [audiofile]]\n')
+ # Parse command line
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], 'aq:r:w:ndg:mM:GfP:')
+ except getopt.error, msg:
+ sys.stdout = sys.stderr
+ print 'Error:', msg, '\n'
+ usage()
+ sys.exit(2)
+
+ # Interpret options
+ try:
+ for opt, arg in opts:
+ if opt == '-a':
+ audio = 1
+ elif opt == '-q':
+ qsize = string.atoi(arg)
+ elif opt == '-r':
+ rate = string.atoi(arg)
+ if rate < 2:
+ sys.stderr.write( \
+ '-r rate must be >= 2\n')
+ sys.exit(2)
+ elif opt == '-w':
+ width = string.atoi(arg)
+ elif opt == '-n':
+ norecord = 1
+ elif opt == '-d':
+ drop = 1
+ elif opt == '-g':
+ grey = 1
+ greybits = string.atoi(arg)
+ if not greybits in (2, 4, 8):
+ sys.stderr.write( \
+ 'Only 2, 4 or 8 bit greyscale supported\n')
+ sys.exit(2)
+ elif opt == '-G':
+ grey = 1
+ greybits = -2
+ elif opt == '-m':
+ mono = 1
+ elif opt == '-M':
+ mono = 1
+ monotreshold = string.atoi(arg)
+ elif opt == '-f':
+ fields = 1
+ elif opt == '-P':
+ preallocspace = string.atoi(arg)
+ except string.atoi_error:
+ sys.stdout = sys.stderr
+ print 'Option', opt, 'requires integer argument'
sys.exit(2)
+ # Check excess arguments
+ # If norecord is on, refuse filename arguments
+ if norecord:
+ if args:
+ sys.stdout = sys.stderr
+ print 'With -n, no filename arguments are used\n'
+ usage()
+ sys.exit(2)
+ elif args[2:]:
+ sys.stdout = sys.stderr
+ print 'Too many filename arguments\n'
+ usage()
+ sys.exit(2)
+
+ # Process file arguments
if args:
filename = args[0]
else:
@@ -133,6 +163,8 @@ def main():
if norecord:
filename = audiofilename = ''
+
+ # Open video
v = sv.OpenVideo()
# Determine maximum window size based on signal standard
param = [SV.BROADCAST, 0]
@@ -181,7 +213,7 @@ def main():
gl.qdevice(DEVICE.WINSHUT)
gl.qdevice(DEVICE.ESCKEY)
- print 'Press left mouse to start recording, release it to stop'
+ help()
while 1:
dev, val = gl.qread()