From eeec33f820ce0903f45b64ea7512054ccde7f295 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Wed, 17 Feb 1993 15:52:56 +0000 Subject: [PATCH] Companion to rgb2video: convert cmif film file to rgb files --- Demo/sgi/video/video2rgb.py | 165 ++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100755 Demo/sgi/video/video2rgb.py diff --git a/Demo/sgi/video/video2rgb.py b/Demo/sgi/video/video2rgb.py new file mode 100755 index 00000000000..ab904846806 --- /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]'