blob: 77ae3a33166a0966aa869574c885e68ae64caace [file] [log] [blame]
Guido van Rossum82534fd1992-08-18 17:01:02 +00001#! /usr/local/python
2
3# Print some info about a CMIF movie file
4
5
6# Usage:
7#
Guido van Rossum4df20fa1992-09-29 17:07:10 +00008# Vinfo [-d] [-q] [-s] [-t] [file] ...
Guido van Rossum82534fd1992-08-18 17:01:02 +00009
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)
Guido van Rossum4df20fa1992-09-29 17:07:10 +000016# -t : terse (one line/file, implies -s)
Guido van Rossum82534fd1992-08-18 17:01:02 +000017# file ... : file(s) to inspect; default film.video
18
19
Guido van Rossum843d1531992-08-18 14:16:12 +000020import sys
Guido van Rossum82534fd1992-08-18 17:01:02 +000021sys.path.append('/ufs/guido/src/video')
Guido van Rossum843d1531992-08-18 14:16:12 +000022import VFile
Guido van Rossum82534fd1992-08-18 17:01:02 +000023import getopt
Guido van Rossum9e3f3351992-09-29 13:40:47 +000024import string
Guido van Rossum82534fd1992-08-18 17:01:02 +000025
26
27# Global options
28
29short = 0
30quick = 0
Guido van Rossum7268c931992-08-18 21:11:18 +000031delta = 0
Guido van Rossum9e3f3351992-09-29 13:40:47 +000032terse = 0
33maxwidth = 10
Guido van Rossum82534fd1992-08-18 17:01:02 +000034
35
36# Main program -- mostly command line parsing
Guido van Rossum843d1531992-08-18 14:16:12 +000037
38def main():
Guido van Rossum9e3f3351992-09-29 13:40:47 +000039 global short, quick, delta, terse, maxwidth
40 try:
41 opts, args = getopt.getopt(sys.argv[1:], 'dqst')
42 except getopt.error, msg:
43 sys.stdout = sys.stderr
44 print msg
45 print 'usage: Vinfo [-d] [-q] [-s] [-t] [file] ...'
46 sys.exit(2)
Guido van Rossum82534fd1992-08-18 17:01:02 +000047 for opt, arg in opts:
48 if opt == '-q':
49 quick = 1
Guido van Rossum9e3f3351992-09-29 13:40:47 +000050 if opt == '-d':
Guido van Rossum7268c931992-08-18 21:11:18 +000051 delta = 1
Guido van Rossum9e3f3351992-09-29 13:40:47 +000052 if opt == '-s':
Guido van Rossum82534fd1992-08-18 17:01:02 +000053 short = 1
Guido van Rossum9e3f3351992-09-29 13:40:47 +000054 if opt == '-t':
55 terse = short = 1
Guido van Rossum82534fd1992-08-18 17:01:02 +000056 if not args:
57 args = ['film.video']
Guido van Rossum9e3f3351992-09-29 13:40:47 +000058 for filename in args:
59 maxwidth = max(maxwidth, len(filename))
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000060 sts = 0
Guido van Rossum82534fd1992-08-18 17:01:02 +000061 for filename in args:
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000062 if process(filename):
63 sts = 1
64 sys.exit(sts)
Guido van Rossum82534fd1992-08-18 17:01:02 +000065
66
67# Process one file
Guido van Rossum843d1531992-08-18 14:16:12 +000068
69def process(filename):
Guido van Rossum7268c931992-08-18 21:11:18 +000070 try:
Guido van Rossum269b2a21992-09-08 15:04:01 +000071 vin = VFile.RandomVinFile().init(filename)
Guido van Rossum7268c931992-08-18 21:11:18 +000072 except IOError, msg:
73 sys.stderr.write(filename + ': I/O error: ' + `msg` + '\n')
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000074 return 1
Guido van Rossum7268c931992-08-18 21:11:18 +000075 except VFile.Error, msg:
76 sys.stderr.write(msg + '\n')
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000077 return 1
Guido van Rossum7268c931992-08-18 21:11:18 +000078 except EOFError:
79 sys.stderr.write(filename + ': EOF in video file\n')
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000080 return 1
81
Guido van Rossum9e3f3351992-09-29 13:40:47 +000082 if terse:
83 print string.ljust(filename, maxwidth),
84 kbytes = (VFile.getfilesize(filename) + 1023) / 1024
85 print string.rjust(`kbytes`, 5) + 'K',
86 print ' ', string.ljust(`vin.version`, 5),
87 print string.ljust(vin.format, 8),
88 print string.rjust(`vin.width`, 4),
89 print string.rjust(`vin.height`, 4),
Guido van Rossum4df20fa1992-09-29 17:07:10 +000090 s = string.rjust(`vin.packfactor`, 2)
91 if vin.packfactor and vin.format not in ('rgb', 'jpeg') and \
92 (vin.width/vin.packfactor) % 4 <> 0:
93 s = s + '!'
94 else:
95 s = s + ' '
96 print s,
Guido van Rossum9e3f3351992-09-29 13:40:47 +000097 sys.stdout.flush()
98 else:
99 vin.printinfo()
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000100
Guido van Rossum82534fd1992-08-18 17:01:02 +0000101 if quick:
Guido van Rossum9e3f3351992-09-29 13:40:47 +0000102 if terse:
103 print
Guido van Rossum82534fd1992-08-18 17:01:02 +0000104 vin.close()
Guido van Rossum9e3f3351992-09-29 13:40:47 +0000105 return 0
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000106
Guido van Rossum269b2a21992-09-08 15:04:01 +0000107 try:
108 vin.readcache()
Guido van Rossum9e3f3351992-09-29 13:40:47 +0000109 if not terse:
110 print '[Using cached index]'
Guido van Rossum269b2a21992-09-08 15:04:01 +0000111 except VFile.Error:
Guido van Rossum9e3f3351992-09-29 13:40:47 +0000112 if not terse:
113 print '[Constructing index on the fly]'
Guido van Rossum269b2a21992-09-08 15:04:01 +0000114
Guido van Rossum82534fd1992-08-18 17:01:02 +0000115 if not short:
Guido van Rossum7268c931992-08-18 21:11:18 +0000116 if delta:
117 print 'Frame time deltas:',
118 else:
119 print 'Frame times:',
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000120
Guido van Rossum843d1531992-08-18 14:16:12 +0000121 n = 0
122 t = 0
Guido van Rossum82534fd1992-08-18 17:01:02 +0000123 told = 0
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000124 datasize = 0
Guido van Rossum843d1531992-08-18 14:16:12 +0000125 while 1:
126 try:
Guido van Rossum269b2a21992-09-08 15:04:01 +0000127 t, ds, cs = vin.getnextframeheader()
128 vin.skipnextframedata(ds, cs)
Guido van Rossum843d1531992-08-18 14:16:12 +0000129 except EOFError:
Guido van Rossum843d1531992-08-18 14:16:12 +0000130 break
Guido van Rossum269b2a21992-09-08 15:04:01 +0000131 datasize = datasize + ds
132 if cs: datasize = datasize + cs
Guido van Rossum82534fd1992-08-18 17:01:02 +0000133 if not short:
134 if n%8 == 0:
135 sys.stdout.write('\n')
136 if delta:
137 sys.stdout.write('\t' + `t - told`)
138 told = t
139 else:
140 sys.stdout.write('\t' + `t`)
Guido van Rossum843d1531992-08-18 14:16:12 +0000141 n = n+1
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000142
143 if not short: print
144
Guido van Rossum9e3f3351992-09-29 13:40:47 +0000145 if terse:
146 print string.rjust(`n`, 6),
147 print string.rjust(`int(n*10000.0/t)*0.1`, 5)
148 else:
149 print 'Total', n, 'frames in', t*0.001, 'sec.',
150 if t: print '-- average', int(n*10000.0/t)*0.1, 'frames/sec',
151 print
152 print 'Total data', 0.1 * int(datasize / 102.4), 'Kbytes',
153 if t:
154 print '-- average',
155 print 0.1 * int(datasize / 0.1024 / t), 'Kbytes/sec',
156 print
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000157
Guido van Rossum82534fd1992-08-18 17:01:02 +0000158 vin.close()
Guido van Rossum9e3f3351992-09-29 13:40:47 +0000159 return 0
Guido van Rossum82534fd1992-08-18 17:01:02 +0000160
161
162# Don't forget to call the main program
Guido van Rossum843d1531992-08-18 14:16:12 +0000163
Guido van Rossume0be2b31992-09-01 14:45:57 +0000164try:
165 main()
166except KeyboardInterrupt:
167 print '[Interrupt]'