[libcamera-devel] [PATCH v2 03/13] libcamera: controls: Add supported values to ControlInfo

Jacopo Mondi jacopo at jmondi.org
Tue Oct 20 20:05:24 CEST 2020


Add to the ControlInfo class a list of supported values that can be
provided at construction time and retrieved through an accessor method.

This is meant to support controls that have an enumerated list of
supported values.

Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
 include/libcamera/controls.h |  5 ++++-
 src/libcamera/controls.cpp   | 22 +++++++++++++++++++---
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 80944efc133a..d1f6d4490c35 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -267,11 +267,13 @@ class ControlInfo
 public:
 	explicit ControlInfo(const ControlValue &min = 0,
 			     const ControlValue &max = 0,
-			     const ControlValue &def = 0);
+			     const ControlValue &def = 0,
+			     const std::vector<ControlValue> &values = {});
 
 	const ControlValue &min() const { return min_; }
 	const ControlValue &max() const { return max_; }
 	const ControlValue &def() const { return def_; }
+	const std::vector<ControlValue> &values() const { return values_; }
 
 	std::string toString() const;
 
@@ -289,6 +291,7 @@ private:
 	ControlValue min_;
 	ControlValue max_;
 	ControlValue def_;
+	std::vector<ControlValue> values_;
 };
 
 using ControlIdMap = std::unordered_map<unsigned int, const ControlId *>;
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index dca782667d88..61feee37a1b8 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -479,15 +479,17 @@ void ControlValue::reserve(ControlType type, bool isArray, std::size_t numElemen
  */
 
 /**
- * \brief Construct a ControlInfo with minimum and maximum range parameters
+ * \brief Construct a ControlInfo with parameters
  * \param[in] min The control minimum value
  * \param[in] max The control maximum value
  * \param[in] def The control default value
+ * \param[in] values The control supported values
  */
 ControlInfo::ControlInfo(const ControlValue &min,
 			 const ControlValue &max,
-			 const ControlValue &def)
-	: min_(min), max_(max), def_(def)
+			 const ControlValue &def,
+			 const std::vector<ControlValue> &values)
+	: min_(min), max_(max), def_(def), values_(values)
 {
 }
 
@@ -519,6 +521,20 @@ ControlInfo::ControlInfo(const ControlValue &min,
  * \return A ControlValue with the default value for the control
  */
 
+/**
+ * \fn ControlInfo::values()
+ * \brief Retrieve the values supported by the control
+ *
+ * For controls that support a pre-defined number of values, the enumeration of
+ * those is reported through a vector of ControlValue instances accessible with
+ * this method.
+ *
+ * If the control reports a list of supported values, setting values outside
+ * of the reported ones results in undefined behaviour.
+ *
+ * \return A vector of ControlValue instances with the supported values
+ */
+
 /**
  * \brief Provide a string representation of the ControlInfo
  */
-- 
2.28.0



More information about the libcamera-devel mailing list