summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libcamera/controls.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index 93ad2fc6..c23c1b88 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -491,7 +491,12 @@ const ControlInfoMap::mapped_type &ControlInfoMap::at(unsigned int id) const
*/
ControlInfoMap::size_type ControlInfoMap::count(unsigned int id) const
{
- return count(idmap_.at(id));
+ /*
+ * The ControlInfoMap and its idmap have a 1:1 mapping between their
+ * entries, we can thus just count the matching entries in idmap to
+ * avoid an additional lookup.
+ */
+ return idmap_.count(id);
}
/**
@@ -502,7 +507,11 @@ ControlInfoMap::size_type ControlInfoMap::count(unsigned int id) const
*/
ControlInfoMap::iterator ControlInfoMap::find(unsigned int id)
{
- return find(idmap_.at(id));
+ auto iter = idmap_.find(id);
+ if (iter == idmap_.end())
+ return end();
+
+ return find(iter->second);
}
/**
@@ -513,7 +522,11 @@ ControlInfoMap::iterator ControlInfoMap::find(unsigned int id)
*/
ControlInfoMap::const_iterator ControlInfoMap::find(unsigned int id) const
{
- return find(idmap_.at(id));
+ auto iter = idmap_.find(id);
+ if (iter == idmap_.end())
+ return end();
+
+ return find(iter->second);
}
/**