Message ID | ZXiaHtJPfB/znr6p@duo.ucw.cz |
---|---|
State | New |
Headers | show |
Series |
|
Related | show |
Quoting Pavel Machek (2023-12-12 17:36:30) > > Briefly tested on PinePhone, it is useful for SoftISP testing. Commit messages should ideally describe the code change. Perhaps: """ SDL Supports SDL_PIXELFORMAT_BGR24 which maps directly to the libcamera pixelformat RGB888. Add this to enable rendering RGB single planar image formats with SDL. """ I would suggest this could be tested with VIMC which can produce both RGB888 and BGR888 as far as I can recall. And probably both formats should be tested and added. (with the commit message reflecting both formats then) > > Signed-off-by: Pavel Machek <pavel@ucw.cz> > > diff --git a/src/apps/cam/sdl_sink.cpp b/src/apps/cam/sdl_sink.cpp > index a2f4abc1..105fa781 100644 > --- a/src/apps/cam/sdl_sink.cpp > +++ b/src/apps/cam/sdl_sink.cpp > @@ -76,6 +76,9 @@ int SDLSink::configure(const libcamera::CameraConfiguration &config) > case libcamera::formats::YUYV: > texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride); > break; > + case libcamera::formats::RGB888: > + texture_ = std::make_unique<SDLTextureRGB888>(rect_, cfg.stride); > + break; > default: > std::cerr << "Unsupported pixel format " > << cfg.pixelFormat.toString() << std::endl; > diff --git a/src/apps/cam/sdl_texture_yuv.cpp b/src/apps/cam/sdl_texture_yuv.cpp > index b29c3b93..bb066540 100644 > --- a/src/apps/cam/sdl_texture_yuv.cpp > +++ b/src/apps/cam/sdl_texture_yuv.cpp I don't think RGB888 should be within texture_yuy.cpp file though. Either we break out to sdl_texture_rgb.cpp (and perhaps add both RGB888 and BGR888 to get started) or we should rename sdl_texture_yuv to something more appropriate. > @@ -31,3 +31,13 @@ void SDLTextureYUYV::update(const std::vector<libcamera::Span<const uint8_t>> &d > { > SDL_UpdateTexture(ptr_, &rect_, data[0].data(), stride_); > } > + > +SDLTextureRGB888::SDLTextureRGB888(const SDL_Rect &rect, unsigned int stride) > + : SDLTexture(rect, SDL_PIXELFORMAT_BGR24, stride) > +{ > +} > + > +void SDLTextureRGB888::update(const std::vector<libcamera::Span<const uint8_t>> &data) > +{ > + SDL_UpdateTexture(ptr_, &rect_, data[0].data(), stride_); > +} > diff --git a/src/apps/cam/sdl_texture_yuv.h b/src/apps/cam/sdl_texture_yuv.h > index 310e4e50..0df6b445 100644 > --- a/src/apps/cam/sdl_texture_yuv.h > +++ b/src/apps/cam/sdl_texture_yuv.h > @@ -24,3 +24,10 @@ public: > SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride); > void update(const std::vector<libcamera::Span<const uint8_t>> &data) override; > }; > + > +class SDLTextureRGB888 : public SDLTexture > +{ > +public: > + SDLTextureRGB888(const SDL_Rect &rect, unsigned int stride); > + void update(const std::vector<libcamera::Span<const uint8_t>> &data) override; > +}; > > -- > People of Russia, stop Putin before his war on Ukraine escalates.
diff --git a/src/apps/cam/sdl_sink.cpp b/src/apps/cam/sdl_sink.cpp index a2f4abc1..105fa781 100644 --- a/src/apps/cam/sdl_sink.cpp +++ b/src/apps/cam/sdl_sink.cpp @@ -76,6 +76,9 @@ int SDLSink::configure(const libcamera::CameraConfiguration &config) case libcamera::formats::YUYV: texture_ = std::make_unique<SDLTextureYUYV>(rect_, cfg.stride); break; + case libcamera::formats::RGB888: + texture_ = std::make_unique<SDLTextureRGB888>(rect_, cfg.stride); + break; default: std::cerr << "Unsupported pixel format " << cfg.pixelFormat.toString() << std::endl; diff --git a/src/apps/cam/sdl_texture_yuv.cpp b/src/apps/cam/sdl_texture_yuv.cpp index b29c3b93..bb066540 100644 --- a/src/apps/cam/sdl_texture_yuv.cpp +++ b/src/apps/cam/sdl_texture_yuv.cpp @@ -31,3 +31,13 @@ void SDLTextureYUYV::update(const std::vector<libcamera::Span<const uint8_t>> &d { SDL_UpdateTexture(ptr_, &rect_, data[0].data(), stride_); } + +SDLTextureRGB888::SDLTextureRGB888(const SDL_Rect &rect, unsigned int stride) + : SDLTexture(rect, SDL_PIXELFORMAT_BGR24, stride) +{ +} + +void SDLTextureRGB888::update(const std::vector<libcamera::Span<const uint8_t>> &data) +{ + SDL_UpdateTexture(ptr_, &rect_, data[0].data(), stride_); +} diff --git a/src/apps/cam/sdl_texture_yuv.h b/src/apps/cam/sdl_texture_yuv.h index 310e4e50..0df6b445 100644 --- a/src/apps/cam/sdl_texture_yuv.h +++ b/src/apps/cam/sdl_texture_yuv.h @@ -24,3 +24,10 @@ public: SDLTextureYUYV(const SDL_Rect &rect, unsigned int stride); void update(const std::vector<libcamera::Span<const uint8_t>> &data) override; }; + +class SDLTextureRGB888 : public SDLTexture +{ +public: + SDLTextureRGB888(const SDL_Rect &rect, unsigned int stride); + void update(const std::vector<libcamera::Span<const uint8_t>> &data) override; +};
Briefly tested on PinePhone, it is useful for SoftISP testing. Signed-off-by: Pavel Machek <pavel@ucw.cz>