[PATCH v1 2/4] libcamera: controls: Strings are arrays

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Apr 1 23:43:24 CEST 2025


Hi Barnabás,

Thank you for the patch.

On Tue, Apr 01, 2025 at 03:19:37PM +0200, Barnabás Pőcze wrote:
> `ControlId::isArray()` and `ControlValue::isArray()` disagree
> in the case of strings.

I think that's on purpose, or at least partly. ControlValue::isArray()
is used to indicate that the value is stored as an array of characters,
while ControlId::isArray() indicates whether the control has a single or
multiple values. The clash in naming is unfortunate, but strings are a
hybrid beast.

> Fix it by setting the static size of a
> string to `libcamera::dynamic_extent` to denote a dynamically
> sized array-like value.
> 
> One unfortunate side effect of this change is that if there were
> string controls (there are none at the moment), then `cam` would
> display them with an extra `Size: n` annotation.
> 
> Bug: https://bugs.libcamera.org/show_bug.cgi?id=255
> Signed-off-by: Barnabás Pőcze <barnabas.pocze at ideasonboard.com>
> ---
>  include/libcamera/controls.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
> index c1919d864..d35347f4c 100644
> --- a/include/libcamera/controls.h
> +++ b/include/libcamera/controls.h
> @@ -98,7 +98,7 @@ struct control_type<float> {
>  template<>
>  struct control_type<std::string> {
>  	static constexpr ControlType value = ControlTypeString;
> -	static constexpr std::size_t size = 0;
> +	static constexpr std::size_t size = libcamera::dynamic_extent;
>  };
>  
>  template<>

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list