libcamera: pipeline: simple: converter: Differentiate input and output buffers count

The number of buffers on the input and output of the converter don't
necessarily need to match. Use the buffer count from the input and
output configuration respectively. This removes the need to pass the
buffer count to the start() function, which brings it closer to the
pipeline handler API.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Phi-Bang Nguyen <pnguyen@baylibre.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
This commit is contained in:
Laurent Pinchart
2021-03-03 00:59:03 +02:00
parent 3e743ee8eb
commit 4502635b72
3 changed files with 12 additions and 5 deletions
+6 -3
View File
@@ -195,6 +195,9 @@ int SimpleConverter::configure(const StreamConfiguration &inputCfg,
return -EINVAL;
}
inputBufferCount_ = inputCfg.bufferCount;
outputBufferCount_ = outputCfg.bufferCount;
return 0;
}
@@ -204,13 +207,13 @@ int SimpleConverter::exportBuffers(unsigned int count,
return m2m_->capture()->exportBuffers(count, buffers);
}
int SimpleConverter::start(unsigned int count)
int SimpleConverter::start()
{
int ret = m2m_->output()->importBuffers(count);
int ret = m2m_->output()->importBuffers(inputBufferCount_);
if (ret < 0)
return ret;
ret = m2m_->capture()->importBuffers(count);
ret = m2m_->capture()->importBuffers(outputBufferCount_);
if (ret < 0) {
stop();
return ret;
+4 -1
View File
@@ -44,7 +44,7 @@ public:
int exportBuffers(unsigned int count,
std::vector<std::unique_ptr<FrameBuffer>> *buffers);
int start(unsigned int count);
int start();
void stop();
int queueBuffers(FrameBuffer *input, FrameBuffer *output);
@@ -59,6 +59,9 @@ private:
std::queue<FrameBuffer *> captureDoneQueue_;
std::queue<FrameBuffer *> outputDoneQueue_;
unsigned int inputBufferCount_;
unsigned int outputBufferCount_;
};
} /* namespace libcamera */
+2 -1
View File
@@ -607,6 +607,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
inputCfg.pixelFormat = pipeConfig.pixelFormat;
inputCfg.size = pipeConfig.captureSize;
inputCfg.stride = captureFormat.planes[0].bpl;
inputCfg.bufferCount = cfg.bufferCount;
ret = converter_->configure(inputCfg, cfg);
if (ret < 0) {
@@ -660,7 +661,7 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] const ControlL
}
if (useConverter_) {
ret = converter_->start(count);
ret = converter_->start();
if (ret < 0) {
stop(camera);
return ret;