summaryrefslogtreecommitdiff
path: root/src/ipa/ipu3
diff options
context:
space:
mode:
Diffstat (limited to 'src/ipa/ipu3')
-rw-r--r--src/ipa/ipu3/algorithms/algorithm.cpp101
-rw-r--r--src/ipa/ipu3/algorithms/algorithm.h12
-rw-r--r--src/ipa/ipu3/algorithms/awb.cpp9
-rw-r--r--src/ipa/ipu3/algorithms/meson.build1
4 files changed, 12 insertions, 111 deletions
diff --git a/src/ipa/ipu3/algorithms/algorithm.cpp b/src/ipa/ipu3/algorithms/algorithm.cpp
deleted file mode 100644
index 3e7e3018..00000000
--- a/src/ipa/ipu3/algorithms/algorithm.cpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2021, Ideas On Board
- *
- * algorithm.cpp - IPU3 control algorithm interface
- */
-
-#include "algorithm.h"
-
-/**
- * \file algorithm.h
- * \brief Algorithm common interface
- */
-
-namespace libcamera {
-
-namespace ipa::ipu3 {
-
-/**
- * \class Algorithm
- * \brief The base class for all IPU3 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.
- */
-
-/**
- * \brief Configure the Algorithm given an IPAConfigInfo
- * \param[in] context The shared IPA context
- * \param[in] configInfo The IPA configuration data, received from the pipeline
- * handler
- *
- * Algorithms may implement a configure operation to pre-calculate
- * parameters prior to commencing streaming.
- *
- * Configuration state may be stored in the IPASessionConfiguration structure of
- * the IPAContext.
- *
- * \return 0 if successful, an error code otherwise
- */
-int Algorithm::configure([[maybe_unused]] IPAContext &context,
- [[maybe_unused]] const IPAConfigInfo &configInfo)
-{
- return 0;
-}
-
-/**
- * \brief Fill the \a params buffer with ISP processing parameters for a frame
- * \param[in] context The shared IPA context
- * \param[out] params The IPU3 specific parameters.
- *
- * This function is called for every frame when the camera is running before it
- * is processed by the ImgU to prepare the ImgU processing parameters for that
- * frame.
- *
- * Algorithms shall fill in the parameter structure fields appropriately to
- * configure the ImgU processing blocks that they are responsible for. This
- * includes setting fields and flags that enable those processing blocks.
- */
-void Algorithm::prepare([[maybe_unused]] IPAContext &context,
- [[maybe_unused]] ipu3_uapi_params *params)
-{
-}
-
-/**
- * \brief Process ISP statistics, and run algorithm operations
- * \param[in] context The shared IPA context
- * \param[in] stats The IPU3 statistics and ISP results
- *
- * This function is called while camera is running for every frame processed by
- * the ImgU, to process statistics generated from that frame by the ImgU.
- * Algorithms shall use this data to run calculations and update their state
- * accordingly.
- *
- * Processing shall not take an undue amount of time, and any extended or
- * computationally expensive calculations or operations must be handled
- * asynchronously in a separate thread.
- *
- * Algorithms can store state in their respective IPAFrameContext structures,
- * and reference state from the IPAFrameContext of other algorithms.
- *
- * \todo Historical data may be required as part of the processing.
- * Either the previous frame, or the IPAFrameContext state of the frame
- * that generated the statistics for this operation may be required for
- * some advanced algorithms to prevent oscillations or support control
- * loops correctly. Only a single IPAFrameContext is available currently,
- * and so any data stored may represent the results of the previously
- * completed operations.
- *
- * Care shall be taken to ensure the ordering of access to the information
- * such that the algorithms use up to date state as required.
- */
-void Algorithm::process([[maybe_unused]] IPAContext &context,
- [[maybe_unused]] const ipu3_uapi_stats_3a *stats)
-{
-}
-
-} /* namespace ipa::ipu3 */
-
-} /* namespace libcamera */
diff --git a/src/ipa/ipu3/algorithms/algorithm.h b/src/ipa/ipu3/algorithms/algorithm.h
index 16310ab1..d2eecc78 100644
--- a/src/ipa/ipu3/algorithms/algorithm.h
+++ b/src/ipa/ipu3/algorithms/algorithm.h
@@ -9,21 +9,15 @@
#include <libcamera/ipa/ipu3_ipa_interface.h>
+#include <libipa/algorithm.h>
+
#include "ipa_context.h"
namespace libcamera {
namespace ipa::ipu3 {
-class Algorithm
-{
-public:
- virtual ~Algorithm() {}
-
- virtual int configure(IPAContext &context, const IPAConfigInfo &configInfo);
- virtual void prepare(IPAContext &context, ipu3_uapi_params *params);
- virtual void process(IPAContext &context, const ipu3_uapi_stats_3a *stats);
-};
+using Algorithm = libcamera::ipa::Algorithm<IPAContext, IPAConfigInfo, ipu3_uapi_params, ipu3_uapi_stats_3a>;
} /* namespace ipa::ipu3 */
diff --git a/src/ipa/ipu3/algorithms/awb.cpp b/src/ipa/ipu3/algorithms/awb.cpp
index c7bcb20e..1dc27fc9 100644
--- a/src/ipa/ipu3/algorithms/awb.cpp
+++ b/src/ipa/ipu3/algorithms/awb.cpp
@@ -193,6 +193,9 @@ Awb::Awb()
Awb::~Awb() = default;
+/**
+ * \copydoc libcamera::ipa::Algorithm::configure
+ */
int Awb::configure(IPAContext &context,
[[maybe_unused]] const IPAConfigInfo &configInfo)
{
@@ -373,6 +376,9 @@ void Awb::calculateWBGains(const ipu3_uapi_stats_3a *stats)
}
}
+/**
+ * \copydoc libcamera::ipa::Algorithm::process
+ */
void Awb::process(IPAContext &context, const ipu3_uapi_stats_3a *stats)
{
calculateWBGains(stats);
@@ -394,6 +400,9 @@ constexpr uint16_t Awb::threshold(float value)
return value * 8191;
}
+/**
+ * \copydoc libcamera::ipa::Algorithm::prepare
+ */
void Awb::prepare(IPAContext &context, ipu3_uapi_params *params)
{
/*
diff --git a/src/ipa/ipu3/algorithms/meson.build b/src/ipa/ipu3/algorithms/meson.build
index 3ec42f72..4db6ae1d 100644
--- a/src/ipa/ipu3/algorithms/meson.build
+++ b/src/ipa/ipu3/algorithms/meson.build
@@ -2,7 +2,6 @@
ipu3_ipa_algorithms = files([
'agc.cpp',
- 'algorithm.cpp',
'awb.cpp',
'blc.cpp',
'tone_mapping.cpp',