mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-14 09:47:20 +00:00
[media] v4l: vb2: Don't return POLLERR during transient buffer underruns
The V4L2 specification states that "When the application did not call VIDIOC_QBUF or VIDIOC_STREAMON yet the poll() function succeeds, but sets the POLLERR flag in the revents field." The vb2_poll() function sets POLLERR when the queued buffers list is empty, regardless of whether this is caused by the stream not being active yet, or by a transient buffer underrun. Bring the implementation in line with the specification by returning POLLERR if no buffer has been queued only when the queue is not streaming. Buffer underruns during streaming are not treated specially anymore and just result in poll() blocking until the next event. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Pawel Osciak <pawel@osciak.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
bdc2df62ae
commit
9241650d62
@ -2559,9 +2559,10 @@ unsigned int vb2_poll(struct vb2_queue *q, struct file *file, poll_table *wait)
|
||||
}
|
||||
|
||||
/*
|
||||
* There is nothing to wait for if no buffers have already been queued.
|
||||
* There is nothing to wait for if no buffer has been queued and the
|
||||
* queue isn't streaming.
|
||||
*/
|
||||
if (list_empty(&q->queued_list))
|
||||
if (list_empty(&q->queued_list) && !vb2_is_streaming(q))
|
||||
return res | POLLERR;
|
||||
|
||||
if (list_empty(&q->done_list))
|
||||
|
Loading…
x
Reference in New Issue
Block a user