diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-02-15 22:44:03 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-03-06 18:10:20 +0200 |
commit | 5eaf4fed19909a954281a8b37bf5297b3cb2815f (patch) | |
tree | 0fe9ff85e3bf208cd741ec4cc08921a5f98d2510 /include | |
parent | cd04b9a96c7643f92f6b555b594739e0ddf0406a (diff) |
libcamera: controls: Return control by value
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 the array controls that are soon to be added, the
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 array 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@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/libcamera/controls.h | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h index 9d93064c..3b6b231c 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>(); } |