diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-02-28 17:01:43 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-03-23 16:45:16 +0200 |
commit | 8daf20485b90af2065e3db0e3fd0cd5b72fd7ac4 (patch) | |
tree | 7d01521858283e8da927f2b429e3ea5b7d4f6bb9 /include | |
parent | 9ab024f7c27d9b6b3ab433502eab02d4a29a3da4 (diff) |
libcamera: controls: Add zero-copy set API for ControlValue
Extend the ControlValue class with a reserve() function to set the value
without actually copying data, and a non-const data() function that
allows writing data directly to the ControlValue storage. This allows
allocating memory directly in ControlValue, potentially removing a data
copy.
Note that this change was implemented before ByteStreamBuffer gained the
zero-copy read() variant, and doesn't actually save a copy in the
control serializer. It however still simplifies
ControlSerializer::loadControlValue().
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/libcamera/controls.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h index 2a665712..4b2e7e9c 100644 --- a/include/libcamera/controls.h +++ b/include/libcamera/controls.h @@ -115,6 +115,7 @@ public: bool isArray() const { return isArray_; } std::size_t numElements() const { return numElements_; } Span<const uint8_t> data() const; + Span<uint8_t> data(); std::string toString() const; @@ -174,6 +175,9 @@ public: value.data(), value.size(), sizeof(typename T::value_type)); } + void reserve(ControlType type, bool isArray = false, + std::size_t numElements = 1); + private: ControlType type_ : 8; bool isArray_; |