diff --git a/include/libcamera/internal/matrix.h b/include/libcamera/internal/matrix.h
index 6e3c190286fe..688c6fd498f3 100644
--- a/include/libcamera/internal/matrix.h
+++ b/include/libcamera/internal/matrix.h
@@ -8,6 +8,7 @@
 
 #include <algorithm>
 #include <sstream>
+#include <type_traits>
 #include <vector>
 
 #include <libcamera/base/log.h>
@@ -129,15 +130,16 @@ constexpr Matrix<U, Rows, Cols> operator*(const Matrix<U, Rows, Cols> &m, T d)
 	return d * m;
 }
 
-template<typename T, unsigned int R1, unsigned int C1, unsigned int R2, unsigned int C2>
-constexpr Matrix<T, R1, C2> operator*(const Matrix<T, R1, C1> &m1, const Matrix<T, R2, C2> &m2)
+template<typename T1, unsigned int R1, unsigned int C1, typename T2, unsigned int R2, unsigned int C2>
+constexpr Matrix<std::common_type_t<T1, T2>, R1, C2> operator*(const Matrix<T1, R1, C1> &m1,
+							       const Matrix<T2, R2, C2> &m2)
 {
 	static_assert(C1 == R2, "Matrix dimensions must match for multiplication");
-	Matrix<T, R1, C2> result;
+	Matrix<std::common_type_t<T1, T2>, R1, C2> result;
 
 	for (unsigned int i = 0; i < R1; i++) {
 		for (unsigned int j = 0; j < C2; j++) {
-			T sum = 0;
+			std::common_type_t<T1, T2> sum = 0;
 
 			for (unsigned int k = 0; k < C1; k++)
 				sum += m1[i][k] * m2[k][j];
diff --git a/src/libcamera/matrix.cpp b/src/libcamera/matrix.cpp
index 8590f8efeff3..f9117357dc7e 100644
--- a/src/libcamera/matrix.cpp
+++ b/src/libcamera/matrix.cpp
@@ -138,11 +138,12 @@ LOG_DEFINE_CATEGORY(Matrix)
  */
 
 /**
- * \fn Matrix<T, R1, C2> operator*(const Matrix<T, R1, C1> &m1, const Matrix<T, R2, C2> &m2)
+ * \fn operator*(const Matrix<T1, R1, C1> &m1, const Matrix<T2, R2, C2> &m2)
  * \brief Matrix multiplication
- * \tparam T Type of numerical values in the matrices
+ * \tparam T1 Type of numerical values in the first matrix
  * \tparam R1 Number of rows in the first matrix
  * \tparam C1 Number of columns in the first matrix
+ * \tparam T2 Type of numerical values in the secont matrix
  * \tparam R2 Number of rows in the second matrix
  * \tparam C2 Number of columns in the second matrix
  * \param m1 Multiplicand matrix
