diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libcamera/controls.cpp | 87 | ||||
-rw-r--r-- | src/libcamera/pipeline/uvcvideo.cpp | 10 | ||||
-rw-r--r-- | src/libcamera/pipeline/vimc.cpp | 6 |
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: |