[libcamera-devel,v2,2/7] libcamera: v4l2_controls: Cache query control information

Message ID 20200321003640.2156-3-laurent.pinchart@ideasonboard.com
State Accepted
Commit 2c6e6fbc961aaa345355fd92603e770b0221f0c4
Headers show
Series
  • Add support for V4L2 array controls
Related show

Commit Message

Laurent Pinchart March 21, 2020, 12:36 a.m. UTC
From: Jacopo Mondi <jacopo@jmondi.org>

Cache the V4L2 control info retrieved with VIDIOC_QUERY_EXT_CTRL
at control listing time for later use.

Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
Changes since v1:

- Rename ctrlsInfo_ to controlInfo_
- Add entry in controlInfo_ with emplace
---
 src/libcamera/include/v4l2_device.h | 1 +
 src/libcamera/v4l2_device.cpp       | 2 ++
 2 files changed, 3 insertions(+)

Patch

diff --git a/src/libcamera/include/v4l2_device.h b/src/libcamera/include/v4l2_device.h
index 6bfddefe336c..ce8edd98a01d 100644
--- a/src/libcamera/include/v4l2_device.h
+++ b/src/libcamera/include/v4l2_device.h
@@ -48,6 +48,7 @@  private:
 			    const struct v4l2_ext_control *v4l2Ctrls,
 			    unsigned int count);
 
+	std::map<unsigned int, struct v4l2_query_ext_ctrl> controlInfo_;
 	std::vector<std::unique_ptr<V4L2ControlId>> controlIds_;
 	ControlInfoMap controls_;
 	std::string deviceNode_;
diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index 179476e9afad..7eded67cb47e 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -381,6 +381,8 @@  void V4L2Device::listControls()
 		}
 
 		controlIds_.emplace_back(std::make_unique<V4L2ControlId>(ctrl));
+		controlInfo_.emplace(ctrl.id, ctrl);
+
 		ctrls.emplace(controlIds_.back().get(), V4L2ControlInfo(ctrl));
 	}