[PATCH v1] libcamera: framebuffer_allocator: Avoid double map lookup

Barnabás Pőcze pobrn at protonmail.com
Sun Nov 27 00:42:27 CET 2022


Use `try_emplace()` on the map instead of `count()`
and `operator[]` to avoid walking the tree twice.

Signed-off-by: Barnabás Pőcze <pobrn at protonmail.com>
---
 src/libcamera/framebuffer_allocator.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/libcamera/framebuffer_allocator.cpp b/src/libcamera/framebuffer_allocator.cpp
index 4df27cac..17c5db49 100644
--- a/src/libcamera/framebuffer_allocator.cpp
+++ b/src/libcamera/framebuffer_allocator.cpp
@@ -88,12 +88,14 @@ FrameBufferAllocator::~FrameBufferAllocator()
  */
 int FrameBufferAllocator::allocate(Stream *stream)
 {
-	if (buffers_.count(stream)) {
+	const auto &[ it, inserted ] = buffers_.try_emplace(stream);
+
+	if (!inserted) {
 		LOG(Allocator, Error) << "Buffers already allocated for stream";
 		return -EBUSY;
 	}

-	int ret = camera_->exportFrameBuffers(stream, &buffers_[stream]);
+	int ret = camera_->exportFrameBuffers(stream, &it->second);
 	if (ret == -EINVAL)
 		LOG(Allocator, Error)
 			<< "Stream is not part of " << camera_->id()
--
2.38.1




More information about the libcamera-devel mailing list