Commit 3f15e679 authored by Nicolas Dufresne's avatar Nicolas Dufresne

v4l2bufferpool: Handle FD error during poll

This will ensure we fail earlier if something unrecoverable
happens.
parent 652ed3bc
...@@ -969,6 +969,9 @@ again: ...@@ -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) ...@@ -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) ...@@ -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 ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment