[PATCH v1 1/2] libcamera: camera_sensor: getControls(): Use span
Barnabás Pőcze
barnabas.pocze at ideasonboard.com
Mon Mar 3 20:33:48 CET 2025
Do not force the caller to construct a vector.
Signed-off-by: Barnabás Pőcze <barnabas.pocze at ideasonboard.com>
---
include/libcamera/internal/camera_sensor.h | 3 ++-
include/libcamera/internal/v4l2_device.h | 2 +-
src/libcamera/sensor/camera_sensor_legacy.cpp | 14 +++++++++-----
src/libcamera/sensor/camera_sensor_raw.cpp | 14 +++++++++-----
src/libcamera/v4l2_device.cpp | 2 +-
test/v4l2_videodevice/controls.cpp | 14 +++++++++-----
6 files changed, 31 insertions(+), 18 deletions(-)
diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
index 13048f327..59a1604c5 100644
--- a/include/libcamera/internal/camera_sensor.h
+++ b/include/libcamera/internal/camera_sensor.h
@@ -14,6 +14,7 @@
#include <vector>
#include <libcamera/base/class.h>
+#include <libcamera/base/span.h>
#include <libcamera/control_ids.h>
#include <libcamera/controls.h>
@@ -74,7 +75,7 @@ public:
virtual BayerFormat::Order bayerOrder(Transform t) const = 0;
virtual const ControlInfoMap &controls() const = 0;
- virtual ControlList getControls(const std::vector<uint32_t> &ids) = 0;
+ virtual ControlList getControls(Span<const uint32_t> ids) = 0;
virtual int setControls(ControlList *ctrls) = 0;
virtual const std::vector<controls::draft::TestPatternModeEnum> &
diff --git a/include/libcamera/internal/v4l2_device.h b/include/libcamera/internal/v4l2_device.h
index affe52c2a..4ab818d90 100644
--- a/include/libcamera/internal/v4l2_device.h
+++ b/include/libcamera/internal/v4l2_device.h
@@ -37,7 +37,7 @@ public:
const ControlInfoMap &controls() const { return controls_; }
- ControlList getControls(const std::vector<uint32_t> &ids);
+ ControlList getControls(Span<const uint32_t> ids);
int setControls(ControlList *ctrls);
const struct v4l2_query_ext_ctrl *controlInfo(uint32_t id) const;
diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp
index 32989c19c..1eccca519 100644
--- a/src/libcamera/sensor/camera_sensor_legacy.cpp
+++ b/src/libcamera/sensor/camera_sensor_legacy.cpp
@@ -90,7 +90,7 @@ public:
BayerFormat::Order bayerOrder(Transform t) const override;
const ControlInfoMap &controls() const override;
- ControlList getControls(const std::vector<uint32_t> &ids) override;
+ ControlList getControls(Span<const uint32_t> ids) override;
int setControls(ControlList *ctrls) override;
const std::vector<controls::draft::TestPatternModeEnum> &
@@ -907,9 +907,13 @@ int CameraSensorLegacy::sensorInfo(IPACameraSensorInfo *info) const
* duration through V4L2 controls. Support for the V4L2_CID_PIXEL_RATE,
* V4L2_CID_HBLANK and V4L2_CID_VBLANK controls is mandatory.
*/
- ControlList ctrls = subdev_->getControls({ V4L2_CID_PIXEL_RATE,
- V4L2_CID_HBLANK,
- V4L2_CID_VBLANK });
+ static constexpr uint32_t cids[] = {
+ V4L2_CID_PIXEL_RATE,
+ V4L2_CID_HBLANK,
+ V4L2_CID_VBLANK,
+ };
+
+ ControlList ctrls = subdev_->getControls(cids);
if (ctrls.empty()) {
LOG(CameraSensor, Error)
<< "Failed to retrieve camera info controls";
@@ -983,7 +987,7 @@ const ControlInfoMap &CameraSensorLegacy::controls() const
return subdev_->controls();
}
-ControlList CameraSensorLegacy::getControls(const std::vector<uint32_t> &ids)
+ControlList CameraSensorLegacy::getControls(Span<const uint32_t> ids)
{
return subdev_->getControls(ids);
}
diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp
index ab75b1f82..c65ecbb86 100644
--- a/src/libcamera/sensor/camera_sensor_raw.cpp
+++ b/src/libcamera/sensor/camera_sensor_raw.cpp
@@ -96,7 +96,7 @@ public:
BayerFormat::Order bayerOrder(Transform t) const override;
const ControlInfoMap &controls() const override;
- ControlList getControls(const std::vector<uint32_t> &ids) override;
+ ControlList getControls(Span<const uint32_t> ids) override;
int setControls(ControlList *ctrls) override;
const std::vector<controls::draft::TestPatternModeEnum> &
@@ -1022,9 +1022,13 @@ int CameraSensorRaw::sensorInfo(IPACameraSensorInfo *info) const
* duration through V4L2 controls. Support for the V4L2_CID_PIXEL_RATE,
* V4L2_CID_HBLANK and V4L2_CID_VBLANK controls is mandatory.
*/
- ControlList ctrls = subdev_->getControls({ V4L2_CID_PIXEL_RATE,
- V4L2_CID_HBLANK,
- V4L2_CID_VBLANK });
+ static constexpr uint32_t cids[] = {
+ V4L2_CID_PIXEL_RATE,
+ V4L2_CID_HBLANK,
+ V4L2_CID_VBLANK,
+ };
+
+ ControlList ctrls = subdev_->getControls(cids);
if (ctrls.empty()) {
LOG(CameraSensor, Error)
<< "Failed to retrieve camera info controls";
@@ -1095,7 +1099,7 @@ const ControlInfoMap &CameraSensorRaw::controls() const
return subdev_->controls();
}
-ControlList CameraSensorRaw::getControls(const std::vector<uint32_t> &ids)
+ControlList CameraSensorRaw::getControls(Span<const uint32_t> ids)
{
return subdev_->getControls(ids);
}
diff --git a/src/libcamera/v4l2_device.cpp b/src/libcamera/v4l2_device.cpp
index 2f65a43a0..089f45afd 100644
--- a/src/libcamera/v4l2_device.cpp
+++ b/src/libcamera/v4l2_device.cpp
@@ -174,7 +174,7 @@ void V4L2Device::close()
* \return The control values in a ControlList on success, or an empty list on
* error
*/
-ControlList V4L2Device::getControls(const std::vector<uint32_t> &ids)
+ControlList V4L2Device::getControls(Span<const uint32_t> ids)
{
if (ids.empty())
return {};
diff --git a/test/v4l2_videodevice/controls.cpp b/test/v4l2_videodevice/controls.cpp
index b0130295e..7990f37dc 100644
--- a/test/v4l2_videodevice/controls.cpp
+++ b/test/v4l2_videodevice/controls.cpp
@@ -60,11 +60,15 @@ protected:
const ControlInfo &u8 = infoMap.find(VIVID_CID_U8_4D_ARRAY)->second;
/* Test getting controls. */
- ControlList ctrls = capture_->getControls({ V4L2_CID_BRIGHTNESS,
- V4L2_CID_CONTRAST,
- V4L2_CID_SATURATION,
- VIVID_CID_INTEGER64,
- VIVID_CID_U8_4D_ARRAY });
+ static constexpr uint32_t cids[] = {
+ V4L2_CID_BRIGHTNESS,
+ V4L2_CID_CONTRAST,
+ V4L2_CID_SATURATION,
+ VIVID_CID_INTEGER64,
+ VIVID_CID_U8_4D_ARRAY,
+ };
+
+ ControlList ctrls = capture_->getControls(cids);
if (ctrls.empty()) {
cerr << "Failed to get controls" << endl;
return TestFail;
--
2.48.1
More information about the libcamera-devel
mailing list