diff options
author | Paul Elder <paul.elder@ideasonboard.com> | 2019-07-10 03:18:38 +0900 |
---|---|---|
committer | Paul Elder <paul.elder@ideasonboard.com> | 2019-07-12 16:32:29 +0900 |
commit | 131a88795ec7424954e23b292399803392dfc85f (patch) | |
tree | 095301b17012e1b92fbe834e0ec3126f9ae1d7cd /src/libcamera/proxy/ipa_proxy_linux.cpp | |
parent | c2a8217df54c2c522047ee716228c9dd4fc1dd32 (diff) |
libcamera: proxy: add default linux IPA proxy
Add a skeletal default linux IPA proxy. It currently lacks the IPA proxy
protocol itself.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/libcamera/proxy/ipa_proxy_linux.cpp')
-rw-r--r-- | src/libcamera/proxy/ipa_proxy_linux.cpp | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/libcamera/proxy/ipa_proxy_linux.cpp b/src/libcamera/proxy/ipa_proxy_linux.cpp new file mode 100644 index 00000000..f881aab5 --- /dev/null +++ b/src/libcamera/proxy/ipa_proxy_linux.cpp @@ -0,0 +1,96 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * ipa_proxy_linux.cpp - Default Image Processing Algorithm proxy for Linux + */ + +#include <vector> + +#include <libcamera/ipa/ipa_interface.h> +#include <libcamera/ipa/ipa_module_info.h> + +#include "ipa_module.h" +#include "ipa_proxy.h" +#include "ipc_unixsocket.h" +#include "log.h" +#include "process.h" + +namespace libcamera { + +LOG_DECLARE_CATEGORY(IPAProxy) + +class IPAProxyLinux : public IPAProxy +{ +public: + IPAProxyLinux(IPAModule *ipam); + ~IPAProxyLinux(); + + int init(); + +private: + void readyRead(IPCUnixSocket *ipc); + + Process *proc_; + + IPCUnixSocket *socket_; +}; + +int IPAProxyLinux::init() +{ + LOG(IPAProxy, Debug) << "initializing IPA via dummy proxy!"; + + return 0; +} + +IPAProxyLinux::IPAProxyLinux(IPAModule *ipam) +{ + LOG(IPAProxy, Debug) + << "initializing dummy proxy: loading IPA from " + << ipam->path(); + + std::vector<int> fds; + std::vector<std::string> args; + args.push_back(ipam->path()); + const std::string path = resolvePath("ipa_proxy_linux"); + if (path.empty()) { + LOG(IPAProxy, Error) + << "Failed to get proxy worker path"; + return; + } + + socket_ = new IPCUnixSocket(); + int fd = socket_->create(); + if (fd < 0) { + LOG(IPAProxy, Error) + << "Failed to create socket"; + return; + } + socket_->readyRead.connect(this, &IPAProxyLinux::readyRead); + args.push_back(std::to_string(fd)); + fds.push_back(fd); + + proc_ = new Process(); + int ret = proc_->start(path, args, fds); + if (ret) { + LOG(IPAProxy, Error) + << "Failed to start proxy worker process"; + return; + } + + valid_ = true; +} + +IPAProxyLinux::~IPAProxyLinux() +{ + delete proc_; + delete socket_; +} + +void IPAProxyLinux::readyRead(IPCUnixSocket *ipc) +{ +} + +REGISTER_IPA_PROXY(IPAProxyLinux) + +}; /* namespace libcamera */ |