From d5168b503a5c3e26ed8f10232b6763b975eb7bd3 Mon Sep 17 00:00:00 2001
From: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Date: Mon, 15 Feb 2021 17:29:17 +0100
Subject: ipa: Add a common interface for algorithm objects

In order to instantiate and use algorithms (AWB, AGC, etc.)
there is a need for a common class to define mandatory methods.

Instead of reinventing the wheel, reuse what Raspberry Pi has done and
adapt to the minimum requirements expected.

Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Tested-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
 src/ipa/libipa/algorithm.cpp | 39 +++++++++++++++++++++++++++++++++++++++
 src/ipa/libipa/algorithm.h   | 24 ++++++++++++++++++++++++
 src/ipa/libipa/meson.build   |  4 +++-
 3 files changed, 66 insertions(+), 1 deletion(-)
 create mode 100644 src/ipa/libipa/algorithm.cpp
 create mode 100644 src/ipa/libipa/algorithm.h

(limited to 'src/ipa/libipa')

diff --git a/src/ipa/libipa/algorithm.cpp b/src/ipa/libipa/algorithm.cpp
new file mode 100644
index 00000000..930f9353
--- /dev/null
+++ b/src/ipa/libipa/algorithm.cpp
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2021, Ideas On Board
+ *
+ * algorithm.cpp - ISP control algorithms
+ */
+
+#include "algorithm.h"
+
+/**
+ * \file algorithm.h
+ * \brief Algorithm common interface
+ */
+
+namespace libcamera {
+
+/**
+ * \brief The IPA namespace
+ *
+ * The IPA namespace groups all types specific to IPA modules. It serves as the
+ * top-level namespace for the IPA library libipa, and also contains
+ * module-specific namespaces for IPA modules.
+ */
+namespace ipa {
+
+/**
+ * \class Algorithm
+ * \brief The base class for all IPA algorithms
+ *
+ * The Algorithm class defines a standard interface for IPA algorithms. By
+ * abstracting algorithms, it makes possible the implementation of generic code
+ * to manage algorithms regardless of their specific type.
+ */
+
+Algorithm::~Algorithm() = default;
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
diff --git a/src/ipa/libipa/algorithm.h b/src/ipa/libipa/algorithm.h
new file mode 100644
index 00000000..89cee4c4
--- /dev/null
+++ b/src/ipa/libipa/algorithm.h
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2021, Ideas On Board
+ *
+ * algorithm.h - ISP control algorithm interface
+ */
+#ifndef __LIBCAMERA_IPA_LIBIPA_ALGORITHM_H__
+#define __LIBCAMERA_IPA_LIBIPA_ALGORITHM_H__
+
+namespace libcamera {
+
+namespace ipa {
+
+class Algorithm
+{
+public:
+	virtual ~Algorithm();
+};
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
+
+#endif /* __LIBCAMERA_IPA_LIBIPA_ALGORITHM_H__ */
diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build
index b29ef0f4..1819711d 100644
--- a/src/ipa/libipa/meson.build
+++ b/src/ipa/libipa/meson.build
@@ -1,13 +1,15 @@
 # SPDX-License-Identifier: CC0-1.0
 
 libipa_headers = files([
+    'algorithm.h',
 ])
 
 libipa_sources = files([
+    'algorithm.cpp',
 ])
 
 libipa_includes = include_directories('..')
 
-libipa = static_library('ipa', libipa_sources,
+libipa = static_library('ipa', [libipa_sources, libipa_headers],
                         include_directories : ipa_includes,
                         dependencies : libcamera_dep)
-- 
cgit v1.2.1