[libcamera-devel] [PATCH 07/20] libcamera: pipeline: simple: converter: Replace open() with isValid()

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sun Jan 31 23:46:49 CET 2021


Simplify the SimpleConverter interface by opening the M2M device in the
constructor. The explicit call to open() is replaced by a check through
a new isValid() function, and the unused close() function is removed.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 src/libcamera/pipeline/simple/converter.cpp | 20 ++++++--------------
 src/libcamera/pipeline/simple/converter.h   |  3 +--
 src/libcamera/pipeline/simple/simple.cpp    |  4 ++--
 3 files changed, 9 insertions(+), 18 deletions(-)

diff --git a/src/libcamera/pipeline/simple/converter.cpp b/src/libcamera/pipeline/simple/converter.cpp
index 6b3249ea92b0..f782fbc63b09 100644
--- a/src/libcamera/pipeline/simple/converter.cpp
+++ b/src/libcamera/pipeline/simple/converter.cpp
@@ -39,24 +39,16 @@ SimpleConverter::SimpleConverter(MediaDevice *media)
 
 	m2m_ = std::make_unique<V4L2M2MDevice>((*it)->deviceNode());
 
+	int ret = m2m_->open();
+	if (ret < 0) {
+		m2m_.reset();
+		return;
+	}
+
 	m2m_->output()->bufferReady.connect(this, &SimpleConverter::outputBufferReady);
 	m2m_->capture()->bufferReady.connect(this, &SimpleConverter::captureBufferReady);
 }
 
-int SimpleConverter::open()
-{
-	if (!m2m_)
-		return -ENODEV;
-
-	return m2m_->open();
-}
-
-void SimpleConverter::close()
-{
-	if (m2m_)
-		m2m_->close();
-}
-
 std::vector<PixelFormat> SimpleConverter::formats(PixelFormat input)
 {
 	if (!m2m_)
diff --git a/src/libcamera/pipeline/simple/converter.h b/src/libcamera/pipeline/simple/converter.h
index a1503a6099ff..780bfa8f7832 100644
--- a/src/libcamera/pipeline/simple/converter.h
+++ b/src/libcamera/pipeline/simple/converter.h
@@ -30,8 +30,7 @@ class SimpleConverter
 public:
 	SimpleConverter(MediaDevice *media);
 
-	int open();
-	void close();
+	bool isValid() const { return m2m_ != nullptr; }
 
 	std::vector<PixelFormat> formats(PixelFormat input);
 	SizeRange sizes(const Size &input);
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index 8c0bca36bbfb..20a4ebca94fd 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -763,9 +763,9 @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator)
 	/* Open the converter, if any. */
 	if (converter) {
 		converter_ = std::make_unique<SimpleConverter>(converter);
-		if (converter_->open() < 0) {
+		if (!converter_->isValid()) {
 			LOG(SimplePipeline, Warning)
-				<< "Failed to open converter, disabling format conversion";
+				<< "Failed to create converter, disabling format conversion";
 			converter_.reset();
 		} else {
 			converter_->bufferReady.connect(this, &SimplePipelineHandler::converterDone);
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list