summaryrefslogtreecommitdiffstats
path: root/Demo
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>1993-02-17 15:52:56 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>1993-02-17 15:52:56 (GMT)
commiteeec33f820ce0903f45b64ea7512054ccde7f295 (patch)
tree270188386d32f76271e14a28ffeadfcabcb4fb16 /Demo
parenta90805f1c07e2f219175036acfa098290e1ae2f4 (diff)
downloadcpython-eeec33f820ce0903f45b64ea7512054ccde7f295.zip
cpython-eeec33f820ce0903f45b64ea7512054ccde7f295.tar.gz
cpython-eeec33f820ce0903f45b64ea7512054ccde7f295.tar.bz2
Companion to rgb2video: convert cmif film file to rgb files
Diffstat (limited to 'Demo')
-rwxr-xr-xDemo/sgi/video/video2rgb.py165
1 files changed, 165 insertions, 0 deletions
diff --git a/Demo/sgi/video/video2rgb.py b/Demo/sgi/video/video2rgb.py
new file mode 100755
index 0000000..ab90484
--- /dev/null
+++ b/Demo/sgi/video/video2rgb.py
@@ -0,0 +1,165 @@
+#! /ufs/guido/bin/sgi/python
+
+# Play CMIF movie files
+
+
+# Help function
+
+def help():
+ print 'Usage: Vplay [options] [file] ...'
+ print
+ print 'Options:'
+ print '-q : quiet, no informative messages'
+ print '-m : create monochrome (greyscale) image files'
+ print '-f prefix : create image files with names "prefix000.rgb"'
+ print 'file ... : file(s) to play; default film.video'
+
+
+# Imported modules
+
+import sys
+sys.path.append('/ufs/guido/src/video') # Increase chance of finding VFile
+import VFile
+import time
+import getopt
+import string
+import imgfile
+import imgconv
+
+
+# Global options
+
+quiet = 0
+prefix = 'film'
+seqno = 0
+mono = 0
+
+
+# Main program -- mostly command line parsing
+
+def main():
+ global quiet, prefix, mono
+
+ # Parse command line
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], 'qmf:')
+ except getopt.error, msg:
+ sys.stdout = sys.stderr
+ print 'Error:', msg, '\n'
+ help()
+ sys.exit(2)
+
+ # Interpret options
+ try:
+ for opt, arg in opts:
+ if opt == '-q': quiet = 1
+ if opt == '-f': prefix = arg
+ if opt == '-m': mono = 1
+ except string.atoi_error:
+ sys.stdout = sys.stderr
+ print 'Option', opt, 'requires integer argument'
+ sys.exit(2)
+
+ # Process all files
+ if not args: args = ['film.video']
+ sts = 0
+ for filename in args:
+ sts = (process(filename) or sts)
+
+ # Exit with proper exit status
+ sys.exit(sts)
+
+
+# Process one movie file
+
+def process(filename):
+ try:
+ vin = VFile.VinFile().init(filename)
+ except IOError, msg:
+ sys.stderr.write(filename + ': I/O error: ' + `msg` + '\n')
+ return 1
+ except VFile.Error, msg:
+ sys.stderr.write(msg + '\n')
+ return 1
+ except EOFError:
+ sys.stderr.write(filename + ': EOF in video header\n')
+ return 1
+
+ if not quiet:
+ vin.printinfo()
+
+ width, height = int(vin.width), int(vin.height)
+
+ try:
+ if mono:
+ cf = imgconv.getconverter(vin.format, 'grey')
+ else:
+ cf = imgconv.getconverter(vin.format, 'rgb')
+ except imgconv.error:
+ print 'Sorry, no converter available for type',vin.format
+ return
+
+ if mono:
+ depth = 1
+ else:
+ depth = 3
+
+ pf = testpackfactor(vin.packfactor)
+ if pf == None:
+ print 'Sorry, packfactor not supported:', vin.packfactor
+ convert(vin, cf, width, height, depth, pf)
+
+def convert(vin, cf, width, height, depth, pf):
+ global seqno
+
+ while 1:
+ try:
+ time, data, cdata = vin.getnextframe()
+ except EOFError:
+ return
+ if cdata:
+ print 'Film contains chromdata!'
+ return
+ if pf:
+ data = applypackfactor(data, width, height, pf)
+ s = `seqno`
+ s = '0'*(4-len(s)) + s
+ fname = prefix + s + '.rgb'
+ seqno = seqno + 1
+ if not quiet:
+ print 'Writing',fname,'...'
+ imgfile.write(fname, data, width, height, depth)
+
+def testpackfactor(pf):
+ if type(pf) == type(()):
+ xpf, ypf = pf
+ else:
+ if pf in (0, 1):
+ return 0
+ return None
+ if xpf <> 1:
+ return None
+ return pf
+
+def applypackfactor(image, w, h, pf):
+ if type(pf) == type(()):
+ xpf, ypf = pf
+ else:
+ xpf = ypf = 1
+ rows = []
+ for i in range(0, (w*h+ypf-1)/abs(ypf), w):
+ rows.append(image[i:i+w])
+ if ypf < 0:
+ rows.reverse()
+ ypf = -ypf
+ image = ''
+ for i in range(0, h):
+ image = image + rows[i/ypf]
+ return image
+
+# Don't forget to call the main program
+
+try:
+ main()
+except KeyboardInterrupt:
+ print '[Interrupt]'