[v3,33/35] ipa: libipa: lsc: Specialize Interpolator for uint8_t
diff mbox series

Message ID 20260706-libipa-algorithms-v3-33-968757b038bb@ideasonboard.com
State New
Headers show
Series
  • ipa: libipa: Introduce libipa algorithms
Related show

Commit Message

Jacopo Mondi July 6, 2026, 8:01 a.m. UTC
The Mali-C55 LSC algorithm uses 8-bit gain values.

Specialize Interpolator<lsc::Components>> for uint8_t to prevent the
uint16_t specialization from being selected.

Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
---
 src/ipa/libipa/lsc_base.cpp | 11 +++++++++++
 src/ipa/libipa/lsc_base.h   |  7 +++++++
 2 files changed, 18 insertions(+)

Patch
diff mbox series

diff --git a/src/ipa/libipa/lsc_base.cpp b/src/ipa/libipa/lsc_base.cpp
index f47c9619669e..3ab1c75c4310 100644
--- a/src/ipa/libipa/lsc_base.cpp
+++ b/src/ipa/libipa/lsc_base.cpp
@@ -63,6 +63,17 @@  namespace lsc {
 } /* namespace lsc */
 
 #ifndef __DOXYGEN__
+template<>
+void Interpolator<lsc::Components<uint8_t>>::
+	interpolate(const lsc::Components<uint8_t> &a,
+		    const lsc::Components<uint8_t> &b,
+		    lsc::Components<uint8_t> &dest,
+		    double lambda)
+{
+	for (auto const &[k, v] : a)
+		interpolateVector(v, b.at(k), dest[k], lambda);
+}
+
 template<>
 void Interpolator<lsc::Components<uint16_t>>::
 	interpolate(const lsc::Components<uint16_t> &a,
diff --git a/src/ipa/libipa/lsc_base.h b/src/ipa/libipa/lsc_base.h
index a25d951e8ddb..51f3dd91f547 100644
--- a/src/ipa/libipa/lsc_base.h
+++ b/src/ipa/libipa/lsc_base.h
@@ -49,6 +49,13 @@  void interpolateVector(const std::vector<T> &a, const std::vector<T> &b,
 		dest[i] = a[i] * (1.0 - lambda) + b[i] * lambda;
 }
 
+template<>
+void Interpolator<lsc::Components<uint8_t>>::
+	interpolate(const lsc::Components<uint8_t> &a,
+		    const lsc::Components<uint8_t> &b,
+		    lsc::Components<uint8_t> &dest,
+		    double lambda);
+
 template<>
 void Interpolator<lsc::Components<uint16_t>>::
 	interpolate(const lsc::Components<uint16_t> &a,