[PATCH v3 03/16] libcamera: matrix: Add a Span based constructor

Stefan Klug stefan.klug at ideasonboard.com
Thu Apr 3 17:49:08 CEST 2025


When one wants to create a Matrix from existing data, currently the only
way is via std::array. Add a Span based constructor to allow creation
from vectors and alike.

Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

---

Changes in v2:
- Added this patch

Changes in v3:
- Pass the Span by value
---
 include/libcamera/internal/matrix.h |  5 +++++
 src/libcamera/matrix.cpp            | 10 ++++++++++
 2 files changed, 15 insertions(+)

diff --git a/include/libcamera/internal/matrix.h b/include/libcamera/internal/matrix.h
index 512c1162c3bc..6d40567af0a0 100644
--- a/include/libcamera/internal/matrix.h
+++ b/include/libcamera/internal/matrix.h
@@ -34,6 +34,11 @@ public:
 		std::copy(data.begin(), data.end(), data_.begin());
 	}
 
+	Matrix(const Span<const T, Rows * Cols> data)
+	{
+		std::copy(data.begin(), data.end(), data_.begin());
+	}
+
 	static constexpr Matrix identity()
 	{
 		Matrix ret;
diff --git a/src/libcamera/matrix.cpp b/src/libcamera/matrix.cpp
index e7e027225666..49e2aa3b4f2c 100644
--- a/src/libcamera/matrix.cpp
+++ b/src/libcamera/matrix.cpp
@@ -41,6 +41,16 @@ LOG_DEFINE_CATEGORY(Matrix)
  * number of rows and columns of the matrix (Rows x Cols).
  */
 
+/**
+ * \fn Matrix::Matrix(const Span<const T, Rows * Cols> data)
+ * \brief Construct a matrix from supplied data
+ * \param[in] data Data from which to construct a matrix
+ *
+ * \a data is a one-dimensional Span and will be turned into a matrix in
+ * row-major order. The size of \a data must be equal to the product of the
+ * number of rows and columns of the matrix (Rows x Cols).
+ */
+
 /**
  * \fn Matrix::identity()
  * \brief Construct an identity matrix
-- 
2.43.0



More information about the libcamera-devel mailing list