summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/controls.cpp87
-rw-r--r--src/libcamera/pipeline/uvcvideo.cpp10
-rw-r--r--src/libcamera/pipeline/vimc.cpp6
3 files changed, 47 insertions, 56 deletions
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index 9960a30d..88aab88d 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -90,77 +90,68 @@ ControlValue::ControlValue(int64_t value)
*/
/**
- * \brief Set the value with a boolean
- * \param[in] value Boolean value to store
+ * \fn template<typename T> const T &ControlValue::get() const
+ * \brief Get the control value
+ *
+ * The control value type shall match the type T, otherwise the behaviour is
+ * undefined.
+ *
+ * \return The control value
*/
-void ControlValue::set(bool value)
-{
- type_ = ControlTypeBool;
- bool_ = value;
-}
/**
- * \brief Set the value with an integer
- * \param[in] value Integer value to store
+ * \fn template<typename T> void ControlValue::set(const T &value)
+ * \brief Set the control value to \a value
+ * \param[in] value The control value
*/
-void ControlValue::set(int value)
-{
- type_ = ControlTypeInteger;
- integer_ = value;
-}
-/**
- * \brief Set the value with a 64 bit integer
- * \param[in] value 64 bit integer value to store
- */
-void ControlValue::set(int64_t value)
-{
- type_ = ControlTypeInteger64;
- integer64_ = value;
-}
-
-/**
- * \brief Get the boolean value
- *
- * The value type must be Boolean.
- *
- * \return The boolean value
- */
-bool ControlValue::getBool() const
+#ifndef __DOXYGEN__
+template<>
+const bool &ControlValue::get<bool>() const
{
ASSERT(type_ == ControlTypeBool);
return bool_;
}
-/**
- * \brief Get the integer value
- *
- * The value type must be Integer or Integer64.
- *
- * \return The integer value
- */
-int ControlValue::getInt() const
+template<>
+const int &ControlValue::get<int>() const
{
ASSERT(type_ == ControlTypeInteger || type_ == ControlTypeInteger64);
return integer_;
}
-/**
- * \brief Get the 64-bit integer value
- *
- * The value type must be Integer or Integer64.
- *
- * \return The 64-bit integer value
- */
-int64_t ControlValue::getInt64() const
+template<>
+const int64_t &ControlValue::get<int64_t>() const
{
ASSERT(type_ == ControlTypeInteger || type_ == ControlTypeInteger64);
return integer64_;
}
+template<>
+void ControlValue::set<bool>(const bool &value)
+{
+ type_ = ControlTypeBool;
+ bool_ = value;
+}
+
+template<>
+void ControlValue::set<int>(const int &value)
+{
+ type_ = ControlTypeInteger;
+ integer_ = value;
+}
+
+template<>
+void ControlValue::set<int64_t>(const int64_t &value)
+{
+ type_ = ControlTypeInteger64;
+ integer64_ = value;
+}
+#endif /* __DOXYGEN__ */
+
/**
* \brief Assemble and return a string describing the value
* \return A string describing the ControlValue
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index 89652105..81c548af 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -235,24 +235,24 @@ int PipelineHandlerUVC::processControls(UVCCameraData *data, Request *request)
switch (ci->id()) {
case Brightness:
- controls.add(V4L2_CID_BRIGHTNESS, value.getInt());
+ controls.add(V4L2_CID_BRIGHTNESS, value.get<int>());
break;
case Contrast:
- controls.add(V4L2_CID_CONTRAST, value.getInt());
+ controls.add(V4L2_CID_CONTRAST, value.get<int>());
break;
case Saturation:
- controls.add(V4L2_CID_SATURATION, value.getInt());
+ controls.add(V4L2_CID_SATURATION, value.get<int>());
break;
case ManualExposure:
controls.add(V4L2_CID_EXPOSURE_AUTO, 1);
- controls.add(V4L2_CID_EXPOSURE_ABSOLUTE, value.getInt());
+ controls.add(V4L2_CID_EXPOSURE_ABSOLUTE, value.get<int>());
break;
case ManualGain:
- controls.add(V4L2_CID_GAIN, value.getInt());
+ controls.add(V4L2_CID_GAIN, value.get<int>());
break;
default:
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index f26a91f8..3e34e7a0 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -288,15 +288,15 @@ int PipelineHandlerVimc::processControls(VimcCameraData *data, Request *request)
switch (ci->id()) {
case Brightness:
- controls.add(V4L2_CID_BRIGHTNESS, value.getInt());
+ controls.add(V4L2_CID_BRIGHTNESS, value.get<int>());
break;
case Contrast:
- controls.add(V4L2_CID_CONTRAST, value.getInt());
+ controls.add(V4L2_CID_CONTRAST, value.get<int>());
break;
case Saturation:
- controls.add(V4L2_CID_SATURATION, value.getInt());
+ controls.add(V4L2_CID_SATURATION, value.get<int>());
break;
default: