Fix bug in au0828 VBI streaming

Message ID AANLkTimmvf++nF=mzHHQJ0-aMc2=aYJnwo-hYto75Mpc@mail.gmail.com (mailing list archive)
State Superseded, archived
Headers

Commit Message

Devin Heitmueller Jan. 23, 2011, 10:12 p.m. UTC
  Attached is a patch for a V4L2 spec violation with regards to the
au0828 not working in streaming mode.

This was just an oversight on my part when I did the original VBI
support for this bridge, as libzvbi was silently falling back to using
the read() interface.

Devin
  

Comments

Devin Heitmueller Feb. 2, 2011, 1:58 p.m. UTC | #1
On Sun, Jan 23, 2011 at 5:12 PM, Devin Heitmueller
<dheitmueller@kernellabs.com> wrote:
> Attached is a patch for a V4L2 spec violation with regards to the
> au0828 not working in streaming mode.
>
> This was just an oversight on my part when I did the original VBI
> support for this bridge, as libzvbi was silently falling back to using
> the read() interface.

Mauro,

Where are we at with this patch.  It's trivial and VBI is broken in
V4L2 streaming mode without it.

Devin
  
Devin Heitmueller Feb. 3, 2011, 11:38 p.m. UTC | #2
On Wed, Feb 2, 2011 at 8:58 AM, Devin Heitmueller
<dheitmueller@kernellabs.com> wrote:
> On Sun, Jan 23, 2011 at 5:12 PM, Devin Heitmueller
> <dheitmueller@kernellabs.com> wrote:
>> Attached is a patch for a V4L2 spec violation with regards to the
>> au0828 not working in streaming mode.
>>
>> This was just an oversight on my part when I did the original VBI
>> support for this bridge, as libzvbi was silently falling back to using
>> the read() interface.
>
> Mauro,
>
> Where are we at with this patch.  It's trivial and VBI is broken in
> V4L2 streaming mode without it.

Mauro,

I see this has been committed for 2.6.39.  Given the trivial nature,
can we get it in there for 2.6.38 as well?  It's a bugfix and the
au0828 VBI support is new to 2.6.38.  If it doesn't go in, then the
VBI support will be present but broken for a full release cycle.  This
could definitely cause problems for existing applications that now
detect the presence of VBI support, but then break when they try to
use it.

Devin
  
Mauro Carvalho Chehab Feb. 4, 2011, 12:03 a.m. UTC | #3
Em 03-02-2011 21:38, Devin Heitmueller escreveu:
> On Wed, Feb 2, 2011 at 8:58 AM, Devin Heitmueller
> <dheitmueller@kernellabs.com> wrote:
>> On Sun, Jan 23, 2011 at 5:12 PM, Devin Heitmueller
>> <dheitmueller@kernellabs.com> wrote:
>>> Attached is a patch for a V4L2 spec violation with regards to the
>>> au0828 not working in streaming mode.
>>>
>>> This was just an oversight on my part when I did the original VBI
>>> support for this bridge, as libzvbi was silently falling back to using
>>> the read() interface.
>>
>> Mauro,
>>
>> Where are we at with this patch.  It's trivial and VBI is broken in
>> V4L2 streaming mode without it.
> 
> Mauro,
> 
> I see this has been committed for 2.6.39.  Given the trivial nature,
> can we get it in there for 2.6.38 as well?  It's a bugfix and the
> au0828 VBI support is new to 2.6.38.  If it doesn't go in, then the
> VBI support will be present but broken for a full release cycle.  This
> could definitely cause problems for existing applications that now
> detect the presence of VBI support, but then break when they try to
> use it.

It is already on my local fixes tree. I'll be sending upstream together
with the next set of fixes.

Cheers,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
  

Patch

au0828: fix VBI handling when in V4L2 streaming mode

From: Devin Heitmueller <dheitmueller@kernellabs.com>

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.

Priority: high

Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com> 

--- media_build/linux/drivers/media/video/au0828/au0828-video.c	2011-01-10 10:24:45.000000000 -0500
+++ media_build_950qfixes//linux/drivers/media/video/au0828/au0828-video.c	2011-01-23 17:05:08.461107569 -0500
@@ -1758,7 +1758,12 @@ 
 	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 @@ 
 	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 @@ 
 	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 @@ 
 		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 = {