mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			174 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#! /usr/bin/env python
 | 
						|
 | 
						|
# Print some info about a CMIF movie file
 | 
						|
 | 
						|
 | 
						|
# Usage:
 | 
						|
#
 | 
						|
# Vinfo [-d] [-q] [-s] [-t] [file] ...
 | 
						|
 | 
						|
 | 
						|
# Options:
 | 
						|
#
 | 
						|
# -d       : print deltas between frames instead of frame times
 | 
						|
# -q       : quick: don't read the frames
 | 
						|
# -s       : don't print times (but do count frames and print the total)
 | 
						|
# -t       : terse (one line/file, implies -s)
 | 
						|
# file ... : file(s) to inspect; default film.video
 | 
						|
 | 
						|
 | 
						|
import sys
 | 
						|
sys.path.append('/ufs/guido/src/video')
 | 
						|
import VFile
 | 
						|
import getopt
 | 
						|
import string
 | 
						|
 | 
						|
 | 
						|
# Global options
 | 
						|
 | 
						|
short = 0
 | 
						|
quick = 0
 | 
						|
delta = 0
 | 
						|
terse = 0
 | 
						|
maxwidth = 10
 | 
						|
 | 
						|
 | 
						|
# Main program -- mostly command line parsing
 | 
						|
 | 
						|
def main():
 | 
						|
	global short, quick, delta, terse, maxwidth
 | 
						|
	try:
 | 
						|
		opts, args = getopt.getopt(sys.argv[1:], 'dqst')
 | 
						|
	except getopt.error, msg:
 | 
						|
		sys.stdout = sys.stderr
 | 
						|
		print msg
 | 
						|
		print 'usage: Vinfo [-d] [-q] [-s] [-t] [file] ...'
 | 
						|
		sys.exit(2)
 | 
						|
	for opt, arg in opts:
 | 
						|
		if opt == '-q':
 | 
						|
			quick = 1
 | 
						|
		if opt == '-d':
 | 
						|
			delta = 1
 | 
						|
		if opt == '-s':
 | 
						|
			short = 1
 | 
						|
		if opt == '-t':
 | 
						|
			terse = short = 1
 | 
						|
	if not args:
 | 
						|
		args = ['film.video']
 | 
						|
	for filename in args:
 | 
						|
		maxwidth = max(maxwidth, len(filename))
 | 
						|
	sts = 0
 | 
						|
	for filename in args:
 | 
						|
		if process(filename):
 | 
						|
			sts = 1
 | 
						|
	sys.exit(sts)
 | 
						|
 | 
						|
 | 
						|
# Process one file
 | 
						|
 | 
						|
def process(filename):
 | 
						|
	try:
 | 
						|
		vin = VFile.RandomVinFile(filename)
 | 
						|
	except IOError, msg:
 | 
						|
		sys.stderr.write(filename + ': I/O error: ' + `msg` + '\n')
 | 
						|
		return 1
 | 
						|
	except VFile.Error, msg:
 | 
						|
		sys.stderr.write(msg + '\n')
 | 
						|
		return 1
 | 
						|
	except EOFError:
 | 
						|
		sys.stderr.write(filename + ': EOF in video file\n')
 | 
						|
		return 1
 | 
						|
 | 
						|
	if terse:
 | 
						|
		print string.ljust(filename, maxwidth),
 | 
						|
		kbytes = (VFile.getfilesize(filename) + 1023) / 1024
 | 
						|
		print string.rjust(`kbytes`, 5) + 'K',
 | 
						|
		print ' ', string.ljust(`vin.version`, 5),
 | 
						|
		print string.ljust(vin.format, 8),
 | 
						|
		print string.rjust(`vin.width`, 4),
 | 
						|
		print string.rjust(`vin.height`, 4),
 | 
						|
		if type(vin.packfactor) == type(()):
 | 
						|
			xpf, ypf = vin.packfactor
 | 
						|
			s = string.rjust(`xpf`, 2) + ',' + \
 | 
						|
				  string.rjust(`ypf`, 2)
 | 
						|
		else:
 | 
						|
			s = string.rjust(`vin.packfactor`, 2)
 | 
						|
			if type(vin.packfactor) == type(0) and \
 | 
						|
				  vin.format not in ('rgb', 'jpeg') and \
 | 
						|
				  (vin.width/vin.packfactor) % 4 <> 0:
 | 
						|
				s = s + '!  '
 | 
						|
			else:
 | 
						|
				s = s + '   '
 | 
						|
		print s,
 | 
						|
		sys.stdout.flush()
 | 
						|
	else:
 | 
						|
		vin.printinfo()
 | 
						|
 | 
						|
	if quick:
 | 
						|
		if terse:
 | 
						|
			print
 | 
						|
		vin.close()
 | 
						|
		return 0
 | 
						|
 | 
						|
	try:
 | 
						|
		vin.readcache()
 | 
						|
		if not terse:
 | 
						|
			print '[Using cached index]'
 | 
						|
	except VFile.Error:
 | 
						|
		if not terse:
 | 
						|
			print '[Constructing index on the fly]'
 | 
						|
 | 
						|
	if not short:
 | 
						|
		if delta:
 | 
						|
			print 'Frame time deltas:',
 | 
						|
		else:
 | 
						|
			print 'Frame times:',
 | 
						|
 | 
						|
	n = 0
 | 
						|
	t = 0
 | 
						|
	told = 0
 | 
						|
	datasize = 0
 | 
						|
	while 1:
 | 
						|
		try:
 | 
						|
			t, ds, cs = vin.getnextframeheader()
 | 
						|
			vin.skipnextframedata(ds, cs)
 | 
						|
		except EOFError:
 | 
						|
			break
 | 
						|
		datasize = datasize + ds
 | 
						|
		if cs: datasize = datasize + cs
 | 
						|
		if not short:
 | 
						|
			if n%8 == 0:
 | 
						|
				sys.stdout.write('\n')
 | 
						|
			if delta:
 | 
						|
				sys.stdout.write('\t' + `t - told`)
 | 
						|
				told = t
 | 
						|
			else:
 | 
						|
				sys.stdout.write('\t' + `t`)
 | 
						|
		n = n+1
 | 
						|
 | 
						|
	if not short: print
 | 
						|
 | 
						|
	if terse:
 | 
						|
		print string.rjust(`n`, 6),
 | 
						|
		if t: print string.rjust(`int(n*10000.0/t)*0.1`, 5),
 | 
						|
		print
 | 
						|
	else:
 | 
						|
		print 'Total', n, 'frames in', t*0.001, 'sec.',
 | 
						|
		if t: print '-- average', int(n*10000.0/t)*0.1, 'frames/sec',
 | 
						|
		print
 | 
						|
		print 'Total data', 0.1 * int(datasize / 102.4), 'Kbytes',
 | 
						|
		if t:
 | 
						|
			print '-- average',
 | 
						|
			print 0.1 * int(datasize / 0.1024 / t), 'Kbytes/sec',
 | 
						|
		print
 | 
						|
 | 
						|
	vin.close()
 | 
						|
	return 0
 | 
						|
 | 
						|
 | 
						|
# Don't forget to call the main program
 | 
						|
 | 
						|
try:
 | 
						|
	main()
 | 
						|
except KeyboardInterrupt:
 | 
						|
	print '[Interrupt]'
 |