[libcamera-devel] [PATCH 1/3] libcamera: Add sequence value observer

Umang Jain umang.jain at ideasonboard.com
Mon May 9 14:42:30 CEST 2022


Hi Kieran,

Thank you for the patch

On 4/30/22 01:04, Kieran Bingham via libcamera-devel wrote:
> Components will often need to track and store a sequence number.
> Sequence numbers should be monotonically incrementing, but may require
> features such as validating that an external source matches this one, or
> ensuring that there are no gaps.
>
> Support the operations needed on sequence numbers in a dedicated class
> to reduce code duplication across components.
>
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
>   include/libcamera/meson.build |  1 +
>   include/libcamera/sequence.h  | 20 +++++++++++
>   src/libcamera/meson.build     |  1 +
>   src/libcamera/sequence.cpp    | 66 +++++++++++++++++++++++++++++++++++
>   4 files changed, 88 insertions(+)
>   create mode 100644 include/libcamera/sequence.h
>   create mode 100644 src/libcamera/sequence.cpp
>
> diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build
> index 408b7acf152c..2911d4bf4ec7 100644
> --- a/include/libcamera/meson.build
> +++ b/include/libcamera/meson.build
> @@ -14,6 +14,7 @@ libcamera_public_headers = files([
>       'logging.h',
>       'pixel_format.h',
>       'request.h',
> +    'sequence.h',
>       'stream.h',
>       'transform.h',
>   ])
> diff --git a/include/libcamera/sequence.h b/include/libcamera/sequence.h
> new file mode 100644
> index 000000000000..ad6e99726a4e
> --- /dev/null
> +++ b/include/libcamera/sequence.h
> @@ -0,0 +1,20 @@
> +#pragma once
> +
> +#include <optional>
> +
> +#include <libcamera/base/compiler.h>
> +
> +namespace libcamera {
> +
> +class Sequence
> +{
> +public:
> +	__nodiscard int update(unsigned int seq);
> +	void reset() { sequence_.reset(); }
> +
> +private:
> +	std::optional<unsigned int> sequence_;
> +};
> +
> +}; // namespace libcamera
> +
> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
> index 26912ca17819..ffdffeb4bfdc 100644
> --- a/src/libcamera/meson.build
> +++ b/src/libcamera/meson.build
> @@ -38,6 +38,7 @@ libcamera_sources = files([
>       'process.cpp',
>       'pub_key.cpp',
>       'request.cpp',
> +    'sequence.cpp',
>       'source_paths.cpp',
>       'stream.cpp',
>       'sysfs.cpp',
> diff --git a/src/libcamera/sequence.cpp b/src/libcamera/sequence.cpp
> new file mode 100644
> index 000000000000..374b4f04d0a3
> --- /dev/null
> +++ b/src/libcamera/sequence.cpp
> @@ -0,0 +1,66 @@
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> +/*
> + * Copyright (C) 2022, Ideas on Board Oy.
> + *
> + * sequence.cpp Sequence Number Observer
> + */
> +
> +#include <libcamera/base/log.h>
> +
> +#include <libcamera/sequence.h>
> +
> +/**
> + * \file sequence.h
> + * \brief Sequence number observer
> + */
> +
> +namespace libcamera {
> +
> +/**
> + * \class Sequence
> + * \brief Sequence number tracking which expects monotonically incrementing
> + *	  numbers


Indentation


Looks good to me,

Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>

> + *
> + * The Sequence number observer is initialised with the first value it is given.
> + * It will return a difference of the expected update value, against the newly
> + * provided value - allowing the consumer to identify if a break in a sequence
> + * has occured.
> + */
> +
> +/**
> + * \brief Update the sequence observer with the latest value
> + * \param seq The latest value for the sequence
> + *
> + * This function will update the state of the Sequence observer and identify any
> + * non-monotonic increment or change that may occur and return the difference
> + * from the expected update value.
> + *
> + * The sequence is initialised to the first value passed into \a update.
> + *
> + * \return The number of drops in the sequence that were detected
> + */
> +__nodiscard int Sequence::update(unsigned int seq)
> +{
> +	if (!sequence_)
> +		sequence_ = seq - 1;
> +
> +	/*
> +	 * Any update expects a single integer difference from
> +	 * the previous value.
> +	 */
> +	int diff = seq - sequence_.value() - 1;
> +
> +	sequence_ = seq;
> +
> +	return diff;
> +};
> +
> +/**
> + * \fn Sequence::reset
> + * \brief Resets the sequence observer
> + *
> + * Re-initialises the sequence observer so that any known break in the monotonic
> + * sequence is not reported.
> + */
> +
> +} /* namespace libcamera */


More information about the libcamera-devel mailing list