From 4a0b3b8fda2cd0f47d8af2542130f976f893161b Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 28 Sep 2006 17:08:47 +0000 Subject: [PATCH] sys/v4l2/: Framerate can be 0/1 too. 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. --- ChangeLog | 10 ++++++++++ sys/v4l2/gstv4l2src.c | 4 ++-- sys/v4l2/v4l2_calls.c | 9 +++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index d20c521627..731d385c8d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2006-09-28 Wim Taymans + + * 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. + 2006-09-28 Tim-Philipp Müller * gst/qtdemux/qtdemux.c: (qtdemux_video_caps): diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c index 486a3b9168..e151f16d1b 100644 --- a/sys/v4l2/gstv4l2src.c +++ b/sys/v4l2/gstv4l2src.c @@ -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); } diff --git a/sys/v4l2/v4l2_calls.c b/sys/v4l2/v4l2_calls.c index c2c7c7693d..96188450cf 100644 --- a/sys/v4l2/v4l2_calls.c +++ b/sys/v4l2/v4l2_calls.c @@ -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);