From 4502635b721ae5d8c36ab98a04879ae73da51ca3 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Sat, 26 Dec 2020 23:45:04 +0200 Subject: 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 Tested-by: Phi-Bang Nguyen Reviewed-by: Kieran Bingham Reviewed-by: Paul Elder --- src/libcamera/pipeline/simple/converter.cpp | 9 ++++++--- src/libcamera/pipeline/simple/converter.h | 5 ++++- src/libcamera/pipeline/simple/simple.cpp | 3 ++- 3 files changed, 12 insertions(+), 5 deletions(-) (limited to 'src/libcamera/pipeline/simple') diff --git a/src/libcamera/pipeline/simple/converter.cpp b/src/libcamera/pipeline/simple/converter.cpp index 550b2bcf..6b3249ea 100644 --- a/src/libcamera/pipeline/simple/converter.cpp +++ b/src/libcamera/pipeline/simple/converter.cpp @@ -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; diff --git a/src/libcamera/pipeline/simple/converter.h b/src/libcamera/pipeline/simple/converter.h index 8d2afe36..d9ace52d 100644 --- a/src/libcamera/pipeline/simple/converter.h +++ b/src/libcamera/pipeline/simple/converter.h @@ -44,7 +44,7 @@ public: int exportBuffers(unsigned int count, std::vector> *buffers); - int start(unsigned int count); + int start(); void stop(); int queueBuffers(FrameBuffer *input, FrameBuffer *output); @@ -59,6 +59,9 @@ private: std::queue captureDoneQueue_; std::queue outputDoneQueue_; + + unsigned int inputBufferCount_; + unsigned int outputBufferCount_; }; } /* namespace libcamera */ diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index 2f6dff16..4a1f2052 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -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; -- cgit v1.2.1