Patch Detail
Show a patch.
GET /api/1.1/patches/9940/?format=api
{ "id": 9940, "url": "https://patchwork.libcamera.org/api/1.1/patches/9940/?format=api", "web_url": "https://patchwork.libcamera.org/patch/9940/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20201002143154.468162-33-paul.elder@ideasonboard.com>", "date": "2020-10-02T14:31:48", "name": "[libcamera-devel,v3,32/38] libcamera: proxy: Remove IPAProxyLinux and IPAProxyThread", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "b769e05302369e735140642de97340289557c7c6", "submitter": { "id": 17, "url": "https://patchwork.libcamera.org/api/1.1/people/17/?format=api", "name": "Paul Elder", "email": "paul.elder@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/9940/mbox/", "series": [ { "id": 1348, "url": "https://patchwork.libcamera.org/api/1.1/series/1348/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1348", "date": "2020-10-02T14:31:16", "name": "IPA isolation implementation", "version": 3, "mbox": "https://patchwork.libcamera.org/series/1348/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/9940/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/9940/checks/", "tags": {}, "headers": { "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>", "X-Original-To": "parsemail@patchwork.libcamera.org", "Delivered-To": "parsemail@patchwork.libcamera.org", "Received": [ "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 0133EC3B5C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 2 Oct 2020 14:33:25 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C4E1563BE6;\n\tFri, 2 Oct 2020 16:33:24 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A26F363B98\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 2 Oct 2020 16:33:23 +0200 (CEST)", "from pyrite.rasen.tech (unknown\n\t[IPv6:2400:4051:61:600:2c71:1b79:d06d:5032])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 8E5B42A2;\n\tFri, 2 Oct 2020 16:33:21 +0200 (CEST)" ], "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"h+dXY9R4\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1601649203;\n\tbh=LtmQawoyLfRlD7u//6P2ZybnBD1vjVKoLvOIpdB/3Gg=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=h+dXY9R4kFz8L6gA9L9DTecQbXXB56dcBtb2QKaB66Hbx+J1/EVt5bt3L5+5rq6/Z\n\tlD+YdL1hUvraDtvlZOvRalYysKkTsLbl4TtnuOZwPAnc7xNXUp9AbmHbl+Onwy7QDC\n\tGzO2r7951y2je0k000DGixnROeEUJJbAqW7XGo5k=", "From": "Paul Elder <paul.elder@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Fri, 2 Oct 2020 23:31:48 +0900", "Message-Id": "<20201002143154.468162-33-paul.elder@ideasonboard.com>", "X-Mailer": "git-send-email 2.27.0", "In-Reply-To": "<20201002143154.468162-1-paul.elder@ideasonboard.com>", "References": "<20201002143154.468162-1-paul.elder@ideasonboard.com>", "MIME-Version": "1.0", "Subject": "[libcamera-devel] [PATCH v3 32/38] libcamera: proxy: Remove\n\tIPAProxyLinux and IPAProxyThread", "X-BeenThere": "libcamera-devel@lists.libcamera.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "<libcamera-devel.lists.libcamera.org>", "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>", "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>", "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>", "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>", "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "base64", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "We have now changed the proxy from per-IPC mechanism to per-pipeline.\nThe per-IPC mechanism proxies are thus no longer needed; remove them.\n\nSigned-off-by: Paul Elder <paul.elder@ideasonboard.com>\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n---\nNo change in v3\n\nNo change in v2\n---\n src/libcamera/proxy/ipa_proxy_linux.cpp | 103 -----------\n src/libcamera/proxy/ipa_proxy_thread.cpp | 172 ------------------\n src/libcamera/proxy/meson.build | 5 -\n .../proxy/worker/ipa_proxy_linux_worker.cpp | 90 ---------\n src/libcamera/proxy/worker/meson.build | 4 -\n 5 files changed, 374 deletions(-)\n delete mode 100644 src/libcamera/proxy/ipa_proxy_linux.cpp\n delete mode 100644 src/libcamera/proxy/ipa_proxy_thread.cpp\n delete mode 100644 src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp", "diff": "diff --git a/src/libcamera/proxy/ipa_proxy_linux.cpp b/src/libcamera/proxy/ipa_proxy_linux.cpp\ndeleted file mode 100644\nindex b78a0e45..00000000\n--- a/src/libcamera/proxy/ipa_proxy_linux.cpp\n+++ /dev/null\n@@ -1,103 +0,0 @@\n-/* SPDX-License-Identifier: LGPL-2.1-or-later */\n-/*\n- * Copyright (C) 2019, Google Inc.\n- *\n- * ipa_proxy_linux.cpp - Default Image Processing Algorithm proxy for Linux\n- */\n-\n-#include <vector>\n-\n-#include <libcamera/ipa/ipa_interface.h>\n-#include <libcamera/ipa/ipa_module_info.h>\n-\n-#include \"libcamera/internal/ipa_module.h\"\n-#include \"libcamera/internal/ipa_proxy.h\"\n-#include \"libcamera/internal/ipc_unixsocket.h\"\n-#include \"libcamera/internal/log.h\"\n-#include \"libcamera/internal/process.h\"\n-\n-namespace libcamera {\n-\n-LOG_DECLARE_CATEGORY(IPAProxy)\n-\n-class IPAProxyLinux : public IPAProxy\n-{\n-public:\n-\tIPAProxyLinux(IPAModule *ipam);\n-\t~IPAProxyLinux();\n-\n-\tint init([[maybe_unused]] const IPASettings &settings) override\n-\t{\n-\t\treturn 0;\n-\t}\n-\tint start() override { return 0; }\n-\tvoid stop() override {}\n-\tvoid configure([[maybe_unused]] const CameraSensorInfo &sensorInfo,\n-\t\t [[maybe_unused]] const std::map<unsigned int, IPAStream> &streamConfig,\n-\t\t [[maybe_unused]] const std::map<unsigned int, const ControlInfoMap &> &entityControls,\n-\t\t [[maybe_unused]] const IPAOperationData &ipaConfig,\n-\t\t [[maybe_unused]] IPAOperationData *result) override {}\n-\tvoid mapBuffers([[maybe_unused]] const std::vector<IPABuffer> &buffers) override {}\n-\tvoid unmapBuffers([[maybe_unused]] const std::vector<unsigned int> &ids) override {}\n-\tvoid processEvent([[maybe_unused]] const IPAOperationData &event) override {}\n-\n-private:\n-\tvoid readyRead(IPCUnixSocket *ipc);\n-\n-\tProcess *proc_;\n-\n-\tIPCUnixSocket *socket_;\n-};\n-\n-IPAProxyLinux::IPAProxyLinux(IPAModule *ipam)\n-\t: IPAProxy(ipam), proc_(nullptr), socket_(nullptr)\n-{\n-\tLOG(IPAProxy, Debug)\n-\t\t<< \"initializing dummy proxy: loading IPA from \"\n-\t\t<< ipam->path();\n-\n-\tstd::vector<int> fds;\n-\tstd::vector<std::string> args;\n-\targs.push_back(ipam->path());\n-\tconst std::string path = resolvePath(\"ipa_proxy_linux\");\n-\tif (path.empty()) {\n-\t\tLOG(IPAProxy, Error)\n-\t\t\t<< \"Failed to get proxy worker path\";\n-\t\treturn;\n-\t}\n-\n-\tsocket_ = new IPCUnixSocket();\n-\tint fd = socket_->create();\n-\tif (fd < 0) {\n-\t\tLOG(IPAProxy, Error)\n-\t\t\t<< \"Failed to create socket\";\n-\t\treturn;\n-\t}\n-\tsocket_->readyRead.connect(this, &IPAProxyLinux::readyRead);\n-\targs.push_back(std::to_string(fd));\n-\tfds.push_back(fd);\n-\n-\tproc_ = new Process();\n-\tint ret = proc_->start(path, args, fds);\n-\tif (ret) {\n-\t\tLOG(IPAProxy, Error)\n-\t\t\t<< \"Failed to start proxy worker process\";\n-\t\treturn;\n-\t}\n-\n-\tvalid_ = true;\n-}\n-\n-IPAProxyLinux::~IPAProxyLinux()\n-{\n-\tdelete proc_;\n-\tdelete socket_;\n-}\n-\n-void IPAProxyLinux::readyRead([[maybe_unused]] IPCUnixSocket *ipc)\n-{\n-}\n-\n-REGISTER_IPA_PROXY(IPAProxyLinux)\n-\n-} /* namespace libcamera */\ndiff --git a/src/libcamera/proxy/ipa_proxy_thread.cpp b/src/libcamera/proxy/ipa_proxy_thread.cpp\ndeleted file mode 100644\nindex eead2883..00000000\n--- a/src/libcamera/proxy/ipa_proxy_thread.cpp\n+++ /dev/null\n@@ -1,172 +0,0 @@\n-/* SPDX-License-Identifier: LGPL-2.1-or-later */\n-/*\n- * Copyright (C) 2020, Google Inc.\n- *\n- * ipa_proxy_thread.cpp - Proxy running an Image Processing Algorithm in a thread\n- */\n-\n-#include <memory>\n-\n-#include <libcamera/ipa/ipa_interface.h>\n-#include <libcamera/ipa/ipa_module_info.h>\n-\n-#include \"libcamera/internal/ipa_context_wrapper.h\"\n-#include \"libcamera/internal/ipa_module.h\"\n-#include \"libcamera/internal/ipa_proxy.h\"\n-#include \"libcamera/internal/log.h\"\n-#include \"libcamera/internal/thread.h\"\n-\n-namespace libcamera {\n-\n-LOG_DECLARE_CATEGORY(IPAProxy)\n-\n-class IPAProxyThread : public IPAProxy, public Object\n-{\n-public:\n-\tIPAProxyThread(IPAModule *ipam);\n-\n-\tint init(const IPASettings &settings) override;\n-\tint start() override;\n-\tvoid stop() override;\n-\n-\tvoid configure(const CameraSensorInfo &sensorInfo,\n-\t\t const std::map<unsigned int, IPAStream> &streamConfig,\n-\t\t const std::map<unsigned int, const ControlInfoMap &> &entityControls,\n-\t\t const IPAOperationData &ipaConfig,\n-\t\t IPAOperationData *result) override;\n-\tvoid mapBuffers(const std::vector<IPABuffer> &buffers) override;\n-\tvoid unmapBuffers(const std::vector<unsigned int> &ids) override;\n-\tvoid processEvent(const IPAOperationData &event) override;\n-\n-private:\n-\tvoid queueFrameAction(unsigned int frame, const IPAOperationData &data);\n-\n-\t/* Helper class to invoke processEvent() in another thread. */\n-\tclass ThreadProxy : public Object\n-\t{\n-\tpublic:\n-\t\tvoid setIPA(IPAInterface *ipa)\n-\t\t{\n-\t\t\tipa_ = ipa;\n-\t\t}\n-\n-\t\tint start()\n-\t\t{\n-\t\t\treturn ipa_->start();\n-\t\t}\n-\n-\t\tvoid stop()\n-\t\t{\n-\t\t\tipa_->stop();\n-\t\t}\n-\n-\t\tvoid processEvent(const IPAOperationData &event)\n-\t\t{\n-\t\t\tipa_->processEvent(event);\n-\t\t}\n-\n-\tprivate:\n-\t\tIPAInterface *ipa_;\n-\t};\n-\n-\tbool running_;\n-\tThread thread_;\n-\tThreadProxy proxy_;\n-\tstd::unique_ptr<IPAInterface> ipa_;\n-};\n-\n-IPAProxyThread::IPAProxyThread(IPAModule *ipam)\n-\t: IPAProxy(ipam), running_(false)\n-{\n-\tif (!ipam->load())\n-\t\treturn;\n-\n-\tstruct ipa_context *ctx = ipam->createContext();\n-\tif (!ctx) {\n-\t\tLOG(IPAProxy, Error)\n-\t\t\t<< \"Failed to create IPA context for \" << ipam->path();\n-\t\treturn;\n-\t}\n-\n-\tipa_ = std::make_unique<IPAContextWrapper>(ctx);\n-\tproxy_.setIPA(ipa_.get());\n-\n-\t/*\n-\t * Proxy the queueFrameAction signal to dispatch it in the caller's\n-\t * thread.\n-\t */\n-\tipa_->queueFrameAction.connect(this, &IPAProxyThread::queueFrameAction);\n-\n-\tvalid_ = true;\n-}\n-\n-int IPAProxyThread::init(const IPASettings &settings)\n-{\n-\tint ret = ipa_->init(settings);\n-\tif (ret)\n-\t\treturn ret;\n-\n-\tproxy_.moveToThread(&thread_);\n-\n-\treturn 0;\n-}\n-\n-int IPAProxyThread::start()\n-{\n-\trunning_ = true;\n-\tthread_.start();\n-\n-\treturn proxy_.invokeMethod(&ThreadProxy::start, ConnectionTypeBlocking);\n-}\n-\n-void IPAProxyThread::stop()\n-{\n-\tif (!running_)\n-\t\treturn;\n-\n-\trunning_ = false;\n-\n-\tproxy_.invokeMethod(&ThreadProxy::stop, ConnectionTypeBlocking);\n-\n-\tthread_.exit();\n-\tthread_.wait();\n-}\n-\n-void IPAProxyThread::configure(const CameraSensorInfo &sensorInfo,\n-\t\t\t const std::map<unsigned int, IPAStream> &streamConfig,\n-\t\t\t const std::map<unsigned int, const ControlInfoMap &> &entityControls,\n-\t\t\t const IPAOperationData &ipaConfig,\n-\t\t\t IPAOperationData *result)\n-{\n-\tipa_->configure(sensorInfo, streamConfig, entityControls, ipaConfig,\n-\t\t\tresult);\n-}\n-\n-void IPAProxyThread::mapBuffers(const std::vector<IPABuffer> &buffers)\n-{\n-\tipa_->mapBuffers(buffers);\n-}\n-\n-void IPAProxyThread::unmapBuffers(const std::vector<unsigned int> &ids)\n-{\n-\tipa_->unmapBuffers(ids);\n-}\n-\n-void IPAProxyThread::processEvent(const IPAOperationData &event)\n-{\n-\tif (!running_)\n-\t\treturn;\n-\n-\t/* Dispatch the processEvent() call to the thread. */\n-\tproxy_.invokeMethod(&ThreadProxy::processEvent, ConnectionTypeQueued,\n-\t\t\t event);\n-}\n-\n-void IPAProxyThread::queueFrameAction(unsigned int frame, const IPAOperationData &data)\n-{\n-\tIPAInterface::queueFrameAction.emit(frame, data);\n-}\n-\n-REGISTER_IPA_PROXY(IPAProxyThread)\n-\n-} /* namespace libcamera */\ndiff --git a/src/libcamera/proxy/meson.build b/src/libcamera/proxy/meson.build\nindex f27b453a..8ad78115 100644\n--- a/src/libcamera/proxy/meson.build\n+++ b/src/libcamera/proxy/meson.build\n@@ -1,10 +1,5 @@\n # SPDX-License-Identifier: CC0-1.0\n \n-libcamera_sources += files([\n- 'ipa_proxy_linux.cpp',\n- 'ipa_proxy_thread.cpp',\n-])\n-\n # generate ipa_proxy_{pipeline}.cpp\n foreach mojom : ipa_mojoms\n proxy = custom_target(mojom['name'] + '_proxy_cpp',\ndiff --git a/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp b/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp\ndeleted file mode 100644\nindex 0c4687f7..00000000\n--- a/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp\n+++ /dev/null\n@@ -1,90 +0,0 @@\n-/* SPDX-License-Identifier: LGPL-2.1-or-later */\n-/*\n- * Copyright (C) 2019, Google Inc.\n- *\n- * ipa_proxy_linux_worker.cpp - Default Image Processing Algorithm proxy worker for Linux\n- */\n-\n-#include <iostream>\n-#include <sys/types.h>\n-#include <unistd.h>\n-\n-#include <libcamera/event_dispatcher.h>\n-#include <libcamera/ipa/ipa_interface.h>\n-#include <libcamera/logging.h>\n-\n-#include \"libcamera/internal/ipa_module.h\"\n-#include \"libcamera/internal/ipc_unixsocket.h\"\n-#include \"libcamera/internal/log.h\"\n-#include \"libcamera/internal/thread.h\"\n-\n-using namespace libcamera;\n-\n-LOG_DEFINE_CATEGORY(IPAProxyLinuxWorker)\n-\n-void readyRead(IPCUnixSocket *ipc)\n-{\n-\tIPCUnixSocket::Payload message;\n-\tint ret;\n-\n-\tret = ipc->receive(&message);\n-\tif (ret) {\n-\t\tLOG(IPAProxyLinuxWorker, Error)\n-\t\t\t<< \"Receive message failed: \" << ret;\n-\t\treturn;\n-\t}\n-\n-\tLOG(IPAProxyLinuxWorker, Debug) << \"Received a message!\";\n-}\n-\n-int main(int argc, char **argv)\n-{\n-\t/* Uncomment this for debugging. */\n-#if 0\n-\tstd::string logPath = \"/tmp/libcamera.worker.\" +\n-\t\t\t std::to_string(getpid()) + \".log\";\n-\tlogSetFile(logPath.c_str());\n-#endif\n-\n-\tif (argc < 3) {\n-\t\tLOG(IPAProxyLinuxWorker, Debug)\n-\t\t\t<< \"Tried to start worker with no args\";\n-\t\treturn EXIT_FAILURE;\n-\t}\n-\n-\tint fd = std::stoi(argv[2]);\n-\tLOG(IPAProxyLinuxWorker, Debug)\n-\t\t<< \"Starting worker for IPA module \" << argv[1]\n-\t\t<< \" with IPC fd = \" << fd;\n-\n-\tstd::unique_ptr<IPAModule> ipam = std::make_unique<IPAModule>(argv[1]);\n-\tif (!ipam->isValid() || !ipam->load()) {\n-\t\tLOG(IPAProxyLinuxWorker, Error)\n-\t\t\t<< \"IPAModule \" << argv[1] << \" should be valid but isn't\";\n-\t\treturn EXIT_FAILURE;\n-\t}\n-\n-\tIPCUnixSocket socket;\n-\tif (socket.bind(fd) < 0) {\n-\t\tLOG(IPAProxyLinuxWorker, Error) << \"IPC socket binding failed\";\n-\t\treturn EXIT_FAILURE;\n-\t}\n-\tsocket.readyRead.connect(&readyRead);\n-\n-\tstruct ipa_context *ipac = ipam->createContext();\n-\tif (!ipac) {\n-\t\tLOG(IPAProxyLinuxWorker, Error) << \"Failed to create IPA context\";\n-\t\treturn EXIT_FAILURE;\n-\t}\n-\n-\tLOG(IPAProxyLinuxWorker, Debug) << \"Proxy worker successfully started\";\n-\n-\t/* \\todo upgrade listening loop */\n-\tEventDispatcher *dispatcher = Thread::current()->eventDispatcher();\n-\twhile (1)\n-\t\tdispatcher->processEvents();\n-\n-\tipac->ops->destroy(ipac);\n-\n-\treturn 0;\n-}\ndiff --git a/src/libcamera/proxy/worker/meson.build b/src/libcamera/proxy/worker/meson.build\nindex 353e5cf1..6279fe00 100644\n--- a/src/libcamera/proxy/worker/meson.build\n+++ b/src/libcamera/proxy/worker/meson.build\n@@ -1,9 +1,5 @@\n # SPDX-License-Identifier: CC0-1.0\n \n-ipa_proxy_sources = [\n- ['ipa_proxy_linux', 'ipa_proxy_linux_worker.cpp']\n-]\n-\n proxy_install_dir = join_paths(get_option('libexecdir'), 'libcamera')\n \n # generate ipa_proxy_{pipeline}_worker.cpp\n", "prefixes": [ "libcamera-devel", "v3", "32/38" ] }