blob: ce82b68cdb4b6ec8dae58929e5d905d17e066277 [file] [log] [blame]
Guido van Rossum82534fd1992-08-18 17:01:02 +00001#! /usr/local/python
2
3# Play CMIF movie files
4
5
6# Usage:
7#
8# Vplay [-l] [-m maginfy] [file] ...
9
10
11# Options:
12#
13# -l : loop, playing the movie over and over again
14# -m magnify : magnify the image by the given factor
15# file ... : file(s) to play; default film.video
16
17
18# User interface:
19#
20# Place the windo where you want it. The size is determined by the
21# movie file and the -m option.
22#
23# Press ESC or select the window manager Quit or Close window option
24# to close a window; if more files are given the window for the next
25# file now pops up.
26
27
Guido van Rossum843d1531992-08-18 14:16:12 +000028import sys
Guido van Rossum82534fd1992-08-18 17:01:02 +000029sys.path.append('/ufs/guido/src/video')
Guido van Rossum843d1531992-08-18 14:16:12 +000030import VFile
31import time
32import gl, GL
33from DEVICE import *
Guido van Rossum82534fd1992-08-18 17:01:02 +000034import getopt
35import string
36
37
38# Global options
39
40magnify = 1
41looping = 0
42
43
44# Main program -- mostly command line parsing
Guido van Rossum843d1531992-08-18 14:16:12 +000045
46def main():
Guido van Rossum82534fd1992-08-18 17:01:02 +000047 global magnify, looping
48 opts, args = getopt.getopt(sys.argv[1:], 'lm:')
49 for opt, arg in opts:
50 if opt == '-l':
51 looping = 1
52 elif opt == '-m':
53 magnify = string.atoi(arg)
54 if not args:
55 args = ['film.video']
56 for filename in args:
57 process(filename)
58
59
60# Process one file
Guido van Rossum843d1531992-08-18 14:16:12 +000061
62def process(filename):
63 vin = VFile.VinFile().init(filename)
64 print 'File: ', filename
65 print 'Version: ', vin.version
66 print 'Size: ', vin.width, 'x', vin.height
67 print 'Pack: ', vin.packfactor, '; chrom:', vin.chrompack
68 print 'Bits: ', vin.c0bits, vin.c1bits, vin.c2bits
69 print 'Format: ', vin.format
70 print 'Offset: ', vin.offset
Guido van Rossum82534fd1992-08-18 17:01:02 +000071 vin.magnify = magnify
Guido van Rossum843d1531992-08-18 14:16:12 +000072
73 gl.foreground()
Guido van Rossum82534fd1992-08-18 17:01:02 +000074 gl.prefsize(vin.width * magnify, vin.height * magnify)
Guido van Rossum44b8e811992-08-18 14:47:20 +000075 win = gl.winopen('* ' + filename)
Guido van Rossum843d1531992-08-18 14:16:12 +000076 vin.initcolormap()
77
78 gl.qdevice(ESCKEY)
79 gl.qdevice(WINSHUT)
80 gl.qdevice(WINQUIT)
81
82 t0 = time.millitimer()
83 running = 1
84 data = None
Guido van Rossum82534fd1992-08-18 17:01:02 +000085 t = 0
86 n = 0
Guido van Rossum843d1531992-08-18 14:16:12 +000087 while 1:
88 if running:
89 try:
90 t, data, chromdata = vin.getnextframe()
Guido van Rossum82534fd1992-08-18 17:01:02 +000091 n = n+1
Guido van Rossum843d1531992-08-18 14:16:12 +000092 except EOFError:
Guido van Rossum82534fd1992-08-18 17:01:02 +000093 t1 = time.millitimer()
Guido van Rossum44b8e811992-08-18 14:47:20 +000094 gl.wintitle(filename)
Guido van Rossum82534fd1992-08-18 17:01:02 +000095 print 'Recorded:', n,
96 print 'frames in', t*0.001, 'sec.',
97 if t:
98 print '-- average',
99 print int(n*10000.0/t)*0.1,
100 print 'frames/sec',
101 print
102 t = t1-t0
103 print 'Played:', n,
104 print 'frames in', t*0.001, 'sec.',
105 if t:
106 print '-- average',
107 print int(n*10000.0/t)*0.1,
108 print 'frames/sec',
109 print
110 if looping and n > 0:
111 vin.rewind()
112 vin.magnify = magnify
113 continue
114 else:
115 running = 0
Guido van Rossum843d1531992-08-18 14:16:12 +0000116 if running:
117 dt = t + t0 - time.millitimer()
118 if dt > 0:
119 time.millisleep(dt)
Guido van Rossum82534fd1992-08-18 17:01:02 +0000120 vin.showframe(data, chromdata)
Guido van Rossum843d1531992-08-18 14:16:12 +0000121 if not running or gl.qtest():
122 dev, val = gl.qread()
123 if dev in (ESCKEY, WINSHUT, WINQUIT):
Guido van Rossum82534fd1992-08-18 17:01:02 +0000124 gl.winclose(win)
Guido van Rossum843d1531992-08-18 14:16:12 +0000125 break
126 if dev == REDRAW:
127 gl.reshapeviewport()
128 if data:
129 vin.showframe(data, chromdata)
130
Guido van Rossum82534fd1992-08-18 17:01:02 +0000131
132# Don't forget to call the main program
133
Guido van Rossum843d1531992-08-18 14:16:12 +0000134main()