blob: cf89a8d397dd62e67945acda60f3b9733bd1630e [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:
Guido van Rossum269b2a21992-09-08 15:04:01 +000057 vin = VFile.RandomVinFile().init(filename)
Guido van Rossum7268c931992-08-18 21:11:18 +000058 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 Rossum269b2a21992-09-08 15:04:01 +000074 try:
75 vin.readcache()
76 print '[Using cached index]'
77 except VFile.Error:
78 print '[Constructing index on the fly]'
79
Guido van Rossum82534fd1992-08-18 17:01:02 +000080 if not short:
Guido van Rossum7268c931992-08-18 21:11:18 +000081 if delta:
82 print 'Frame time deltas:',
83 else:
84 print 'Frame times:',
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000085
Guido van Rossum843d1531992-08-18 14:16:12 +000086 n = 0
87 t = 0
Guido van Rossum82534fd1992-08-18 17:01:02 +000088 told = 0
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000089 datasize = 0
Guido van Rossum843d1531992-08-18 14:16:12 +000090 while 1:
91 try:
Guido van Rossum269b2a21992-09-08 15:04:01 +000092 t, ds, cs = vin.getnextframeheader()
93 vin.skipnextframedata(ds, cs)
Guido van Rossum843d1531992-08-18 14:16:12 +000094 except EOFError:
Guido van Rossum843d1531992-08-18 14:16:12 +000095 break
Guido van Rossum269b2a21992-09-08 15:04:01 +000096 datasize = datasize + ds
97 if cs: datasize = datasize + cs
Guido van Rossum82534fd1992-08-18 17:01:02 +000098 if not short:
99 if n%8 == 0:
100 sys.stdout.write('\n')
101 if delta:
102 sys.stdout.write('\t' + `t - told`)
103 told = t
104 else:
105 sys.stdout.write('\t' + `t`)
Guido van Rossum843d1531992-08-18 14:16:12 +0000106 n = n+1
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000107
108 if not short: print
109
Guido van Rossum843d1531992-08-18 14:16:12 +0000110 print 'Total', n, 'frames in', t*0.001, 'sec.',
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000111 if t: print '-- average', int(n*10000.0/t)*0.1, 'frames/sec',
Guido van Rossum843d1531992-08-18 14:16:12 +0000112 print
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000113 print 'Total data', 0.1 * int(datasize / 102.4), 'Kbytes',
114 if t:
115 print '-- average',
116 print 0.1 * int(datasize / 0.1024 / t), 'Kbytes/sec',
117 print
118
Guido van Rossum82534fd1992-08-18 17:01:02 +0000119 vin.close()
120
121
122# Don't forget to call the main program
Guido van Rossum843d1531992-08-18 14:16:12 +0000123
Guido van Rossume0be2b31992-09-01 14:45:57 +0000124try:
125 main()
126except KeyboardInterrupt:
127 print '[Interrupt]'