summaryrefslogtreecommitdiff
path: root/src/py/cam
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ideasonboard.com>2022-05-18 16:13:23 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-05-18 17:52:30 +0300
commitfa7bda46f8a44e1d228489b37744d1eac8373b56 (patch)
tree78027ab9b2e3658960a667be24b3b3399371b9af /src/py/cam
parent11a271b29234e0271c9cf83aefc529dc1e0b3cc3 (diff)
py: Implement PixelFormat class
Implement PixelFormat bindings properly with a PixelFormat class. Change the bindings to use the new class instead of a string. 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> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/py/cam')
-rwxr-xr-xsrc/py/cam/cam.py2
-rw-r--r--src/py/cam/cam_kms.py10
-rw-r--r--src/py/cam/cam_qt.py4
-rw-r--r--src/py/cam/cam_qtgl.py17
-rw-r--r--src/py/cam/gl_helpers.py8
5 files changed, 6 insertions, 35 deletions
diff --git a/src/py/cam/cam.py b/src/py/cam/cam.py
index c7da97d7..001fb9de 100755
--- a/src/py/cam/cam.py
+++ b/src/py/cam/cam.py
@@ -164,7 +164,7 @@ def configure(ctx):
stream_config.size = (stream_opts['width'], stream_opts['height'])
if 'pixelformat' in stream_opts:
- stream_config.pixel_format = stream_opts['pixelformat']
+ stream_config.pixel_format = libcam.PixelFormat(stream_opts['pixelformat'])
stat = camconfig.validate()
diff --git a/src/py/cam/cam_kms.py b/src/py/cam/cam_kms.py
index d8ff0284..04381da1 100644
--- a/src/py/cam/cam_kms.py
+++ b/src/py/cam/cam_kms.py
@@ -5,14 +5,6 @@ import pykms
import selectors
import sys
-FMT_MAP = {
- 'RGB888': pykms.PixelFormat.RGB888,
- 'YUYV': pykms.PixelFormat.YUYV,
- 'ARGB8888': pykms.PixelFormat.ARGB8888,
- 'XRGB8888': pykms.PixelFormat.XRGB8888,
- 'NV12': pykms.PixelFormat.NV12,
-}
-
class KMSRenderer:
def __init__(self, state):
@@ -120,7 +112,7 @@ class KMSRenderer:
cfg = stream.configuration
fmt = cfg.pixel_format
- fmt = FMT_MAP[fmt]
+ fmt = pykms.PixelFormat(fmt.fourcc)
plane = self.resman.reserve_generic_plane(self.crtc, fmt)
assert(plane is not None)
diff --git a/src/py/cam/cam_qt.py b/src/py/cam/cam_qt.py
index fb485b9b..45a30aeb 100644
--- a/src/py/cam/cam_qt.py
+++ b/src/py/cam/cam_qt.py
@@ -87,6 +87,8 @@ def to_rgb(fmt, size, data):
w = size[0]
h = size[1]
+ fmt = str(fmt)
+
if fmt == 'YUYV':
# YUV422
yuyv = data.reshape((h, w // 2 * 4))
@@ -293,7 +295,7 @@ class MainWindow(QtWidgets.QWidget):
w, h = cfg.size
pitch = cfg.stride
- if cfg.pixel_format == 'MJPEG':
+ if str(cfg.pixel_format) == 'MJPEG':
img = Image.open(BytesIO(mfb.planes[0]))
qim = ImageQt(img).copy()
pix = QtGui.QPixmap.fromImage(qim)
diff --git a/src/py/cam/cam_qtgl.py b/src/py/cam/cam_qtgl.py
index 8a95994e..261accb8 100644
--- a/src/py/cam/cam_qtgl.py
+++ b/src/py/cam/cam_qtgl.py
@@ -30,14 +30,6 @@ from OpenGL.GL import shaders
from gl_helpers import *
-# libcamera format string -> DRM fourcc
-FMT_MAP = {
- 'RGB888': 'RG24',
- 'XRGB8888': 'XR24',
- 'ARGB8888': 'AR24',
- 'YUYV': 'YUYV',
-}
-
class EglState:
def __init__(self):
@@ -204,12 +196,6 @@ class MainWindow(QtWidgets.QWidget):
self.current[ctx['idx']] = []
for stream in ctx['streams']:
- fmt = stream.configuration.pixel_format
- size = stream.configuration.size
-
- if fmt not in FMT_MAP:
- raise Exception('Unsupported pixel format: ' + str(fmt))
-
self.textures[stream] = None
num_tiles = len(self.textures)
@@ -281,8 +267,7 @@ class MainWindow(QtWidgets.QWidget):
def create_texture(self, stream, fb):
cfg = stream.configuration
- fmt = cfg.pixel_format
- fmt = str_to_fourcc(FMT_MAP[fmt])
+ fmt = cfg.pixel_format.fourcc
w, h = cfg.size
attribs = [
diff --git a/src/py/cam/gl_helpers.py b/src/py/cam/gl_helpers.py
index ac5e6889..53b3e9df 100644
--- a/src/py/cam/gl_helpers.py
+++ b/src/py/cam/gl_helpers.py
@@ -30,14 +30,6 @@ def getglEGLImageTargetTexture2DOES():
glEGLImageTargetTexture2DOES = getglEGLImageTargetTexture2DOES()
-# \todo This can be dropped when we have proper PixelFormat bindings
-def str_to_fourcc(str):
- assert(len(str) == 4)
- fourcc = 0
- for i, v in enumerate([ord(c) for c in str]):
- fourcc |= v << (i * 8)
- return fourcc
-
def get_gl_extensions():
n = GLint()