1.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later 2.. c:namespace:: V4L 3 4.. _VIDIOC_G_MODULATOR: 5 6******************************************** 7ioctl VIDIOC_G_MODULATOR, VIDIOC_S_MODULATOR 8******************************************** 9 10Name 11==== 12 13VIDIOC_G_MODULATOR - VIDIOC_S_MODULATOR - Get or set modulator attributes 14 15Synopsis 16======== 17 18.. c:macro:: VIDIOC_G_MODULATOR 19 20``int ioctl(int fd, VIDIOC_G_MODULATOR, struct v4l2_modulator *argp)`` 21 22.. c:macro:: VIDIOC_S_MODULATOR 23 24``int ioctl(int fd, VIDIOC_S_MODULATOR, const struct v4l2_modulator *argp)`` 25 26Arguments 27========= 28 29``fd`` 30 File descriptor returned by :c:func:`open()`. 31 32``argp`` 33 Pointer to struct :c:type:`v4l2_modulator`. 34 35Description 36=========== 37 38To query the attributes of a modulator applications initialize the 39``index`` field and zero out the ``reserved`` array of a struct 40:c:type:`v4l2_modulator` and call the 41:ref:`VIDIOC_G_MODULATOR <VIDIOC_G_MODULATOR>` ioctl with a pointer to this structure. Drivers 42fill the rest of the structure or return an ``EINVAL`` error code when the 43index is out of bounds. To enumerate all modulators applications shall 44begin at index zero, incrementing by one until the driver returns 45EINVAL. 46 47Modulators have two writable properties, an audio modulation set and the 48radio frequency. To change the modulated audio subprograms, applications 49initialize the ``index`` and ``txsubchans`` fields and the ``reserved`` 50array and call the :ref:`VIDIOC_S_MODULATOR <VIDIOC_G_MODULATOR>` ioctl. Drivers may choose a 51different audio modulation if the request cannot be satisfied. However 52this is a write-only ioctl, it does not return the actual audio 53modulation selected. 54 55:ref:`SDR <sdr>` specific modulator types are ``V4L2_TUNER_SDR`` and 56``V4L2_TUNER_RF``. For SDR devices ``txsubchans`` field must be 57initialized to zero. The term 'modulator' means SDR transmitter in this 58context. 59 60To change the radio frequency the 61:ref:`VIDIOC_S_FREQUENCY <VIDIOC_G_FREQUENCY>` ioctl is available. 62 63.. tabularcolumns:: |p{2.9cm}|p{2.9cm}|p{5.8cm}|p{2.9cm}|p{3.0cm}| 64 65.. c:type:: v4l2_modulator 66 67.. flat-table:: struct v4l2_modulator 68 :header-rows: 0 69 :stub-columns: 0 70 :widths: 1 1 2 1 1 71 72 * - __u32 73 - ``index`` 74 - Identifies the modulator, set by the application. 75 * - __u8 76 - ``name``\ [32] 77 - Name of the modulator, a NUL-terminated ASCII string. 78 79 This information is intended for the user. 80 * - __u32 81 - ``capability`` 82 - Modulator capability flags. No flags are defined for this field, 83 the tuner flags in struct :c:type:`v4l2_tuner` are 84 used accordingly. The audio flags indicate the ability to encode 85 audio subprograms. They will *not* change for example with the 86 current video standard. 87 * - __u32 88 - ``rangelow`` 89 - The lowest tunable frequency in units of 62.5 KHz, or if the 90 ``capability`` flag ``V4L2_TUNER_CAP_LOW`` is set, in units of 91 62.5 Hz, or if the ``capability`` flag ``V4L2_TUNER_CAP_1HZ`` is 92 set, in units of 1 Hz. 93 * - __u32 94 - ``rangehigh`` 95 - The highest tunable frequency in units of 62.5 KHz, or if the 96 ``capability`` flag ``V4L2_TUNER_CAP_LOW`` is set, in units of 97 62.5 Hz, or if the ``capability`` flag ``V4L2_TUNER_CAP_1HZ`` is 98 set, in units of 1 Hz. 99 * - __u32 100 - ``txsubchans`` 101 - With this field applications can determine how audio sub-carriers 102 shall be modulated. It contains a set of flags as defined in 103 :ref:`modulator-txsubchans`. 104 105 .. note:: 106 107 The tuner ``rxsubchans`` flags are reused, but the 108 semantics are different. Video output devices 109 are assumed to have an analog or PCM audio input with 1-3 110 channels. The ``txsubchans`` flags select one or more channels 111 for modulation, together with some audio subprogram indicator, 112 for example, a stereo pilot tone. 113 * - __u32 114 - ``type`` 115 - :cspan:`2` Type of the modulator, see :c:type:`v4l2_tuner_type`. 116 * - __u32 117 - ``reserved``\ [3] 118 - Reserved for future extensions. 119 120 Drivers and applications must set the array to zero. 121 122 123.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}| 124 125.. _modulator-txsubchans: 126 127.. flat-table:: Modulator Audio Transmission Flags 128 :header-rows: 0 129 :stub-columns: 0 130 :widths: 3 1 4 131 132 * - ``V4L2_TUNER_SUB_MONO`` 133 - 0x0001 134 - Modulate channel 1 as mono audio, when the input has more 135 channels, a down-mix of channel 1 and 2. This flag does not 136 combine with ``V4L2_TUNER_SUB_STEREO`` or 137 ``V4L2_TUNER_SUB_LANG1``. 138 * - ``V4L2_TUNER_SUB_STEREO`` 139 - 0x0002 140 - Modulate channel 1 and 2 as left and right channel of a stereo 141 audio signal. When the input has only one channel or two channels 142 and ``V4L2_TUNER_SUB_SAP`` is also set, channel 1 is encoded as 143 left and right channel. This flag does not combine with 144 ``V4L2_TUNER_SUB_MONO`` or ``V4L2_TUNER_SUB_LANG1``. When the 145 driver does not support stereo audio it shall fall back to mono. 146 * - ``V4L2_TUNER_SUB_LANG1`` 147 - 0x0008 148 - Modulate channel 1 and 2 as primary and secondary language of a 149 bilingual audio signal. When the input has only one channel it is 150 used for both languages. It is not possible to encode the primary 151 or secondary language only. This flag does not combine with 152 ``V4L2_TUNER_SUB_MONO``, ``V4L2_TUNER_SUB_STEREO`` or 153 ``V4L2_TUNER_SUB_SAP``. If the hardware does not support the 154 respective audio matrix, or the current video standard does not 155 permit bilingual audio the :ref:`VIDIOC_S_MODULATOR <VIDIOC_G_MODULATOR>` ioctl shall 156 return an ``EINVAL`` error code and the driver shall fall back to mono 157 or stereo mode. 158 * - ``V4L2_TUNER_SUB_LANG2`` 159 - 0x0004 160 - Same effect as ``V4L2_TUNER_SUB_SAP``. 161 * - ``V4L2_TUNER_SUB_SAP`` 162 - 0x0004 163 - When combined with ``V4L2_TUNER_SUB_MONO`` the first channel is 164 encoded as mono audio, the last channel as Second Audio Program. 165 When the input has only one channel it is used for both audio 166 tracks. When the input has three channels the mono track is a 167 down-mix of channel 1 and 2. When combined with 168 ``V4L2_TUNER_SUB_STEREO`` channel 1 and 2 are encoded as left and 169 right stereo audio, channel 3 as Second Audio Program. When the 170 input has only two channels, the first is encoded as left and 171 right channel and the second as SAP. When the input has only one 172 channel it is used for all audio tracks. It is not possible to 173 encode a Second Audio Program only. This flag must combine with 174 ``V4L2_TUNER_SUB_MONO`` or ``V4L2_TUNER_SUB_STEREO``. If the 175 hardware does not support the respective audio matrix, or the 176 current video standard does not permit SAP the 177 :ref:`VIDIOC_S_MODULATOR <VIDIOC_G_MODULATOR>` ioctl shall return an ``EINVAL`` error code and 178 driver shall fall back to mono or stereo mode. 179 * - ``V4L2_TUNER_SUB_RDS`` 180 - 0x0010 181 - Enable the RDS encoder for a radio FM transmitter. 182 183Return Value 184============ 185 186On success 0 is returned, on error -1 and the ``errno`` variable is set 187appropriately. The generic error codes are described at the 188:ref:`Generic Error Codes <gen-errors>` chapter. 189 190EINVAL 191 The struct :c:type:`v4l2_modulator` ``index`` is 192 out of bounds. 193