Add wb-m2m-crop.py test to test cropping on write-back
authorBenoit Parrot <bparrot@ti.com>
Mon, 29 Oct 2018 17:20:03 +0000 (12:20 -0500)
committerTomi Valkeinen <tomi.valkeinen@iki.fi>
Thu, 1 Nov 2018 14:43:35 +0000 (16:43 +0200)
Signed-off-by: Benoit Parrot <bparrot@ti.com>
py/tests/wb-m2m-crop.py [new file with mode: 0755]

diff --git a/py/tests/wb-m2m-crop.py b/py/tests/wb-m2m-crop.py
new file mode 100755 (executable)
index 0000000..6c4225d
--- /dev/null
@@ -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)