summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-01-29 00:31:52 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-03-03 00:59:26 +0200
commit37b3064bedbc4e5754f1690cefee5b150457261c (patch)
tree4fbfce4e4aa4ec0009bc59b7d1a2698b4791a01d /src
parent5d6f9025049011811acbadc9a3e33c1257a81a0f (diff)
libcamera: pipeline: simple: Hardcode the number of internal buffers
The number of internal buffers, used between the capture device and the converter, doesn't need to depend on the number of buffers allocated for the output stream of the pipeline. Hardcode it to a fixed value. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Tested-by: Phi-Bang Nguyen <pnguyen@baylibre.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/pipeline/simple/simple.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 17fd744c..9f822397 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -228,6 +228,8 @@ protected:
int queueRequestDevice(Camera *camera, Request *request) override;
private:
+ static constexpr unsigned int kNumInternalBuffers = 3;
+
SimpleCameraData *cameraData(const Camera *camera)
{
return static_cast<SimpleCameraData *>(
@@ -700,7 +702,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
inputCfg.pixelFormat = pipeConfig->captureFormat;
inputCfg.size = pipeConfig->captureSize;
inputCfg.stride = captureFormat.planes[0].bpl;
- inputCfg.bufferCount = cfg.bufferCount;
+ inputCfg.bufferCount = kNumInternalBuffers;
ret = converter_->configure(inputCfg, { cfg });
if (ret < 0) {
@@ -737,13 +739,20 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL
{
SimpleCameraData *data = cameraData(camera);
V4L2VideoDevice *video = data->video_;
- unsigned int count = data->streams_[0].configuration().bufferCount;
int ret;
- if (data->useConverter_)
- ret = video->allocateBuffers(count, &data->converterBuffers_);
- else
- ret = video->importBuffers(count);
+ if (data->useConverter_) {
+ /*
+ * When using the converter allocate a fixed number of internal
+ * buffers.
+ */
+ ret = video->allocateBuffers(kNumInternalBuffers,
+ &data->converterBuffers_);
+ } else {
+ /* Otherwise, prepare for using buffers from the only stream. */
+ Stream *stream = &data->streams_[0];
+ ret = video->importBuffers(stream->configuration().bufferCount);
+ }
if (ret < 0)
return ret;