[libcamera-devel,v3,09/18] py: cam_kms: support multiplanar formats
diff mbox series

Message ID 20220518131329.66994-10-tomi.valkeinen@ideasonboard.com
State Accepted
Headers show
Series
  • Misc Python bindings patches
Related show

Commit Message

Tomi Valkeinen May 18, 2022, 1:13 p.m. UTC
Support multiplanar formats in the kms renderer. Tested with RPi and
NV12.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
 src/py/cam/cam_kms.py | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

Patch
diff mbox series

diff --git a/src/py/cam/cam_kms.py b/src/py/cam/cam_kms.py
index ae6be277..f1844717 100644
--- a/src/py/cam/cam_kms.py
+++ b/src/py/cam/cam_kms.py
@@ -10,6 +10,7 @@  FMT_MAP = {
     'YUYV': pykms.PixelFormat.YUYV,
     'ARGB8888': pykms.PixelFormat.ARGB8888,
     'XRGB8888': pykms.PixelFormat.XRGB8888,
+    'NV12': pykms.PixelFormat.NV12,
 }
 
 
@@ -133,10 +134,16 @@  class KMSRenderer:
 
                 for fb in ctx['allocator'].buffers(stream):
                     w, h = cfg.size
-                    stride = cfg.stride
-                    fd = fb.fd(0)
+                    fds = []
+                    strides = []
+                    offsets = []
+                    for i in range(fb.num_planes):
+                        fds.append(fb.fd(i))
+                        strides.append(cfg.stride)
+                        offsets.append(fb.offset(i))
+
                     drmfb = pykms.DmabufFramebuffer(self.card, w, h, fmt,
-                                                    [fd], [stride], [0])
+                                                    fds, strides, offsets)
                     self.cam_2_drm[fb] = drmfb
 
                 idx += 1