[v3,1/5] libcamera: controls: Give name to the union containing storage
diff mbox series

Message ID 20260903091843.85548-2-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • libcamera: controls: Move constructor/assignment + swap
Related show

Commit Message

Barnabás Pőcze Sept. 3, 2026, 9:18 a.m. UTC
In order to be able to copy the storage as one unit, regardless of
which member is active give a name to the union member. Also
rename the union member to internal/external to clarify which
is used for in-place/dynamically allocated storage.

And finally drop some unnecessary `reinterpret_cast`s.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 include/libcamera/controls.h |  6 +++---
 src/libcamera/controls.cpp   | 16 ++++++++--------
 2 files changed, 11 insertions(+), 11 deletions(-)

Patch
diff mbox series

diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 4485c228d3..da73e41848 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -246,9 +246,9 @@  private:
 	bool isArray_;
 	std::size_t numElements_ : 32;
 	union {
-		uint64_t value_;
-		void *storage_;
-	};
+		uint64_t internal;
+		void *external;
+	} storage_;
 
 	void release();
 	void set(ControlType type, bool isArray, const void *data,
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index f5581dbb88..e9d4e7eb47 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -122,9 +122,9 @@  void ControlValue::release()
 {
 	std::size_t size = numElements_ * ControlValueSize[type_];
 
-	if (size > sizeof(value_)) {
-		delete[] reinterpret_cast<uint8_t *>(storage_);
-		storage_ = nullptr;
+	if (size > sizeof(storage_.internal)) {
+		delete[] reinterpret_cast<uint8_t *>(storage_.external);
+		storage_.external = nullptr;
 	}
 }
 
@@ -192,9 +192,9 @@  ControlValue &ControlValue::operator=(const ControlValue &other)
 std::span<const uint8_t> ControlValue::data() const
 {
 	std::size_t size = numElements_ * ControlValueSize[type_];
-	const uint8_t *data = size > sizeof(value_)
-			    ? reinterpret_cast<const uint8_t *>(storage_)
-			    : reinterpret_cast<const uint8_t *>(&value_);
+	const uint8_t *data = size > sizeof(storage_.internal)
+			    ? reinterpret_cast<const uint8_t *>(storage_.external)
+			    : reinterpret_cast<const uint8_t *>(&storage_.internal);
 	return { data, size };
 }
 
@@ -391,8 +391,8 @@  void ControlValue::reserve(ControlType type, bool isArray, std::size_t numElemen
 	if (oldSize == newSize)
 		return;
 
-	if (newSize > sizeof(value_))
-		storage_ = reinterpret_cast<void *>(new uint8_t[newSize]);
+	if (newSize > sizeof(storage_.internal))
+		storage_.external = new uint8_t[newSize];
 }
 
 /**