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