blob: 341ddbf1c16160b96d263c227fe1110431be2fbd [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 Rossum843d1531992-08-18 14:16:12 +000068 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 Rossumdfb61fa1992-08-20 11:49:58 +000075
Guido van Rossum82534fd1992-08-18 17:01:02 +000076 if quick:
77 vin.close()
78 return
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000079
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:
92 t, data, cdata = vin.getnextframe()
93 except EOFError:
Guido van Rossum843d1531992-08-18 14:16:12 +000094 break
Guido van Rossumdfb61fa1992-08-20 11:49:58 +000095 datasize = datasize + len(data)
96 if cdata: datasize = datasize + len(cdata)
Guido van Rossum82534fd1992-08-18 17:01:02 +000097 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 Rossum843d1531992-08-18 14:16:12 +0000105 n = n+1
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000106
107 if not short: print
108
Guido van Rossum843d1531992-08-18 14:16:12 +0000109 print 'Total', n, 'frames in', t*0.001, 'sec.',
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000110 if t: print '-- average', int(n*10000.0/t)*0.1, 'frames/sec',
Guido van Rossum843d1531992-08-18 14:16:12 +0000111 print
Guido van Rossumdfb61fa1992-08-20 11:49:58 +0000112 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 Rossum82534fd1992-08-18 17:01:02 +0000118 vin.close()
119
120
121# Don't forget to call the main program
Guido van Rossum843d1531992-08-18 14:16:12 +0000122
Guido van Rossume0be2b31992-09-01 14:45:57 +0000123try:
124 main()
125except KeyboardInterrupt:
126 print '[Interrupt]'