sys/v4l2/: Framerate can be 0/1 too.
authorWim Taymans <wim.taymans@gmail.com>
Thu, 28 Sep 2006 17:08:47 +0000 (17:08 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Thu, 28 Sep 2006 17:08:47 +0000 (17:08 +0000)
Original commit message from CVS:
* sys/v4l2/gstv4l2src.c: (gst_v4l2src_get_all_caps),
(gst_v4l2src_get_caps):
* sys/v4l2/v4l2_calls.c: (gst_v4l2_fill_lists):
Framerate can be 0/1 too.
Init framerate to 0/1 before querying it so that we can detect
devices that don't know about a framerate.
Add some more debugging info.

sys/v4l2/gstv4l2src.c
sys/v4l2/v4l2_calls.c

index 486a3b9..e151f16 100644 (file)
@@ -684,7 +684,7 @@ gst_v4l2src_get_all_caps (void)
         gst_structure_set (structure,
             "width", GST_TYPE_INT_RANGE, 1, GST_V4L2_MAX_SIZE,
             "height", GST_TYPE_INT_RANGE, 1, GST_V4L2_MAX_SIZE,
-            "framerate", GST_TYPE_FRACTION_RANGE, 1, 1, 100, 1, NULL);
+            "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 100, 1, NULL);
         gst_caps_append_structure (caps, structure);
       }
     }
@@ -754,7 +754,7 @@ gst_v4l2src_get_caps (GstBaseSrc * src)
       /* another approach for web-cams would be to try to set a very
          high(100/1) and low(1/1) FPSs and get the values returned */
       gst_structure_set (structure, "framerate", GST_TYPE_FRACTION_RANGE,
-          1, 1, 100, 1, NULL);
+          0, 1, 100, 1, NULL);
 
       gst_caps_append_structure (caps, structure);
     }
index c2c7c76..9618845 100644 (file)
@@ -105,6 +105,8 @@ gst_v4l2_fill_lists (GstV4l2Object * v4l2object)
       }
     }
 
+    GST_DEBUG_OBJECT (v4l2object->element, "    '%s'", input.name);
+
     v4l2channel = g_object_new (GST_TYPE_V4L2_TUNER_CHANNEL, NULL);
     channel = GST_TUNER_CHANNEL (v4l2channel);
     channel->label = g_strdup ((const gchar *) input.name);
@@ -150,6 +152,9 @@ gst_v4l2_fill_lists (GstV4l2Object * v4l2object)
     GstV4l2TunerNorm *v4l2norm;
     GstTunerNorm *norm;
 
+    /* fill in defaults */
+    standard.frameperiod.denominator = 0;
+    standard.frameperiod.numerator = 1;
     standard.index = n;
     if (ioctl (v4l2object->video_fd, VIDIOC_ENUMSTD, &standard) < 0) {
       if (errno == EINVAL)
@@ -162,6 +167,10 @@ gst_v4l2_fill_lists (GstV4l2Object * v4l2object)
       }
     }
 
+    GST_DEBUG_OBJECT (v4l2object->element, "    '%s', fps: %d/%d",
+        standard.name, standard.frameperiod.denominator,
+        standard.frameperiod.numerator);
+
     v4l2norm = g_object_new (GST_TYPE_V4L2_TUNER_NORM, NULL);
     norm = GST_TUNER_NORM (v4l2norm);
     norm->label = g_strdup ((const gchar *) standard.name);