mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
[media] au0828: fix VBI handling when in V4L2 streaming mode
au0828: fix VBI handling when in V4L2 streaming mode It turns up V4L2 streaming mode (a.k.a mmap) was broken for VBI streaming. This was causing libzvbi to fall back to V4L1 capture mode, and is a blatent violation of the V4L2 specification. Make the implementation work properly in this mode. Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
83587839d6
commit
54ebb8b83f
1 changed files with 24 additions and 4 deletions
|
@ -1758,7 +1758,12 @@ static int vidioc_reqbufs(struct file *file, void *priv,
|
|||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
return videobuf_reqbufs(&fh->vb_vidq, rb);
|
||||
if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
rc = videobuf_reqbufs(&fh->vb_vidq, rb);
|
||||
else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE)
|
||||
rc = videobuf_reqbufs(&fh->vb_vbiq, rb);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int vidioc_querybuf(struct file *file, void *priv,
|
||||
|
@ -1772,7 +1777,12 @@ static int vidioc_querybuf(struct file *file, void *priv,
|
|||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
return videobuf_querybuf(&fh->vb_vidq, b);
|
||||
if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
rc = videobuf_querybuf(&fh->vb_vidq, b);
|
||||
else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE)
|
||||
rc = videobuf_querybuf(&fh->vb_vbiq, b);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *b)
|
||||
|
@ -1785,7 +1795,12 @@ static int vidioc_qbuf(struct file *file, void *priv, struct v4l2_buffer *b)
|
|||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
return videobuf_qbuf(&fh->vb_vidq, b);
|
||||
if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
rc = videobuf_qbuf(&fh->vb_vidq, b);
|
||||
else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE)
|
||||
rc = videobuf_qbuf(&fh->vb_vbiq, b);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b)
|
||||
|
@ -1806,7 +1821,12 @@ static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b)
|
|||
dev->greenscreen_detected = 0;
|
||||
}
|
||||
|
||||
return videobuf_dqbuf(&fh->vb_vidq, b, file->f_flags & O_NONBLOCK);
|
||||
if (fh->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
rc = videobuf_dqbuf(&fh->vb_vidq, b, file->f_flags & O_NONBLOCK);
|
||||
else if (fh->type == V4L2_BUF_TYPE_VBI_CAPTURE)
|
||||
rc = videobuf_dqbuf(&fh->vb_vbiq, b, file->f_flags & O_NONBLOCK);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static struct v4l2_file_operations au0828_v4l_fops = {
|
||||
|
|
Loading…
Reference in a new issue