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>
This commit is contained in:
committed by
Laurent Pinchart
parent
11a271b292
commit
fa7bda46f8
+1
-1
@@ -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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
+1
-16
@@ -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 = [
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user