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
|
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)
|
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
|
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