mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 15:08:53 +00:00
v4l2bufferpool: Handle FD error during poll
This will ensure we fail earlier if something unrecoverable happens.
This commit is contained in:
parent
652ed3bceb
commit
3f15e67923
2 changed files with 9 additions and 5 deletions
|
@ -969,6 +969,9 @@ again:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gst_poll_fd_has_error (pool->poll, &pool->pollfd))
|
||||||
|
goto select_error;
|
||||||
|
|
||||||
done:
|
done:
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
|
|
||||||
|
@ -1410,7 +1413,6 @@ gst_v4l2_buffer_pool_new (GstV4l2Object * obj, GstCaps * caps)
|
||||||
GstStructure *config;
|
GstStructure *config;
|
||||||
gchar *name, *parent_name;
|
gchar *name, *parent_name;
|
||||||
gint fd;
|
gint fd;
|
||||||
GstPollFD pollfd = GST_POLL_FD_INIT;
|
|
||||||
|
|
||||||
fd = v4l2_dup (obj->video_fd);
|
fd = v4l2_dup (obj->video_fd);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
|
@ -1426,12 +1428,13 @@ gst_v4l2_buffer_pool_new (GstV4l2Object * obj, GstCaps * caps)
|
||||||
"name", name, NULL);
|
"name", name, NULL);
|
||||||
g_free (name);
|
g_free (name);
|
||||||
|
|
||||||
pollfd.fd = fd;
|
gst_poll_fd_init (&pool->pollfd);
|
||||||
gst_poll_add_fd (pool->poll, &pollfd);
|
pool->pollfd.fd = fd;
|
||||||
|
gst_poll_add_fd (pool->poll, &pool->pollfd);
|
||||||
if (V4L2_TYPE_IS_OUTPUT (obj->type))
|
if (V4L2_TYPE_IS_OUTPUT (obj->type))
|
||||||
gst_poll_fd_ctl_write (pool->poll, &pollfd, TRUE);
|
gst_poll_fd_ctl_write (pool->poll, &pool->pollfd, TRUE);
|
||||||
else
|
else
|
||||||
gst_poll_fd_ctl_read (pool->poll, &pollfd, TRUE);
|
gst_poll_fd_ctl_read (pool->poll, &pool->pollfd, TRUE);
|
||||||
|
|
||||||
pool->video_fd = fd;
|
pool->video_fd = fd;
|
||||||
pool->obj = obj;
|
pool->obj = obj;
|
||||||
|
|
|
@ -51,6 +51,7 @@ struct _GstV4l2BufferPool
|
||||||
GstV4l2Object *obj; /* the v4l2 object */
|
GstV4l2Object *obj; /* the v4l2 object */
|
||||||
gint video_fd; /* a dup(2) of the v4l2object's video_fd */
|
gint video_fd; /* a dup(2) of the v4l2object's video_fd */
|
||||||
GstPoll *poll; /* a poll for video_fd */
|
GstPoll *poll; /* a poll for video_fd */
|
||||||
|
GstPollFD pollfd;
|
||||||
gboolean can_poll_device;
|
gboolean can_poll_device;
|
||||||
|
|
||||||
gboolean empty;
|
gboolean empty;
|
||||||
|
|
Loading…
Reference in a new issue