Some apps which use read() start the streaming through a call to poll(),
this means that if another app has already claimed the device for streaming
(through for example a s_fmt, or a reqbufs), that the poll should fail instead
of getting passed through to vb2_poll.
We only check for this when the app is polling for reads, so that ctrl events
still work.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
static unsigned int pwc_video_poll(struct file *file, poll_table *wait)
{
struct pwc_device *pdev = video_drvdata(file);
+ unsigned long req_events = poll_requested_events(wait);
if (!pdev->udev)
return POLL_ERR;
+ if ((req_events & (POLLIN | POLLRDNORM)) &&
+ pdev->vb_queue.num_buffers == 0 &&
+ !pdev->iso_init) {
+ /* This poll will start a read stream, check capt_file */
+ if (pwc_test_n_set_capt_file(pdev, file))
+ return POLL_ERR;
+ }
+
return vb2_poll(&pdev->vb_queue, file, wait);
}