blob: fe012ea5ff72b200b7a42f6dd96eed74b204362f [file] [log] [blame]
Guido van Rossum5d731fc1991-11-04 15:54:22 +00001# Copy a video file, interactively, frame-by-frame.
2
3import sys
4import getopt
5from gl import *
6from DEVICE import *
Guido van Rossumcbc1d901992-03-18 13:04:25 +00007import VFile
Guido van Rossum5d731fc1991-11-04 15:54:22 +00008
9def report(time, iframe):
10 print 'Frame', iframe, ': t =', time
11
12def usage():
Guido van Rossume1783321992-09-07 09:35:23 +000013 sys.stderr.write('usage: vcopy infile outfile\n')
Guido van Rossum5d731fc1991-11-04 15:54:22 +000014 sys.exit(2)
15
16def help():
17 print 'Command summary:'
18 print 'n get next image from input'
19 print 'w write current image to output'
20
21def main():
Guido van Rossumcbc1d901992-03-18 13:04:25 +000022 foreground()
23 opts, args = getopt.getopt(sys.argv[1:], 't:a')
Guido van Rossum5d731fc1991-11-04 15:54:22 +000024 if len(args) <> 2:
25 usage()
26 [ifile, ofile] = args
Guido van Rossumcbc1d901992-03-18 13:04:25 +000027 print 'open film ', ifile
28 ifilm = VFile.VinFile().init(ifile)
29 print 'open output ', ofile
30 ofilm = VFile.VoutFile().init(ofile)
31
32 ofilm.setinfo(ifilm.getinfo())
33
34 use_grabber = 0
35 continuous = 0
36 for o, a in opts:
37 if o == '-t':
38 ofilm.format = a
39 use_grabber = 1
40 if o == '-a':
41 continuous = 1
42 ofilm.writeheader()
Guido van Rossum5d731fc1991-11-04 15:54:22 +000043 #
Guido van Rossumcbc1d901992-03-18 13:04:25 +000044 prefsize(ifilm.width, ifilm.height)
45 w = winopen(ifile)
Guido van Rossum5d731fc1991-11-04 15:54:22 +000046 qdevice(KEYBD)
47 qdevice(ESCKEY)
48 qdevice(WINQUIT)
49 qdevice(WINSHUT)
Guido van Rossumcbc1d901992-03-18 13:04:25 +000050 print 'qdevice calls done'
Guido van Rossum5d731fc1991-11-04 15:54:22 +000051 #
52 help()
53 #
Guido van Rossumcbc1d901992-03-18 13:04:25 +000054 time, data, cdata = ifilm.getnextframe()
55 ifilm.showframe(data, cdata)
Guido van Rossum5d731fc1991-11-04 15:54:22 +000056 iframe = 1
57 report(time, iframe)
58 #
59 while 1:
Guido van Rossumcbc1d901992-03-18 13:04:25 +000060 if continuous:
61 dev = KEYBD
62 else:
63 dev, val = qread()
Guido van Rossum5d731fc1991-11-04 15:54:22 +000064 if dev in (ESCKEY, WINQUIT, WINSHUT):
65 break
Guido van Rossumf47d0481992-02-11 14:50:22 +000066 if dev == REDRAW:
Guido van Rossum5d731fc1991-11-04 15:54:22 +000067 reshapeviewport()
Guido van Rossumf47d0481992-02-11 14:50:22 +000068 elif dev == KEYBD:
Guido van Rossumcbc1d901992-03-18 13:04:25 +000069 if continuous:
70 c = '0'
71 else:
72 c = chr(val)
73 #XXX Debug
74 if c == 'R':
75 c3i(255,0,0)
76 clear()
77 if c == 'G':
78 c3i(0,255,0)
79 clear()
80 if c == 'B':
81 c3i(0,0,255)
82 clear()
83 if c == 'w' or continuous:
84 if use_grabber:
85 data, cdata = ofilm.grabframe()
86 ofilm.writeframe(time, data, cdata)
87 print 'Frame', iframe, 'written.'
88 if c == 'n' or continuous:
Guido van Rossum5d731fc1991-11-04 15:54:22 +000089 try:
Guido van Rossumcbc1d901992-03-18 13:04:25 +000090 time,data,cdata = ifilm.getnextframe()
91 ifilm.showframe(data, cdata)
Guido van Rossum5d731fc1991-11-04 15:54:22 +000092 iframe = iframe+1
93 report(time, iframe)
94 except EOFError:
95 print 'EOF'
Guido van Rossumcbc1d901992-03-18 13:04:25 +000096 if continuous:
97 break
Guido van Rossum5d731fc1991-11-04 15:54:22 +000098 ringbell()
Guido van Rossumf47d0481992-02-11 14:50:22 +000099 elif dev == INPUTCHANGE:
Guido van Rossum5d731fc1991-11-04 15:54:22 +0000100 pass
101 else:
102 print '(dev, val) =', (dev, val)
Guido van Rossumcbc1d901992-03-18 13:04:25 +0000103 ofilm.close()
Guido van Rossum5d731fc1991-11-04 15:54:22 +0000104
105main()