blob: bc2db0d8f389a1096679522a5c763098d3fe89a7 [file] [log] [blame]
Markus Heiser5377d912016-06-30 15:18:56 +02001.. -*- coding: utf-8; mode: rst -*-
2
3.. _audio:
4
5************************
6Audio Inputs and Outputs
7************************
8
9Audio inputs and outputs are physical connectors of a device. Video
10capture devices have inputs, output devices have outputs, zero or more
11each. Radio devices have no audio inputs or outputs. They have exactly
12one tuner which in fact *is* an audio source, but this API associates
13tuners with video inputs or outputs only, and radio devices have none of
14these. [1]_ A connector on a TV card to loop back the received audio
15signal to a sound card is not considered an audio output.
16
17Audio and video inputs and outputs are associated. Selecting a video
18source also selects an audio source. This is most evident when the video
19and audio source is a tuner. Further audio connectors can combine with
20more than one video input or output. Assumed two composite video inputs
21and two audio inputs exist, there may be up to four valid combinations.
22The relation of video and audio connectors is defined in the
23``audioset`` field of the respective struct
24:ref:`v4l2_input <v4l2-input>` or struct
25:ref:`v4l2_output <v4l2-output>`, where each bit represents the index
26number, starting at zero, of one audio input or output.
27
28To learn about the number and attributes of the available inputs and
29outputs applications can enumerate them with the
Mauro Carvalho Chehab73470812016-07-01 13:58:44 -030030:ref:`VIDIOC_ENUMAUDIO` and
Mauro Carvalho Chehabaf4a4d02016-07-01 13:42:29 -030031:ref:`VIDIOC_ENUMAUDOUT <VIDIOC_ENUMAUDIOout>` ioctl, respectively.
Markus Heiser5377d912016-06-30 15:18:56 +020032The struct :ref:`v4l2_audio <v4l2-audio>` returned by the
Mauro Carvalho Chehab73470812016-07-01 13:58:44 -030033:ref:`VIDIOC_ENUMAUDIO` ioctl also contains signal
Mauro Carvalho Chehab78981882016-06-30 22:52:34 -030034:status information applicable when the current audio input is queried.
Markus Heiser5377d912016-06-30 15:18:56 +020035
Mauro Carvalho Chehab4e03cb72016-07-03 10:02:29 -030036The :ref:`VIDIOC_G_AUDIO <VIDIOC_G_AUDIO>` and
Mauro Carvalho Chehabaf4a4d02016-07-01 13:42:29 -030037:ref:`VIDIOC_G_AUDOUT <VIDIOC_G_AUDIOout>` ioctls report the current
Markus Heiser5377d912016-06-30 15:18:56 +020038audio input and output, respectively. Note that, unlike
Mauro Carvalho Chehab4e03cb72016-07-03 10:02:29 -030039:ref:`VIDIOC_G_INPUT <VIDIOC_G_INPUT>` and
40:ref:`VIDIOC_G_OUTPUT <VIDIOC_G_OUTPUT>` these ioctls return a
Mauro Carvalho Chehab73470812016-07-01 13:58:44 -030041structure as :ref:`VIDIOC_ENUMAUDIO` and
Mauro Carvalho Chehabaf4a4d02016-07-01 13:42:29 -030042:ref:`VIDIOC_ENUMAUDOUT <VIDIOC_ENUMAUDIOout>` do, not just an index.
Markus Heiser5377d912016-06-30 15:18:56 +020043
44To select an audio input and change its properties applications call the
Mauro Carvalho Chehabaf4a4d02016-07-01 13:42:29 -030045:ref:`VIDIOC_S_AUDIO <VIDIOC_G_AUDIO>` ioctl. To select an audio
Markus Heiser5377d912016-06-30 15:18:56 +020046output (which presently has no changeable properties) applications call
Mauro Carvalho Chehabaf4a4d02016-07-01 13:42:29 -030047the :ref:`VIDIOC_S_AUDOUT <VIDIOC_G_AUDIOout>` ioctl.
Markus Heiser5377d912016-06-30 15:18:56 +020048
49Drivers must implement all audio input ioctls when the device has
50multiple selectable audio inputs, all audio output ioctls when the
51device has multiple selectable audio outputs. When the device has any
52audio inputs or outputs the driver must set the ``V4L2_CAP_AUDIO`` flag
53in the struct :ref:`v4l2_capability <v4l2-capability>` returned by
Mauro Carvalho Chehab73470812016-07-01 13:58:44 -030054the :ref:`VIDIOC_QUERYCAP` ioctl.
Markus Heiser5377d912016-06-30 15:18:56 +020055
56
57.. code-block:: c
Mauro Carvalho Chehabda1621c2016-07-03 11:24:58 -030058 :caption: Example 1.3. Information about the current audio input
Markus Heiser5377d912016-06-30 15:18:56 +020059
60 struct v4l2_audio audio;
61
62 memset(&audio, 0, sizeof(audio));
63
64 if (-1 == ioctl(fd, VIDIOC_G_AUDIO, &audio)) {
65 perror("VIDIOC_G_AUDIO");
66 exit(EXIT_FAILURE);
67 }
68
69 printf("Current input: %s\\n", audio.name);
70
71
72.. code-block:: c
Mauro Carvalho Chehabda1621c2016-07-03 11:24:58 -030073 :caption: Example 1.4. Switching to the first audio input
Markus Heiser5377d912016-06-30 15:18:56 +020074
75 struct v4l2_audio audio;
76
77 memset(&audio, 0, sizeof(audio)); /* clear audio.mode, audio.reserved */
78
79 audio.index = 0;
80
81 if (-1 == ioctl(fd, VIDIOC_S_AUDIO, &audio)) {
82 perror("VIDIOC_S_AUDIO");
83 exit(EXIT_FAILURE);
84 }
85
86.. [1]
87 Actually struct :ref:`v4l2_audio <v4l2-audio>` ought to have a
88 ``tuner`` field like struct :ref:`v4l2_input <v4l2-input>`, not
89 only making the API more consistent but also permitting radio devices
90 with multiple tuners.
91
92
93.. ------------------------------------------------------------------------------
94.. This file was automatically converted from DocBook-XML with the dbxml
95.. library (https://github.com/return42/sphkerneldoc). The origin XML comes
96.. from the linux kernel, refer to:
97..
98.. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook
99.. ------------------------------------------------------------------------------