[libcamera-devel] [PATCH 07/23] libcamera: Add IPAIPC
Paul Elder
paul.elder at ideasonboard.com
Tue Sep 15 16:20:22 CEST 2020
Create a virtual IPAIPC class that models an IPC/RPC system. IPA proxies
and proxy workers will call into the IPAIPC, rather than implementing
the IPC themselves.
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
include/libcamera/internal/ipa_ipc.h | 41 ++++++++++++++++++++++++++++
src/libcamera/ipa_ipc.cpp | 36 ++++++++++++++++++++++++
src/libcamera/meson.build | 1 +
3 files changed, 78 insertions(+)
create mode 100644 include/libcamera/internal/ipa_ipc.h
create mode 100644 src/libcamera/ipa_ipc.cpp
diff --git a/include/libcamera/internal/ipa_ipc.h b/include/libcamera/internal/ipa_ipc.h
new file mode 100644
index 00000000..34ca6eda
--- /dev/null
+++ b/include/libcamera/internal/ipa_ipc.h
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2020, Google Inc.
+ *
+ * ipa_ipc.h - Image Processing Algorithm IPC module for IPA proxies
+ */
+#ifndef __LIBCAMERA_INTERNAL_IPA_IPC_H__
+#define __LIBCAMERA_INTERNAL_IPA_IPC_H__
+
+#include <vector>
+
+namespace libcamera {
+
+class IPAIPC
+{
+public:
+ IPAIPC([[maybe_unused]] const char *ipa_module_path,
+ [[maybe_unused]] const char *ipa_proxy_worker_path);
+ virtual ~IPAIPC();
+
+ bool isValid() const { return valid_; }
+
+ virtual int sendSync(uint32_t cmd,
+ const std::vector<uint8_t> &data_in,
+ const std::vector<int32_t> &fds_in,
+ std::vector<uint8_t> *data_out = nullptr,
+ std::vector<int32_t> *fds_out = nullptr) = 0;
+
+ virtual int sendAsync(uint32_t cmd,
+ const std::vector<uint8_t> &data_in,
+ const std::vector<int32_t> &fds_in) = 0;
+
+ Signal<std::vector<uint8_t> &, std::vector<int32_t> &> recvIPC;
+
+protected:
+ bool valid_;
+};
+
+} /* namespace libcamera */
+
+#endif /* __LIBCAMERA_INTERNAL_IPA_IPC_H__ */
diff --git a/src/libcamera/ipa_ipc.cpp b/src/libcamera/ipa_ipc.cpp
new file mode 100644
index 00000000..703ec0a0
--- /dev/null
+++ b/src/libcamera/ipa_ipc.cpp
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2020, Google Inc.
+ *
+ * ipa_ipc.cpp - Image Processing Algorithm IPC module for IPA proxies
+ */
+
+#include <vector>
+
+#include "libcamera/internal/ipc_unixsocket.h"
+#include "libcamera/internal/log.h"
+#include "libcamera/internal/process.h"
+#include "libcamera/internal/thread.h"
+
+#include <libcamera/event_dispatcher.h>
+#include <libcamera/timer.h>
+
+#include "libcamera/internal/ipa_ipc.h"
+
+namespace libcamera {
+
+LOG_DEFINE_CATEGORY(IPAIPC)
+
+IPAIPC::IPAIPC([[maybe_unused]] const char *ipa_module_path,
+ [[maybe_unused]] const char *ipa_proxy_worker_path)
+ : valid_(false)
+{
+}
+
+IPAIPC::~IPAIPC()
+{
+}
+
+// TODO documentation, obviously
+
+} /* namespace libcamera */
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index 91710520..2e7c3b4d 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -24,6 +24,7 @@ libcamera_sources = files([
'ipa_context_wrapper.cpp',
'ipa_controls.cpp',
'ipa_data_serializer.cpp',
+ 'ipa_ipc.cpp',
'ipa_interface.cpp',
'ipa_manager.cpp',
'ipa_module.cpp',
--
2.27.0
More information about the libcamera-devel
mailing list