RFC: behavior of QUERYSTD when no signal is present

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

 



What is VIDIOC_QUERYSTD supposed to do when there is no signal?

The spec says this:

"The hardware may be able to detect the current video standard automatically.
To do so, applications call VIDIOC_QUERYSTD with a pointer to a v4l2_std_id
type. The driver stores here a set of candidates, this can be a single flag
or a set of supported standards if for example the hardware can only
distinguish between 50 and 60 Hz systems. When detection is not possible or
fails, the set must contain all standards supported by the current video
input or output."

The last sentence is the problem. There are several possibilities:

1) The hardware is physically unable to detect the current video std. In that
case this ioctl shouldn't be implemented at all.

2) While detecting the std an error occurs (e.g. i2c read error). In that case
the error should be returned.

3) There is no input signal. Does that constitute 'detection is not possible or
fails'? If so, then all supported standards should be returned. But that seems
very strange. After all, I did detect the standard: i.e. there is none, so I
would say that QUERYSTD should return V4L2_STD_UNKNOWN (0).

A quick check of the current state of affairs when no signal is present reveals
that:

- saa7115, ks0127, saa7191 return 0 with std set to V4L2_STD_ALL
- adv7180, vpx3220 return 0 with std set to V4L2_STD_UNKNOWN
- saa7110 returns 0 with std set to the current std
- bt819 and bttv do not handle this case at all, and just pick 50 Hz or 60 Hz
- tvp514x returns -EINVAL.

Lovely... :-)

It is clear that applications currently have no hope in hell to use the output
of querystd in a reliable manner. For all practical purposes the behavior of
querystd when no signal is present is undefined.

I would propose to specify that if no signal is present then QUERYSTD should
return 0 with std V4L2_STD_UNKNOWN.

It would also be consistent with QUERY_DV_PRESET where the preset DV_INVALID
is returned in that case.

If we decide to change it, then it is trivial to fix all drivers that implement
querystd.

Comments?

	Hans

-- 
Hans Verkuil - video4linux developer - sponsored by TANDBERG, part of Cisco
--
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