[libcamera-devel] [PATCH 3/3] pipeline: uvcvideo: Fail match() if the camera has no supported format

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sat Sep 3 20:10:37 CEST 2022


A UVC device could expose only formats that are not supported by
libcamera. The pipeline handler doesn't currently consider this as an
error, and happily creates a camera. The camera won't be usable, and
worse, generateConfiguration() and validate() will crash as those
functions assume that at least one format is supported.

Fix this by failing match() if none of the formats exposed by the camera
are supported. Log an error message in that case to notify the user.

Bug: https://bugs.libcamera.org/show_bug.cgi?id=145
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 src/libcamera/pipeline/uvcvideo/uvcvideo.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
index be0fbaea508a..a28195450634 100644
--- a/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
@@ -457,6 +457,13 @@ int UVCCameraData::init(MediaDevice *media)
 		}
 	}
 
+	if (formats_.empty()) {
+		LOG(UVC, Error)
+			<< "Camera " << id_ << " (" << media->model()
+			<< ") doesn't expose any supported format";
+		return -EINVAL;
+	}
+
 	/* Populate the camera properties. */
 	properties_.set(properties::Model, utils::toAscii(media->model()));
 
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list