[libcamera-devel] [PATCH v2 3/6] android: camera_metadata: Add appendEntry helper
Jacopo Mondi
jacopo at jmondi.org
Tue Dec 21 09:53:42 CET 2021
Hi Paul,
On Mon, Dec 20, 2021 at 05:26:26PM -0600, Paul Elder wrote:
> Add appendEntry() helper, that automatically detects if updateEntry() or
> addEntry() should be used.
>
> Note that updateEntry() will fail if the entry was not yet added, and
> addEntry() will fail is the entry was already added. They are silent
> failures that cause unexpected values to find their way into the android
> metadata instance.
>
> Previously this helper was not necessary, as (with respect to the
> current use case) the preview template generator would always add a key
> so the other template generators that used the preview template as
> boilerplate could reliably use updateEntry(). The preview template
> generator will soon decide based on capabilities whether or not to add
> keys, so the other template generators need a helper to decide whether
> to use updateEntry() or addEntry().
>
> For now only implement it for enums and arithmetic values, as they will
> mainly be used in populating templates.
I'm just not sure if doing this for enum and arithmetic types is a
good idea, or we would need a template specialization for each
specialization of addEntry() (and it seems to me updateEntry() and
addEntry() are already mis-aligned).
>
> Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> ---
> Changes in v2:
> - expand on correctness of updateEntry() vs addEntry(), and the
> rationale for the patch
> ---
> src/android/camera_metadata.h | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h
> index e70f60af..f3b7c91e 100644
> --- a/src/android/camera_metadata.h
> +++ b/src/android/camera_metadata.h
> @@ -33,6 +33,17 @@ public:
>
> bool hasEntry(uint32_t tag) const;
>
> + template<typename T,
> + std::enable_if_t<std::is_arithmetic_v<T> ||
> + std::is_enum_v<T>> * = nullptr>
> + bool appendEntry(uint32_t tag, const T &data)
Usual bikeshedding about name: is append the best name to explain what
this function does ? Isn't 'setEntry()' more appropriate ?
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
Thanks
j
> + {
> + if (hasEntry(tag))
> + return updateEntry(tag, &data, 1, sizeof(T));
> + else
> + return addEntry(tag, &data, 1, sizeof(T));
> + }
> +
> template<typename T,
> std::enable_if_t<std::is_arithmetic_v<T> ||
> std::is_enum_v<T>> * = nullptr>
> --
> 2.27.0
>
More information about the libcamera-devel
mailing list