summaryrefslogtreecommitdiffstats
path: root/Demo/sgi/video/rgb2video.py
blob: c6dd6854b45cc13a22dd0ddd99d1f4790dd6d7f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import sys
import VFile
import getopt
import imgfile
import string
import imgconv

def main():
	format = None
	interval = 40
	outfile = 'film.video'

	try:
		opts, args = getopt.getopt(sys.argv[1:], 'f:i:o:')
	except getopt.error:
		usage()
		sys.exit(1)
	for opt, arg in opts:
		if opt == '-f':
			format = arg
		elif opt == '-i':
			interval = string.atoi(arg)
		elif opt == '-o':
			outfile = arg
		else:
			usage()
			sys.exit(1)
	if not args:
		usage()
		sys.exit(1)
	
	xsize, ysize, zsize = imgfile.getsizes(args[0])
	nxsize = xsize
	
	if zsize == 3:
		oformat = 'rgb'
	elif zsize == 1:
		oformat = 'grey'
		if xsize % 4:
			addbytes = 4-(xsize%4)
			nxsize = xsize + addbytes
			print 'rgb2video: add',addbytes,'pixels per line'
	else:
		print 'rgb2video: incorrect number of planes:',zsize
		sys.exit(1)

	if format == None:
		format = oformat
	cfunc = imgconv.getconverter(oformat, format)

	vout = VFile.VoutFile().init(outfile)
	vout.format = format
	vout.width = nxsize
	vout.height = ysize
	vout.writeheader()
	t = 0
	sys.stderr.write('Processing ')
	for img in args:
		sys.stderr.write(img + ' ')
		if imgfile.getsizes(img) <> (xsize, ysize, zsize):
			print 'rgb2video: Image is different size:', img
			sys.exit(1)
		data = imgfile.read(img)
		if xsize <> nxsize:
			ndata = ''
			for i in range(0,len(data), xsize):
				curline = data[i:i+xsize]
				ndata = ndata + curline + ('\0'*(nxsize-xsize))
			data = ndata
		vout.writeframe(t, cfunc(data, nxsize, ysize), None)
		t = t + interval
	sys.stderr.write('\n')
	vout.close()

def usage():
	print 'Usage: rgb2video [-o output] [-i frameinterval] [-f format] rgbfile ...'
	
main()