87 lines
2.8 KiB
ReStructuredText
87 lines
2.8 KiB
ReStructuredText
|
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
|
||
|
.. c:namespace:: V4L
|
||
|
|
||
|
.. _VIDIOC_QUERY_DV_TIMINGS:
|
||
|
|
||
|
*****************************
|
||
|
ioctl VIDIOC_QUERY_DV_TIMINGS
|
||
|
*****************************
|
||
|
|
||
|
Name
|
||
|
====
|
||
|
|
||
|
VIDIOC_QUERY_DV_TIMINGS - VIDIOC_SUBDEV_QUERY_DV_TIMINGS - Sense the DV preset received by the current input
|
||
|
|
||
|
Synopsis
|
||
|
========
|
||
|
|
||
|
.. c:macro:: VIDIOC_QUERY_DV_TIMINGS
|
||
|
|
||
|
``int ioctl(int fd, VIDIOC_QUERY_DV_TIMINGS, struct v4l2_dv_timings *argp)``
|
||
|
|
||
|
.. c:macro:: VIDIOC_SUBDEV_QUERY_DV_TIMINGS
|
||
|
|
||
|
``int ioctl(int fd, VIDIOC_SUBDEV_QUERY_DV_TIMINGS, struct v4l2_dv_timings *argp)``
|
||
|
|
||
|
Arguments
|
||
|
=========
|
||
|
|
||
|
``fd``
|
||
|
File descriptor returned by :c:func:`open()`.
|
||
|
|
||
|
``argp``
|
||
|
Pointer to struct :c:type:`v4l2_dv_timings`.
|
||
|
|
||
|
Description
|
||
|
===========
|
||
|
|
||
|
The hardware may be able to detect the current DV timings automatically,
|
||
|
similar to sensing the video standard. To do so, applications call
|
||
|
:ref:`VIDIOC_QUERY_DV_TIMINGS` with a pointer to a struct
|
||
|
:c:type:`v4l2_dv_timings`. Once the hardware detects
|
||
|
the timings, it will fill in the timings structure.
|
||
|
|
||
|
.. note::
|
||
|
|
||
|
Drivers shall *not* switch timings automatically if new
|
||
|
timings are 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_QUERY_DV_TIMINGS`.
|
||
|
The reason is that new timings usually 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_QUERY_DV_TIMINGS`, and if the detected timings are valid they
|
||
|
will have to stop streaming, set the new timings, allocate new buffers
|
||
|
and start streaming again.
|
||
|
|
||
|
If the timings could not be detected because there was no signal, then
|
||
|
ENOLINK is returned. If a signal was detected, but it was unstable and
|
||
|
the receiver could not lock to the signal, then ``ENOLCK`` is returned. If
|
||
|
the receiver could lock to the signal, but the format is unsupported
|
||
|
(e.g. because the pixelclock is out of range of the hardware
|
||
|
capabilities), then the driver fills in whatever timings it could find
|
||
|
and returns ``ERANGE``. In that case the application can call
|
||
|
:ref:`VIDIOC_DV_TIMINGS_CAP` to compare the
|
||
|
found timings with the hardware's capabilities in order to give more
|
||
|
precise feedback to the user.
|
||
|
|
||
|
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
|
||
|
Digital video timings are not supported for this input or output.
|
||
|
|
||
|
ENOLINK
|
||
|
No timings could be detected because no signal was found.
|
||
|
|
||
|
ENOLCK
|
||
|
The signal was unstable and the hardware could not lock on to it.
|
||
|
|
||
|
ERANGE
|
||
|
Timings were found, but they are out of range of the hardware
|
||
|
capabilities.
|