summaryrefslogtreecommitdiff
path: root/src/libcamera/ipa_proxy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera/ipa_proxy.cpp')
-rw-r--r--src/libcamera/ipa_proxy.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/libcamera/ipa_proxy.cpp b/src/libcamera/ipa_proxy.cpp
index b409e1d4..2f866cc4 100644
--- a/src/libcamera/ipa_proxy.cpp
+++ b/src/libcamera/ipa_proxy.cpp
@@ -91,7 +91,28 @@ std::string IPAProxy::resolvePath(const std::string &file) const
}
}
- /* Try finding the exec target from the install directory. */
+ /*
+ * When libcamera is used before it is installed, load proxy workers
+ * from the same build directory as the libcamera directory itself.
+ * This requires identifying the path of the libcamera.so, and
+ * referencing a relative path for the proxy workers from that point.
+ */
+ if (!utils::isLibcameraInstalled()) {
+ std::string ipaProxyDir = utils::dirname(utils::libcameraPath())
+ + "/proxy/worker";
+
+ LOG(IPAProxy, Info)
+ << "libcamera is not installed. Loading proxy workers from'"
+ << ipaProxyDir << "'";
+
+ std::string proxyPath = ipaProxyDir + proxyFile;
+ if (!access(proxyPath.c_str(), X_OK))
+ return proxyPath;
+
+ return std::string();
+ }
+
+ /* Else try finding the exec target from the install directory. */
std::string proxyPath = std::string(IPA_PROXY_DIR) + proxyFile;
if (!access(proxyPath.c_str(), X_OK))
return proxyPath;