[FFmpeg-devel] [PATCH] v4l2: Select input immediately after opening the device

Stefano Sabatini stefasab at gmail.com
Sun Jan 27 18:42:16 CET 2013


On date Saturday 2013-01-26 13:45:03 +0100, Giorgio Vazzana encoded:
> 2013/1/26 Stefano Sabatini <stefasab at gmail.com>:
> >> > v4l2_ioctl(s->fd, VIDIOC_S_INPUT, &input.index);
> >> > ret = AVERROR(errno);
> >> > if (ret < 0) {
> >> > ...
> >> > }
> >>
> >> Hmm, this way we are not checking if the ioctl fails or not (if it
> >> does not then errno is undefined)... maybe you meant:
> >>
> >> input.index = s->channel;
> >> if (v4l2_ioctl(s->fd, VIDIOC_ENUMINPUT, &input) < 0) {
> >>     ret = errno;
> >>     av_log(s1, AV_LOG_ERROR, "ioctl(VIDIOC_ENUMINPUT): %s\n", strerror(errno));
> >>     return AVERROR(ret);
> >> }
> >
> > yes (I assumed ioctl was setting errno = 0 in case of success)
> 
> Ok, fixed.
> 
> >> > BTW strerror() is not thread safe and we should rather use
> >> > av_err2str(), but this is an unrelated issue.
> >> >
> >> > Note: or you can keep the current error reporting logic in order to
> >> > minimize the diff (keeping the first v4l2_ioctl(ENUMINPUT) as is) and
> >> > we will fix it later.
> >>
> >
> >> I'd say let's change as little as possible to minimize the diff and
> >> fix it later.
> >
> > +1
> >
> >> > Also: given that you're doing ENUMINPUT and S_INPUT in
> >> > v4l2_read_header(), isn't this ioclt(ENUMINPUT) redundant here?
> >>
> >> Because we need input.std: if it is 0 then the device does not support
> >> any standard. We can save that value inside the struct video_data if
> >> you agree, and call ioclt(ENUMINPUT) only once.
> >
> > Whatever you think it's simpler.
> 
> New patch attached.

> From 6482dd6b797f3f2d0a13d193209778df83b781e5 Mon Sep 17 00:00:00 2001
> From: Giorgio Vazzana <mywing81 at gmail.com>
> Date: Sat, 26 Jan 2013 13:37:37 +0100
> Subject: [PATCH] v4l2: Select input immediately after opening the device
> 
> After opening the device, the first thing we should do is selecting the input. This is
> because the image formats (VIDIOC_ENUM_FMT ioctl) and the standards (VIDIOC_ENUMSTD ioctl)
> supported may depend on the selected input ([1] and [2]).
> 
> [1] http://linuxtv.org/downloads/v4l-dvb-apis/vidioc-enum-fmt.html
> [2] http://linuxtv.org/downloads/v4l-dvb-apis/vidioc-enumstd.html
> ---
>  libavdevice/v4l2.c |   37 ++++++++++++++++++++-----------------
>  1 files changed, 20 insertions(+), 17 deletions(-)

Applied, thanks.
-- 
FFmpeg = Furious & Fantastic Mournful Philosophical Educated Ghost


More information about the ffmpeg-devel mailing list