diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-01-02 01:49:56 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-01-03 13:57:55 +0200 |
commit | a023aed1aa5ae3554d193ebd0a2102ec676ddd14 (patch) | |
tree | d33e09bdc71291d60108f77f625f63d4c68ae548 | |
parent | 89dc54af09d4885a4134b332ddd9f82eef3789ad (diff) |
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 <laurent.pinchart@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
-rw-r--r-- | src/libcamera/pipeline/uvcvideo.cpp | 18 |
1 files 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<UVCCameraData> data = utils::make_unique<UVCCameraData>(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<MediaEntity *> &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<Stream *> streams{ &data->stream_ }; std::shared_ptr<Camera> camera = Camera::create(this, media->model(), streams); |