[libcamera-devel] [PATCH v2 10/24] libcamera: controls: Catch type mismatch in ControlInfoMap

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Nov 19 23:36:34 CET 2019


Hi Kieran,

On Tue, Nov 19, 2019 at 04:19:45PM +0000, Kieran Bingham wrote:
> On 18/11/2019 01:01, Laurent Pinchart wrote:
> > On Fri, Nov 15, 2019 at 05:21:29PM +0100, Jacopo Mondi wrote:
> >> On Fri, Nov 08, 2019 at 10:53:55PM +0200, Laurent Pinchart wrote:
> >>> ControlInfoMap requires the ControlId and ControlRange of each entry to
> >>> have identical types. Check for this and log an error if a mismatch is
> >>> detected.
> >>>
> >>> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> >>> ---
> >>>  src/libcamera/controls.cpp | 13 ++++++++++++-
> >>>  1 file changed, 12 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
> >>> index eae0250a92e3..c488b2e4eb3f 100644
> >>> --- a/src/libcamera/controls.cpp
> >>> +++ b/src/libcamera/controls.cpp
> >>> @@ -571,8 +571,19 @@ ControlInfoMap::const_iterator ControlInfoMap::find(unsigned int id) const
> >>>  void ControlInfoMap::generateIdmap()
> >>>  {
> >>>  	idmap_.clear();
> >>> -	for (const auto &ctrl : *this)
> >>> +
> >>> +	for (const auto &ctrl : *this) {
> >>> +		if (ctrl.first->type() != ctrl.second.min().type()) {
> >>> +			LOG(Controls, Error)
> >>> +				<< "Control " << utils::hex(ctrl.first->id())
> >>> +				<< " type and range type mismatch";
> >>> +			idmap_.clear();
> >>> +			clear();
> >>> +			return;
> >>> +		}
> >>> +
> >>
> >> Should we just skip the control or actually abort the whole id map
> >> generation ?
> > 
> > As this is a serious error, I think we should abort it completely, in
> > order to show that something went wrong. If you think we should just
> > skip the control, we can discuss that.
> 
> Is this serious enough to be Fatal? (to be really noisy?)
> 
> (Bearing in mind we still need to look at if Fatal messages are
> non-fatal when NDEBUG is defined).

I'm in two minds about this, for this exact reason, we still need to
define how to handle Fatal errors. I think I would prefer avoiding an
abort() here until the code gets tested a bit more.

> >>>  		idmap_[ctrl.first->id()] = ctrl.first;
> >>> +	}
> >>>  }
> >>>
> >>>  /**

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list