Re: videobuf and streaming I/O questions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sunday 14 February 2010 14:41:29 Mauro Carvalho Chehab wrote:
> Hans Verkuil wrote:
> > Hi all,
> > 
> > I've been investigating some problems with my qv4l2 utility and I encountered
> > some inconsistencies in the streaming I/O documentation and the videobuf
> > implementation.
> > 
> > I would like to know which is correct.
> > 
> > 1) The VIDIOC_QBUF documentation should specify that the application has
> > to fill in the v4l2_buffer 'flags' field. The fact that this is not explicitly
> > stated tripped me up in qv4l2.
> 
> I don't think you need to set the flags, but for sure you need to clear the data
> on all ioctls. The capture-example.c is a reference code for implementation, and it
> does:
> 
>                         CLEAR(buf);
>                         buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
>                         buf.memory = V4L2_MEMORY_MMAP;
>                         buf.index = i;
> 
>                         if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
>                                 errno_exit("VIDIOC_QBUF");
> 
> As far as I've tested, this app works on all drivers that support mmap.

I will fix the spec for this.

> > 2) The VIDIOC_REQBUFS documentation states that it should be possible to use
> > a count of 0, in which case it should do an implicit STREAMOFF. This is
> > currently not implemented. I have included a patch for this below and if there
> > are no issues with it, then I'll make a pull request for this.
> 
> This can eventually break some application. I think it is safer to fix the specs.

I don't really see how this would break an application and I think that some
drivers that do not use videobuf already support this. The reason why I think
this is a good idea to support it is that this makes it very easy to check
which streaming mode is supported without actually allocating anything.

I was actually using this in qv4l2 with uvc until I tried it with the mxb driver
and discovered that videobuf didn't support it. I am definitely in favor of
fixing the code instead of the spec in this case.

> > 3) The VIDIOC_REQBUFS documentation states that the count field is only used
> > by MEMORY_MMAP, not by MEMORY_USERPTR. This seems to be a false statement.
> > videobuf certainly uses the count field.
> 
> True. We need to fix the specs.
>  
> > 4) The same is true for QBUF and DQBUF and the index field of struct v4l2_buffer:
> > the documentation states that it is only used for MMAP, but as far as I can tell
> > that is not true and it should be used for USERPTR as well.
> 
> True. We need to fix the specs.
> > 
> > 5) Section 3.2 states that one should use VIDIOC_REQBUFS to determine if the
> > memory mapping flavor is supported by the driver. At least in the case of the
> > saa7146/mxb driver (which uses videobuf) this does not work. Even though it only
> > supports mmap, videobuf happily accepts userptr mode as well. Who is supposed
> > to test this? The driver before it calls videobuf_reqbufs?
> 
> videobuf-dma-sg supports all modes. if the driver has restrictions to one of the mode,
> videobuf have no way to know. So, the driver must limit.

OK.

> 
> > 6) V4L2_MEMORY_OVERLAY seems to be supported in videobuf, yet there is no driver
> > that supports it as far as I can tell and the documentation does not explain
> > what it is supposed to do. What is the status of this?
> 
> It is supported by videobuf and it is implemented by a few drivers. The best example
> is bttv-driver. I think saa7134 also implements the overlay mode.

Can you write a bit of documentation on how the m union of v4l2_buffer has to
be filled in for this mode? I will integrate that into the spec.

I found one mention here: 

http://archive.linuxcoding.com/video-4-linux/2002/msg03126.html

And one application that uses it here:

http://www.directfb.org/downloads/Core/DirectFB-1.4/DirectFB-1.4.3.tar.gz

Although it would be nice if it could actually be tested by someone whether
this is actually still working.

Regards,

	Hans


> Some motherboard chipsets don't work fine on overlay mode, since, in general, it causes
> a PCI2PCI data transfers. It is a known bug that, when PCI2PCI DMA transfers are happening,
> and if a PCI2MEM or MEM2PCI DMA is called (for example, to write a data to disk or to get
> swapped memory), that the two transfers got messed, causing memory and/or disk corruption.
> 
> There are some PCI quirks to disable this feature at the chipsets where this bug is known
> (some chipsets manufactured by VIA and by SYS).
> 
> This is mostly why people don't get enough motivation for use it on other drivers.
> > 
> > When I know the correct answers to this I will fix these issues. The qv4l2 tool
> > is written based on the documentation instead of copy-and-paste, so this was a
> > good test case to discover these inconsistencies.
> 
> Yes.
> > 
> > Regards,
> > 
> > 	Hans
> 
> Cheers,
> Mauro
> 

-- 
Hans Verkuil - video4linux developer - sponsored by TANDBERG
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux