mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-17 01:15:06 +03:00
libcamera: controls: Construct Span with size for array controls
The ControlList::set() function overload used for array controls constructs a Span from an initializer list. It doesn't specify the Span size explicitly, which results in a dynamic extent Span being constructed. That causes a compilation failure for fixed-size array controls, as they are defined as Control<T> with T being a fixed-extent Span, and conversion from a dynamic-extent to fixed-extent Span when calling ControlValue::set() can't be implicit. Fix this by constructing the Span using the size of the control, which resolves to a fixed-extent and dynamic-extent Span for fixed-size and dynamic-size array controls respectively. The ControlList::set() function that takes an initializer list can then be used for fixed-size array controls. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
This commit is contained in:
parent
22ab0b4193
commit
f9c28992a9
2 changed files with 4 additions and 4 deletions
|
@ -393,14 +393,14 @@ public:
|
|||
val->set<T>(value);
|
||||
}
|
||||
|
||||
template<typename T, typename V>
|
||||
void set(const Control<T> &ctrl, const std::initializer_list<V> &value)
|
||||
template<typename T, typename V, size_t Size>
|
||||
void set(const Control<Span<T, Size>> &ctrl, const std::initializer_list<V> &value)
|
||||
{
|
||||
ControlValue *val = find(ctrl.id());
|
||||
if (!val)
|
||||
return;
|
||||
|
||||
val->set<T>(Span<const typename std::remove_cv_t<V>>{ value.begin(), value.size() });
|
||||
val->set(Span<const typename std::remove_cv_t<V>, Size>{ value.begin(), value.size() });
|
||||
}
|
||||
|
||||
const ControlValue &get(unsigned int id) const;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue