summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-10-14 00:54:12 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-10-15 22:33:32 +0300
commit1bfed95c1e9a2f97fb850809dcdc42e9515defc7 (patch)
tree61478c78dbd74f102c016b8d21601933a632404c
parent207d57c8b4c066a0e70982f28e0084361d7448f2 (diff)
libcamera: v4l2_controls: Store a ControlRange in V4L2ControlInfoMap
V4L2ControlRange only offers a convenience constructor for a ControlRange. Store the ControlRange instead of V4L2ControlRange in V4L2ControlInfoMap to make the map less dependent on V4L2 types. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r--src/libcamera/include/v4l2_controls.h38
-rw-r--r--src/libcamera/pipeline/uvcvideo.cpp2
-rw-r--r--src/libcamera/pipeline/vimc.cpp2
-rw-r--r--src/libcamera/v4l2_controls.cpp6
-rw-r--r--src/libcamera/v4l2_device.cpp6
-rw-r--r--test/v4l2_videodevice/controls.cpp6
6 files changed, 29 insertions, 31 deletions
diff --git a/src/libcamera/include/v4l2_controls.h b/src/libcamera/include/v4l2_controls.h
index 74156982..7d3528b0 100644
--- a/src/libcamera/include/v4l2_controls.h
+++ b/src/libcamera/include/v4l2_controls.h
@@ -31,27 +31,27 @@ public:
V4L2ControlRange(const struct v4l2_query_ext_ctrl &ctrl);
};
-class V4L2ControlInfoMap : private std::map<const ControlId *, V4L2ControlRange>
+class V4L2ControlInfoMap : private std::map<const ControlId *, ControlRange>
{
public:
- V4L2ControlInfoMap &operator=(std::map<const ControlId *, V4L2ControlRange> &&info);
-
- using std::map<const ControlId *, V4L2ControlRange>::key_type;
- using std::map<const ControlId *, V4L2ControlRange>::mapped_type;
- using std::map<const ControlId *, V4L2ControlRange>::value_type;
- using std::map<const ControlId *, V4L2ControlRange>::size_type;
- using std::map<const ControlId *, V4L2ControlRange>::iterator;
- using std::map<const ControlId *, V4L2ControlRange>::const_iterator;
-
- using std::map<const ControlId *, V4L2ControlRange>::begin;
- using std::map<const ControlId *, V4L2ControlRange>::cbegin;
- using std::map<const ControlId *, V4L2ControlRange>::end;
- using std::map<const ControlId *, V4L2ControlRange>::cend;
- using std::map<const ControlId *, V4L2ControlRange>::at;
- using std::map<const ControlId *, V4L2ControlRange>::empty;
- using std::map<const ControlId *, V4L2ControlRange>::size;
- using std::map<const ControlId *, V4L2ControlRange>::count;
- using std::map<const ControlId *, V4L2ControlRange>::find;
+ V4L2ControlInfoMap &operator=(std::map<const ControlId *, ControlRange> &&info);
+
+ using std::map<const ControlId *, ControlRange>::key_type;
+ using std::map<const ControlId *, ControlRange>::mapped_type;
+ using std::map<const ControlId *, ControlRange>::value_type;
+ using std::map<const ControlId *, ControlRange>::size_type;
+ using std::map<const ControlId *, ControlRange>::iterator;
+ using std::map<const ControlId *, ControlRange>::const_iterator;
+
+ using std::map<const ControlId *, ControlRange>::begin;
+ using std::map<const ControlId *, ControlRange>::cbegin;
+ using std::map<const ControlId *, ControlRange>::end;
+ using std::map<const ControlId *, ControlRange>::cend;
+ using std::map<const ControlId *, ControlRange>::at;
+ using std::map<const ControlId *, ControlRange>::empty;
+ using std::map<const ControlId *, ControlRange>::size;
+ using std::map<const ControlId *, ControlRange>::count;
+ using std::map<const ControlId *, ControlRange>::find;
mapped_type &at(unsigned int key);
const mapped_type &at(unsigned int key) const;
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index 7356585b..018c7691 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -337,7 +337,7 @@ int UVCCameraData::init(MediaEntity *entity)
/* Initialise the supported controls. */
const V4L2ControlInfoMap &controls = video_->controls();
for (const auto &ctrl : controls) {
- const V4L2ControlRange &range = ctrl.second;
+ const ControlRange &range = ctrl.second;
const ControlId *id;
switch (ctrl.first->id()) {
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index 87e7e54e..f7f82edc 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -413,7 +413,7 @@ int VimcCameraData::init(MediaDevice *media)
/* Initialise the supported controls. */
const V4L2ControlInfoMap &controls = sensor_->controls();
for (const auto &ctrl : controls) {
- const V4L2ControlRange &range = ctrl.second;
+ const ControlRange &range = ctrl.second;
const ControlId *id;
switch (ctrl.first->id()) {
diff --git a/src/libcamera/v4l2_controls.cpp b/src/libcamera/v4l2_controls.cpp
index f2ac60de..63416b9e 100644
--- a/src/libcamera/v4l2_controls.cpp
+++ b/src/libcamera/v4l2_controls.cpp
@@ -128,7 +128,7 @@ V4L2ControlRange::V4L2ControlRange(const struct v4l2_query_ext_ctrl &ctrl)
/**
* \class V4L2ControlInfoMap
- * \brief A map of controlID to V4L2ControlRange
+ * \brief A map of controlID to ControlRange for V4L2 controls
*/
/**
@@ -142,9 +142,9 @@ V4L2ControlRange::V4L2ControlRange(const struct v4l2_query_ext_ctrl &ctrl)
*
* \return The populated V4L2ControlInfoMap
*/
-V4L2ControlInfoMap &V4L2ControlInfoMap::operator=(std::map<const ControlId *, V4L2ControlRange> &&info)
+V4L2ControlInfoMap &V4L2ControlInfoMap::operator=(std::map<const ControlId *, ControlRange> &&info)
{
- std::map<const ControlId *, V4L2ControlRange>::operator=(std::move(info));
+ std::map<const ControlId *, ControlRange>::operator=(std::move(info));
idmap_.clear();
for (const auto &ctrl : *this)
diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index 133f8abc..47999e70 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -342,7 +342,7 @@ int V4L2Device::ioctl(unsigned long request, void *argp)
*/
void V4L2Device::listControls()
{
- std::map<const ControlId *, V4L2ControlRange> ctrls;
+ std::map<const ControlId *, ControlRange> ctrls;
struct v4l2_query_ext_ctrl ctrl = {};
/* \todo Add support for menu and compound controls. */
@@ -380,9 +380,7 @@ void V4L2Device::listControls()
}
controlIds_.emplace_back(utils::make_unique<V4L2ControlId>(ctrl));
- ctrls.emplace(std::piecewise_construct,
- std::forward_as_tuple(controlIds_.back().get()),
- std::forward_as_tuple(ctrl));
+ ctrls.emplace(controlIds_.back().get(), V4L2ControlRange(ctrl));
}
controls_ = std::move(ctrls);
diff --git a/test/v4l2_videodevice/controls.cpp b/test/v4l2_videodevice/controls.cpp
index d4b7588e..182228f3 100644
--- a/test/v4l2_videodevice/controls.cpp
+++ b/test/v4l2_videodevice/controls.cpp
@@ -41,9 +41,9 @@ protected:
return TestFail;
}
- const V4L2ControlRange &brightness = info.find(V4L2_CID_BRIGHTNESS)->second;
- const V4L2ControlRange &contrast = info.find(V4L2_CID_CONTRAST)->second;
- const V4L2ControlRange &saturation = info.find(V4L2_CID_SATURATION)->second;
+ const ControlRange &brightness = info.find(V4L2_CID_BRIGHTNESS)->second;
+ const ControlRange &contrast = info.find(V4L2_CID_CONTRAST)->second;
+ const ControlRange &saturation = info.find(V4L2_CID_SATURATION)->second;
/* Test getting controls. */
V4L2ControlList ctrls(info);