summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libcamera/include/v4l2_controls.h15
-rw-r--r--src/libcamera/pipeline/uvcvideo.cpp2
-rw-r--r--src/libcamera/pipeline/vimc.cpp2
-rw-r--r--src/libcamera/v4l2_controls.cpp19
-rw-r--r--src/libcamera/v4l2_device.cpp8
5 files changed, 25 insertions, 21 deletions
diff --git a/src/libcamera/include/v4l2_controls.h b/src/libcamera/include/v4l2_controls.h
index 10b72650..f2b67c5d 100644
--- a/src/libcamera/include/v4l2_controls.h
+++ b/src/libcamera/include/v4l2_controls.h
@@ -16,6 +16,8 @@
#include <linux/v4l2-controls.h>
#include <linux/videodev2.h>
+#include <libcamera/controls.h>
+
namespace libcamera {
class V4L2ControlInfo
@@ -46,17 +48,18 @@ using V4L2ControlInfoMap = std::map<unsigned int, V4L2ControlInfo>;
class V4L2Control
{
public:
- V4L2Control(unsigned int id, int value = 0)
- : id_(id), value_(value) {}
-
- int64_t value() const { return value_; }
- void setValue(int64_t value) { value_ = value; }
+ V4L2Control(unsigned int id, const ControlValue &value = ControlValue())
+ : id_(id), value_(value)
+ {
+ }
unsigned int id() const { return id_; }
+ const ControlValue &value() const { return value_; }
+ ControlValue &value() { return value_; }
private:
unsigned int id_;
- int64_t value_;
+ ControlValue value_;
};
class V4L2ControlList
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index 2ac582d7..860578d4 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -252,7 +252,7 @@ int PipelineHandlerUVC::processControls(UVCCameraData *data, Request *request)
LOG(UVC, Debug)
<< "Setting control 0x"
<< std::hex << std::setw(8) << ctrl.id() << std::dec
- << " to " << ctrl.value();
+ << " to " << ctrl.value().toString();
int ret = data->video_->setControls(&controls);
if (ret) {
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index ec9c1cd2..b2b36b23 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -300,7 +300,7 @@ int PipelineHandlerVimc::processControls(VimcCameraData *data, Request *request)
LOG(VIMC, Debug)
<< "Setting control 0x"
<< std::hex << std::setw(8) << ctrl.id() << std::dec
- << " to " << ctrl.value();
+ << " to " << ctrl.value().toString();
int ret = data->sensor_->setControls(&controls);
if (ret) {
diff --git a/src/libcamera/v4l2_controls.cpp b/src/libcamera/v4l2_controls.cpp
index 84258d99..64f0555f 100644
--- a/src/libcamera/v4l2_controls.cpp
+++ b/src/libcamera/v4l2_controls.cpp
@@ -144,23 +144,24 @@ V4L2ControlInfo::V4L2ControlInfo(const struct v4l2_query_ext_ctrl &ctrl)
*/
/**
- * \fn V4L2Control::value()
+ * \fn V4L2Control::value() const
* \brief Retrieve the value of the control
*
- * This method returns the cached control value, initially set by
- * V4L2ControlList::add() and then updated when the controls are read or
- * written with V4L2Device::getControls() and V4L2Device::setControls().
+ * This method is a const version of V4L2Control::value(), returning a const
+ * reference to the value.
*
* \return The V4L2 control value
*/
/**
- * \fn V4L2Control::setValue()
- * \brief Set the value of the control
- * \param value The new V4L2 control value
+ * \fn V4L2Control::value()
+ * \brief Retrieve the value of the control
*
- * This method stores the control value, which will be applied to the
- * device when calling V4L2Device::setControls().
+ * This method returns the cached control value, initially set by
+ * V4L2ControlList::add() and then updated when the controls are read or
+ * written with V4L2Device::getControls() and V4L2Device::setControls().
+ *
+ * \return The V4L2 control value
*/
/**
diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index 349bf2d2..fd4b9c6d 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -264,14 +264,14 @@ int V4L2Device::setControls(V4L2ControlList *ctrls)
/* Set the v4l2_ext_control value for the write operation. */
switch (info->type()) {
case V4L2_CTRL_TYPE_INTEGER64:
- v4l2Ctrls[i].value64 = ctrl->value();
+ v4l2Ctrls[i].value64 = ctrl->value().get<int64_t>();
break;
default:
/*
* \todo To be changed when support for string and
* compound controls will be added.
*/
- v4l2Ctrls[i].value = ctrl->value();
+ v4l2Ctrls[i].value = ctrl->value().get<int32_t>();
break;
}
}
@@ -393,14 +393,14 @@ void V4L2Device::updateControls(V4L2ControlList *ctrls,
switch (info->type()) {
case V4L2_CTRL_TYPE_INTEGER64:
- ctrl->setValue(v4l2Ctrl->value64);
+ ctrl->value().set<int64_t>(v4l2Ctrl->value64);
break;
default:
/*
* \todo To be changed when support for string and
* compound controls will be added.
*/
- ctrl->setValue(v4l2Ctrl->value);
+ ctrl->value().set<int32_t>(v4l2Ctrl->value);
break;
}
}