libcamera: v4l2_device: Workaround faulty control menus
Some UVC cameras have been identified that can provide V4L2 menu controls without any menu items. This leads to a segfault where we try to construct a ControlInfo(Span<>,default) with an empty span. Convert the v4l2ControlInfo and v4l2MenuControlInfo helper functions to return std::optional<ControlInfo> to be able to account in the caller if the control is valid, and only add acceptable controls to the supported control list. Menu controls without a list of menu items are no longer added as a valid control and a warning is logged. This also fixes a potential crash that would have occured in the unlikely event that a ctrl.minimum was set to less than 0. Bug: https://bugs.libcamera.org/show_bug.cgi?id=167 Reported-by: Marian Buschsieweke <marian.buschsieweke@ovgu.de> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
1cd7646f97
commit
96ed45b971
2 changed files with 25 additions and 7 deletions
|
@ -70,8 +70,8 @@ protected:
|
|||
private:
|
||||
static ControlType v4l2CtrlType(uint32_t ctrlType);
|
||||
static std::unique_ptr<ControlId> v4l2ControlId(const v4l2_query_ext_ctrl &ctrl);
|
||||
ControlInfo v4l2ControlInfo(const v4l2_query_ext_ctrl &ctrl);
|
||||
ControlInfo v4l2MenuControlInfo(const v4l2_query_ext_ctrl &ctrl);
|
||||
std::optional<ControlInfo> v4l2ControlInfo(const v4l2_query_ext_ctrl &ctrl);
|
||||
std::optional<ControlInfo> v4l2MenuControlInfo(const v4l2_query_ext_ctrl &ctrl);
|
||||
|
||||
void listControls();
|
||||
void updateControls(ControlList *ctrls,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue