[RFC PATCH v1 2/5] apps: cam: sdl_texture: Add single plane generic texture
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Apr 24 16:28:51 CEST 2025
Hi Barnabás,
On Thu, Apr 24, 2025 at 01:29:54PM +0200, Barnabás Pőcze wrote:
> 2025. 04. 23. 1:40 keltezéssel, Laurent Pinchart írta:
> > On Mon, Apr 21, 2025 at 05:51:06PM +0200, Barnabás Pőcze wrote:
> >> Add the `SDLTexture1Plane` type that can be instantiated with
> >> an arbitrary SDL pixel format and that uses `SDL_UpdateTexture()`
> >> to update the texture using exactly a single plane.
> >
> > You can squash patches 2/5, 3/5 and 4/5 together. The commit message can
> > be reworded to explain how SDLTextureYUYV is generalized for later use
> > with other 1-plane formats.
> >
> >> Signed-off-by: Barnabás Pőcze <barnabas.pocze at ideasonboard.com>
> >> ---
> >> src/apps/cam/sdl_texture_1plane.h | 18 ++++++++++++++++++
> >> 1 file changed, 18 insertions(+)
> >> create mode 100644 src/apps/cam/sdl_texture_1plane.h
> >>
> >> diff --git a/src/apps/cam/sdl_texture_1plane.h b/src/apps/cam/sdl_texture_1plane.h
> >> new file mode 100644
> >> index 000000000..ded35c589
> >> --- /dev/null
> >> +++ b/src/apps/cam/sdl_texture_1plane.h
> >> @@ -0,0 +1,18 @@
> >> +#pragma once
> >> +
> >> +#include <assert.h>
> >> +
> >> +#include "sdl_texture.h"
> >> +
> >> +class SDLTexture1Plane final : public SDLTexture
> >> +{
> >> +public:
> >> + using SDLTexture::SDLTexture;
> >> +
> >> + void update(libcamera::Span<const libcamera::Span<const uint8_t>> data) override
> >> + {
> >> + assert(data.size() == 1);
> >> + assert(data[0].size_bytes() == std::size_t(rect_.h * stride_));
> >> + SDL_UpdateTexture(ptr_, nullptr, data[0].data(), stride_);
> >
> > No need to pass &rect_ as the second argument, like done by
> > SDLTextureYUYV ?
>
> As far as I can see it is only required if only a part of the texture is to be updated,
> and if it is `nullptr, then SDL updates the full size of the texture, which is what
> is wanted here.
>
> https://github.com/libsdl-org/SDL/blob/3343cb21473ea454261bc4187393aaec9cc3f28f/src/render/SDL_render.c#L2153
Indeed. It seems it was a bug to pass &rect_ to the SDL_UpdateTexture()
call. It causes no issue in practice as rect_ always covers the full
size of the image in the current code.
Could you drop the rect argument in a separate patch ? It should also be
dropped from SDL_UpdateNVTexture(), which this series doesn't touch.
> >> + }
> >> +};
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list