[libcamera-devel] [PATCH 10/31] libcamera: controls: Return control by value in ControlList::get()

Kieran Bingham kieran.bingham at ideasonboard.com
Tue Mar 3 00:12:22 CET 2020


Heya,

It's both the ControlList::get() and ControlValue::get() isn't it? so
maybe just
  s/in ControlList::get()//

on $SUBJECT

On 29/02/2020 16:42, Laurent Pinchart wrote:
> The ControlList::get() and ControlValue::get() methods return the
> control value by reference. This requires the ControlValue class to
> store the control value in the same form as the one returned by those
> functions. For compound controls that are soon to be added, the

/For compound/For the compound/

> ControlValue class would need to store a span<> instance in addition to
> the control value itself, which would increase the required storage
> space.
> 
> Prepare for support of compound controls by returning from get() by
> value. As all control values are 8 bytes at most, this doesn't affect
> efficiency negatively.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>


Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

> ---
>  include/libcamera/controls.h | 10 ++++------
>  src/libcamera/controls.cpp   | 10 +++++-----
>  2 files changed, 9 insertions(+), 11 deletions(-)
> 
> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
> index 9d93064c11b2..3b6b231c7c64 100644
> --- a/include/libcamera/controls.h
> +++ b/include/libcamera/controls.h
> @@ -42,7 +42,7 @@ public:
>  	}
>  
>  	template<typename T>
> -	const T &get() const;
> +	T get() const;
>  	template<typename T>
>  	void set(const T &value);
>  
> @@ -212,13 +212,11 @@ public:
>  	bool contains(unsigned int id) const;
>  
>  	template<typename T>
> -	const T &get(const Control<T> &ctrl) const
> +	T get(const Control<T> &ctrl) const
>  	{
>  		const ControlValue *val = find(ctrl.id());
> -		if (!val) {
> -			static T t(0);
> -			return t;
> -		}
> +		if (!val)
> +			return T{};
>  
>  		return val->get<T>();
>  	}
> diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
> index a136ebd2653b..6a0d66fbea8d 100644
> --- a/src/libcamera/controls.cpp
> +++ b/src/libcamera/controls.cpp
> @@ -160,7 +160,7 @@ bool ControlValue::operator==(const ControlValue &other) const
>   */
>  
>  /**
> - * \fn template<typename T> const T &ControlValue::get() const
> + * \fn template<typename T> T ControlValue::get() const
>   * \brief Get the control value
>   *
>   * The control value type shall match the type T, otherwise the behaviour is
> @@ -177,7 +177,7 @@ bool ControlValue::operator==(const ControlValue &other) const
>  
>  #ifndef __DOXYGEN__
>  template<>
> -const bool &ControlValue::get<bool>() const
> +bool ControlValue::get<bool>() const
>  {
>  	ASSERT(type_ == ControlTypeBool);
>  
> @@ -185,7 +185,7 @@ const bool &ControlValue::get<bool>() const
>  }
>  
>  template<>
> -const int32_t &ControlValue::get<int32_t>() const
> +int32_t ControlValue::get<int32_t>() const
>  {
>  	ASSERT(type_ == ControlTypeInteger32);
>  
> @@ -193,7 +193,7 @@ const int32_t &ControlValue::get<int32_t>() const
>  }
>  
>  template<>
> -const int64_t &ControlValue::get<int64_t>() const
> +int64_t ControlValue::get<int64_t>() const
>  {
>  	ASSERT(type_ == ControlTypeInteger64);
>  
> @@ -720,7 +720,7 @@ bool ControlList::contains(unsigned int id) const
>  }
>  
>  /**
> - * \fn template<typename T> const T &ControlList::get(const Control<T> &ctrl) const
> + * \fn template<typename T> T ControlList::get(const Control<T> &ctrl) const
>   * \brief Get the value of control \a ctrl
>   * \param[in] ctrl The control
>   *
> 

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list