[PATCH] qcap: fix recent regression that limited Wine's v4l2 support to devices that read()
Zebediah Figura
z.figura12 at gmail.com
Sat Apr 20 11:06:31 CDT 2019
On 4/20/19 10:56 AM, Damjan Jovanovic wrote:
>
>
> On Sat, Apr 20, 2019 at 5:44 PM Zebediah Figura <z.figura12 at gmail.com
> <mailto:z.figura12 at gmail.com>> wrote:
>
> On 4/20/19 10:31 AM, Damjan Jovanovic wrote:
> >
> >
> > On Sat, Apr 20, 2019 at 4:52 PM Zebediah Figura
> <z.figura12 at gmail.com <mailto:z.figura12 at gmail.com>
> > <mailto:z.figura12 at gmail.com <mailto:z.figura12 at gmail.com>>> wrote:
> >
> > On 4/20/19 8:15 AM, Damjan Jovanovic wrote:
> > > Recent changes to qcap/v4l.c resulted in the removal of mmap()
> > > for v4l2 devices, but read() is optional for device
> drivers and
> > > some don't support it. This isn't a major problem with the
> > > presense of libv4l2 though, as it can emulate read() on top of
> > > mmap(). However the code checks whether the device can read(),
> > > and if not, doesn't even try to use it, even though it can.
> > >
> > > Fix this by only warning that read() is being emulated, and
> > > continuing with libv4l2 if available.
> > >
> > > Also clarifies the logging.
> > >
> > > Signed-off-by: Damjan Jovanovic <damjan.jov at gmail.com
> <mailto:damjan.jov at gmail.com>
> > <mailto:damjan.jov at gmail.com <mailto:damjan.jov at gmail.com>>>
> > > ---
> > > dlls/qcap/v4l.c | 13 ++++++++-----
> > > 1 file changed, 8 insertions(+), 5 deletions(-)
> > >
> > >
> > >
> >
> > This doesn't seem right; libv4l2 should massage the result of
> > VIDIOC_QUERYCAP to include V4L2_CAP_READWRITE. See
> >
> <https://git.linuxtv.org/v4l-utils.git/tree/lib/libv4l2/libv4l2.c#n1210>.
> >
> >
> > On FreeBSD 11.2 with libv4l-1.6.3_4, that is certainly NOT the
> case. It
> > could be a newer or not yet released feature.
> >
> >
> >
>
> It's been the case since libv4l2 0.5:
> <https://git.linuxtv.org/v4l-utils.git/commit/lib/libv4l2/libv4l2.c?id=0215f2ac08c3ad0dc66ad8036f4e186a5e8f56d6>
>
> If FreeBSD is using 1.6.3, then I think something else is wrong. Are
> you
> sure that libv4l2 is actually being loaded?
>
>
> int v4l2_ioctl(int fd, unsigned long int request, ...)
> {
> ...
> if (devices[index].convert == NULL)
> goto no_capture_request;
>
> <your code nippet from above>
>
> no_capture_request:
>
>
>
> So the code that would set that flag, is skipped if the .convert field
> is NULL.
>
> When is it NULL?
>
>
>
If my reading of the code is correct, only when v4l2_fd_open() is called
manually with V4L2_DISABLE_CONVERSION. Obviously we don't do that.
Perhaps setting LIBV4L2_LOG_FILENAME might give some hints as to what's
going wrong?
More information about the wine-devel
mailing list