mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-17 22:06:41 +00:00
v4l2object: drop workaround for misbehaving TRY_FMT
This workaround from 2011 was causing 25 S_FMT ioctls to be sent to my UVC webcam from under gst_v4l2_object_get_caps as it probes all the formats. In total, this adds up to about 5 seconds of execution time, or a 10 second delay while starting up cheese. These ioctls come from a workaround from 2011 where TRY_FMT might make changes to hardware settings, so S_FMT was used to restore the original config: https://bugzilla.gnome.org/show_bug.cgi?id=649067 The driver bug is now assumed fixed. Remove the workaround to fix the long startup delay. https://bugzilla.gnome.org/show_bug.cgi?id=732326
This commit is contained in:
parent
bbb1a8de1f
commit
f9eb4dd206
1 changed files with 1 additions and 17 deletions
|
@ -2129,10 +2129,9 @@ static gboolean
|
||||||
gst_v4l2_object_get_nearest_size (GstV4l2Object * v4l2object,
|
gst_v4l2_object_get_nearest_size (GstV4l2Object * v4l2object,
|
||||||
guint32 pixelformat, gint * width, gint * height, gboolean * interlaced)
|
guint32 pixelformat, gint * width, gint * height, gboolean * interlaced)
|
||||||
{
|
{
|
||||||
struct v4l2_format fmt, prevfmt;
|
struct v4l2_format fmt;
|
||||||
int fd;
|
int fd;
|
||||||
int r;
|
int r;
|
||||||
int prevfmt_valid = FALSE;
|
|
||||||
gboolean ret = FALSE;
|
gboolean ret = FALSE;
|
||||||
|
|
||||||
g_return_val_if_fail (width != NULL, FALSE);
|
g_return_val_if_fail (width != NULL, FALSE);
|
||||||
|
@ -2145,15 +2144,6 @@ gst_v4l2_object_get_nearest_size (GstV4l2Object * v4l2object,
|
||||||
fd = v4l2object->video_fd;
|
fd = v4l2object->video_fd;
|
||||||
|
|
||||||
memset (&fmt, 0, sizeof (struct v4l2_format));
|
memset (&fmt, 0, sizeof (struct v4l2_format));
|
||||||
memset (&prevfmt, 0, sizeof (struct v4l2_format));
|
|
||||||
|
|
||||||
/* Some drivers are buggy and will modify the currently set format
|
|
||||||
when processing VIDIOC_TRY_FMT, so we remember what is set at the
|
|
||||||
minute, and will reset it when done. */
|
|
||||||
if (!v4l2object->no_initial_format) {
|
|
||||||
prevfmt.type = v4l2object->type;
|
|
||||||
prevfmt_valid = (v4l2_ioctl (fd, VIDIOC_G_FMT, &prevfmt) >= 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get size delimiters */
|
/* get size delimiters */
|
||||||
memset (&fmt, 0, sizeof (fmt));
|
memset (&fmt, 0, sizeof (fmt));
|
||||||
|
@ -2234,12 +2224,6 @@ error:
|
||||||
GST_WARNING_OBJECT (v4l2object->element,
|
GST_WARNING_OBJECT (v4l2object->element,
|
||||||
"Unable to try format: %s", g_strerror (errno));
|
"Unable to try format: %s", g_strerror (errno));
|
||||||
}
|
}
|
||||||
if (prevfmt_valid)
|
|
||||||
if (v4l2_ioctl (fd, VIDIOC_S_FMT, &prevfmt) < 0) {
|
|
||||||
GST_WARNING_OBJECT (v4l2object->element,
|
|
||||||
"Unable to restore format after trying format: %s",
|
|
||||||
g_strerror (errno));
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue