Message ID | 20210131224702.8838-7-laurent.pinchart@ideasonboard.com |
---|---|
State | Accepted |
Delegated to: | Laurent Pinchart |
Headers | show |
Series |
|
Related | show |
On 31/01/2021 22:46, Laurent Pinchart wrote: > 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. > Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > 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(-) > > diff --git a/src/libcamera/pipeline/simple/converter.cpp b/src/libcamera/pipeline/simple/converter.cpp > index 550b2bcfb001..6b3249ea92b0 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 47a056e582d6..a1503a6099ff 100644 > --- a/src/libcamera/pipeline/simple/converter.h > +++ b/src/libcamera/pipeline/simple/converter.h > @@ -43,7 +43,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); > @@ -58,6 +58,9 @@ private: > > std::queue<FrameBuffer *> captureDoneQueue_; > std::queue<FrameBuffer *> 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 1ed67bcec490..8c0bca36bbfb 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]] ControlList *c > } > > if (useConverter_) { > - ret = converter_->start(count); > + ret = converter_->start(); > if (ret < 0) { > stop(camera); > return ret; >
Hi Laurent, On Mon, Feb 01, 2021 at 12:46:48AM +0200, Laurent Pinchart wrote: > 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> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> > --- > 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(-) > > diff --git a/src/libcamera/pipeline/simple/converter.cpp b/src/libcamera/pipeline/simple/converter.cpp > index 550b2bcfb001..6b3249ea92b0 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 47a056e582d6..a1503a6099ff 100644 > --- a/src/libcamera/pipeline/simple/converter.h > +++ b/src/libcamera/pipeline/simple/converter.h > @@ -43,7 +43,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); > @@ -58,6 +58,9 @@ private: > > std::queue<FrameBuffer *> captureDoneQueue_; > std::queue<FrameBuffer *> 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 1ed67bcec490..8c0bca36bbfb 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]] ControlList *c > } > > if (useConverter_) { > - ret = converter_->start(count); > + ret = converter_->start(); > if (ret < 0) { > stop(camera); > return ret; > -- > Regards, > > Laurent Pinchart > > _______________________________________________ > libcamera-devel mailing list > libcamera-devel@lists.libcamera.org > https://lists.libcamera.org/listinfo/libcamera-devel
diff --git a/src/libcamera/pipeline/simple/converter.cpp b/src/libcamera/pipeline/simple/converter.cpp index 550b2bcfb001..6b3249ea92b0 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 47a056e582d6..a1503a6099ff 100644 --- a/src/libcamera/pipeline/simple/converter.h +++ b/src/libcamera/pipeline/simple/converter.h @@ -43,7 +43,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); @@ -58,6 +58,9 @@ private: std::queue<FrameBuffer *> captureDoneQueue_; std::queue<FrameBuffer *> 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 1ed67bcec490..8c0bca36bbfb 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]] ControlList *c } if (useConverter_) { - ret = converter_->start(count); + ret = converter_->start(); if (ret < 0) { stop(camera); return ret;
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> --- 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(-)