summaryrefslogtreecommitdiff
path: root/include/libcamera/internal/ipa_proxy.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/libcamera/internal/ipa_proxy.h')
-rw-r--r--include/libcamera/internal/ipa_proxy.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/include/libcamera/internal/ipa_proxy.h b/include/libcamera/internal/ipa_proxy.h
new file mode 100644
index 00000000..1111065b
--- /dev/null
+++ b/include/libcamera/internal/ipa_proxy.h
@@ -0,0 +1,70 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * ipa_proxy.h - Image Processing Algorithm proxy
+ */
+#ifndef __LIBCAMERA_IPA_PROXY_H__
+#define __LIBCAMERA_IPA_PROXY_H__
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include <ipa/ipa_interface.h>
+
+namespace libcamera {
+
+class IPAModule;
+
+class IPAProxy : public IPAInterface
+{
+public:
+ IPAProxy(IPAModule *ipam);
+ ~IPAProxy();
+
+ bool isValid() const { return valid_; }
+
+ std::string configurationFile(const std::string &file) const;
+
+protected:
+ std::string resolvePath(const std::string &file) const;
+
+ bool valid_;
+
+private:
+ IPAModule *ipam_;
+};
+
+class IPAProxyFactory
+{
+public:
+ IPAProxyFactory(const char *name);
+ virtual ~IPAProxyFactory() {}
+
+ virtual std::unique_ptr<IPAProxy> create(IPAModule *ipam) = 0;
+
+ const std::string &name() const { return name_; }
+
+ static void registerType(IPAProxyFactory *factory);
+ static std::vector<IPAProxyFactory *> &factories();
+
+private:
+ std::string name_;
+};
+
+#define REGISTER_IPA_PROXY(proxy) \
+class proxy##Factory final : public IPAProxyFactory \
+{ \
+public: \
+ proxy##Factory() : IPAProxyFactory(#proxy) {} \
+ std::unique_ptr<IPAProxy> create(IPAModule *ipam) \
+ { \
+ return std::make_unique<proxy>(ipam); \
+ } \
+}; \
+static proxy##Factory global_##proxy##Factory;
+
+} /* namespace libcamera */
+
+#endif /* __LIBCAMERA_IPA_PROXY_H__ */