Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 1 | #! /usr/local/python |
| 2 | |
| 3 | # Print some info about a CMIF movie file |
| 4 | |
| 5 | |
| 6 | # Usage: |
| 7 | # |
| 8 | # Vinfo [-d] [-q] [-s] [file] ... |
| 9 | |
| 10 | |
| 11 | # Options: |
| 12 | # |
| 13 | # -d : print deltas between frames instead of frame times |
| 14 | # -q : quick: don't read the frames |
| 15 | # -s : don't print times (but do count frames and print the total) |
| 16 | # file ... : file(s) to inspect; default film.video |
| 17 | |
| 18 | |
Guido van Rossum | 843d153 | 1992-08-18 14:16:12 +0000 | [diff] [blame] | 19 | import sys |
Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 20 | sys.path.append('/ufs/guido/src/video') |
Guido van Rossum | 843d153 | 1992-08-18 14:16:12 +0000 | [diff] [blame] | 21 | import VFile |
Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 22 | import getopt |
| 23 | |
| 24 | |
| 25 | # Global options |
| 26 | |
| 27 | short = 0 |
| 28 | quick = 0 |
Guido van Rossum | 7268c93 | 1992-08-18 21:11:18 +0000 | [diff] [blame] | 29 | delta = 0 |
Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 30 | |
| 31 | |
| 32 | # Main program -- mostly command line parsing |
Guido van Rossum | 843d153 | 1992-08-18 14:16:12 +0000 | [diff] [blame] | 33 | |
| 34 | def main(): |
Guido van Rossum | 7268c93 | 1992-08-18 21:11:18 +0000 | [diff] [blame] | 35 | global short, quick, delta |
Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 36 | opts, args = getopt.getopt(sys.argv[1:], 'dqs') |
| 37 | for opt, arg in opts: |
| 38 | if opt == '-q': |
| 39 | quick = 1 |
| 40 | elif opt == '-d': |
Guido van Rossum | 7268c93 | 1992-08-18 21:11:18 +0000 | [diff] [blame] | 41 | delta = 1 |
Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 42 | elif opt == '-s': |
| 43 | short = 1 |
| 44 | if not args: |
| 45 | args = ['film.video'] |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 46 | sts = 0 |
Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 47 | for filename in args: |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 48 | if process(filename): |
| 49 | sts = 1 |
| 50 | sys.exit(sts) |
Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 51 | |
| 52 | |
| 53 | # Process one file |
Guido van Rossum | 843d153 | 1992-08-18 14:16:12 +0000 | [diff] [blame] | 54 | |
| 55 | def process(filename): |
Guido van Rossum | 7268c93 | 1992-08-18 21:11:18 +0000 | [diff] [blame] | 56 | try: |
| 57 | vin = VFile.VinFile().init(filename) |
| 58 | except IOError, msg: |
| 59 | sys.stderr.write(filename + ': I/O error: ' + `msg` + '\n') |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 60 | return 1 |
Guido van Rossum | 7268c93 | 1992-08-18 21:11:18 +0000 | [diff] [blame] | 61 | except VFile.Error, msg: |
| 62 | sys.stderr.write(msg + '\n') |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 63 | return 1 |
Guido van Rossum | 7268c93 | 1992-08-18 21:11:18 +0000 | [diff] [blame] | 64 | except EOFError: |
| 65 | sys.stderr.write(filename + ': EOF in video file\n') |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 66 | return 1 |
| 67 | |
Guido van Rossum | 843d153 | 1992-08-18 14:16:12 +0000 | [diff] [blame] | 68 | print 'File: ', filename |
| 69 | print 'Version: ', vin.version |
| 70 | print 'Size: ', vin.width, 'x', vin.height |
| 71 | print 'Pack: ', vin.packfactor, '; chrom:', vin.chrompack |
| 72 | print 'Bits: ', vin.c0bits, vin.c1bits, vin.c2bits |
| 73 | print 'Format: ', vin.format |
| 74 | print 'Offset: ', vin.offset |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 75 | |
Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 76 | if quick: |
| 77 | vin.close() |
| 78 | return |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 79 | |
Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 80 | if not short: |
Guido van Rossum | 7268c93 | 1992-08-18 21:11:18 +0000 | [diff] [blame] | 81 | if delta: |
| 82 | print 'Frame time deltas:', |
| 83 | else: |
| 84 | print 'Frame times:', |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 85 | |
Guido van Rossum | 843d153 | 1992-08-18 14:16:12 +0000 | [diff] [blame] | 86 | n = 0 |
| 87 | t = 0 |
Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 88 | told = 0 |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 89 | datasize = 0 |
Guido van Rossum | 843d153 | 1992-08-18 14:16:12 +0000 | [diff] [blame] | 90 | while 1: |
| 91 | try: |
| 92 | t, data, cdata = vin.getnextframe() |
| 93 | except EOFError: |
Guido van Rossum | 843d153 | 1992-08-18 14:16:12 +0000 | [diff] [blame] | 94 | break |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 95 | datasize = datasize + len(data) |
| 96 | if cdata: datasize = datasize + len(cdata) |
Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 97 | if not short: |
| 98 | if n%8 == 0: |
| 99 | sys.stdout.write('\n') |
| 100 | if delta: |
| 101 | sys.stdout.write('\t' + `t - told`) |
| 102 | told = t |
| 103 | else: |
| 104 | sys.stdout.write('\t' + `t`) |
Guido van Rossum | 843d153 | 1992-08-18 14:16:12 +0000 | [diff] [blame] | 105 | n = n+1 |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 106 | |
| 107 | if not short: print |
| 108 | |
Guido van Rossum | 843d153 | 1992-08-18 14:16:12 +0000 | [diff] [blame] | 109 | print 'Total', n, 'frames in', t*0.001, 'sec.', |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 110 | if t: print '-- average', int(n*10000.0/t)*0.1, 'frames/sec', |
Guido van Rossum | 843d153 | 1992-08-18 14:16:12 +0000 | [diff] [blame] | 111 | print |
Guido van Rossum | dfb61fa | 1992-08-20 11:49:58 +0000 | [diff] [blame] | 112 | print 'Total data', 0.1 * int(datasize / 102.4), 'Kbytes', |
| 113 | if t: |
| 114 | print '-- average', |
| 115 | print 0.1 * int(datasize / 0.1024 / t), 'Kbytes/sec', |
| 116 | print |
| 117 | |
Guido van Rossum | 82534fd | 1992-08-18 17:01:02 +0000 | [diff] [blame] | 118 | vin.close() |
| 119 | |
| 120 | |
| 121 | # Don't forget to call the main program |
Guido van Rossum | 843d153 | 1992-08-18 14:16:12 +0000 | [diff] [blame] | 122 | |
Guido van Rossum | e0be2b3 | 1992-09-01 14:45:57 +0000 | [diff] [blame^] | 123 | try: |
| 124 | main() |
| 125 | except KeyboardInterrupt: |
| 126 | print '[Interrupt]' |