[libcamera-devel] [PATCH v4 1/7] delayed_controls: Template the ControlRingBuffer class
Kieran Bingham
kieran.bingham at ideasonboard.com
Wed Oct 26 18:12:05 CEST 2022
Hi Naush,
Quoting Naushir Patuck via libcamera-devel (2022-10-19 10:01:01)
> Convert ControlRingBuffer to a templated class to allow arbitrary ring buffer
> array types to be defined. Rename ControlRingBuffer to RingBuffer to indicate
> this.
>
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> Reviewed-by: David Plowman <david.plowman at raspberrypi.com>
> Tested-by: David Plowman <david.plowman at raspberrypi.com>
I know Laurent has been investigating 'generic' ring-buffer
implementations, but that sounded like it grew into a rabbit hole, and
this is quite localised.
I can see it's going to help later in the series, and it doesn't impact
anything else here so:
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.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..de8026e3e4f0 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 RingBuffer : 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 *, RingBuffer<Info>> values_;
> };
>
> } /* namespace libcamera */
> --
> 2.25.1
>
More information about the libcamera-devel
mailing list