summaryrefslogtreecommitdiff
path: root/src/libcamera
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-01-02 01:49:56 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2020-01-03 13:57:55 +0200
commita023aed1aa5ae3554d193ebd0a2102ec676ddd14 (patch)
treed33e09bdc71291d60108f77f625f63d4c68ae548 /src/libcamera
parent89dc54af09d4885a4134b332ddd9f82eef3789ad (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>
Diffstat (limited to 'src/libcamera')
-rw-r--r--src/libcamera/pipeline/uvcvideo.cpp18
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);