[v2,1/4] libcamera: Replace iterators with structured bindings
diff mbox series

Message ID 20260212151238.3736234-2-laurent.pinchart@ideasonboard.com
State New
Headers show
Series
  • libcamera: Clean up iterators
Related show

Commit Message

Laurent Pinchart Feb. 12, 2026, 3:12 p.m. UTC
Use structured bindings when iterating over a map in range-based for
loops. This improves readability.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
Changes since v1:

- Standardize on 'const auto &'
- Replace more iterators
---
 include/libcamera/internal/ipa_data_serializer.h    |  6 +++---
 src/apps/common/options.cpp                         |  6 ++----
 src/gstreamer/gstlibcamera-controls.cpp.in          |  7 +------
 src/libcamera/camera.cpp                            |  4 +---
 src/libcamera/converter/converter_v4l2_m2m.cpp      |  8 ++++----
 src/libcamera/pipeline/ipu3/cio2.cpp                |  6 +++---
 src/libcamera/pipeline/ipu3/ipu3.cpp                | 11 +++--------
 src/libcamera/pipeline/rpi/common/pipeline_base.cpp |  5 ++---
 src/libcamera/pipeline/vimc/vimc.cpp                | 10 ++++------
 src/libcamera/sensor/camera_sensor_legacy.cpp       |  4 ++--
 src/libcamera/sensor/camera_sensor_raw.cpp          |  4 ++--
 src/libcamera/software_isp/software_isp.cpp         |  3 +--
 src/libcamera/stream.cpp                            |  4 ++--
 src/libcamera/v4l2_videodevice.cpp                  |  6 ++----
 14 files changed, 32 insertions(+), 52 deletions(-)

Patch
diff mbox series

diff --git a/include/libcamera/internal/ipa_data_serializer.h b/include/libcamera/internal/ipa_data_serializer.h
index 927f5c4c7337..61bada52f691 100644
--- a/include/libcamera/internal/ipa_data_serializer.h
+++ b/include/libcamera/internal/ipa_data_serializer.h
@@ -211,12 +211,12 @@  public:
 		appendPOD<uint32_t>(dataVec, mapLen);
 
 		/* Serialize the members. */
