blob: cfda32a76ff1d9f888f72e6496cf9685a4cf11e6 [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
23
24
25# Global options
26
27short = 0
28quick = 0
Guido van Rossum7268c931992-08-18 21:11:18 +000029delta = 0
Guido van Rossum82534fd1992-08-18 17:01:02 +000030
31
32# Main program -- mostly command line parsing
Guido van Rossum843d1531992-08-18 14:16:12 +000033
34def main():
Guido van Rossum7268c931992-08-18 21:11:18 +000035 global short, quick, delta
Guido van Rossum82534fd1992-08-18 17:01:02 +000036 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 Rossum7268c931992-08-18 21:11:18 +000041 delta = 1
Guido van Rossum82534fd1992-08-18 17:01:02 +000042 elif opt == '-s':
43 short = 1
44 if not args:
45 args = ['film.video']
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000046 sts = 0
Guido van Rossum82534fd1992-08-18 17:01:02 +000047 for filename in args:
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000048 if process(filename):
49 sts = 1
50 sys.exit(sts)
Guido van Rossum82534fd1992-08-18 17:01:02 +000051
52
53# Process one file
Guido van Rossum843d1531992-08-18 14:16:12 +000054
55def process(filename):
Guido van Rossum7268c931992-08-18 21:11:18 +000056 try:
57 vin = VFile.VinFile().init(filename)
58 except IOError, msg:
59 sys.stderr.write(filename + ': I/O error: ' + `msg` + '\n')
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000060 return 1
Guido van Rossum7268c931992-08-18 21:11:18 +000061 except VFile.Error, msg:
62 sys.stderr.write(msg + '\n')
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000063 return 1
Guido van Rossum7268c931992-08-18 21:11:18 +000064 except EOFError:
65 sys.stderr.write(filename + ': EOF in video file\n')
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000066 return 1
67
Guido van Rossume1783321992-09-07 09:35:23 +000068 vin.printinfo()
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000069
Guido van Rossum82534fd1992-08-18 17:01:02 +000070 if quick:
71 vin.close()
72 return
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000073
Guido van Rossum82534fd1992-08-18 17:01:02 +000074 if not short:
Guido van Rossum7268c931992-08-18 21:11:18 +000075 if delta:
76 print 'Frame time deltas:',
77 else:
78 print 'Frame times:',
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000079
Guido van Rossum843d1531992-08-18 14:16:12 +000080 n = 0
81 t = 0
Guido van Rossum82534fd1992-08-18 17:01:02 +000082 told = 0
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000083 datasize = 0
Guido van Rossum843d1531992-08-18 14:16:12 +000084 while 1:
85 try:
86 t, data, cdata = vin.getnextframe()
87 except EOFError:
Guido van Rossum843d1531992-08-18 14:16:12 +000088 break
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000089 datasize = datasize + len(data)
90 if cdata: datasize = datasize + len(cdata)
Guido van Rossum82534fd1992-08-18 17:01:02 +000091 if not short:
92 if n%8 == 0:
93 sys.stdout.write('\n')
94 if delta:
95 sys.stdout.write('\t' + `t - told`)
96 told = t
97 else:
98 sys.stdout.write('\t' + `t`)
Guido van Rossum843d1531992-08-18 14:16:12 +000099 n = n+1
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000100
101 if not short: print
102
Guido van Rossum843d1531992-08-18 14:16:12 +0000103 print 'Total', n, 'frames in', t*0.001, 'sec.',
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000104 if t: print '-- average', int(n*10000.0/t)*0.1, 'frames/sec',
Guido van Rossum843d1531992-08-18 14:16:12 +0000105 print
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000106 print 'Total data', 0.1 * int(datasize / 102.4), 'Kbytes',
107 if t:
108 print '-- average',
109 print 0.1 * int(datasize / 0.1024 / t), 'Kbytes/sec',
110 print
111
Guido van Rossum82534fd1992-08-18 17:01:02 +0000112 vin.close()
113
114
115# Don't forget to call the main program
Guido van Rossum843d1531992-08-18 14:16:12 +0000116
Guido van Rossume0be2b31992-09-01 14:45:57 +0000117try:
118 main()
119except KeyboardInterrupt:
120 print '[Interrupt]'