summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKaaira Gupta <kgupta@es.iitr.ac.in>2020-03-18 20:54:26 +0530
committerKieran Bingham <kieran.bingham@ideasonboard.com>2020-03-18 16:17:51 +0000
commit250df52bd914ac6af287035e1adcd497c36a38f0 (patch)
tree3592ee150c34a10a44fe40427ea2cc4b36991d4a /src
parentdf493769a0d71c09898171c47438fc94bdc976b3 (diff)
libcamera: ipa_proxy: search for proxy in build tree
When libcamera is built and tested before installing, it will be unable to locate the path to proxy workers, or previously installed files in the system path may be incorrect to load. Hence, when libcamera is not installed, but is running from a build tree, identify the location of that tree by using libcameraPath(), and from that point add relative path to the proxy workers directory. Signed-off-by: Kaaira Gupta <kgupta@es.iitr.ac.in> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src')
-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;