[libcamera-devel,v4,1/4] ipa: Add a common interface for algorithm objects
diff mbox series

Message ID 20210330211210.194806-2-jeanmichel.hautbois@ideasonboard.com
State Accepted
Headers show
Series
  • Implement IPA algorithms and demo with IPU3
Related show

Commit Message

Jean-Michel Hautbois March 30, 2021, 9:12 p.m. UTC
In order to instanciate 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>
---
 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

Comments

Kieran Bingham April 12, 2021, 11:42 a.m. UTC | #1
Hi Jean-Michel,

On 30/03/2021 22:12, Jean-Michel Hautbois wrote:
> In order to instanciate and use algorithms (AWB, AGC, etc.)

s/instanciate/instantiate/

> 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>

> ---
>  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
> 
> 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)
>

Patch
diff mbox series

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)