2016-06-30 15:18:56 +02:00
.. -*- coding: utf-8; mode: rst -*-
.. _video:
***** ***** ***** ***** *** *
Video Inputs and Outputs
***** ***** ***** ***** *** *
Video inputs and outputs are physical connectors of a device. These can
be for example RF connectors (antenna/cable), CVBS a.k.a. Composite
2017-03-29 04:59:12 -03:00
Video, S-Video and RGB connectors. Camera sensors are also considered to
be a video input. Video and VBI capture devices have inputs. Video and
VBI output devices have outputs, at least one each. Radio devices have
no video inputs or outputs.
2016-06-30 15:18:56 +02:00
To learn about the number and attributes of the available inputs and
outputs applications can enumerate them with the
2016-07-01 13:58:44 -03:00
:ref: `VIDIOC_ENUMINPUT` and
:ref: `VIDIOC_ENUMOUTPUT` ioctl, respectively. The
2016-08-29 17:37:59 -03:00
struct :c:type: `v4l2_input` returned by the
2016-07-01 13:58:44 -03:00
:ref: `VIDIOC_ENUMINPUT` ioctl also contains signal
2016-06-30 22:17:31 -03:00
:status information applicable when the current video input is queried.
2016-06-30 15:18:56 +02:00
2016-07-03 10:02:29 -03:00
The :ref: `VIDIOC_G_INPUT <VIDIOC_G_INPUT>` and
:ref: `VIDIOC_G_OUTPUT <VIDIOC_G_OUTPUT>` ioctls return the index of
2016-06-30 15:18:56 +02:00
the current video input or output. To select a different input or output
2016-07-01 13:42:29 -03:00
applications call the :ref: `VIDIOC_S_INPUT <VIDIOC_G_INPUT>` and
:ref: `VIDIOC_S_OUTPUT <VIDIOC_G_OUTPUT>` ioctls. Drivers must
2016-06-30 15:18:56 +02:00
implement all the input ioctls when the device has one or more inputs,
all the output ioctls when the device has one or more outputs.
2016-07-10 08:22:19 -03:00
Example: Information about the current video input
==================================================
2016-06-30 15:18:56 +02:00
.. code-block :: c
struct v4l2_input input;
int index;
if (-1 == ioctl(fd, VIDIOC_G_INPUT, &index)) {
2016-07-04 16:25:48 -03:00
perror("VIDIOC_G_INPUT");
exit(EXIT_FAILURE);
2016-06-30 15:18:56 +02:00
}
memset(&input, 0, sizeof(input));
input.index = index;
if (-1 == ioctl(fd, VIDIOC_ENUMINPUT, &input)) {
2016-07-04 16:25:48 -03:00
perror("VIDIOC_ENUMINPUT");
exit(EXIT_FAILURE);
2016-06-30 15:18:56 +02:00
}
printf("Current input: %s\\n", input.name);
2016-07-10 08:22:19 -03:00
Example: Switching to the first video input
===========================================
2016-06-30 15:18:56 +02:00
.. code-block :: c
int index;
index = 0;
if (-1 == ioctl(fd, VIDIOC_S_INPUT, &index)) {
2016-07-04 16:25:48 -03:00
perror("VIDIOC_S_INPUT");
exit(EXIT_FAILURE);
2016-06-30 15:18:56 +02:00
}