From a023aed1aa5ae3554d193ebd0a2102ec676ddd14 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Thu, 2 Jan 2020 01:49:56 +0200 Subject: libcamera: pipeline: uvcvideo: Fix crash when default entity is not found Commit e441f2c7f46d ("libcamera: pipeline: uvcvideo: Add controls support") broke handling of UVC devices without a default entity by turning the error check into an always false check. Fix it. Fixes: e441f2c7f46d ("libcamera: pipeline: uvcvideo: Add controls support") Signed-off-by: Laurent Pinchart Reviewed-by: Paul Elder Reviewed-by: Jacopo Mondi --- src/libcamera/pipeline/uvcvideo.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp index 3043366b..fcc1c011 100644 --- a/src/libcamera/pipeline/uvcvideo.cpp +++ b/src/libcamera/pipeline/uvcvideo.cpp @@ -296,19 +296,19 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator) std::unique_ptr data = utils::make_unique(this); /* Locate and initialise the camera data with the default video node. */ - for (MediaEntity *entity : media->entities()) { - if (entity->flags() & MEDIA_ENT_FL_DEFAULT) { - if (data->init(entity)) - return false; - break; - } - } - - if (!data) { + const std::vector &entities = media->entities(); + auto entity = std::find_if(entities.begin(), entities.end(), + [](MediaEntity *entity) { + return entity->flags() & MEDIA_ENT_FL_DEFAULT; + }); + if (entity == entities.end()) { LOG(UVC, Error) << "Could not find a default video device"; return false; } + if (data->init(*entity)) + return false; + /* Create and register the camera. */ std::set streams{ &data->stream_ }; std::shared_ptr camera = Camera::create(this, media->model(), streams); -- cgit v1.2.1