[libcamera-devel] [PATCH v2 3/6] libcamera: formats: Make ImageFormats iterable
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Jun 26 03:28:20 CEST 2020
Hi Jacopo,
Thank you for the patch.
On Tue, Jun 09, 2020 at 01:28:41AM +0200, Jacopo Mondi wrote:
> Make ImageFormats an iterable class by exposing the type definitions
> for forward iterators and begin() and end() function from the internal
> formats map.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
> include/libcamera/internal/formats.h | 8 +++++++
> src/libcamera/formats.cpp | 36 ++++++++++++++++++++++++++++
> 2 files changed, 44 insertions(+)
>
> diff --git a/include/libcamera/internal/formats.h b/include/libcamera/internal/formats.h
> index 5668f3744c5d..cb840014cbd7 100644
> --- a/include/libcamera/internal/formats.h
> +++ b/include/libcamera/internal/formats.h
> @@ -22,6 +22,14 @@ template<typename T>
> class ImageFormats
> {
> public:
> + using iterator = typename std::map<T, std::vector<SizeRange>>::iterator;
> + using const_iterator = typename std::map<T, std::vector<SizeRange>>::const_iterator;
> +
> + iterator begin() { return data_.begin(); }
> + const_iterator begin() const { return data_.begin(); }
> + iterator end() { return data_.end(); }
> + const_iterator end() const { return data_.end(); }
This exposes a subset of the std::map API, excluding for instance reverse
iterators. I wonder if we should really go in this direction, which
would lead to potentially exposing more of the std::map API in the
future, when users could iterate over data().
> +
> int addFormat(T format, const std::vector<SizeRange> &sizes);
>
> bool isEmpty() const;
> diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp
> index 62fd46686d7d..fe50b9aaa1f2 100644
> --- a/src/libcamera/formats.cpp
> +++ b/src/libcamera/formats.cpp
> @@ -34,6 +34,42 @@ LOG_DEFINE_CATEGORY(Formats)
> * Sizes are stored as a list of SizeRange.
> */
>
> +/**
> + * \typedef ImageFormats::iterator
> + * \brief Iterator for the formats map
> + */
> +
> +/**
> + * \typedef ImageFormats::const_iterator
> + * \brief Const iterator for the formats map
> + */
> +
> +/**
> + * \fn iterator ImageFormats<T>::begin()
> + * \brief Retrieve an iterator to the first element in the formats map
> + * \return An iterator to the first format map
> + */
> +
> +/**
> + * \fn const_iterator ImageFormats<T>::begin() const
> + * \brief Retrieve an const iterator to the first element in the formats map
> + * \return A const iterator to the first format map
> + */
> +
> +/**
> + * \fn iterator ImageFormats<T>::end()
> + * \brief Retrieve an iterator pointing to the past-the-end element in the
> + * formats map
> + * \return An iterator to the element following the last format
> + */
> +
> +/**
> + * \fn const_iterator ImageFormats<T>::end() const
> + * \brief Retrieve a const iterator pointing to the past-the-end element in the
> + * formats map
> + * \return A const iterator to the element following the last format
> + */
> +
> /**
> * \brief Add a format and corresponding sizes to the description
> * \param[in] format Pixel format or media bus code to describe
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list