xref: /aosp_15_r20/external/libkmsxx/py/tests/gamma.py (revision f0687c8a10b3e371dbe09214db6664e37c283cca)
1*f0687c8aSRaman Tenneti#!/usr/bin/python3
2*f0687c8aSRaman Tenneti
3*f0687c8aSRaman Tennetiimport pykms
4*f0687c8aSRaman Tennetiimport argparse
5*f0687c8aSRaman Tenneti
6*f0687c8aSRaman Tennetiparser = argparse.ArgumentParser()
7*f0687c8aSRaman Tennetiparser.add_argument("-c", "--connector", default="")
8*f0687c8aSRaman Tennetiparser.add_argument("-l", "--legacy", action="store_true", default=False)
9*f0687c8aSRaman Tennetiargs = parser.parse_args()
10*f0687c8aSRaman Tenneti
11*f0687c8aSRaman Tenneticard = pykms.Card()
12*f0687c8aSRaman Tennetires = pykms.ResourceManager(card)
13*f0687c8aSRaman Tenneticonn = res.reserve_connector(args.connector)
14*f0687c8aSRaman Tenneticrtc = res.reserve_crtc(conn)
15*f0687c8aSRaman Tennetimode = conn.get_default_mode()
16*f0687c8aSRaman Tenneti
17*f0687c8aSRaman Tennetifb = pykms.DumbFramebuffer(card, mode.hdisplay, mode.vdisplay, "XR24");
18*f0687c8aSRaman Tennetipykms.draw_test_pattern(fb);
19*f0687c8aSRaman Tenneti
20*f0687c8aSRaman Tenneticrtc.set_mode(conn, fb, mode)
21*f0687c8aSRaman Tenneti
22*f0687c8aSRaman Tennetiuse_legacy = args.legacy
23*f0687c8aSRaman Tenneti
24*f0687c8aSRaman Tennetiif not use_legacy:
25*f0687c8aSRaman Tenneti	prop = crtc.get_prop("GAMMA_LUT")
26*f0687c8aSRaman Tenneti
27*f0687c8aSRaman Tenneti	if not prop:
28*f0687c8aSRaman Tenneti		prop = crtc.get_prop("DEGAMMA_LUT")
29*f0687c8aSRaman Tenneti
30*f0687c8aSRaman Tenneti		if not prop:
31*f0687c8aSRaman Tenneti			print("No gamma property found")
32*f0687c8aSRaman Tenneti			exit(-1)
33*f0687c8aSRaman Tenneti		else:
34*f0687c8aSRaman Tenneti			print("Using DEGAMMA_LUT for gamma")
35*f0687c8aSRaman Tenneti
36*f0687c8aSRaman Tenneti
37*f0687c8aSRaman Tennetidef legacy_gamma_set():
38*f0687c8aSRaman Tenneti	len = crtc.legacy_gamma_size()
39*f0687c8aSRaman Tenneti
40*f0687c8aSRaman Tenneti	table = []
41*f0687c8aSRaman Tenneti
42*f0687c8aSRaman Tenneti	for i in range(len):
43*f0687c8aSRaman Tenneti	    g = round(65535 * pow(i / float(len), 1 / 2.2))
44*f0687c8aSRaman Tenneti	    table.append((g, g, g))
45*f0687c8aSRaman Tenneti
46*f0687c8aSRaman Tenneti	crtc.legacy_gamma_set(table)
47*f0687c8aSRaman Tenneti
48*f0687c8aSRaman Tennetidef legacy_gamma_clear():
49*f0687c8aSRaman Tenneti	len = crtc.legacy_gamma_size()
50*f0687c8aSRaman Tenneti
51*f0687c8aSRaman Tenneti	table = []
52*f0687c8aSRaman Tenneti
53*f0687c8aSRaman Tenneti	for i in range(len):
54*f0687c8aSRaman Tenneti	    g = round(65535 * (i / float(len)))
55*f0687c8aSRaman Tenneti	    table.append((g, g, g))
56*f0687c8aSRaman Tenneti
57*f0687c8aSRaman Tenneti	crtc.legacy_gamma_set(table)
58*f0687c8aSRaman Tenneti
59*f0687c8aSRaman Tennetidef gamma_set():
60*f0687c8aSRaman Tenneti	len=256
61*f0687c8aSRaman Tenneti	arr = bytearray(len*2*4)
62*f0687c8aSRaman Tenneti	view = memoryview(arr).cast("H")
63*f0687c8aSRaman Tenneti
64*f0687c8aSRaman Tenneti	for i in range(len):
65*f0687c8aSRaman Tenneti	    g = round(65535 * pow(i / float(len), 1 / 2.2))
66*f0687c8aSRaman Tenneti
67*f0687c8aSRaman Tenneti	    view[i * 4 + 0] = g
68*f0687c8aSRaman Tenneti	    view[i * 4 + 1] = g
69*f0687c8aSRaman Tenneti	    view[i * 4 + 2] = g
70*f0687c8aSRaman Tenneti	    view[i * 4 + 3] = 0
71*f0687c8aSRaman Tenneti
72*f0687c8aSRaman Tenneti	gamma = pykms.Blob(card, arr);
73*f0687c8aSRaman Tenneti
74*f0687c8aSRaman Tenneti	crtc.set_prop(prop, gamma.id)
75*f0687c8aSRaman Tenneti
76*f0687c8aSRaman Tenneti
77*f0687c8aSRaman Tennetidef gamma_clear():
78*f0687c8aSRaman Tenneti	crtc.set_prop(prop, 0)
79*f0687c8aSRaman Tenneti
80*f0687c8aSRaman Tennetiinput("press enter to apply gamma\n")
81*f0687c8aSRaman Tenneti
82*f0687c8aSRaman Tennetiif use_legacy:
83*f0687c8aSRaman Tenneti	legacy_gamma_set()
84*f0687c8aSRaman Tennetielse:
85*f0687c8aSRaman Tenneti	gamma_set()
86*f0687c8aSRaman Tenneti
87*f0687c8aSRaman Tennetiinput("press enter to remove gamma\n")
88*f0687c8aSRaman Tenneti
89*f0687c8aSRaman Tennetiif use_legacy:
90*f0687c8aSRaman Tenneti	legacy_gamma_clear()
91*f0687c8aSRaman Tennetielse:
92*f0687c8aSRaman Tenneti	gamma_clear()
93*f0687c8aSRaman Tenneti
94*f0687c8aSRaman Tennetiinput("press enter to exit\n")
95