[libcamera-devel] [PATCH v3 2/4] libcamera: framebuffer_allocator: Make allocate() require count
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Apr 26 04:59:09 CEST 2021
Hi Nícolas,
Thank you for the patch.
On Wed, Apr 21, 2021 at 01:51:37PM -0300, Nícolas F. R. A. Prado wrote:
> Make FrameBufferAllocator::allocate() require a 'count' argument for the
> amount of buffers to be allocated.
>
> Signed-off-by: Nícolas F. R. A. Prado <nfraprado at collabora.com>
> ---
> include/libcamera/camera.h | 2 +-
> include/libcamera/framebuffer_allocator.h | 2 +-
> include/libcamera/internal/pipeline_handler.h | 2 +-
> src/cam/capture.cpp | 10 ++++------
> src/gstreamer/gstlibcameraallocator.cpp | 4 +++-
> src/lc-compliance/simple_capture.cpp | 13 +++++++++++--
> src/lc-compliance/simple_capture.h | 1 +
> src/lc-compliance/single_stream.cpp | 6 ++++++
> src/libcamera/camera.cpp | 4 ++--
> src/libcamera/framebuffer_allocator.cpp | 5 +++--
> src/libcamera/pipeline/ipu3/ipu3.cpp | 4 ++--
> src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 4 ++--
> src/libcamera/pipeline/rkisp1/rkisp1.cpp | 4 ++--
> src/libcamera/pipeline/simple/simple.cpp | 4 ++--
> src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 7 ++++---
> src/libcamera/pipeline/vimc/vimc.cpp | 7 ++++---
> src/libcamera/pipeline_handler.cpp | 1 +
> src/qcam/main_window.cpp | 4 +++-
> src/v4l2/v4l2_camera.cpp | 2 +-
> test/camera/capture.cpp | 4 +++-
> test/camera/statemachine.cpp | 4 +++-
> test/mapped-buffer.cpp | 4 +++-
> 22 files changed, 63 insertions(+), 35 deletions(-)
>
> diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h
> index d71641805c0a..656cd92aecde 100644
> --- a/include/libcamera/camera.h
> +++ b/include/libcamera/camera.h
> @@ -115,7 +115,7 @@ private:
> void requestComplete(Request *request);
>
> friend class FrameBufferAllocator;
> - int exportFrameBuffers(Stream *stream,
> + int exportFrameBuffers(Stream *stream, unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers);
> };
>
> diff --git a/include/libcamera/framebuffer_allocator.h b/include/libcamera/framebuffer_allocator.h
> index 0c85631a1da2..f1ae37288d50 100644
> --- a/include/libcamera/framebuffer_allocator.h
> +++ b/include/libcamera/framebuffer_allocator.h
> @@ -25,7 +25,7 @@ public:
> FrameBufferAllocator(std::shared_ptr<Camera> camera);
> ~FrameBufferAllocator();
>
> - int allocate(Stream *stream);
> + int allocate(Stream *stream, unsigned int count);
> int free(Stream *stream);
>
> bool allocated() const { return !buffers_.empty(); }
> diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h
> index c6454db6b2c4..dc04ba041fe5 100644
> --- a/include/libcamera/internal/pipeline_handler.h
> +++ b/include/libcamera/internal/pipeline_handler.h
> @@ -75,7 +75,7 @@ public:
> const StreamRoles &roles) = 0;
> virtual int configure(Camera *camera, CameraConfiguration *config) = 0;
>
> - virtual int exportFrameBuffers(Camera *camera, Stream *stream,
> + virtual int exportFrameBuffers(Camera *camera, Stream *stream, unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers) = 0;
>
> virtual int start(Camera *camera, const ControlList *controls) = 0;
> diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp
> index 7b55fc677022..8ad121f5adc8 100644
> --- a/src/cam/capture.cpp
> +++ b/src/cam/capture.cpp
> @@ -10,6 +10,8 @@
> #include <limits.h>
> #include <sstream>
>
> +#include <libcamera/property_ids.h>
> +
> #include "capture.h"
> #include "main.h"
>
> @@ -77,17 +79,13 @@ int Capture::capture(FrameBufferAllocator *allocator)
> {
> int ret;
>
> - /* Identify the stream with the least number of buffers. */
> - unsigned int nbuffers = UINT_MAX;
> + unsigned int nbuffers = camera_->properties().get(properties::QueueDepth);
> for (StreamConfiguration &cfg : *config_) {
> - ret = allocator->allocate(cfg.stream());
> + ret = allocator->allocate(cfg.stream(), nbuffers);
> if (ret < 0) {
> std::cerr << "Can't allocate buffers" << std::endl;
> return -ENOMEM;
> }
> -
> - unsigned int allocated = allocator->buffers(cfg.stream()).size();
> - nbuffers = std::min(nbuffers, allocated);
If not enough memory is available to allocate nbuffers, or if a driver
decides that the number is too high, we could receive less buffers than
requested. We would then crash below, when creating the requests. I
think we still need to handle this case.
> }
>
> /*
> diff --git a/src/gstreamer/gstlibcameraallocator.cpp b/src/gstreamer/gstlibcameraallocator.cpp
> index 7bd8ba2db71d..e7a5b5a27226 100644
> --- a/src/gstreamer/gstlibcameraallocator.cpp
> +++ b/src/gstreamer/gstlibcameraallocator.cpp
> @@ -10,6 +10,7 @@
>
> #include <libcamera/camera.h>
> #include <libcamera/framebuffer_allocator.h>
> +#include <libcamera/property_ids.h>
> #include <libcamera/stream.h>
>
> #include "gstlibcamera-utils.h"
> @@ -188,13 +189,14 @@ gst_libcamera_allocator_new(std::shared_ptr<Camera> camera,
> {
> auto *self = GST_LIBCAMERA_ALLOCATOR(g_object_new(GST_TYPE_LIBCAMERA_ALLOCATOR,
> nullptr));
> + int bufferCount = camera->properties().get(properties::QueueDepth);
It's an unsigned int above, should it be unsigned here too ? Same for
lc-compliance and other places below.
>
> self->fb_allocator = new FrameBufferAllocator(camera);
> for (StreamConfiguration &streamCfg : *config_) {
> Stream *stream = streamCfg.stream();
> gint ret;
>
> - ret = self->fb_allocator->allocate(stream);
> + ret = self->fb_allocator->allocate(stream, bufferCount);
> if (ret == 0)
> return nullptr;
>
> diff --git a/src/lc-compliance/simple_capture.cpp b/src/lc-compliance/simple_capture.cpp
> index 64e862a08e3a..875772a80c27 100644
> --- a/src/lc-compliance/simple_capture.cpp
> +++ b/src/lc-compliance/simple_capture.cpp
> @@ -5,6 +5,8 @@
> * simple_capture.cpp - Simple capture helper
> */
>
> +#include <libcamera/property_ids.h>
> +
> #include "simple_capture.h"
>
> using namespace libcamera;
> @@ -39,12 +41,19 @@ Results::Result SimpleCapture::configure(StreamRole role)
> return { Results::Pass, "Configure camera" };
> }
>
> -Results::Result SimpleCapture::start()
> +Results::Result SimpleCapture::allocateBuffers()
> {
> + int minBuffers = camera_->properties().get(properties::QueueDepth);
Depending on how you decide to document and name QueueDepth (see the
review of 1/4), this variable may be better named numBuffers (or
something else).
> Stream *stream = config_->at(0).stream();
> - if (allocator_->allocate(stream) < 0)
> +
> + if (allocator_->allocate(stream, minBuffers) < 0)
> return { Results::Fail, "Failed to allocate buffers" };
>
> + return { Results::Pass, "Allocated buffers" };
Do we need a message when returning Pass ?
> +}
> +
> +Results::Result SimpleCapture::start()
> +{
> if (camera_->start())
> return { Results::Fail, "Failed to start camera" };
>
> diff --git a/src/lc-compliance/simple_capture.h b/src/lc-compliance/simple_capture.h
> index d9de53fb63a3..82e2c56a55f1 100644
> --- a/src/lc-compliance/simple_capture.h
> +++ b/src/lc-compliance/simple_capture.h
> @@ -18,6 +18,7 @@ class SimpleCapture
> {
> public:
> Results::Result configure(libcamera::StreamRole role);
> + Results::Result allocateBuffers();
>
> protected:
> SimpleCapture(std::shared_ptr<libcamera::Camera> camera);
> diff --git a/src/lc-compliance/single_stream.cpp b/src/lc-compliance/single_stream.cpp
> index 8318b42f42d6..649291c7bb73 100644
> --- a/src/lc-compliance/single_stream.cpp
> +++ b/src/lc-compliance/single_stream.cpp
> @@ -23,6 +23,9 @@ Results::Result testRequestBalance(std::shared_ptr<Camera> camera,
> return ret;
>
> for (unsigned int starts = 0; starts < startCycles; starts++) {
> + capture.allocateBuffers();
> + if (ret.first != Results::Pass)
> + return ret;
> ret = capture.capture(numRequests);
> if (ret.first != Results::Pass)
> return ret;
> @@ -39,6 +42,9 @@ Results::Result testRequestUnbalance(std::shared_ptr<Camera> camera,
> SimpleCaptureUnbalanced capture(camera);
>
> Results::Result ret = capture.configure(role);
> + if (ret.first != Results::Pass)
> + return ret;
> + capture.allocateBuffers();
> if (ret.first != Results::Pass)
> return ret;
>
> diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
> index 763f3b9926fd..e4da6e042bd0 100644
> --- a/src/libcamera/camera.cpp
> +++ b/src/libcamera/camera.cpp
> @@ -656,7 +656,7 @@ void Camera::disconnect()
> disconnected.emit(this);
> }
>
> -int Camera::exportFrameBuffers(Stream *stream,
> +int Camera::exportFrameBuffers(Stream *stream, unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers)
> {
> Private *const d = LIBCAMERA_D_PTR();
> @@ -673,7 +673,7 @@ int Camera::exportFrameBuffers(Stream *stream,
>
> return d->pipe_->invokeMethod(&PipelineHandler::exportFrameBuffers,
> ConnectionTypeBlocking, this, stream,
> - buffers);
> + count, buffers);
> }
>
> /**
> diff --git a/src/libcamera/framebuffer_allocator.cpp b/src/libcamera/framebuffer_allocator.cpp
> index 2fbba37a1b0b..92d121f8c4ac 100644
> --- a/src/libcamera/framebuffer_allocator.cpp
> +++ b/src/libcamera/framebuffer_allocator.cpp
> @@ -70,6 +70,7 @@ FrameBufferAllocator::~FrameBufferAllocator()
> /**
> * \brief Allocate buffers for a configured stream
> * \param[in] stream The stream to allocate buffers for
> + * \param[in] count The amount of buffers to allocate
s/amount/number/
Should this be also updated to explicitly mention that the number of
allocated buffers may be different than count ? Same for the
PipelineHandler class below.
> *
> * Allocate buffers suitable for capturing frames from the \a stream. The Camera
> * shall have been previously configured with Camera::configure() and shall be
> @@ -85,14 +86,14 @@ FrameBufferAllocator::~FrameBufferAllocator()
> * not part of the active camera configuration
> * \retval -EBUSY Buffers are already allocated for the \a stream
> */
> -int FrameBufferAllocator::allocate(Stream *stream)
> +int FrameBufferAllocator::allocate(Stream *stream, unsigned int count)
> {
> if (buffers_.count(stream)) {
> LOG(Allocator, Error) << "Buffers already allocated for stream";
> return -EBUSY;
> }
>
> - int ret = camera_->exportFrameBuffers(stream, &buffers_[stream]);
> + int ret = camera_->exportFrameBuffers(stream, count, &buffers_[stream]);
> if (ret == -EINVAL)
> LOG(Allocator, Error)
> << "Stream is not part of " << camera_->id()
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 6067db2f37a3..c8fcc2fda75f 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -130,7 +130,7 @@ public:
> const StreamRoles &roles) override;
> int configure(Camera *camera, CameraConfiguration *config) override;
>
> - int exportFrameBuffers(Camera *camera, Stream *stream,
> + int exportFrameBuffers(Camera *camera, Stream *stream, unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;
>
> int start(Camera *camera, const ControlList *controls) override;
> @@ -641,10 +641,10 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)
> }
>
> int PipelineHandlerIPU3::exportFrameBuffers(Camera *camera, Stream *stream,
> + unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers)
> {
> IPU3CameraData *data = cameraData(camera);
> - unsigned int count = stream->configuration().bufferCount;
>
> if (stream == &data->outStream_)
> return data->imgu_->output_->exportBuffers(count, buffers);
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index 8d1ade3a4352..3f35596fe550 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -249,7 +249,7 @@ public:
> CameraConfiguration *generateConfiguration(Camera *camera, const StreamRoles &roles) override;
> int configure(Camera *camera, CameraConfiguration *config) override;
>
> - int exportFrameBuffers(Camera *camera, Stream *stream,
> + int exportFrameBuffers(Camera *camera, Stream *stream, unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;
>
> int start(Camera *camera, const ControlList *controls) override;
> @@ -786,10 +786,10 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
> }
>
> int PipelineHandlerRPi::exportFrameBuffers([[maybe_unused]] Camera *camera, Stream *stream,
> + unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers)
> {
> RPi::Stream *s = static_cast<RPi::Stream *>(stream);
> - unsigned int count = stream->configuration().bufferCount;
> int ret = s->dev()->exportBuffers(count, buffers);
>
> s->setExportedBuffers(buffers);
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> index 7d876e9387d7..2d95c1ca2a43 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -140,7 +140,7 @@ public:
> const StreamRoles &roles) override;
> int configure(Camera *camera, CameraConfiguration *config) override;
>
> - int exportFrameBuffers(Camera *camera, Stream *stream,
> + int exportFrameBuffers(Camera *camera, Stream *stream, unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;
>
> int start(Camera *camera, const ControlList *controls) override;
> @@ -667,10 +667,10 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c)
> }
>
> int PipelineHandlerRkISP1::exportFrameBuffers([[maybe_unused]] Camera *camera, Stream *stream,
> + unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers)
> {
> RkISP1CameraData *data = cameraData(camera);
> - unsigned int count = stream->configuration().bufferCount;
>
> if (stream == &data->mainPathStream_)
> return mainPath_.exportBuffers(count, buffers);
> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
> index 6ee24f2f14e8..b9f14be6733f 100644
> --- a/src/libcamera/pipeline/simple/simple.cpp
> +++ b/src/libcamera/pipeline/simple/simple.cpp
> @@ -225,7 +225,7 @@ public:
> const StreamRoles &roles) override;
> int configure(Camera *camera, CameraConfiguration *config) override;
>
> - int exportFrameBuffers(Camera *camera, Stream *stream,
> + int exportFrameBuffers(Camera *camera, Stream *stream, unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;
>
> int start(Camera *camera, const ControlList *controls) override;
> @@ -764,10 +764,10 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
> }
>
> int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream,
> + unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers)
> {
> SimpleCameraData *data = cameraData(camera);
> - unsigned int count = stream->configuration().bufferCount;
>
> /*
> * Export buffers on the converter or capture video node, depending on
> diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> index 591f46b60d23..a148c35f1265 100644
> --- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> +++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
> @@ -69,7 +69,7 @@ public:
> const StreamRoles &roles) override;
> int configure(Camera *camera, CameraConfiguration *config) override;
>
> - int exportFrameBuffers(Camera *camera, Stream *stream,
> + int exportFrameBuffers(Camera *camera, Stream *stream, unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;
>
> int start(Camera *camera, const ControlList *controls) override;
> @@ -223,11 +223,12 @@ int PipelineHandlerUVC::configure(Camera *camera, CameraConfiguration *config)
> return 0;
> }
>
> -int PipelineHandlerUVC::exportFrameBuffers(Camera *camera, Stream *stream,
> +int PipelineHandlerUVC::exportFrameBuffers(Camera *camera,
> + [[maybe_unused]] Stream *stream,
> + unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers)
> {
> UVCCameraData *data = cameraData(camera);
> - unsigned int count = stream->configuration().bufferCount;
>
> return data->video_->exportBuffers(count, buffers);
> }
> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
> index 605b3fe89152..22d6fdcbb141 100644
> --- a/src/libcamera/pipeline/vimc/vimc.cpp
> +++ b/src/libcamera/pipeline/vimc/vimc.cpp
> @@ -84,7 +84,7 @@ public:
> const StreamRoles &roles) override;
> int configure(Camera *camera, CameraConfiguration *config) override;
>
> - int exportFrameBuffers(Camera *camera, Stream *stream,
> + int exportFrameBuffers(Camera *camera, Stream *stream, unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers) override;
>
> int start(Camera *camera, const ControlList *controls) override;
> @@ -299,11 +299,12 @@ int PipelineHandlerVimc::configure(Camera *camera, CameraConfiguration *config)
> return 0;
> }
>
> -int PipelineHandlerVimc::exportFrameBuffers(Camera *camera, Stream *stream,
> +int PipelineHandlerVimc::exportFrameBuffers(Camera *camera,
> + [[maybe_unused]] Stream *stream,
> + unsigned int count,
> std::vector<std::unique_ptr<FrameBuffer>> *buffers)
> {
> VimcCameraData *data = cameraData(camera);
> - unsigned int count = stream->configuration().bufferCount;
>
> return data->video_->exportBuffers(count, buffers);
> }
> diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
> index 3b3150bdbbf7..cdd456c599a4 100644
> --- a/src/libcamera/pipeline_handler.cpp
> +++ b/src/libcamera/pipeline_handler.cpp
> @@ -322,6 +322,7 @@ const ControlList &PipelineHandler::properties(const Camera *camera) const
> * \brief Allocate and export buffers for \a stream
> * \param[in] camera The camera
> * \param[in] stream The stream to allocate buffers for
> + * \param[in] count The amount of buffers to allocate
s/amount/number/
Very nice patch overall, I think it really improves the API.
> * \param[out] buffers Array of buffers successfully allocated
> *
> * This method allocates buffers for the \a stream from the devices associated
> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> index 39d034de6bb2..d2ddd976584a 100644
> --- a/src/qcam/main_window.cpp
> +++ b/src/qcam/main_window.cpp
> @@ -25,6 +25,7 @@
> #include <QtDebug>
>
> #include <libcamera/camera_manager.h>
> +#include <libcamera/property_ids.h>
> #include <libcamera/version.h>
>
> #include "dng_writer.h"
> @@ -463,7 +464,8 @@ int MainWindow::startCapture()
> for (StreamConfiguration &config : *config_) {
> Stream *stream = config.stream();
>
> - ret = allocator_->allocate(stream);
> + int minBuffers = camera_->properties().get(properties::QueueDepth);
> + ret = allocator_->allocate(stream, minBuffers);
> if (ret < 0) {
> qWarning() << "Failed to allocate capture buffers";
> goto error;
> diff --git a/src/v4l2/v4l2_camera.cpp b/src/v4l2/v4l2_camera.cpp
> index 97825c715bba..53d97f3e6b86 100644
> --- a/src/v4l2/v4l2_camera.cpp
> +++ b/src/v4l2/v4l2_camera.cpp
> @@ -161,7 +161,7 @@ int V4L2Camera::allocBuffers(unsigned int count)
> {
> Stream *stream = config_->at(0).stream();
>
> - int ret = bufferAllocator_->allocate(stream);
> + int ret = bufferAllocator_->allocate(stream, count);
> if (ret < 0)
> return ret;
>
> diff --git a/test/camera/capture.cpp b/test/camera/capture.cpp
> index c4bc21100777..24ffbd8b2f6f 100644
> --- a/test/camera/capture.cpp
> +++ b/test/camera/capture.cpp
> @@ -8,6 +8,7 @@
> #include <iostream>
>
> #include <libcamera/framebuffer_allocator.h>
> +#include <libcamera/property_ids.h>
>
> #include "libcamera/internal/event_dispatcher.h"
> #include "libcamera/internal/thread.h"
> @@ -96,7 +97,8 @@ protected:
>
> Stream *stream = cfg.stream();
>
> - int ret = allocator_->allocate(stream);
> + int minBuffers = camera_->properties().get(properties::QueueDepth);
> + int ret = allocator_->allocate(stream, minBuffers);
> if (ret < 0)
> return TestFail;
>
> diff --git a/test/camera/statemachine.cpp b/test/camera/statemachine.cpp
> index f0c3d7764027..80caa897bcaa 100644
> --- a/test/camera/statemachine.cpp
> +++ b/test/camera/statemachine.cpp
> @@ -8,6 +8,7 @@
> #include <iostream>
>
> #include <libcamera/framebuffer_allocator.h>
> +#include <libcamera/property_ids.h>
>
> #include "camera_test.h"
> #include "test.h"
> @@ -118,7 +119,8 @@ protected:
> /* Use internally allocated buffers. */
> allocator_ = new FrameBufferAllocator(camera_);
> Stream *stream = *camera_->streams().begin();
> - if (allocator_->allocate(stream) < 0)
> + int minBuffers = camera_->properties().get(properties::QueueDepth);
> + if (allocator_->allocate(stream, minBuffers) < 0)
> return TestFail;
>
> if (camera_->start())
> diff --git a/test/mapped-buffer.cpp b/test/mapped-buffer.cpp
> index 5de8201e45f6..7c0264157229 100644
> --- a/test/mapped-buffer.cpp
> +++ b/test/mapped-buffer.cpp
> @@ -8,6 +8,7 @@
> #include <iostream>
>
> #include <libcamera/framebuffer_allocator.h>
> +#include <libcamera/property_ids.h>
>
> #include "libcamera/internal/buffer.h"
>
> @@ -54,7 +55,8 @@ protected:
>
> stream_ = cfg.stream();
>
> - int ret = allocator_->allocate(stream_);
> + int minBuffers = camera_->properties().get(properties::QueueDepth);
> + int ret = allocator_->allocate(stream_, minBuffers);
> if (ret < 0)
> return TestFail;
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list