-		for (auto const &it : data) {
+		for (const auto &[key, value] : data) {
 			std::vector<uint8_t> dvec;
 			std::vector<SharedFD> fvec;
 
 			std::tie(dvec, fvec) =
-				IPADataSerializer<K>::serialize(it.first, cs);
+				IPADataSerializer<K>::serialize(key, cs);
 
 			appendPOD<uint32_t>(dataVec, dvec.size());
 			appendPOD<uint32_t>(dataVec, fvec.size());
@@ -225,7 +225,7 @@  public:
 			fdsVec.insert(fdsVec.end(), fvec.begin(), fvec.end());
 
 			std::tie(dvec, fvec) =
-				IPADataSerializer<V>::serialize(it.second, cs);
+				IPADataSerializer<V>::serialize(value, cs);
 
 			appendPOD<uint32_t>(dataVec, dvec.size());
 			appendPOD<uint32_t>(dataVec, fvec.size());
diff --git a/src/apps/common/options.cpp b/src/apps/common/options.cpp
index b4ea1afe2136..b95f95afadf3 100644
--- a/src/apps/common/options.cpp
+++ b/src/apps/common/options.cpp
@@ -423,8 +423,7 @@  unsigned int KeyValueParser::maxOptionLength() const
 {
 	unsigned int maxLength = 0;
 
-	for (auto const &iter : optionsMap_) {
-		const Option &option = iter.second;
+	for (const auto &[name, option] : optionsMap_) {
 		unsigned int length = 10 + strlen(option.name);
 		if (option.argument != ArgumentNone)
 			length += 1 + strlen(option.typeName());
@@ -440,8 +439,7 @@  unsigned int KeyValueParser::maxOptionLength() const
 
 void KeyValueParser::usage(int indent)
 {
-	for (auto const &iter : optionsMap_) {
-		const Option &option = iter.second;
+	for (const auto &[name, option] : optionsMap_) {
 		std::string argument = std::string("          ") + option.name;
 
 		if (option.argument != ArgumentNone) {
diff --git a/src/gstreamer/gstlibcamera-controls.cpp.in b/src/gstreamer/gstlibcamera-controls.cpp.in
index 6faf3ee7a6c3..c3f0695f9b90 100644
--- a/src/gstreamer/gstlibcamera-controls.cpp.in
+++ b/src/gstreamer/gstlibcamera-controls.cpp.in
@@ -252,12 +252,7 @@  void GstCameraControls::setCamera(const std::shared_ptr<libcamera::Camera> &cam)
 	 * the pipeline has started and thus before the camera was known.
 	 */
 	ControlList new_controls;
-	for (auto control = controls_acc_.begin();
-	     control != controls_acc_.end();
-	     ++control) {
-		unsigned int id = control->first;
-		ControlValue value = control->second;
-
+	for (const auto &[id, value] : controls_acc_) {
 		const ControlId *cid = capabilities_.idmap().at(id);
 		auto info = capabilities_.find(cid);
 
diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
index 7c0e93ff483f..f724a1be5e3d 100644
--- a/src/libcamera/camera.cpp
+++ b/src/libcamera/camera.cpp
@@ -1362,9 +1362,7 @@  int Camera::queueRequest(Request *request)
 		return -EINVAL;
 	}
 
-	for (auto const &it : request->buffers()) {
-		const Stream *stream = it.first;
-
+	for (const auto &[stream, buffer] : request->buffers()) {
 		if (d->activeStreams_.find(stream) == d->activeStreams_.end()) {
 			LOG(Camera, Error) << "Invalid request";
 			return -EINVAL;
diff --git a/src/libcamera/converter/converter_v4l2_m2m.cpp b/src/libcamera/converter/converter_v4l2_m2m.cpp
index 37377ab24952..4427a37c6fc0 100644
--- a/src/libcamera/converter/converter_v4l2_m2m.cpp
+++ b/src/libcamera/converter/converter_v4l2_m2m.cpp
@@ -646,8 +646,8 @@  int V4L2M2MConverter::start()
 {
 	int ret;
 
-	for (auto &iter : streams_) {
-		ret = iter.second->start();
+	for (auto &[stream, m2mStream] : streams_) {
+		ret = m2mStream->start();
 		if (ret < 0) {
 			stop();
 			return ret;
@@ -662,8 +662,8 @@  int V4L2M2MConverter::start()
  */
 void V4L2M2MConverter::stop()
 {
-	for (auto &iter : streams_)
-		iter.second->stop();
+	for (auto &[stream, m2mStream] : streams_)
+		m2mStream->stop();
 }
 
 /**
diff --git a/src/libcamera/pipeline/ipu3/cio2.cpp b/src/libcamera/pipeline/ipu3/cio2.cpp
index 6f9c055f4d12..b6fe84fe70cc 100644
--- a/src/libcamera/pipeline/ipu3/cio2.cpp
+++ b/src/libcamera/pipeline/ipu3/cio2.cpp
@@ -82,11 +82,11 @@  std::vector<SizeRange> CIO2Device::sizes(const PixelFormat &format) const
 		return {};
 
 	std::vector<SizeRange> sizes;
-	for (const auto &iter : mbusCodesToPixelFormat) {
-		if (iter.second != format)
+	for (const auto &[code, pixelFormat] : mbusCodesToPixelFormat) {
+		if (pixelFormat != format)
 			continue;
 
-		mbusCode = iter.first;
+		mbusCode = code;
 		break;
 	}
 
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 0190f677e679..bac6f1c2ef40 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -791,8 +791,7 @@  void IPU3CameraData::cancelPendingRequests()
 	while (!pendingRequests_.empty()) {
 		Request *request = pendingRequests_.front();
 
-		for (auto it : request->buffers()) {
-			FrameBuffer *buffer = it.second;
+		for (const auto &[stream, buffer] : request->buffers()) {
 			buffer->_d()->cancel();
 			pipe()->completeBuffer(request, buffer);
 		}
@@ -1225,10 +1224,7 @@  void IPU3CameraData::paramsComputed(unsigned int id)
 		return;
 
 	/* Queue all buffers from the request aimed for the ImgU. */
-	for (auto it : info->request->buffers()) {
-		const Stream *stream = it.first;
-		FrameBuffer *outbuffer = it.second;
-
+	for (const auto &[stream, outbuffer] : info->request->buffers()) {
 		if (stream == &outStream_)
 			imgu_->output_->queueBuffer(outbuffer);
 		else if (stream == &vfStream_)
@@ -1304,8 +1300,7 @@  void IPU3CameraData::cio2BufferReady(FrameBuffer *buffer)
 
 	/* If the buffer is cancelled force a complete of the whole request. */
 	if (buffer->metadata().status == FrameMetadata::FrameCancelled) {
-		for (auto it : request->buffers()) {
-			FrameBuffer *b = it.second;
+		for (const auto &[stream, b] : request->buffers()) {
 			b->_d()->cancel();
 			pipe()->completeBuffer(request, b);
 		}
diff --git a/src/libcamera/pipeline/rpi/common/pipeline_base.cpp b/src/libcamera/pipeline/rpi/common/pipeline_base.cpp
index fb8e466f6e3b..de43603ddf69 100644
--- a/src/libcamera/pipeline/rpi/common/pipeline_base.cpp
+++ b/src/libcamera/pipeline/rpi/common/pipeline_base.cpp
@@ -941,13 +941,12 @@  V4L2SubdeviceFormat CameraData::findBestFormat(const Size &req, unsigned int bit
 	constexpr float penaltyBitDepth = 500.0;
 
 	/* Calculate the closest/best mode from the user requested size. */
-	for (const auto &iter : sensorFormats_) {
-		const unsigned int mbusCode = iter.first;
+	for (const auto &[mbusCode, sizes] : sensorFormats_) {
 		const PixelFormat format = mbusCodeToPixelFormat(mbusCode,
 								 BayerFormat::Packing::None);
 		const PixelFormatInfo &info = PixelFormatInfo::info(format);
 
-		for (const Size &size : iter.second) {
+		for (const Size &size : sizes) {
 			double reqAr = static_cast<double>(req.width) / req.height;
 			double fmtAr = static_cast<double>(size.width) / size.height;
 
diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index 4a03c149a617..08b1007528f2 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -405,8 +405,7 @@  int PipelineHandlerVimc::processControls(VimcCameraData *data, Request *request)
 {
 	ControlList controls(data->sensor_->controls());
 
-	for (const auto &it : request->controls()) {
-		unsigned int id = it.first;
+	for (const auto &[id, value] : request->controls()) {
 		unsigned int offset;
 		uint32_t cid;
 
@@ -423,8 +422,8 @@  int PipelineHandlerVimc::processControls(VimcCameraData *data, Request *request)
 			continue;
 		}
 
-		int32_t value = std::lround(it.second.get<float>() * 128 + offset);
-		controls.set(cid, std::clamp(value, 0, 255));
+		int32_t v4l2Value = std::lround(value.get<float>() * 128 + offset);
+		controls.set(cid, std::clamp(v4l2Value, 0, 255));
 	}
 
 	for (const auto &ctrl : controls)
@@ -607,8 +606,7 @@  void VimcCameraData::imageBufferReady(FrameBuffer *buffer)
 
 	/* If the buffer is cancelled force a complete of the whole request. */
 	if (buffer->metadata().status == FrameMetadata::FrameCancelled) {
-		for (auto it : request->buffers()) {
-			FrameBuffer *b = it.second;
+		for (const auto &[stream, b] : request->buffers()) {
 			b->_d()->cancel();
 			pipe->completeBuffer(request, b);
 		}
diff --git a/src/libcamera/sensor/camera_sensor_legacy.cpp b/src/libcamera/sensor/camera_sensor_legacy.cpp
index 39c34200b0ff..6a683821f219 100644
--- a/src/libcamera/sensor/camera_sensor_legacy.cpp
+++ b/src/libcamera/sensor/camera_sensor_legacy.cpp
@@ -536,8 +536,8 @@  void CameraSensorLegacy::initTestPatternModes()
 	 * list of supported test patterns.
 	 */
 	std::map<int32_t, controls::draft::TestPatternModeEnum> indexToTestPatternMode;
-	for (const auto &it : testPatternModes)
-		indexToTestPatternMode[it.second] = it.first;
+	for (const auto &[mode, index] : testPatternModes)
+		indexToTestPatternMode[index] = mode;
 
 	for (const ControlValue &value : v4l2TestPattern->second.values()) {
 		const int32_t index = value.get<int32_t>();
diff --git a/src/libcamera/sensor/camera_sensor_raw.cpp b/src/libcamera/sensor/camera_sensor_raw.cpp
index 81d8985ee134..10eba0331fe8 100644
--- a/src/libcamera/sensor/camera_sensor_raw.cpp
+++ b/src/libcamera/sensor/camera_sensor_raw.cpp
@@ -720,8 +720,8 @@  void CameraSensorRaw::initTestPatternModes()
 	 * list of supported test patterns.
 	 */
 	std::map<int32_t, controls::draft::TestPatternModeEnum> indexToTestPatternMode;
-	for (const auto &it : testPatternModes)
-		indexToTestPatternMode[it.second] = it.first;
+	for (const auto &[mode, index] : testPatternModes)
+		indexToTestPatternMode[index] = mode;
 
 	for (const ControlValue &value : v4l2TestPattern->second.values()) {
 		const int32_t index = value.get<int32_t>();
diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp
index a83986b787b7..167aaa0441c9 100644
--- a/src/libcamera/software_isp/software_isp.cpp
+++ b/src/libcamera/software_isp/software_isp.cpp
@@ -330,8 +330,7 @@  int SoftwareIsp::queueBuffers(uint32_t frame, FrameBuffer *input,
 
 	queuedInputBuffers_.push_back(input);
 
-	for (auto iter = outputs.begin(); iter != outputs.end(); iter++) {
-		FrameBuffer *const buffer = iter->second;
+	for (const auto &[stream, buffer] : outputs) {
 		queuedOutputBuffers_.push_back(buffer);
 		process(frame, input, buffer);
 	}
diff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp
index f091487c9353..8df70dbfd10b 100644
--- a/src/libcamera/stream.cpp
+++ b/src/libcamera/stream.cpp
@@ -108,8 +108,8 @@  std::vector<PixelFormat> StreamFormats::pixelformats() const
 {
 	std::vector<PixelFormat> formats;
 
-	for (auto const &it : formats_)
-		formats.push_back(it.first);
+	for (const auto &[format, sizes] : formats_)
+		formats.push_back(format);
 
 	return formats;
 }
diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index 25b61d049a0e..61a4551c63c5 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -2042,10 +2042,8 @@  int V4L2VideoDevice::streamOff()
 	state_ = State::Stopping;
 
 	/* Send back all queued buffers. */
-	for (auto it : queuedBuffers_) {
-		FrameBuffer *buffer = it.second;
-
-		cache_->put(it.first);
+	for (const auto &[id, buffer] : queuedBuffers_) {
+		cache_->put(id);
 		buffer->_d()->cancel();
 		bufferReady.emit(buffer);
 	}