| Message ID | 20261019224902.177382-3-robert.mader@collabora.com |
|---|---|
| State | New |
| Headers | show |
| Series |
|
| Related | show |
On Tue, Oct 20, 2026 at 12:49:01AM +0200, Robert Mader wrote: > In preparation of supporting more output formats, compute the stride > based on the used format instead of hardcoding it. > > Signed-off-by: Robert Mader <robert.mader@collabora.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > src/libcamera/pipeline/virtual/image_frame_generator.cpp | 7 +++++-- > .../pipeline/virtual/test_pattern_generator.cpp | 9 +++++++-- > 2 files changed, 12 insertions(+), 4 deletions(-) > > diff --git a/src/libcamera/pipeline/virtual/image_frame_generator.cpp b/src/libcamera/pipeline/virtual/image_frame_generator.cpp > index 1853bddeca27..5caad8b72763 100644 > --- a/src/libcamera/pipeline/virtual/image_frame_generator.cpp > +++ b/src/libcamera/pipeline/virtual/image_frame_generator.cpp > @@ -12,9 +12,11 @@ > #include <libcamera/base/file.h> > #include <libcamera/base/log.h> > > +#include <libcamera/formats.h> > #include <libcamera/framebuffer.h> > > #include "libcamera/internal/dma_buf_allocator.h" > +#include "libcamera/internal/formats.h" > #include "libcamera/internal/mapped_framebuffer.h" > > #include "libyuv/convert.h" > @@ -141,6 +143,7 @@ int ImageFrameGenerator::generateFrame(const Size &size, const FrameBuffer *buff > MappedFrameBuffer::MapFlag::Write); > > const auto &planes = mappedFrameBuffer.planes(); > + const PixelFormatInfo &info = PixelFormatInfo::info(formats::NV12); > > /* Loop only around the number of images available */ > frameIndex_ %= imageFrameDatas_.size(); > @@ -148,8 +151,8 @@ int ImageFrameGenerator::generateFrame(const Size &size, const FrameBuffer *buff > /* Write the scaledY and scaledUV to the mapped frame buffer */ > libyuv::NV12Copy(scaledFrameDatas_[frameIndex_].Y.get(), size.width, > scaledFrameDatas_[frameIndex_].UV.get(), size.width, > - planes[0].data(), size.width, > - planes[1].data(), size.width, > + planes[0].data(), info.stride(size.width, 0), > + planes[1].data(), info.stride(size.width, 1), > size.width, size.height); > > /* Proceed to the next image every 4 frames */ > diff --git a/src/libcamera/pipeline/virtual/test_pattern_generator.cpp b/src/libcamera/pipeline/virtual/test_pattern_generator.cpp > index 7b53e8b32327..571be4fbf65d 100644 > --- a/src/libcamera/pipeline/virtual/test_pattern_generator.cpp > +++ b/src/libcamera/pipeline/virtual/test_pattern_generator.cpp > @@ -11,7 +11,9 @@ > > #include <libcamera/base/log.h> > > +#include <libcamera/formats.h> > #include "libcamera/internal/dma_buf_allocator.h" > +#include "libcamera/internal/formats.h" > #include "libcamera/internal/mapped_framebuffer.h" > > #include <libyuv/convert_from_argb.h> > @@ -58,13 +60,16 @@ int TestPatternGenerator::generateFrame(const Size &size, > MappedFrameBuffer::MapFlag::Write); > > const auto &planes = mappedFrameBuffer.planes(); > + const PixelFormatInfo &info = PixelFormatInfo::info(formats::NV12); > > rotateLeft1Column<kARGBSize>(size, template_.get()); > > /* Convert the template_ to the frame buffer */ > int ret = libyuv::ARGBToNV12(template_.get(), size.width * kARGBSize, > - planes[0].data(), size.width, > - planes[1].data(), size.width, > + planes[0].data(), > + info.stride(size.width, 0), > + planes[1].data(), > + info.stride(size.width, 1), > size.width, size.height); > if (ret != 0) > LOG(Virtual, Error) << "ARGBToNV12() failed with " << ret;
diff --git a/src/libcamera/pipeline/virtual/image_frame_generator.cpp b/src/libcamera/pipeline/virtual/image_frame_generator.cpp index 1853bddeca27..5caad8b72763 100644 --- a/src/libcamera/pipeline/virtual/image_frame_generator.cpp +++ b/src/libcamera/pipeline/virtual/image_frame_generator.cpp @@ -12,9 +12,11 @@ #include <libcamera/base/file.h> #include <libcamera/base/log.h> +#include <libcamera/formats.h> #include <libcamera/framebuffer.h> #include "libcamera/internal/dma_buf_allocator.h" +#include "libcamera/internal/formats.h" #include "libcamera/internal/mapped_framebuffer.h" #include "libyuv/convert.h" @@ -141,6 +143,7 @@ int ImageFrameGenerator::generateFrame(const Size &size, const FrameBuffer *buff MappedFrameBuffer::MapFlag::Write); const auto &planes = mappedFrameBuffer.planes(); + const PixelFormatInfo &info = PixelFormatInfo::info(formats::NV12); /* Loop only around the number of images available */ frameIndex_ %= imageFrameDatas_.size(); @@ -148,8 +151,8 @@ int ImageFrameGenerator::generateFrame(const Size &size, const FrameBuffer *buff /* Write the scaledY and scaledUV to the mapped frame buffer */ libyuv::NV12Copy(scaledFrameDatas_[frameIndex_].Y.get(), size.width, scaledFrameDatas_[frameIndex_].UV.get(), size.width, - planes[0].data(), size.width, - planes[1].data(), size.width, + planes[0].data(), info.stride(size.width, 0), + planes[1].data(), info.stride(size.width, 1), size.width, size.height); /* Proceed to the next image every 4 frames */ diff --git a/src/libcamera/pipeline/virtual/test_pattern_generator.cpp b/src/libcamera/pipeline/virtual/test_pattern_generator.cpp index 7b53e8b32327..571be4fbf65d 100644 --- a/src/libcamera/pipeline/virtual/test_pattern_generator.cpp +++ b/src/libcamera/pipeline/virtual/test_pattern_generator.cpp @@ -11,7 +11,9 @@ #include <libcamera/base/log.h> +#include <libcamera/formats.h> #include "libcamera/internal/dma_buf_allocator.h" +#include "libcamera/internal/formats.h" #include "libcamera/internal/mapped_framebuffer.h" #include <libyuv/convert_from_argb.h> @@ -58,13 +60,16 @@ int TestPatternGenerator::generateFrame(const Size &size, MappedFrameBuffer::MapFlag::Write); const auto &planes = mappedFrameBuffer.planes(); + const PixelFormatInfo &info = PixelFormatInfo::info(formats::NV12); rotateLeft1Column<kARGBSize>(size, template_.get()); /* Convert the template_ to the frame buffer */ int ret = libyuv::ARGBToNV12(template_.get(), size.width * kARGBSize, - planes[0].data(), size.width, - planes[1].data(), size.width, + planes[0].data(), + info.stride(size.width, 0), + planes[1].data(), + info.stride(size.width, 1), size.width, size.height); if (ret != 0) LOG(Virtual, Error) << "ARGBToNV12() failed with " << ret;
In preparation of supporting more output formats, compute the stride based on the used format instead of hardcoding it. Signed-off-by: Robert Mader <robert.mader@collabora.com> --- src/libcamera/pipeline/virtual/image_frame_generator.cpp | 7 +++++-- .../pipeline/virtual/test_pattern_generator.cpp | 9 +++++++-- 2 files changed, 12 insertions(+), 4 deletions(-)