[libcamera-devel] [RFC 4/6] libcamera: controls: Add default to ControlRange

Jacopo Mondi jacopo at jmondi.org
Tue Nov 19 17:44:19 CET 2019


Augment the the ControlRange class to store the control default value.

This is particularly relevant for v4l2 controls used to create
Camera properties, which are constructed using immutable video device
properties, whose value won't change at runtime.

Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
 include/libcamera/controls.h |  7 ++++++-
 src/libcamera/controls.cpp   | 17 +++++++++++++++--
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index baca684444a7..8669830af3c7 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -114,10 +114,12 @@ class ControlRange
 {
 public:
 	explicit ControlRange(const ControlValue &min = 0,
-			      const ControlValue &max = 0);
+			      const ControlValue &max = 0,
+			      const ControlValue &defaultValue = 0);
 
 	const ControlValue &min() const { return min_; }
 	const ControlValue &max() const { return max_; }
+	const ControlValue &defaultValue() const { return defaultValue_; }
 
 	std::string toString() const;
 
@@ -130,6 +132,9 @@ public:
 		return !(*this == other);
 	}
 
+protected:
+	ControlValue defaultValue_;
+
 private:
 	ControlValue min_;
 	ControlValue max_;
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index c488b2e4eb3f..4745ac4c95a7 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -353,14 +353,21 @@ Control<int64_t>::Control(unsigned int id, const char *name)
  * pipeline handlers to describe the controls they support.
  */
 
+/**
+ * \var ControlRange::defaultValue_
+ * \brief The control default value
+ */
+
 /**
  * \brief Construct a ControlRange with minimum and maximum range parameters
  * \param[in] min The control minimum value
  * \param[in] max The control maximum value
+ * \param[in] defaultValue The control default value
  */
 ControlRange::ControlRange(const ControlValue &min,
-			   const ControlValue &max)
-	: min_(min), max_(max)
+			   const ControlValue &max,
+			   const ControlValue &defaultValue)
+	: defaultValue_(defaultValue), min_(min), max_(max)
 {
 }
 
@@ -376,6 +383,12 @@ ControlRange::ControlRange(const ControlValue &min,
  * \return A ControlValue with the maximum value for the control
  */
 
+/**
+ * \fn ControlRange::defaultValue()
+ * \brief Retrieve the default value of the control
+ * \return A ControlValue with the default value for the control
+ */
+
 /**
  * \brief Provide a string representation of the ControlRange
  */
-- 
2.23.0



More information about the libcamera-devel mailing list