diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h
index 8525acbc..6cc9be85 100644
--- a/include/libcamera/internal/v4l2_videodevice.h
+++ b/include/libcamera/internal/v4l2_videodevice.h
@@ -205,7 +205,7 @@ public:
 	int getFormat(V4L2DeviceFormat *format);
 	int tryFormat(V4L2DeviceFormat *format);
 	int setFormat(V4L2DeviceFormat *format);
-	Formats formats(uint32_t code = 0);
+	Formats formats(uint32_t code = 0, bool ignoreSizes = false);
 
 	int setSelection(unsigned int target, Rectangle *rect);
 
diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index 63911339..b8bd4bc4 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -1045,14 +1045,18 @@ int V4L2VideoDevice::trySetFormatSingleplane(V4L2DeviceFormat *format, bool set)
  *
  * \return A list of the supported video device formats
  */
-V4L2VideoDevice::Formats V4L2VideoDevice::formats(uint32_t code)
+V4L2VideoDevice::Formats V4L2VideoDevice::formats(uint32_t code, bool ignoreSizes)
 {
 	Formats formats;
 
 	for (V4L2PixelFormat pixelFormat : enumPixelformats(code)) {
-		std::vector<SizeRange> sizes = enumSizes(pixelFormat);
-		if (sizes.empty())
-			return {};
+		std::vector<SizeRange> sizes;
+
+		if (!ignoreSizes) {
+			sizes = enumSizes(pixelFormat);
+			if (sizes.empty())
+				return {};
+		}
 
 		if (formats.find(pixelFormat) != formats.end()) {
 			LOG(V4L2, Error)
