mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-12 23:09:45 +03:00
libcamera: controls: Avoid exception in ControlInfoMap count() and find()
The ControlInfoMap count() and find() methods use at() to lookup the control numerical ID in the idmap_. This causes an exception to be thrown if the ID doesn't exist in the map. Fix it by using the find() method instead in find(), and rely on idmap_.count() in count(). Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
4034e45f0a
commit
76b9923e55
1 changed files with 16 additions and 3 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue