summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rwxr-xr-xpy/tests/wb-m2m-crop.py123
1 files changed, 123 insertions, 0 deletions
diff --git a/py/tests/wb-m2m-crop.py b/py/tests/wb-m2m-crop.py
new file mode 100755
index 0000000..6c4225d
--- /dev/null
+++ b/py/tests/wb-m2m-crop.py
@@ -0,0 +1,123 @@
+#!/usr/bin/python3
+
+import sys
+import selectors
+import pykms
+import argparse
+import time
+
+iw = 640
+ih = 480
+ifmt = pykms.PixelFormat.XRGB8888
+
+ow = 640
+oh = 480
+ofmt = pykms.PixelFormat.XRGB8888
+
+card = pykms.Card()
+res = pykms.ResourceManager(card)
+conn = res.reserve_connector()
+crtc = res.reserve_crtc(conn)
+plane1 = res.reserve_overlay_plane(crtc, ifmt)
+plane2 = res.reserve_overlay_plane(crtc, ofmt)
+
+print("{}, {}".format(plane1.id, plane2.id))
+
+mode = conn.get_default_mode()
+modeb = mode.to_blob(card)
+
+card.disable_planes()
+
+req = pykms.AtomicReq(card)
+req.add(conn, "CRTC_ID", crtc.id)
+req.add(crtc, {"ACTIVE": 1,
+ "MODE_ID": modeb.id})
+req.commit_sync(allow_modeset = True)
+
+NUM_BUFS = 4
+
+src_fbs = []
+dst_fbs = []
+
+for i in range(NUM_BUFS):
+ fb = pykms.DumbFramebuffer(card, iw, ih, ifmt)
+ pykms.draw_test_pattern(fb);
+ pykms.draw_text(fb, iw // 2, 2, str(i), pykms.white);
+ src_fbs.append(fb)
+
+ fb = pykms.DumbFramebuffer(card, ow, oh, ofmt)
+ dst_fbs.append(fb)
+
+# put the planes on the screen, so that WB doesn't take them
+req = pykms.AtomicReq(card)
+req.add_plane(plane1, src_fbs[0], crtc, dst=(0, 0, 400, 480))
+req.add_plane(plane2, dst_fbs[1], crtc, dst=(400, 0, 400, 480))
+r = req.commit_sync(allow_modeset = True)
+assert r == 0
+
+vid = pykms.VideoDevice("/dev/video10")
+
+src_streamer = vid.output_streamer
+dst_streamer = vid.capture_streamer
+
+src_streamer.set_format(ifmt, iw, ih)
+(left, top, width, height) = src_streamer.get_selection()
+print("get: crop -> {},{}-{}x{}".format(left, top, width, height))
+(left, top, width, height) = src_streamer.set_selection(160, 0, 320, 240)
+print("set: crop -> {},{}-{}x{}".format(left, top, width, height))
+
+dst_streamer.set_format(ofmt, ow, oh)
+
+src_streamer.set_queue_size(NUM_BUFS)
+dst_streamer.set_queue_size(NUM_BUFS)
+
+for fb in src_fbs:
+ src_streamer.queue(fb)
+
+for fb in dst_fbs:
+ dst_streamer.queue(fb)
+
+input("press enter\n")
+
+src_streamer.stream_on()
+dst_streamer.stream_on()
+
+loop_count = 0
+
+def readvid(conn, mask):
+ global loop_count
+ print("VID EVENT");
+
+ ifb = src_streamer.dequeue()
+ ofb = dst_streamer.dequeue()
+
+ req = pykms.AtomicReq(card)
+ req.add_plane(plane1, ifb, crtc, dst=(0, 0, 400, 480))
+ req.add_plane(plane2, ofb, crtc, dst=(400, 0, 400, 480))
+ req.commit_sync(allow_modeset = True)
+ time.sleep(1)
+ loop_count += 1
+ if loop_count >= 10:
+ exit(0)
+ print("loop #", loop_count)
+ src_streamer.queue(ifb)
+ dst_streamer.queue(ofb)
+
+
+def readkey(conn, mask):
+ print("KEY EVENT");
+ sys.stdin.readline()
+ exit(0)
+
+sel = selectors.PollSelector()
+sel.register(vid.fd, selectors.EVENT_READ, readvid)
+sel.register(sys.stdin, selectors.EVENT_READ, readkey)
+
+while True:
+ events = sel.select()
+ for key, mask in events:
+ callback = key.data
+ callback(key.fileobj, mask)
+
+print("done");
+exit(0)