blob: 22eab2325ca741a747b377cd28f059b11bd0dbb1 [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#
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 Rossum843d1531992-08-18 14:16:12 +000019import sys
Guido van Rossum82534fd1992-08-18 17:01:02 +000020sys.path.append('/ufs/guido/src/video')
Guido van Rossum843d1531992-08-18 14:16:12 +000021import VFile
Guido van Rossum82534fd1992-08-18 17:01:02 +000022import getopt
Guido van Rossum9e3f3351992-09-29 13:40:47 +000023import string
Guido van Rossum82534fd1992-08-18 17:01:02 +000024
25
26# Global options
27
28short = 0
29quick = 0
Guido van Rossum7268c931992-08-18 21:11:18 +000030delta = 0
Guido van Rossum9e3f3351992-09-29 13:40:47 +000031terse = 0
32maxwidth = 10
Guido van Rossum82534fd1992-08-18 17:01:02 +000033
34
35# Main program -- mostly command line parsing
Guido van Rossum843d1531992-08-18 14:16:12 +000036
37def main():
Guido van Rossum9e3f3351992-09-29 13:40:47 +000038 global short, quick, delta, terse, maxwidth
39 try:
40 opts, args = getopt.getopt(sys.argv[1:], 'dqst')
41 except getopt.error, msg:
42 sys.stdout = sys.stderr
43 print msg
44 print 'usage: Vinfo [-d] [-q] [-s] [-t] [file] ...'
45 sys.exit(2)
Guido van Rossum82534fd1992-08-18 17:01:02 +000046 for opt, arg in opts:
47 if opt == '-q':
48 quick = 1
Guido van Rossum9e3f3351992-09-29 13:40:47 +000049 if opt == '-d':
Guido van Rossum7268c931992-08-18 21:11:18 +000050 delta = 1
Guido van Rossum9e3f3351992-09-29 13:40:47 +000051 if opt == '-s':
Guido van Rossum82534fd1992-08-18 17:01:02 +000052 short = 1
Guido van Rossum9e3f3351992-09-29 13:40:47 +000053 if opt == '-t':
54 terse = short = 1
Guido van Rossum82534fd1992-08-18 17:01:02 +000055 if not args:
56 args = ['film.video']
Guido van Rossum9e3f3351992-09-29 13:40:47 +000057 for filename in args:
58 maxwidth = max(maxwidth, len(filename))
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000059 sts = 0
Guido van Rossum82534fd1992-08-18 17:01:02 +000060 for filename in args:
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000061 if process(filename):
62 sts = 1
63 sys.exit(sts)
Guido van Rossum82534fd1992-08-18 17:01:02 +000064
65
66# Process one file
Guido van Rossum843d1531992-08-18 14:16:12 +000067
68def process(filename):
Guido van Rossum7268c931992-08-18 21:11:18 +000069 try:
Guido van Rossum269b2a21992-09-08 15:04:01 +000070 vin = VFile.RandomVinFile().init(filename)
Guido van Rossum7268c931992-08-18 21:11:18 +000071 except IOError, msg:
72 sys.stderr.write(filename + ': I/O error: ' + `msg` + '\n')
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000073 return 1
Guido van Rossum7268c931992-08-18 21:11:18 +000074 except VFile.Error, msg:
75 sys.stderr.write(msg + '\n')
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000076 return 1
Guido van Rossum7268c931992-08-18 21:11:18 +000077 except EOFError:
78 sys.stderr.write(filename + ': EOF in video file\n')
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000079 return 1
80
Guido van Rossum9e3f3351992-09-29 13:40:47 +000081 if terse:
82 print string.ljust(filename, maxwidth),
83 kbytes = (VFile.getfilesize(filename) + 1023) / 1024
84 print string.rjust(`kbytes`, 5) + 'K',
85 print ' ', string.ljust(`vin.version`, 5),
86 print string.ljust(vin.format, 8),
87 print string.rjust(`vin.width`, 4),
88 print string.rjust(`vin.height`, 4),
89 sys.stdout.flush()
90 else:
91 vin.printinfo()
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000092
Guido van Rossum82534fd1992-08-18 17:01:02 +000093 if quick:
Guido van Rossum9e3f3351992-09-29 13:40:47 +000094 if terse:
95 print
Guido van Rossum82534fd1992-08-18 17:01:02 +000096 vin.close()
Guido van Rossum9e3f3351992-09-29 13:40:47 +000097 return 0
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000098
Guido van Rossum269b2a21992-09-08 15:04:01 +000099 try:
100 vin.readcache()
Guido van Rossum9e3f3351992-09-29 13:40:47 +0000101 if not terse:
102 print '[Using cached index]'
Guido van Rossum269b2a21992-09-08 15:04:01 +0000103 except VFile.Error:
Guido van Rossum9e3f3351992-09-29 13:40:47 +0000104 if not terse:
105 print '[Constructing index on the fly]'
Guido van Rossum269b2a21992-09-08 15:04:01 +0000106
Guido van Rossum82534fd1992-08-18 17:01:02 +0000107 if not short:
Guido van Rossum7268c931992-08-18 21:11:18 +0000108 if delta:
109 print 'Frame time deltas:',
110 else:
111 print 'Frame times:',
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000112
Guido van Rossum843d1531992-08-18 14:16:12 +0000113 n = 0
114 t = 0
Guido van Rossum82534fd1992-08-18 17:01:02 +0000115 told = 0
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000116 datasize = 0
Guido van Rossum843d1531992-08-18 14:16:12 +0000117 while 1:
118 try:
Guido van Rossum269b2a21992-09-08 15:04:01 +0000119 t, ds, cs = vin.getnextframeheader()
120 vin.skipnextframedata(ds, cs)
Guido van Rossum843d1531992-08-18 14:16:12 +0000121 except EOFError:
Guido van Rossum843d1531992-08-18 14:16:12 +0000122 break
Guido van Rossum269b2a21992-09-08 15:04:01 +0000123 datasize = datasize + ds
124 if cs: datasize = datasize + cs
Guido van Rossum82534fd1992-08-18 17:01:02 +0000125 if not short:
126 if n%8 == 0:
127 sys.stdout.write('\n')
128 if delta:
129 sys.stdout.write('\t' + `t - told`)
130 told = t
131 else:
132 sys.stdout.write('\t' + `t`)
Guido van Rossum843d1531992-08-18 14:16:12 +0000133 n = n+1
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000134
135 if not short: print
136
Guido van Rossum9e3f3351992-09-29 13:40:47 +0000137 if terse:
138 print string.rjust(`n`, 6),
139 print string.rjust(`int(n*10000.0/t)*0.1`, 5)
140 else:
141 print 'Total', n, 'frames in', t*0.001, 'sec.',
142 if t: print '-- average', int(n*10000.0/t)*0.1, 'frames/sec',
143 print
144 print 'Total data', 0.1 * int(datasize / 102.4), 'Kbytes',
145 if t:
146 print '-- average',
147 print 0.1 * int(datasize / 0.1024 / t), 'Kbytes/sec',
148 print
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000149
Guido van Rossum82534fd1992-08-18 17:01:02 +0000150 vin.close()
Guido van Rossum9e3f3351992-09-29 13:40:47 +0000151 return 0
Guido van Rossum82534fd1992-08-18 17:01:02 +0000152
153
154# Don't forget to call the main program
Guido van Rossum843d1531992-08-18 14:16:12 +0000155
Guido van Rossume0be2b31992-09-01 14:45:57 +0000156try:
157 main()
158except KeyboardInterrupt:
159 print '[Interrupt]'