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