pipeline: simple: Allow buffer counts from 1 to 32

While a default value of 4 buffers appears to be a good default that is
used by other pipelines as well, allowing both higher and lower values
can be desirable, notably for:
1. Video encoding, e.g. encoding multiple buffers in parallel.
2. Clients requesting a single buffer - e.g. in multi-stream scenarios.

Thus allow buffer counts between 1 and 32 buffers - following the default
maximum from vb2 core - while keeping the default to the previous 4.

While on it mark the config as adjusted when appropriate.

Signed-off-by: Robert Mader <robert.mader@collabora.com>
Reviewed-by: Milan Zamazal <mzamazal@redhat.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Robert Mader
2025-10-12 16:20:52 +02:00
committed by Kieran Bingham
parent 9e2ced2942
commit 05bfebed26

View File

@@ -378,6 +378,9 @@ public:
const Transform &combinedTransform() const { return combinedTransform_; }
private:
static constexpr unsigned int kNumBuffersDefault = 4;
static constexpr unsigned int kNumBuffersMax = 32;
/*
* The SimpleCameraData instance is guaranteed to be valid as long as
* the corresponding Camera instance is valid. In order to borrow a
@@ -1240,7 +1243,7 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()
cfg.size != pipeConfig_->captureSize)
needConversion_ = true;
/* Set the stride, frameSize and bufferCount. */
/* Set the stride and frameSize. */
if (needConversion_) {
std::tie(cfg.stride, cfg.frameSize) =
data_->converter_
@@ -1263,7 +1266,18 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()
cfg.frameSize = format.planes[0].size;
}
cfg.bufferCount = 4;
const auto bufferCount = cfg.bufferCount;
if (bufferCount <= 0)
cfg.bufferCount = kNumBuffersDefault;
else if (bufferCount > kNumBuffersMax)
cfg.bufferCount = kNumBuffersMax;
if (cfg.bufferCount != bufferCount) {
LOG(SimplePipeline, Debug)
<< "Adjusting bufferCount from " << bufferCount
<< " to " << cfg.bufferCount;
status = Adjusted;
}
}
return status;