[PATCH v1 2/2] libcamera: camera_sensor: getFormat(): Use span
Barnabás Pőcze
barnabas.pocze at ideasonboard.com
Mon Mar 3 20:33:49 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 | 2 +-
src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 4 ++--
src/libcamera/sensor/camera_sensor_legacy.cpp | 4 ++--
src/libcamera/sensor/camera_sensor_raw.cpp | 4 ++--
test/camera-sensor.cpp | 11 +++++++----
5 files changed, 14 insertions(+), 11 deletions(-)
diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
index 59a1604c5..f6ef4df17 100644
--- a/include/libcamera/internal/camera_sensor.h
+++ b/include/libcamera/internal/camera_sensor.h
@@ -54,7 +54,7 @@ public:
virtual Size resolution() const = 0;
virtual V4L2SubdeviceFormat
- getFormat(const std::vector<unsigned int> &mbusCodes,
+ getFormat(Span<const unsigned int> mbusCodes,
const Size &size, const Size maxSize = Size()) const = 0;
virtual int setFormat(V4L2SubdeviceFormat *format,
Transform transform = Transform::Identity) = 0;
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
index eee5b09e2..ba702b454 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp
@@ -339,7 +339,7 @@ RkISP1Path::validate(const CameraSensor *sensor,
: cfg->size;
V4L2SubdeviceFormat sensorFormat =
- sensor->getFormat({ mbusCode }, rawSize);
+ sensor->getFormat(std::array{ mbusCode }, rawSize);
if (sensorConfig &&
sensorConfig->outputSize != sensorFormat.size)
@@ -360,7 +360,7 @@ RkISP1Path::validate(const CameraSensor *sensor,
uint32_t mbusCode = formatToMediaBus.at(rawFormat);
V4L2SubdeviceFormat sensorFormat =
- sensor->getFormat({ mbusCode }, sensorSize);
+ sensor->getFormat(std::array{ mbusCode }, sensorSize);
if (sensorFormat.size != sensorSize)
return CameraConfiguration::Invalid;
diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp
index 1eccca519..1b9b5c9a0 100644
--- a/src/libcamera/sensor/camera_sensor_legacy.cpp
+++ b/src/libcamera/sensor/camera_sensor_legacy.cpp
@@ -73,7 +73,7 @@ public:
std::vector<Size> sizes(unsigned int mbusCode) const override;
Size resolution() const override;
- V4L2SubdeviceFormat getFormat(const std::vector<unsigned int> &mbusCodes,
+ V4L2SubdeviceFormat getFormat(Span<const unsigned int> mbusCodes,
const Size &size,
const Size maxSize) const override;
int setFormat(V4L2SubdeviceFormat *format,
@@ -699,7 +699,7 @@ Size CameraSensorLegacy::resolution() const
}
V4L2SubdeviceFormat
-CameraSensorLegacy::getFormat(const std::vector<unsigned int> &mbusCodes,
+CameraSensorLegacy::getFormat(Span<const unsigned int> mbusCodes,
const Size &size, Size maxSize) const
{
unsigned int desiredArea = size.width * size.height;
diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp
index c65ecbb86..7ac0f563d 100644
--- a/src/libcamera/sensor/camera_sensor_raw.cpp
+++ b/src/libcamera/sensor/camera_sensor_raw.cpp
@@ -74,7 +74,7 @@ public:
std::vector<Size> sizes(unsigned int mbusCode) const override;
Size resolution() const override;
- V4L2SubdeviceFormat getFormat(const std::vector<unsigned int> &mbusCodes,
+ V4L2SubdeviceFormat getFormat(Span<const unsigned int> mbusCodes,
const Size &size,
const Size maxSize) const override;
int setFormat(V4L2SubdeviceFormat *format,
@@ -757,7 +757,7 @@ Size CameraSensorRaw::resolution() const
}
V4L2SubdeviceFormat
-CameraSensorRaw::getFormat(const std::vector<unsigned int> &mbusCodes,
+CameraSensorRaw::getFormat(Span<const unsigned int> mbusCodes,
const Size &size, Size maxSize) const
{
unsigned int desiredArea = size.width * size.height;
diff --git a/test/camera-sensor.cpp b/test/camera-sensor.cpp
index 869c78896..c30a2212e 100644
--- a/test/camera-sensor.cpp
+++ b/test/camera-sensor.cpp
@@ -96,10 +96,13 @@ protected:
}
/* Use an invalid format and make sure it's not selected. */
- V4L2SubdeviceFormat format = sensor_->getFormat({ 0xdeadbeef,
- MEDIA_BUS_FMT_SBGGR10_1X10,
- MEDIA_BUS_FMT_BGR888_1X24 },
- Size(1024, 768));
+ static constexpr uint32_t mbusCodes[] = {
+ 0xdeadbeef,
+ MEDIA_BUS_FMT_SBGGR10_1X10,
+ MEDIA_BUS_FMT_BGR888_1X24,
+ };
+
+ V4L2SubdeviceFormat format = sensor_->getFormat(mbusCodes, Size(1024, 768));
if (format.code != MEDIA_BUS_FMT_SBGGR10_1X10 ||
format.size != Size(4096, 2160)) {
cerr << "Failed to get a suitable format, expected 4096x2160-0x"
--
2.48.1
More information about the libcamera-devel
mailing list