summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);