v4l2: also poll for output devices

Note that the V4L2 API defines that for output devices POLLOUT
indicates that a buffer is ready to be dequeued.

https://bugzilla.gnome.org/show_bug.cgi?id=698992
This commit is contained in:
Michael Olbrich 2012-09-05 16:39:31 +02:00 committed by Tim-Philipp Müller
parent fd0123800c
commit d4126ff986
2 changed files with 6 additions and 8 deletions

View file

@ -632,13 +632,8 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer)
GstV4l2Object *obj = pool->obj;
GstClockTime timestamp;
if (obj->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) {
/* select works for input devices when data is available. According to the
* specs we can also poll to find out when a frame has been displayed but
* that just seems to lock up here */
if ((res = gst_v4l2_object_poll (obj)) != GST_FLOW_OK)
goto poll_error;
}
if ((res = gst_v4l2_object_poll (obj)) != GST_FLOW_OK)
goto poll_error;
memset (&vbuffer, 0x00, sizeof (vbuffer));
vbuffer.type = obj->type;

View file

@ -481,7 +481,10 @@ gst_v4l2_open (GstV4l2Object * v4l2object)
pollfd.fd = v4l2object->video_fd;
gst_poll_add_fd (v4l2object->poll, &pollfd);
gst_poll_fd_ctl_read (v4l2object->poll, &pollfd, TRUE);
if (v4l2object->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
gst_poll_fd_ctl_read (v4l2object->poll, &pollfd, TRUE);
else
gst_poll_fd_ctl_write (v4l2object->poll, &pollfd, TRUE);
return TRUE;