summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-07-06 13:59:19 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-07-17 02:13:53 +0300
commit49771c6dccb28228839b5e88ada36bd6646bf933 (patch)
treeabf16156ae04ef4462d34da6a4575b999dd795ed
parent2c0fad508cf64624b22cca74e623eb2a2f2c29ef (diff)
libcamera: ipa_proxy: Allow stop() on a stopped IPA
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@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
-rw-r--r--include/libcamera/internal/ipa_proxy.h2
-rw-r--r--src/libcamera/ipa_proxy.cpp10
-rw-r--r--src/libcamera/proxy/ipa_proxy_thread.cpp3
3 files changed, 15 insertions, 0 deletions
diff --git a/include/libcamera/internal/ipa_proxy.h b/include/libcamera/internal/ipa_proxy.h
index aec8f04f..b429ce5a 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 23be24ad..ff4d7fd1 100644
--- a/src/libcamera/ipa_proxy.cpp
+++ b/src/libcamera/ipa_proxy.cpp
@@ -146,6 +146,16 @@ std::string IPAProxy::configurationFile(const std::string &name) const
}
/**
+ * \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 aa403e22..eead2883 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);