Apparently the code to forestall Tk eating events was too aggressive (Tk user input...
[python/dscho.git] / Demo / sgi / video / OldVcopy.py
blob0eb1c7f4f982a3cae6f46a1e58e3c839290bd36d
1 #! /usr/bin/env python
3 # Copy a video file, interactively, frame-by-frame.
5 import sys
6 import getopt
7 from gl import *
8 from DEVICE import *
9 import VFile
10 import VGrabber
11 import string
12 import imageop
14 def report(time, iframe):
15 print 'Frame', iframe, ': t =', time
17 def usage():
18 sys.stderr.write('usage: Vcopy [-t type] [-m threshold] [-a] infile outfile\n')
19 sys.stderr.write('-t Convert to other type\n')
20 sys.stderr.write('-a Automatic\n')
21 sys.stderr.write('-m Convert grey to mono with threshold\n')
22 sys.stderr.write('-d Convert grey to mono with dithering\n')
23 sys.exit(2)
25 def help():
26 print 'Command summary:'
27 print 'n get next image from input'
28 print 'w write current image to output'
30 class GrabbingVoutFile(VFile.VoutFile, VGrabber.VGrabber):
31 pass
33 def main():
34 foreground()
35 try:
36 opts, args = getopt.getopt(sys.argv[1:], 't:am:d')
37 except getopt.error, msg:
38 print msg
39 usage()
40 if len(args) <> 2:
41 usage()
42 [ifile, ofile] = args
43 print 'open film ', ifile
44 ifilm = VFile.VinFile(ifile)
45 print 'open output ', ofile
46 ofilm = GrabbingVoutFile(ofile)
48 ofilm.setinfo(ifilm.getinfo())
50 use_grabber = 0
51 continuous = 0
52 tomono = 0
53 tomonodither = 0
54 for o, a in opts:
55 if o == '-t':
56 ofilm.format = a
57 use_grabber = 1
58 if o == '-a':
59 continuous = 1
60 if o == '-m':
61 if ifilm.format <> 'grey':
62 print '-m only supported for greyscale'
63 sys.exit(1)
64 tomono = 1
65 treshold = string.atoi(a)
66 ofilm.format = 'mono'
67 if o == '-d':
68 if ifilm.format <> 'grey':
69 print '-m only supported for greyscale'
70 sys.exit(1)
71 tomonodither = 1
72 ofilm.format = 'mono'
74 ofilm.writeheader()
76 prefsize(ifilm.width, ifilm.height)
77 w = winopen(ifile)
78 qdevice(KEYBD)
79 qdevice(ESCKEY)
80 qdevice(WINQUIT)
81 qdevice(WINSHUT)
82 print 'qdevice calls done'
84 help()
86 time, data, cdata = ifilm.getnextframe()
87 ifilm.showframe(data, cdata)
88 iframe = 1
89 report(time, iframe)
91 while 1:
92 if continuous:
93 dev = KEYBD
94 else:
95 dev, val = qread()
96 if dev in (ESCKEY, WINQUIT, WINSHUT):
97 break
98 if dev == REDRAW:
99 reshapeviewport()
100 elif dev == KEYBD:
101 if continuous:
102 c = '0'
103 else:
104 c = chr(val)
105 #XXX Debug
106 if c == 'R':
107 c3i(255,0,0)
108 clear()
109 if c == 'G':
110 c3i(0,255,0)
111 clear()
112 if c == 'B':
113 c3i(0,0,255)
114 clear()
115 if c == 'w' or continuous:
116 if use_grabber:
117 try:
118 data, cdata = ofilm.grabframe()
119 except VFile.Error, msg:
120 print msg
121 break
122 if tomono:
123 data = imageop.grey2mono(data, \
124 ifilm.width, ifilm.height, \
125 treshold)
126 if tomonodither:
127 data = imageop.dither2mono(data, \
128 ifilm.width, ifilm.height)
129 ofilm.writeframe(time, data, cdata)
130 print 'Frame', iframe, 'written.'
131 if c == 'n' or continuous:
132 try:
133 time,data,cdata = ifilm.getnextframe()
134 ifilm.showframe(data, cdata)
135 iframe = iframe+1
136 report(time, iframe)
137 except EOFError:
138 print 'EOF'
139 if continuous:
140 break
141 ringbell()
142 elif dev == INPUTCHANGE:
143 pass
144 else:
145 print '(dev, val) =', (dev, val)
146 ofilm.close()
148 main()