[libcamera-devel] [PATCH] libcamera: ipa_proxy: Allow stop() on a stopped IPA
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Jul 6 13:08:47 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>
---
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..01740a6e39ec 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 method informs the IPA module that the camera is stopped. The IPA module
+ * shall release resources prepared in start(). Calling stop() when the IPA
+ * hasn't been started or has already been stopped is valid, and the IPA shall
+ * treat this as a no-op.
+ */
+
/**
* \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