#!/usr/bin/python3 import pykms import time import sys import argparse tests = { 1: "test_am5_trans_dest", 2: "test_am5_trans_src", 3: "test_am4_normal_trans_dst", 4: "test_am4_normal_trans_src", 5: "test_am4_alpha_trans_src", } parser = argparse.ArgumentParser() parser.add_argument("-c", "--connector", default="") parser.add_argument("test", type=int, help="test number 1-" + str(len(tests))) args = parser.parse_args() #if len(sys.argv) != 2: # print("Usage: {} ".format(sys.argv[0])) # print(" 1 - test_am5_trans_dest()") # print(" 2 - test_am5_trans_src()") # print(" 3 - test_am4_normal_trans_dst()") # print(" 4 - test_am4_normal_trans_src()") # print(" 5 - test_am4_alpha_trans_src()") # exit(0) TEST = args.test card = pykms.Card() res = pykms.ResourceManager(card) conn = res.reserve_connector(args.connector) crtc = res.reserve_crtc(conn) mode = conn.get_default_mode() planes = [] for p in card.planes: if p.supports_crtc(crtc) == False: continue planes.append(p) card.disable_planes() w = mode.hdisplay h = mode.vdisplay fbs=[] # See Figure 11-78. DISPC Destination Transparency Color Key Example def test_am5_trans_dest(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fb = fbs[0] stepX = fb.width // 7 stepY = fb.height // 5; pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.purple) pykms.draw_rect(fb, stepX, stepY, stepX, fb.height - (stepY * 2), pykms.green) pykms.draw_rect(fb, stepX * 3, stepY, stepX, fb.height - (stepY * 2), pykms.red) pykms.draw_rect(fb, stepX * 5, stepY, stepX, fb.height - (stepY * 2), pykms.white) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan) pykms.draw_circle(fb, (stepX * 3) + (stepX // 2), fb.height // 2, (fb.height // 2) - stepY, pykms.yellow) crtc.set_props({ "trans-key-mode": 1, "trans-key": pykms.purple.rgb888, "background": 0, "alpha_blender": 0, }) print("Purple bg. Green, red, white boxes.") plane = planes[0] fb = fbs[0] z = 0 plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zpos": z, }) input("press enter\n") print("Cyan bg. Green, red, white boxes. Yellow circle behind the red box.") plane = planes[1] fb = fbs[1] z = 1 plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zpos": z, }) input("press enter\n") # See Figure 11-77. DISPC Source Transparency Color Key Example def test_am5_trans_src(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fb = fbs[0] halfX = fb.width // 2 stepX = (fb.width // 2) // 5; stepY = fb.height // 5; pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.white) pykms.draw_rect(fb, stepX * 2, stepY * 2, halfX - (stepX * 4), fb.height - (stepY * 4), pykms.red) pykms.draw_rect(fb, halfX + stepX * 2, stepY * 2, halfX - (stepX * 4), fb.height - (stepY * 4), pykms.green) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan) pykms.draw_rect(fb, stepX, stepY, fb.width - (stepX * 2), fb.height - (stepY * 2), pykms.purple) crtc.set_props({ "trans-key-mode": 2, "trans-key": pykms.purple.rgb888, "background": 0, "alpha_blender": 0, }) print("White bg. Red and green boxes.") plane = planes[0] fb = fbs[0] z = 0 plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zpos": z, }) input("press enter\n") print("Cyan bg. Big white box, containing red and green boxes.") plane = planes[1] fb = fbs[1] z = 3 plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zpos": z, }) input("press enter\n") def test_am4_normal_trans_dst(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fb = fbs[0] stepX = fb.width // 7 stepY = fb.height // 5; pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.purple) pykms.draw_rect(fb, stepX, stepY, stepX, fb.height - (stepY * 2), pykms.green) pykms.draw_rect(fb, stepX * 3, stepY, stepX, fb.height - (stepY * 2), pykms.red) pykms.draw_rect(fb, stepX * 5, stepY, stepX, fb.height - (stepY * 2), pykms.white) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan) pykms.draw_circle(fb, (stepX * 3) + (stepX // 2), fb.height // 2, (fb.height // 2) - stepY, pykms.yellow) crtc.set_props({ "trans-key-mode": 1, "trans-key": pykms.purple.rgb888, "background": 0, "alpha_blender": 0, }) print("Purple bg. Green, red, white boxes.") plane = planes[0] fb = fbs[0] z = 0 plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zpos": z, }) input("press enter\n") print("Cyan bg. Green, red, white boxes. Yellow circle behind the red box.") plane = planes[1] fb = fbs[1] z = 1 plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zpos": z, }) input("press enter\n") def test_am4_normal_trans_src(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fb = fbs[0] halfX = fb.width // 2 stepX = (fb.width // 2) // 5; stepY = fb.height // 5; pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.white) pykms.draw_rect(fb, stepX * 2, stepY * 2, halfX - (stepX * 4), fb.height - (stepY * 4), pykms.red) pykms.draw_rect(fb, halfX + stepX * 2, stepY * 2, halfX - (stepX * 4), fb.height - (stepY * 4), pykms.green) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan) pykms.draw_rect(fb, stepX, stepY, fb.width - (stepX * 2), fb.height - (stepY * 2), pykms.purple) crtc.set_props({ "trans-key-mode": 2, "trans-key": pykms.purple.rgb888, "background": 0, "alpha_blender": 0, }) print("White bg. Red and green boxes.") plane = planes[0] fb = fbs[0] z = 0 plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zpos": z, }) input("press enter\n") print("Cyan bg. Big white box, containing red and green boxes.") plane = planes[1] fb = fbs[1] z = 2 plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": fb.width, "CRTC_H": fb.height, "zpos": z, }) input("press enter\n") def test_am4_alpha_trans_src(): fbs.append(pykms.DumbFramebuffer(card, w, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24")) fbs.append(pykms.DumbFramebuffer(card, w // 2, h, "XR24")) fb = fbs[0] halfX = fb.width // 2 stepX = (fb.width // 2) // 5; stepY = fb.height // 5; pykms.draw_rect(fb, 0, 0, w, h, pykms.purple) pykms.draw_rect(fb, stepX * 2, stepY * 2, halfX - (stepX * 4), fb.height - (stepY * 4), pykms.red) pykms.draw_rect(fb, halfX + stepX * 2, stepY * 2, halfX - (stepX * 4), fb.height - (stepY * 4), pykms.green) fb = fbs[1] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.blue) pykms.draw_rect(fb, stepX, stepY, fb.width - (stepX * 2), fb.height - (stepY * 2), pykms.purple) fb = fbs[2] pykms.draw_rect(fb, 0, 0, fb.width, fb.height, pykms.cyan) pykms.draw_rect(fb, stepX, stepY, fb.width - (stepX * 2), fb.height - (stepY * 2), pykms.purple) crtc.set_props({ "trans-key-mode": 1, "trans-key": pykms.purple.rgb888, "background": 0x666666, "alpha_blender": 1, }) print("grey background") input("press enter\n") plane = planes[0] fb = fbs[0] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_W": w, "CRTC_H": h, }) print("grey background, red and green boxes") input("press enter\n") plane = planes[1] fb = fbs[1] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": 0, "CRTC_Y": 0, "CRTC_W": fb.width, "CRTC_H": fb.height, }) print("left side: blue bg, purple box, red box inside purple. right side: unchanged") input("press enter\n") plane = planes[2] fb = fbs[2] plane.set_props({ "FB_ID": fb.id, "CRTC_ID": crtc.id, "SRC_X": 0 << 16, "SRC_Y": 0 << 16, "SRC_W": fb.width << 16, "SRC_H": fb.height << 16, "CRTC_X": w - fb.width, "CRTC_Y": 0, "CRTC_W": fb.width, "CRTC_H": fb.height, }) print("left side: unchanged. right side: cyan bg, purple box, green box inside purple.") input("press enter\n") print(tests[args.test]) locals()[tests[args.test]]()