[PATCH v2 2/3] libcamera: request: Avoid double map lookup

Barnabás Pőcze barnabas.pocze at ideasonboard.com
Mon Mar 31 16:17:13 CEST 2025


Use `try_emplace()` that more or less combines `find()` and `operator[]`
in one function.

Signed-off-by: Barnabás Pőcze <barnabas.pocze at ideasonboard.com>
---
 src/libcamera/request.cpp | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
index e7eb1c0c8..fc364441a 100644
--- a/src/libcamera/request.cpp
+++ b/src/libcamera/request.cpp
@@ -475,15 +475,14 @@ int Request::addBuffer(const Stream *stream, FrameBuffer *buffer,
 		return -EEXIST;
 	}
 
-	auto it = bufferMap_.find(stream);
-	if (it != bufferMap_.end()) {
+	auto [it, inserted] = bufferMap_.try_emplace(stream, buffer);
+	if (!inserted) {
 		LOG(Request, Error) << "FrameBuffer already set for stream";
 		return -EEXIST;
 	}
 
 	buffer->_d()->setRequest(this);
 	_d()->pending_.insert(buffer);
-	bufferMap_[stream] = buffer;
 
 	if (fence && fence->isValid())
 		buffer->_d()->setFence(std::move(fence));
-- 
2.49.0



More information about the libcamera-devel mailing list