diff options
author | Barnabás Pőcze <barnabas.pocze@ideasonboard.com> | 2025-04-18 14:57:36 +0200 |
---|---|---|
committer | Barnabás Pőcze <barnabas.pocze@ideasonboard.com> | 2025-05-15 17:41:36 +0200 |
commit | b24cd1229348764e20a360805b946537d1f8fe13 (patch) | |
tree | 0fa91082b26175bd0ccd667e0f19a49c0d90db9c /src/apps/cam/sdl_texture_1plane.cpp | |
parent | 41b0997114c1e1c09d001cb6241d5ce861e21e61 (diff) |
apps: cam: sdl_texture: Add `SDLTexture1Plane`
`SDLTextureYUYV` uses `SDL_PIXELFORMAT_YUY2`, which is a single plane
format. To support other single plane formats, replace `SDLTextureYUYV`
with `SDLTexture1Plane` that can be instantiated with an arbitrary SDL
pixel format and that uses `SDL_UpdateTexture()` to update the texture
using exactly a single plane.
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/apps/cam/sdl_texture_1plane.cpp')
-rw-r--r-- | src/apps/cam/sdl_texture_1plane.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/apps/cam/sdl_texture_1plane.cpp b/src/apps/cam/sdl_texture_1plane.cpp new file mode 100644 index 00000000..b97015bc --- /dev/null +++ b/src/apps/cam/sdl_texture_1plane.cpp @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2025, Ideas on Board Oy + * + * SDL single plane textures + */ + +#include "sdl_texture_1plane.h" + +#include <assert.h> + +void SDLTexture1Plane::update(libcamera::Span<const libcamera::Span<const uint8_t>> data) +{ + assert(data.size() == 1); + assert(data[0].size_bytes() == std::size_t(rect_.h) * std::size_t(stride_)); + SDL_UpdateTexture(ptr_, nullptr, data[0].data(), stride_); +} |