[libcamera-devel] [PATCH v2] libcamera: ipa_proxy: Allow stop() on a stopped IPA

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Jul 6 15:49:19 CEST 2020


To make error handling easier in callers, allow the stop() function to
be called when the proxy is already stopped, or not started yet.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
---
Changes since v1:

- Rewrite documentation
---
 include/libcamera/internal/ipa_proxy.h   |  2 ++
 src/libcamera/ipa_proxy.cpp              | 10 ++++++++++
 src/libcamera/proxy/ipa_proxy_thread.cpp |  3 +++
 3 files changed, 15 insertions(+)

diff --git a/include/libcamera/internal/ipa_proxy.h b/include/libcamera/internal/ipa_proxy.h
index aec8f04ffc15..b429ce5a68a3 100644
--- a/include/libcamera/internal/ipa_proxy.h
+++ b/include/libcamera/internal/ipa_proxy.h
@@ -27,6 +27,8 @@ public:
 
 	std::string configurationFile(const std::string &file) const;
 
+	void stop() override = 0;
+
 protected:
 	std::string resolvePath(const std::string &file) const;
 
diff --git a/src/libcamera/ipa_proxy.cpp b/src/libcamera/ipa_proxy.cpp
index 23be24ad9bf1..ff4d7fd18cda 100644
--- a/src/libcamera/ipa_proxy.cpp
+++ b/src/libcamera/ipa_proxy.cpp
@@ -145,6 +145,16 @@ std::string IPAProxy::configurationFile(const std::string &name) const
 	return std::string();
 }
 
+/**
+ * \fn IPAProxy::stop()
+ * \brief Stop the IPA proxy
+ *
+ * This function stops the IPA and releases all the resources acquired by the
+ * proxy in start(). Calling stop() when the IPA proxy hasn't been started or
+ * has already been stopped is valid, the proxy shall treat this as a no-op and
+ * shall not forward the call to the IPA.
+ */
+
 /**
  * \brief Find a valid full path for a proxy worker for a given executable name
  * \param[in] file File name of proxy worker executable
diff --git a/src/libcamera/proxy/ipa_proxy_thread.cpp b/src/libcamera/proxy/ipa_proxy_thread.cpp
index aa403e22f297..eead2883708d 100644
--- a/src/libcamera/proxy/ipa_proxy_thread.cpp
+++ b/src/libcamera/proxy/ipa_proxy_thread.cpp
@@ -121,6 +121,9 @@ int IPAProxyThread::start()
 
 void IPAProxyThread::stop()
 {
+	if (!running_)
+		return;
+
 	running_ = false;
 
 	proxy_.invokeMethod(&ThreadProxy::stop, ConnectionTypeBlocking);
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list