Message ID | 20220807021718.9789-5-laurent.pinchart@ideasonboard.com |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Quoting Laurent Pinchart via libcamera-devel (2022-08-07 03:17:18) > Extend the SDL sink with support for NV12 textures, useful on platforms > that don't support packed YUYV formats. > \o/ This will help IPU3 ... I'll try to test this some point this week if I can, if no one else beats me to it. > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > src/cam/sdl_sink.cpp | 3 +++ > src/cam/sdl_texture_yuv.cpp | 13 ++++++++++++- > src/cam/sdl_texture_yuv.h | 9 ++++++++- > 3 files changed, 23 insertions(+), 2 deletions(-) > > diff --git a/src/cam/sdl_sink.cpp b/src/cam/sdl_sink.cpp > index 9675cf275186..23fe2b1e9f05 100644 > --- a/src/cam/sdl_sink.cpp > +++ b/src/cam/sdl_sink.cpp > @@ -67,6 +67,9 @@ int SDLSink::configure(const libcamera::CameraConfiguration &config) > texture_ = std::make_unique<SDLTextureMJPG>(rect_); > break; > #endif > + case libcamera::formats::NV12: > + texture_ = std::make_unique<SDLTextureNV12>(rect_, cfg.stride); > + break; > case libcamera::formats::YUYV: > texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride); > break; > diff --git a/src/cam/sdl_texture_yuv.cpp b/src/cam/sdl_texture_yuv.cpp > index a5721182a68b..431e836d2d2c 100644 > --- a/src/cam/sdl_texture_yuv.cpp > +++ b/src/cam/sdl_texture_yuv.cpp > @@ -2,13 +2,24 @@ > /* > * Copyright (C) 2022, Ideas on Board Oy > * > - * sdl_texture_yuv.cpp - SDL Texture YUYV > + * sdl_texture_yuv.cpp - SDL YUV Textures > */ > > #include "sdl_texture_yuv.h" > > using namespace libcamera; > > +SDLTextureNV12::SDLTextureNV12(const SDL_Rect &rect, unsigned int stride) > + : SDLTexture(rect, SDL_PIXELFORMAT_NV12, stride) > +{ > +} > + > +void SDLTextureNV12::update(const std::vector<libcamera::Span<const uint8_t>> &data) > +{ > + SDL_UpdateNVTexture(ptr_, &rect_, data[0].data(), pitch_, > + data[1].data(), pitch_); Wow! Well that was easy hey. > +} > + > SDLTextureYUYV::SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride) > : SDLTexture(rect, SDL_PIXELFORMAT_YUY2, stride) > { > diff --git a/src/cam/sdl_texture_yuv.h b/src/cam/sdl_texture_yuv.h > index c9130298b91d..9da611fe0e36 100644 > --- a/src/cam/sdl_texture_yuv.h > +++ b/src/cam/sdl_texture_yuv.h > @@ -2,13 +2,20 @@ > /* > * Copyright (C) 2022, Ideas on Board Oy > * > - * sdl_texture_yuyv.h - SDL Texture YUYV > + * sdl_texture_yuyv.h - SDL YUV Textures With /sdl_texture_yuyv/sdl_texture_yuv/ in an earlier patch ;-) Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > */ > > #pragma once > > #include "sdl_texture.h" > > +class SDLTextureNV12 : public SDLTexture > +{ > +public: > + SDLTextureNV12(const SDL_Rect &rect, unsigned int stride); > + void update(const std::vector<libcamera::Span<const uint8_t>> &data) override; > +}; > + > class SDLTextureYUYV : public SDLTexture > { > public: > -- > Regards, > > Laurent Pinchart >
Hi Laurent On Sun, Aug 07, 2022 at 05:17:18AM +0300, Laurent Pinchart via libcamera-devel wrote: > Extend the SDL sink with support for NV12 textures, useful on platforms > that don't support packed YUYV formats. > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > src/cam/sdl_sink.cpp | 3 +++ > src/cam/sdl_texture_yuv.cpp | 13 ++++++++++++- > src/cam/sdl_texture_yuv.h | 9 ++++++++- > 3 files changed, 23 insertions(+), 2 deletions(-) > > diff --git a/src/cam/sdl_sink.cpp b/src/cam/sdl_sink.cpp > index 9675cf275186..23fe2b1e9f05 100644 > --- a/src/cam/sdl_sink.cpp > +++ b/src/cam/sdl_sink.cpp > @@ -67,6 +67,9 @@ int SDLSink::configure(const libcamera::CameraConfiguration &config) > texture_ = std::make_unique<SDLTextureMJPG>(rect_); > break; > #endif > + case libcamera::formats::NV12: > + texture_ = std::make_unique<SDLTextureNV12>(rect_, cfg.stride); > + break; > case libcamera::formats::YUYV: > texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride); > break; > diff --git a/src/cam/sdl_texture_yuv.cpp b/src/cam/sdl_texture_yuv.cpp > index a5721182a68b..431e836d2d2c 100644 > --- a/src/cam/sdl_texture_yuv.cpp > +++ b/src/cam/sdl_texture_yuv.cpp > @@ -2,13 +2,24 @@ > /* > * Copyright (C) 2022, Ideas on Board Oy > * > - * sdl_texture_yuv.cpp - SDL Texture YUYV > + * sdl_texture_yuv.cpp - SDL YUV Textures > */ > > #include "sdl_texture_yuv.h" > > using namespace libcamera; > > +SDLTextureNV12::SDLTextureNV12(const SDL_Rect &rect, unsigned int stride) > + : SDLTexture(rect, SDL_PIXELFORMAT_NV12, stride) > +{ > +} > + > +void SDLTextureNV12::update(const std::vector<libcamera::Span<const uint8_t>> &data) > +{ > + SDL_UpdateNVTexture(ptr_, &rect_, data[0].data(), pitch_, > + data[1].data(), pitch_); > +} > + Alternatively, an overloaded constructor that accepts more plane and handle the right call in update() could be considered. But I guess there won't be that many other classes duplications, so Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Thanks j > SDLTextureYUYV::SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride) > : SDLTexture(rect, SDL_PIXELFORMAT_YUY2, stride) > { > diff --git a/src/cam/sdl_texture_yuv.h b/src/cam/sdl_texture_yuv.h > index c9130298b91d..9da611fe0e36 100644 > --- a/src/cam/sdl_texture_yuv.h > +++ b/src/cam/sdl_texture_yuv.h > @@ -2,13 +2,20 @@ > /* > * Copyright (C) 2022, Ideas on Board Oy > * > - * sdl_texture_yuyv.h - SDL Texture YUYV > + * sdl_texture_yuyv.h - SDL YUV Textures > */ > > #pragma once > > #include "sdl_texture.h" > > +class SDLTextureNV12 : public SDLTexture > +{ > +public: > + SDLTextureNV12(const SDL_Rect &rect, unsigned int stride); > + void update(const std::vector<libcamera::Span<const uint8_t>> &data) override; > +}; > + > class SDLTextureYUYV : public SDLTexture > { > public: > -- > Regards, > > Laurent Pinchart >
Hi Kieran On Sun, Aug 07, 2022 at 11:29:25PM +0100, Kieran Bingham via libcamera-devel wrote: > Quoting Laurent Pinchart via libcamera-devel (2022-08-07 03:17:18) > > Extend the SDL sink with support for NV12 textures, useful on platforms > > that don't support packed YUYV formats. > > > > \o/ > > This will help IPU3 ... I'll try to test this some point this week > if I can, if no one else beats me to it. I tried building the series on cros, but I cannot find any sdl library there :/ > > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > --- > > src/cam/sdl_sink.cpp | 3 +++ > > src/cam/sdl_texture_yuv.cpp | 13 ++++++++++++- > > src/cam/sdl_texture_yuv.h | 9 ++++++++- > > 3 files changed, 23 insertions(+), 2 deletions(-) > > > > diff --git a/src/cam/sdl_sink.cpp b/src/cam/sdl_sink.cpp > > index 9675cf275186..23fe2b1e9f05 100644 > > --- a/src/cam/sdl_sink.cpp > > +++ b/src/cam/sdl_sink.cpp > > @@ -67,6 +67,9 @@ int SDLSink::configure(const libcamera::CameraConfiguration &config) > > texture_ = std::make_unique<SDLTextureMJPG>(rect_); > > break; > > #endif > > + case libcamera::formats::NV12: > > + texture_ = std::make_unique<SDLTextureNV12>(rect_, cfg.stride); > > + break; > > case libcamera::formats::YUYV: > > texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride); > > break; > > diff --git a/src/cam/sdl_texture_yuv.cpp b/src/cam/sdl_texture_yuv.cpp > > index a5721182a68b..431e836d2d2c 100644 > > --- a/src/cam/sdl_texture_yuv.cpp > > +++ b/src/cam/sdl_texture_yuv.cpp > > @@ -2,13 +2,24 @@ > > /* > > * Copyright (C) 2022, Ideas on Board Oy > > * > > - * sdl_texture_yuv.cpp - SDL Texture YUYV > > + * sdl_texture_yuv.cpp - SDL YUV Textures > > */ > > > > #include "sdl_texture_yuv.h" > > > > using namespace libcamera; > > > > +SDLTextureNV12::SDLTextureNV12(const SDL_Rect &rect, unsigned int stride) > > + : SDLTexture(rect, SDL_PIXELFORMAT_NV12, stride) > > +{ > > +} > > + > > +void SDLTextureNV12::update(const std::vector<libcamera::Span<const uint8_t>> &data) > > +{ > > + SDL_UpdateNVTexture(ptr_, &rect_, data[0].data(), pitch_, > > + data[1].data(), pitch_); > > Wow! Well that was easy hey. > > > > +} > > + > > SDLTextureYUYV::SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride) > > : SDLTexture(rect, SDL_PIXELFORMAT_YUY2, stride) > > { > > diff --git a/src/cam/sdl_texture_yuv.h b/src/cam/sdl_texture_yuv.h > > index c9130298b91d..9da611fe0e36 100644 > > --- a/src/cam/sdl_texture_yuv.h > > +++ b/src/cam/sdl_texture_yuv.h > > @@ -2,13 +2,20 @@ > > /* > > * Copyright (C) 2022, Ideas on Board Oy > > * > > - * sdl_texture_yuyv.h - SDL Texture YUYV > > + * sdl_texture_yuyv.h - SDL YUV Textures > > With /sdl_texture_yuyv/sdl_texture_yuv/ in an earlier patch ;-) > > > Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > > > */ > > > > #pragma once > > > > #include "sdl_texture.h" > > > > +class SDLTextureNV12 : public SDLTexture > > +{ > > +public: > > + SDLTextureNV12(const SDL_Rect &rect, unsigned int stride); > > + void update(const std::vector<libcamera::Span<const uint8_t>> &data) override; > > +}; > > + > > class SDLTextureYUYV : public SDLTexture > > { > > public: > > -- > > Regards, > > > > Laurent Pinchart > >
On Sun, 7 Aug 2022 at 03:17, Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote: > > Extend the SDL sink with support for NV12 textures, useful on platforms > that don't support packed YUYV formats. > LGTM. Reviewed-by: Eric Curtin <ecurtin@redhat.com> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > src/cam/sdl_sink.cpp | 3 +++ > src/cam/sdl_texture_yuv.cpp | 13 ++++++++++++- > src/cam/sdl_texture_yuv.h | 9 ++++++++- > 3 files changed, 23 insertions(+), 2 deletions(-) > > diff --git a/src/cam/sdl_sink.cpp b/src/cam/sdl_sink.cpp > index 9675cf275186..23fe2b1e9f05 100644 > --- a/src/cam/sdl_sink.cpp > +++ b/src/cam/sdl_sink.cpp > @@ -67,6 +67,9 @@ int SDLSink::configure(const libcamera::CameraConfiguration &config) > texture_ = std::make_unique<SDLTextureMJPG>(rect_); > break; > #endif > + case libcamera::formats::NV12: > + texture_ = std::make_unique<SDLTextureNV12>(rect_, cfg.stride); > + break; > case libcamera::formats::YUYV: > texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride); > break; > diff --git a/src/cam/sdl_texture_yuv.cpp b/src/cam/sdl_texture_yuv.cpp > index a5721182a68b..431e836d2d2c 100644 > --- a/src/cam/sdl_texture_yuv.cpp > +++ b/src/cam/sdl_texture_yuv.cpp > @@ -2,13 +2,24 @@ > /* > * Copyright (C) 2022, Ideas on Board Oy > * > - * sdl_texture_yuv.cpp - SDL Texture YUYV > + * sdl_texture_yuv.cpp - SDL YUV Textures > */ > > #include "sdl_texture_yuv.h" > > using namespace libcamera; > > +SDLTextureNV12::SDLTextureNV12(const SDL_Rect &rect, unsigned int stride) > + : SDLTexture(rect, SDL_PIXELFORMAT_NV12, stride) > +{ > +} > + > +void SDLTextureNV12::update(const std::vector<libcamera::Span<const uint8_t>> &data) > +{ > + SDL_UpdateNVTexture(ptr_, &rect_, data[0].data(), pitch_, > + data[1].data(), pitch_); > +} > + > SDLTextureYUYV::SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride) > : SDLTexture(rect, SDL_PIXELFORMAT_YUY2, stride) > { > diff --git a/src/cam/sdl_texture_yuv.h b/src/cam/sdl_texture_yuv.h > index c9130298b91d..9da611fe0e36 100644 > --- a/src/cam/sdl_texture_yuv.h > +++ b/src/cam/sdl_texture_yuv.h > @@ -2,13 +2,20 @@ > /* > * Copyright (C) 2022, Ideas on Board Oy > * > - * sdl_texture_yuyv.h - SDL Texture YUYV > + * sdl_texture_yuyv.h - SDL YUV Textures > */ > > #pragma once > > #include "sdl_texture.h" > > +class SDLTextureNV12 : public SDLTexture > +{ > +public: > + SDLTextureNV12(const SDL_Rect &rect, unsigned int stride); > + void update(const std::vector<libcamera::Span<const uint8_t>> &data) override; > +}; > + > class SDLTextureYUYV : public SDLTexture > { > public: > -- > Regards, > > Laurent Pinchart >
Hi Jacopo, On Mon, Aug 08, 2022 at 10:30:50AM +0200, Jacopo Mondi wrote: > On Sun, Aug 07, 2022 at 05:17:18AM +0300, Laurent Pinchart via libcamera-devel wrote: > > Extend the SDL sink with support for NV12 textures, useful on platforms > > that don't support packed YUYV formats. > > > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > --- > > src/cam/sdl_sink.cpp | 3 +++ > > src/cam/sdl_texture_yuv.cpp | 13 ++++++++++++- > > src/cam/sdl_texture_yuv.h | 9 ++++++++- > > 3 files changed, 23 insertions(+), 2 deletions(-) > > > > diff --git a/src/cam/sdl_sink.cpp b/src/cam/sdl_sink.cpp > > index 9675cf275186..23fe2b1e9f05 100644 > > --- a/src/cam/sdl_sink.cpp > > +++ b/src/cam/sdl_sink.cpp > > @@ -67,6 +67,9 @@ int SDLSink::configure(const libcamera::CameraConfiguration &config) > > texture_ = std::make_unique<SDLTextureMJPG>(rect_); > > break; > > #endif > > + case libcamera::formats::NV12: > > + texture_ = std::make_unique<SDLTextureNV12>(rect_, cfg.stride); > > + break; > > case libcamera::formats::YUYV: > > texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride); > > break; > > diff --git a/src/cam/sdl_texture_yuv.cpp b/src/cam/sdl_texture_yuv.cpp > > index a5721182a68b..431e836d2d2c 100644 > > --- a/src/cam/sdl_texture_yuv.cpp > > +++ b/src/cam/sdl_texture_yuv.cpp > > @@ -2,13 +2,24 @@ > > /* > > * Copyright (C) 2022, Ideas on Board Oy > > * > > - * sdl_texture_yuv.cpp - SDL Texture YUYV > > + * sdl_texture_yuv.cpp - SDL YUV Textures > > */ > > > > #include "sdl_texture_yuv.h" > > > > using namespace libcamera; > > > > +SDLTextureNV12::SDLTextureNV12(const SDL_Rect &rect, unsigned int stride) > > + : SDLTexture(rect, SDL_PIXELFORMAT_NV12, stride) > > +{ > > +} > > + > > +void SDLTextureNV12::update(const std::vector<libcamera::Span<const uint8_t>> &data) > > +{ > > + SDL_UpdateNVTexture(ptr_, &rect_, data[0].data(), pitch_, > > + data[1].data(), pitch_); > > +} > > + > > Alternatively, an overloaded constructor that accepts more plane and > handle the right call in update() could be considered. > > But I guess there won't be that many other classes duplications, so > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Let's consider that next time we add a new format :-) > > SDLTextureYUYV::SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride) > > : SDLTexture(rect, SDL_PIXELFORMAT_YUY2, stride) > > { > > diff --git a/src/cam/sdl_texture_yuv.h b/src/cam/sdl_texture_yuv.h > > index c9130298b91d..9da611fe0e36 100644 > > --- a/src/cam/sdl_texture_yuv.h > > +++ b/src/cam/sdl_texture_yuv.h > > @@ -2,13 +2,20 @@ > > /* > > * Copyright (C) 2022, Ideas on Board Oy > > * > > - * sdl_texture_yuyv.h - SDL Texture YUYV > > + * sdl_texture_yuyv.h - SDL YUV Textures > > */ > > > > #pragma once > > > > #include "sdl_texture.h" > > > > +class SDLTextureNV12 : public SDLTexture > > +{ > > +public: > > + SDLTextureNV12(const SDL_Rect &rect, unsigned int stride); > > + void update(const std::vector<libcamera::Span<const uint8_t>> &data) override; > > +}; > > + > > class SDLTextureYUYV : public SDLTexture > > { > > public:
diff --git a/src/cam/sdl_sink.cpp b/src/cam/sdl_sink.cpp index 9675cf275186..23fe2b1e9f05 100644 --- a/src/cam/sdl_sink.cpp +++ b/src/cam/sdl_sink.cpp @@ -67,6 +67,9 @@ int SDLSink::configure(const libcamera::CameraConfiguration &config) texture_ = std::make_unique<SDLTextureMJPG>(rect_); break; #endif + case libcamera::formats::NV12: + texture_ = std::make_unique<SDLTextureNV12>(rect_, cfg.stride); + break; case libcamera::formats::YUYV: texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride); break; diff --git a/src/cam/sdl_texture_yuv.cpp b/src/cam/sdl_texture_yuv.cpp index a5721182a68b..431e836d2d2c 100644 --- a/src/cam/sdl_texture_yuv.cpp +++ b/src/cam/sdl_texture_yuv.cpp @@ -2,13 +2,24 @@ /* * Copyright (C) 2022, Ideas on Board Oy * - * sdl_texture_yuv.cpp - SDL Texture YUYV + * sdl_texture_yuv.cpp - SDL YUV Textures */ #include "sdl_texture_yuv.h" using namespace libcamera; +SDLTextureNV12::SDLTextureNV12(const SDL_Rect &rect, unsigned int stride) + : SDLTexture(rect, SDL_PIXELFORMAT_NV12, stride) +{ +} + +void SDLTextureNV12::update(const std::vector<libcamera::Span<const uint8_t>> &data) +{ + SDL_UpdateNVTexture(ptr_, &rect_, data[0].data(), pitch_, + data[1].data(), pitch_); +} + SDLTextureYUYV::SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride) : SDLTexture(rect, SDL_PIXELFORMAT_YUY2, stride) { diff --git a/src/cam/sdl_texture_yuv.h b/src/cam/sdl_texture_yuv.h index c9130298b91d..9da611fe0e36 100644 --- a/src/cam/sdl_texture_yuv.h +++ b/src/cam/sdl_texture_yuv.h @@ -2,13 +2,20 @@ /* * Copyright (C) 2022, Ideas on Board Oy * - * sdl_texture_yuyv.h - SDL Texture YUYV + * sdl_texture_yuyv.h - SDL YUV Textures */ #pragma once #include "sdl_texture.h" +class SDLTextureNV12 : public SDLTexture +{ +public: + SDLTextureNV12(const SDL_Rect &rect, unsigned int stride); + void update(const std::vector<libcamera::Span<const uint8_t>> &data) override; +}; + class SDLTextureYUYV : public SDLTexture { public:
Extend the SDL sink with support for NV12 textures, useful on platforms that don't support packed YUYV formats. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- src/cam/sdl_sink.cpp | 3 +++ src/cam/sdl_texture_yuv.cpp | 13 ++++++++++++- src/cam/sdl_texture_yuv.h | 9 ++++++++- 3 files changed, 23 insertions(+), 2 deletions(-)