Add LUT generation script
[renesas/vsp-tests.git] / data / frames / gen-lut.py
1 #!/usr/bin/python
2
3 import math
4 import sys
5
6 clu_configs = (
7         ('zero', {
8                 'scale': 0.0,
9                 'a': 0.0,
10                 'freq': 1.0,
11                 'weights': (1.0, 1.0, 1.0)
12         } ),
13         ('identity', {
14                 'scale': 1.0,
15                 'a': 0.0,
16                 'freq': 1.0,
17                 'weights': (1.0, 1.0, 1.0)
18         } ),
19         # Keep the three weights different to generate an anisothropic
20         # look up table.
21         ('wave', {
22                 'scale': 1.0,
23                 'a': 0.1,
24                 'freq': 3.0,
25                 'weights': (1.0, 2.0, 3.0)
26         } ),
27 )
28
29 lut_configs = (
30         ('zero',        0.0, 1.0, 1.0, 1.0),
31         ('identity',    1.0, 1.0, 1.0, 1.0),
32         ('gamma',       1.0, 0.5, 1.0, 2.0),
33 )
34
35 def clu_value(x, y, z, scale, a, freq, weights):
36         x = x / 16.
37         y = y / 16.
38         z = z / 16.
39
40         dist = math.sqrt((x*x*weights[0] + y*y*weights[1] + z*z*weights[2]) / 3. / sum(weights))
41         offset = a * math.sin(dist * freq * 2 * math.pi)
42
43         x = max(0, min(255, int((x*scale + offset) * 256)))
44         y = max(0, min(255, int((y*scale + offset) * 256)))
45         z = max(0, min(255, int((z*scale + offset) * 256)))
46
47         return (z, y, x, 0)
48
49 def generate_clu(config):
50         clu = []
51
52         for z in xrange(17):
53                 for y in xrange(17):
54                         for x in xrange(17):
55                                 clu.extend(clu_value(x, y, z, **config[1]))
56
57         file('clu-%s.bin' % config[0], 'wb').write(''.join([chr(c) for c in clu]))
58
59
60 def gamma(vin, gamma, scale):
61         return int(255 * scale * math.pow(vin / 255., gamma))
62
63 def generate_lut(config):
64         lut = []
65         for i in xrange(256):
66                 lut.extend([gamma(i, g, config[1]) for g in config[2:]])
67                 lut.append(0)
68
69         file('lut-%s.bin' % config[0], 'wb').write(''.join([chr(c) for c in lut]))
70
71
72 def main(argv):
73         for config in clu_configs:
74                 generate_clu(config)
75
76         for config in lut_configs:
77                 generate_lut(config)
78
79         return 0
80
81 if __name__ == '__main__':
82         sys.exit(main(sys.argv))