There is no way to control the standard of subdevices which are part of a media device. The ioctls which exists all target video devices explicitly and the idea is that the video device should talk to the subdevice. For subdevices part of a media graph this is not possible and the standard must be controlled on the subdev device directly. Add four new ioctls to be able to directly interact with subdevices and control the video standard; VIDIOC_SUBDEV_ENUMSTD, VIDIOC_SUBDEV_G_STD, VIDIOC_SUBDEV_S_STD and VIDIOC_SUBDEV_QUERYSTD. Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
71 lines
2.2 KiB
ReStructuredText
71 lines
2.2 KiB
ReStructuredText
.. -*- coding: utf-8; mode: rst -*-
|
|
|
|
.. _VIDIOC_QUERYSTD:
|
|
|
|
*********************************************
|
|
ioctl VIDIOC_QUERYSTD, VIDIOC_SUBDEV_QUERYSTD
|
|
*********************************************
|
|
|
|
Name
|
|
====
|
|
|
|
VIDIOC_QUERYSTD - VIDIOC_SUBDEV_QUERYSTD - Sense the video standard received by the current input
|
|
|
|
|
|
Synopsis
|
|
========
|
|
|
|
.. c:function:: int ioctl( int fd, VIDIOC_QUERYSTD, v4l2_std_id *argp )
|
|
:name: VIDIOC_QUERYSTD
|
|
|
|
.. c:function:: int ioctl( int fd, VIDIOC_SUBDEV_QUERYSTD, v4l2_std_id *argp )
|
|
:name: VIDIOC_SUBDEV_QUERYSTD
|
|
|
|
|
|
Arguments
|
|
=========
|
|
|
|
``fd``
|
|
File descriptor returned by :ref:`open() <func-open>`.
|
|
|
|
``argp``
|
|
Pointer to :c:type:`v4l2_std_id`.
|
|
|
|
|
|
Description
|
|
===========
|
|
|
|
The hardware may be able to detect the current video standard
|
|
automatically. To do so, applications call :ref:`VIDIOC_QUERYSTD` with a
|
|
pointer to a :ref:`v4l2_std_id <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. If no signal was detected, then the driver
|
|
will return V4L2_STD_UNKNOWN. When detection is not possible or fails,
|
|
the set must contain all standards supported by the current video input
|
|
or output.
|
|
|
|
.. note::
|
|
|
|
Drivers shall *not* switch the video standard
|
|
automatically if a new video standard is detected. Instead, drivers
|
|
should send the ``V4L2_EVENT_SOURCE_CHANGE`` event (if they support
|
|
this) and expect that userspace will take action by calling
|
|
:ref:`VIDIOC_QUERYSTD`. The reason is that a new video standard can mean
|
|
different buffer sizes as well, and you cannot change buffer sizes on
|
|
the fly. In general, applications that receive the Source Change event
|
|
will have to call :ref:`VIDIOC_QUERYSTD`, and if the detected video
|
|
standard is valid they will have to stop streaming, set the new
|
|
standard, allocate new buffers and start streaming again.
|
|
|
|
|
|
Return Value
|
|
============
|
|
|
|
On success 0 is returned, on error -1 and the ``errno`` variable is set
|
|
appropriately. The generic error codes are described at the
|
|
:ref:`Generic Error Codes <gen-errors>` chapter.
|
|
|
|
ENODATA
|
|
Standard video timings are not supported for this input or output.
|