summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-09-28 05:16:26 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-10-05 20:02:51 +0300
commit186ae04c0cdf5eb7d7afcd55d4b6a7b69e47f4ae (patch)
tree2113af83817c3231fe601123c062808e8f224986 /src
parentace50f75a4d4c10c0deb90fc857525b565cdd8c9 (diff)
libcamera: v4l2_controls: Use the ControlValue class for data storage
Use the ControlValue class to replace the manually crafted data storage in V4L2Control. This will help sharing code when more data types will be supported. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'src')
-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;
}
}