summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: a779ec3)
raw | patch | inline | side by side (parent: a779ec3)
author | Tomi Valkeinen <tomi.valkeinen@ti.com> | |
Sat, 11 Jun 2016 20:42:58 +0000 (23:42 +0300) | ||
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | |
Thu, 16 Jun 2016 18:47:51 +0000 (21:47 +0300) |
py/cam.py | [new file with mode: 0755] | patch | blob |
diff --git a/py/cam.py b/py/cam.py
--- /dev/null
+++ b/py/cam.py
@@ -0,0 +1,78 @@
+#!/usr/bin/python3
+
+import sys
+import selectors
+import pykms
+from helpers import *
+
+
+w = 640
+h = 480
+fmt = pykms.PixelFormat.YUYV
+
+
+# This hack makes drm initialize the fbcon, setting up the default connector
+card = pykms.Card()
+card = 0
+
+card = pykms.Card()
+res = pykms.ResourceManager(card)
+conn = res.reserve_connector()
+crtc = res.reserve_crtc(conn)
+plane = res.reserve_overlay_plane(crtc, fmt)
+
+mode = conn.get_default_mode()
+
+NUM_BUFS = 5
+
+fbs = []
+for i in range(NUM_BUFS):
+ fb = pykms.DumbFramebuffer(card, w, h, fmt)
+ fbs.append(fb)
+
+vidpath = pykms.VideoDevice.get_capture_devices()[0]
+
+vid = pykms.VideoDevice(vidpath)
+cap = vid.capture_streamer
+cap.set_port(0)
+cap.set_format(fmt, w, h)
+cap.set_queue_size(NUM_BUFS)
+
+for fb in fbs:
+ cap.queue(fb)
+
+cap.stream_on()
+
+
+def readvid(conn, mask):
+ fb = cap.dequeue()
+
+ if card.has_atomic:
+ set_props(plane, {
+ "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,
+ })
+ else:
+ crtc.set_plane(plane, fb, 0, 0, fb.width, fb.height,
+ 0, 0, fb.width, fb.height)
+
+ cap.queue(fb)
+
+def readkey(conn, mask):
+ #print("KEY EVENT");
+ sys.stdin.readline()
+ exit(0)
+
+sel = selectors.DefaultSelector()
+sel.register(cap.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)