[libcamera-devel] [PATCH v1 1/6] delayed_controls: Template the ControlRingBuffer class

Naushir Patuck naush at raspberrypi.com
Fri Sep 2 14:08:03 CEST 2022


Convert ControlRingBuffer to a templated class to allow arbitrary ring buffer
array types to be defined.

Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
---
 include/libcamera/internal/delayed_controls.h | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/include/libcamera/internal/delayed_controls.h b/include/libcamera/internal/delayed_controls.h
index aef37077103c..f6e622f1dfba 100644
--- a/include/libcamera/internal/delayed_controls.h
+++ b/include/libcamera/internal/delayed_controls.h
@@ -53,17 +53,18 @@ private:
 
 	/* \todo Make the listSize configurable at instance creation time. */
 	static constexpr int listSize = 16;
-	class ControlRingBuffer : public std::array<Info, listSize>
+	template<typename T>
+	class ControlRingBuffer : public std::array<T, listSize>
 	{
 	public:
-		Info &operator[](unsigned int index)
+		T &operator[](unsigned int index)
 		{
-			return std::array<Info, listSize>::operator[](index % listSize);
+			return std::array<T, listSize>::operator[](index % listSize);
 		}
 
-		const Info &operator[](unsigned int index) const
+		const T &operator[](unsigned int index) const
 		{
-			return std::array<Info, listSize>::operator[](index % listSize);
+			return std::array<T, listSize>::operator[](index % listSize);
 		}
 	};
 
@@ -75,7 +76,7 @@ private:
 	uint32_t queueCount_;
 	uint32_t writeCount_;
 	/* \todo Evaluate if we should index on ControlId * or unsigned int */
-	std::unordered_map<const ControlId *, ControlRingBuffer> values_;
+	std::unordered_map<const ControlId *, ControlRingBuffer<Info>> values_;
 };
 
 } /* namespace libcamera */
-- 
2.25.1



More information about the libcamera-devel mailing list