v4l2object: Don't probe UVC devices for being interlaced
authorHans de Goede <hdegoede@redhat.com>
Fri, 8 Jun 2012 18:38:34 +0000 (20:38 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 11 Jun 2012 09:23:34 +0000 (11:23 +0200)
UVC devices are never interlaced, and doing VIDIOC_TRY_FMT on them
causes expensive and slow USB IO, so don't probe them for interlaced.

This shaves 2 seconds of the startup time of cheese with a Logitech
Webcam Pro 9000.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=677722

sys/v4l2/gstv4l2object.c

index 1e1f9c9..2704f53 100644 (file)
@@ -1589,10 +1589,18 @@ gst_v4l2_object_probe_caps_for_format_and_size (GstV4l2Object * v4l2object,
   gint int_width = width;
   gint int_height = height;
 
-  /* interlaced detection using VIDIOC_TRY/S_FMT */
-  if (!gst_v4l2_object_get_nearest_size (v4l2object, pixelformat,
-          &int_width, &int_height, &interlaced))
-    return NULL;
+  if (!strcmp((char *)v4l2object->vcap.driver, "uvcvideo")) {
+    /*
+     * UVC devices are never interlaced, and doing VIDIOC_TRY_FMT on them
+     * causes expensive and slow USB IO, so don't probe them for interlaced
+     */
+     interlaced = FALSE;
+  } else {
+    /* Interlaced detection using VIDIOC_TRY/S_FMT */
+    if (!gst_v4l2_object_get_nearest_size (v4l2object, pixelformat,
+            &int_width, &int_height, &interlaced))
+      return NULL;
+  }
 
   memset (&ival, 0, sizeof (struct v4l2_frmivalenum));
   ival.index = 0;