sys/v4l2/v4l2src_calls.c: If we fail to get the frame intervals, simply don't touch the framerates on the template ca...

Original commit message from CVS:
Patch by: William M. Brack <wbrack at mmm dot com dot hk>
* sys/v4l2/v4l2src_calls.c:
(gst_v4l2src_probe_caps_for_format_and_size):
If we fail to get the frame intervals, simply don't touch the framerates
on the template caps instead of discarding the format. See #520092.
This commit is contained in:
William M. Brack 2008-05-26 15:14:55 +00:00 committed by Wim Taymans
parent c3bde2dc42
commit dfe8d582fc
2 changed files with 21 additions and 9 deletions

View file

@ -1,3 +1,12 @@
2008-05-26 Wim Taymans <wim.taymans@collabora.co.uk>
Patch by: William M. Brack <wbrack at mmm dot com dot hk>
* sys/v4l2/v4l2src_calls.c:
(gst_v4l2src_probe_caps_for_format_and_size):
If we fail to get the frame intervals, simply don't touch the framerates
on the template caps instead of discarding the format. See #520092.
2008-05-26 Wim Taymans <wim.taymans@collabora.co.uk> 2008-05-26 Wim Taymans <wim.taymans@collabora.co.uk>
Patch by: William M. Brack <wbrack at mmm dot com dot hk> Patch by: William M. Brack <wbrack at mmm dot com dot hk>

View file

@ -690,11 +690,9 @@ gst_v4l2src_probe_caps_for_format_and_size (GstV4l2Src * v4l2src,
} }
} }
if (!added) { if (!added) {
/* no range was added, make a default range */ /* no range was added, leave the default range from the template */
GST_WARNING_OBJECT (v4l2src, "no range added, setting 0/1 to 100/1"); GST_WARNING_OBJECT (v4l2src, "no range added, leaving default");
g_value_unset (&rates); g_value_unset (&rates);
g_value_init (&rates, GST_TYPE_FRACTION_RANGE);
gst_value_set_fraction_range_full (&rates, 0, 1, 100, 1);
} }
} else if (ival.type == V4L2_FRMIVAL_TYPE_CONTINUOUS) { } else if (ival.type == V4L2_FRMIVAL_TYPE_CONTINUOUS) {
guint32 maxnum, maxdenom; guint32 maxnum, maxdenom;
@ -723,25 +721,30 @@ gst_v4l2src_probe_caps_for_format_and_size (GstV4l2Src * v4l2src,
goto unknown_type; goto unknown_type;
} }
return_data:
s = gst_structure_copy (template); s = gst_structure_copy (template);
gst_structure_set (s, "width", G_TYPE_INT, (gint) width, gst_structure_set (s, "width", G_TYPE_INT, (gint) width,
"height", G_TYPE_INT, (gint) height, NULL); "height", G_TYPE_INT, (gint) height, NULL);
gst_structure_set_value (s, "framerate", &rates);
g_value_unset (&rates);
if (G_IS_VALUE (&rates)) {
/* only change the framerate on the template when we have a valid probed new
* value */
gst_structure_set_value (s, "framerate", &rates);
g_value_unset (&rates);
}
return s; return s;
/* ERRORS */ /* ERRORS */
enum_frameintervals_failed: enum_frameintervals_failed:
{ {
GST_DEBUG_OBJECT (v4l2src, GST_DEBUG_OBJECT (v4l2src,
"Failed to enumerate frame sizes for %" GST_FOURCC_FORMAT "@%ux%u", "Unable to enumerate intervals for %" GST_FOURCC_FORMAT "@%ux%u",
GST_FOURCC_ARGS (pixelformat), width, height); GST_FOURCC_ARGS (pixelformat), width, height);
return NULL; goto return_data;
} }
unknown_type: unknown_type:
{ {
/* I don't see how this is actually an error */ /* I don't see how this is actually an error, we ignore the format then */
GST_WARNING_OBJECT (v4l2src, GST_WARNING_OBJECT (v4l2src,
"Unknown frame interval type at %" GST_FOURCC_FORMAT "@%ux%u: %u", "Unknown frame interval type at %" GST_FOURCC_FORMAT "@%ux%u: %u",
GST_FOURCC_ARGS (pixelformat), width, height, ival.type); GST_FOURCC_ARGS (pixelformat), width, height, ival.type);