blob: 3e7b9e366760d482e582128ec351aa076fa012cf [file] [log] [blame]
#!/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: {} <test-number>".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]]()