470 lines
14 KiB
ReStructuredText
470 lines
14 KiB
ReStructuredText
.. -*- coding: utf-8; mode: rst -*-
|
|
|
|
.. _VIDIOC_G_TUNER:
|
|
|
|
************************************
|
|
ioctl VIDIOC_G_TUNER, VIDIOC_S_TUNER
|
|
************************************
|
|
|
|
Name
|
|
====
|
|
|
|
VIDIOC_G_TUNER - VIDIOC_S_TUNER - Get or set tuner attributes
|
|
|
|
|
|
Synopsis
|
|
========
|
|
|
|
.. c:function:: int ioctl( int fd, VIDIOC_G_TUNER, struct v4l2_tuner *argp )
|
|
:name: VIDIOC_G_TUNER
|
|
|
|
.. c:function:: int ioctl( int fd, VIDIOC_S_TUNER, const struct v4l2_tuner *argp )
|
|
:name: VIDIOC_S_TUNER
|
|
|
|
|
|
Arguments
|
|
=========
|
|
|
|
``fd``
|
|
File descriptor returned by :ref:`open() <func-open>`.
|
|
|
|
``argp``
|
|
Pointer to struct :c:type:`v4l2_tuner`.
|
|
|
|
|
|
Description
|
|
===========
|
|
|
|
To query the attributes of a tuner applications initialize the ``index``
|
|
field and zero out the ``reserved`` array of a struct
|
|
:c:type:`v4l2_tuner` and call the ``VIDIOC_G_TUNER`` ioctl
|
|
with a pointer to this structure. Drivers fill the rest of the structure
|
|
or return an ``EINVAL`` error code when the index is out of bounds. To
|
|
enumerate all tuners applications shall begin at index zero,
|
|
incrementing by one until the driver returns ``EINVAL``.
|
|
|
|
Tuners have two writable properties, the audio mode and the radio
|
|
frequency. To change the audio mode, applications initialize the
|
|
``index``, ``audmode`` and ``reserved`` fields and call the
|
|
``VIDIOC_S_TUNER`` ioctl. This will *not* change the current tuner,
|
|
which is determined by the current video input. Drivers may choose a
|
|
different audio mode if the requested mode is invalid or unsupported.
|
|
Since this is a write-only ioctl, it does not return the actually
|
|
selected audio mode.
|
|
|
|
:ref:`SDR <sdr>` specific tuner types are ``V4L2_TUNER_SDR`` and
|
|
``V4L2_TUNER_RF``. For SDR devices ``audmode`` field must be initialized
|
|
to zero. The term 'tuner' means SDR receiver in this context.
|
|
|
|
To change the radio frequency the
|
|
:ref:`VIDIOC_S_FREQUENCY <VIDIOC_G_FREQUENCY>` ioctl is available.
|
|
|
|
|
|
.. tabularcolumns:: |p{1.3cm}|p{3.0cm}|p{6.6cm}|p{6.6cm}|
|
|
|
|
.. c:type:: v4l2_tuner
|
|
|
|
.. cssclass:: longtable
|
|
|
|
.. flat-table:: struct v4l2_tuner
|
|
:header-rows: 0
|
|
:stub-columns: 0
|
|
|
|
* - __u32
|
|
- ``index``
|
|
- :cspan:`1` Identifies the tuner, set by the application.
|
|
* - __u8
|
|
- ``name``\ [32]
|
|
- :cspan:`1`
|
|
|
|
Name of the tuner, a NUL-terminated ASCII string.
|
|
|
|
This information is intended for the user.
|
|
* - __u32
|
|
- ``type``
|
|
- :cspan:`1` Type of the tuner, see :c:type:`v4l2_tuner_type`.
|
|
* - __u32
|
|
- ``capability``
|
|
- :cspan:`1`
|
|
|
|
Tuner capability flags, see :ref:`tuner-capability`. Audio flags
|
|
indicate the ability to decode audio subprograms. They will *not*
|
|
change, for example with the current video standard.
|
|
|
|
When the structure refers to a radio tuner the
|
|
``V4L2_TUNER_CAP_LANG1``, ``V4L2_TUNER_CAP_LANG2`` and
|
|
``V4L2_TUNER_CAP_NORM`` flags can't be used.
|
|
|
|
If multiple frequency bands are supported, then ``capability`` is
|
|
the union of all ``capability`` fields of each struct
|
|
:c:type:`v4l2_frequency_band`.
|
|
* - __u32
|
|
- ``rangelow``
|
|
- :cspan:`1` The lowest tunable frequency in units of 62.5 kHz, or
|
|
if the ``capability`` flag ``V4L2_TUNER_CAP_LOW`` is set, in units
|
|
of 62.5 Hz, or if the ``capability`` flag ``V4L2_TUNER_CAP_1HZ``
|
|
is set, in units of 1 Hz. If multiple frequency bands are
|
|
supported, then ``rangelow`` is the lowest frequency of all the
|
|
frequency bands.
|
|
* - __u32
|
|
- ``rangehigh``
|
|
- :cspan:`1` The highest tunable frequency in units of 62.5 kHz,
|
|
or if the ``capability`` flag ``V4L2_TUNER_CAP_LOW`` is set, in
|
|
units of 62.5 Hz, or if the ``capability`` flag
|
|
``V4L2_TUNER_CAP_1HZ`` is set, in units of 1 Hz. If multiple
|
|
frequency bands are supported, then ``rangehigh`` is the highest
|
|
frequency of all the frequency bands.
|
|
* - __u32
|
|
- ``rxsubchans``
|
|
- :cspan:`1`
|
|
|
|
Some tuners or audio decoders can determine the received audio
|
|
subprograms by analyzing audio carriers, pilot tones or other
|
|
indicators. To pass this information drivers set flags defined in
|
|
:ref:`tuner-rxsubchans` in this field. For example:
|
|
* -
|
|
-
|
|
- ``V4L2_TUNER_SUB_MONO``
|
|
- receiving mono audio
|
|
* -
|
|
-
|
|
- ``STEREO | SAP``
|
|
- receiving stereo audio and a secondary audio program
|
|
* -
|
|
-
|
|
- ``MONO | STEREO``
|
|
- receiving mono or stereo audio, the hardware cannot distinguish
|
|
* -
|
|
-
|
|
- ``LANG1 | LANG2``
|
|
- receiving bilingual audio
|
|
* -
|
|
-
|
|
- ``MONO | STEREO | LANG1 | LANG2``
|
|
- receiving mono, stereo or bilingual audio
|
|
* -
|
|
-
|
|
- :cspan:`1`
|
|
|
|
When the ``V4L2_TUNER_CAP_STEREO``, ``_LANG1``, ``_LANG2`` or
|
|
``_SAP`` flag is cleared in the ``capability`` field, the
|
|
corresponding ``V4L2_TUNER_SUB_`` flag must not be set here.
|
|
|
|
This field is valid only if this is the tuner of the current video
|
|
input, or when the structure refers to a radio tuner.
|
|
* - __u32
|
|
- ``audmode``
|
|
- :cspan:`1`
|
|
|
|
The selected audio mode, see :ref:`tuner-audmode` for valid
|
|
values. The audio mode does not affect audio subprogram detection,
|
|
and like a :ref:`control` it does not automatically
|
|
change unless the requested mode is invalid or unsupported. See
|
|
:ref:`tuner-matrix` for possible results when the selected and
|
|
received audio programs do not match.
|
|
|
|
Currently this is the only field of struct
|
|
struct :c:type:`v4l2_tuner` applications can change.
|
|
* - __u32
|
|
- ``signal``
|
|
- :cspan:`1` The signal strength if known.
|
|
|
|
Ranging from 0 to 65535. Higher values indicate a better signal.
|
|
* - __s32
|
|
- ``afc``
|
|
- :cspan:`1` Automatic frequency control.
|
|
|
|
When the ``afc`` value is negative, the frequency is too
|
|
low, when positive too high.
|
|
* - __u32
|
|
- ``reserved``\ [4]
|
|
- :cspan:`1` Reserved for future extensions.
|
|
|
|
Drivers and applications must set the array to zero.
|
|
|
|
|
|
|
|
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
|
|
|
.. c:type:: v4l2_tuner_type
|
|
|
|
.. flat-table:: enum v4l2_tuner_type
|
|
:header-rows: 0
|
|
:stub-columns: 0
|
|
:widths: 3 1 6
|
|
|
|
* - ``V4L2_TUNER_RADIO``
|
|
- 1
|
|
- Tuner supports radio
|
|
* - ``V4L2_TUNER_ANALOG_TV``
|
|
- 2
|
|
- Tuner supports analog TV
|
|
* - ``V4L2_TUNER_SDR``
|
|
- 4
|
|
- Tuner controls the A/D and/or D/A block of a
|
|
Software Digital Radio (SDR)
|
|
* - ``V4L2_TUNER_RF``
|
|
- 5
|
|
- Tuner controls the RF part of a Software Digital Radio (SDR)
|
|
|
|
|
|
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
|
|
|
.. _tuner-capability:
|
|
|
|
.. cssclass:: longtable
|
|
|
|
.. flat-table:: Tuner and Modulator Capability Flags
|
|
:header-rows: 0
|
|
:stub-columns: 0
|
|
:widths: 3 1 4
|
|
|
|
* - ``V4L2_TUNER_CAP_LOW``
|
|
- 0x0001
|
|
- When set, tuning frequencies are expressed in units of 62.5 Hz
|
|
instead of 62.5 kHz.
|
|
* - ``V4L2_TUNER_CAP_NORM``
|
|
- 0x0002
|
|
- This is a multi-standard tuner; the video standard can or must be
|
|
switched. (B/G PAL tuners for example are typically not considered
|
|
multi-standard because the video standard is automatically
|
|
determined from the frequency band.) The set of supported video
|
|
standards is available from the struct
|
|
:c:type:`v4l2_input` pointing to this tuner, see the
|
|
description of ioctl :ref:`VIDIOC_ENUMINPUT`
|
|
for details. Only ``V4L2_TUNER_ANALOG_TV`` tuners can have this
|
|
capability.
|
|
* - ``V4L2_TUNER_CAP_HWSEEK_BOUNDED``
|
|
- 0x0004
|
|
- If set, then this tuner supports the hardware seek functionality
|
|
where the seek stops when it reaches the end of the frequency
|
|
range.
|
|
* - ``V4L2_TUNER_CAP_HWSEEK_WRAP``
|
|
- 0x0008
|
|
- If set, then this tuner supports the hardware seek functionality
|
|
where the seek wraps around when it reaches the end of the
|
|
frequency range.
|
|
* - ``V4L2_TUNER_CAP_STEREO``
|
|
- 0x0010
|
|
- Stereo audio reception is supported.
|
|
* - ``V4L2_TUNER_CAP_LANG1``
|
|
- 0x0040
|
|
- Reception of the primary language of a bilingual audio program is
|
|
supported. Bilingual audio is a feature of two-channel systems,
|
|
transmitting the primary language monaural on the main audio
|
|
carrier and a secondary language monaural on a second carrier.
|
|
Only ``V4L2_TUNER_ANALOG_TV`` tuners can have this capability.
|
|
* - ``V4L2_TUNER_CAP_LANG2``
|
|
- 0x0020
|
|
- Reception of the secondary language of a bilingual audio program
|
|
is supported. Only ``V4L2_TUNER_ANALOG_TV`` tuners can have this
|
|
capability.
|
|
* - ``V4L2_TUNER_CAP_SAP``
|
|
- 0x0020
|
|
- Reception of a secondary audio program is supported. This is a
|
|
feature of the BTSC system which accompanies the NTSC video
|
|
standard. Two audio carriers are available for mono or stereo
|
|
transmissions of a primary language, and an independent third
|
|
carrier for a monaural secondary language. Only
|
|
``V4L2_TUNER_ANALOG_TV`` tuners can have this capability.
|
|
|
|
.. note::
|
|
|
|
The ``V4L2_TUNER_CAP_LANG2`` and ``V4L2_TUNER_CAP_SAP``
|
|
flags are synonyms. ``V4L2_TUNER_CAP_SAP`` applies when the tuner
|
|
supports the ``V4L2_STD_NTSC_M`` video standard.
|
|
* - ``V4L2_TUNER_CAP_RDS``
|
|
- 0x0080
|
|
- RDS capture is supported. This capability is only valid for radio
|
|
tuners.
|
|
* - ``V4L2_TUNER_CAP_RDS_BLOCK_IO``
|
|
- 0x0100
|
|
- The RDS data is passed as unparsed RDS blocks.
|
|
* - ``V4L2_TUNER_CAP_RDS_CONTROLS``
|
|
- 0x0200
|
|
- The RDS data is parsed by the hardware and set via controls.
|
|
* - ``V4L2_TUNER_CAP_FREQ_BANDS``
|
|
- 0x0400
|
|
- The :ref:`VIDIOC_ENUM_FREQ_BANDS`
|
|
ioctl can be used to enumerate the available frequency bands.
|
|
* - ``V4L2_TUNER_CAP_HWSEEK_PROG_LIM``
|
|
- 0x0800
|
|
- The range to search when using the hardware seek functionality is
|
|
programmable, see
|
|
:ref:`VIDIOC_S_HW_FREQ_SEEK` for
|
|
details.
|
|
* - ``V4L2_TUNER_CAP_1HZ``
|
|
- 0x1000
|
|
- When set, tuning frequencies are expressed in units of 1 Hz
|
|
instead of 62.5 kHz.
|
|
|
|
|
|
|
|
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
|
|
|
.. _tuner-rxsubchans:
|
|
|
|
.. flat-table:: Tuner Audio Reception Flags
|
|
:header-rows: 0
|
|
:stub-columns: 0
|
|
:widths: 3 1 4
|
|
|
|
* - ``V4L2_TUNER_SUB_MONO``
|
|
- 0x0001
|
|
- The tuner receives a mono audio signal.
|
|
* - ``V4L2_TUNER_SUB_STEREO``
|
|
- 0x0002
|
|
- The tuner receives a stereo audio signal.
|
|
* - ``V4L2_TUNER_SUB_LANG1``
|
|
- 0x0008
|
|
- The tuner receives the primary language of a bilingual audio
|
|
signal. Drivers must clear this flag when the current video
|
|
standard is ``V4L2_STD_NTSC_M``.
|
|
* - ``V4L2_TUNER_SUB_LANG2``
|
|
- 0x0004
|
|
- The tuner receives the secondary language of a bilingual audio
|
|
signal (or a second audio program).
|
|
* - ``V4L2_TUNER_SUB_SAP``
|
|
- 0x0004
|
|
- The tuner receives a Second Audio Program.
|
|
|
|
.. note::
|
|
|
|
The ``V4L2_TUNER_SUB_LANG2`` and ``V4L2_TUNER_SUB_SAP``
|
|
flags are synonyms. The ``V4L2_TUNER_SUB_SAP`` flag applies
|
|
when the current video standard is ``V4L2_STD_NTSC_M``.
|
|
* - ``V4L2_TUNER_SUB_RDS``
|
|
- 0x0010
|
|
- The tuner receives an RDS channel.
|
|
|
|
|
|
|
|
.. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
|
|
|
|
.. _tuner-audmode:
|
|
|
|
.. flat-table:: Tuner Audio Modes
|
|
:header-rows: 0
|
|
:stub-columns: 0
|
|
:widths: 3 1 4
|
|
|
|
* - ``V4L2_TUNER_MODE_MONO``
|
|
- 0
|
|
- Play mono audio. When the tuner receives a stereo signal this a
|
|
down-mix of the left and right channel. When the tuner receives a
|
|
bilingual or SAP signal this mode selects the primary language.
|
|
* - ``V4L2_TUNER_MODE_STEREO``
|
|
- 1
|
|
- Play stereo audio. When the tuner receives bilingual audio it may
|
|
play different languages on the left and right channel or the
|
|
primary language is played on both channels.
|
|
|
|
Playing different languages in this mode is deprecated. New
|
|
drivers should do this only in ``MODE_LANG1_LANG2``.
|
|
|
|
When the tuner receives no stereo signal or does not support
|
|
stereo reception the driver shall fall back to ``MODE_MONO``.
|
|
* - ``V4L2_TUNER_MODE_LANG1``
|
|
- 3
|
|
- Play the primary language, mono or stereo. Only
|
|
``V4L2_TUNER_ANALOG_TV`` tuners support this mode.
|
|
* - ``V4L2_TUNER_MODE_LANG2``
|
|
- 2
|
|
- Play the secondary language, mono. When the tuner receives no
|
|
bilingual audio or SAP, or their reception is not supported the
|
|
driver shall fall back to mono or stereo mode. Only
|
|
``V4L2_TUNER_ANALOG_TV`` tuners support this mode.
|
|
* - ``V4L2_TUNER_MODE_SAP``
|
|
- 2
|
|
- Play the Second Audio Program. When the tuner receives no
|
|
bilingual audio or SAP, or their reception is not supported the
|
|
driver shall fall back to mono or stereo mode. Only
|
|
``V4L2_TUNER_ANALOG_TV`` tuners support this mode.
|
|
|
|
.. note:: The ``V4L2_TUNER_MODE_LANG2`` and ``V4L2_TUNER_MODE_SAP``
|
|
are synonyms.
|
|
* - ``V4L2_TUNER_MODE_LANG1_LANG2``
|
|
- 4
|
|
- Play the primary language on the left channel, the secondary
|
|
language on the right channel. When the tuner receives no
|
|
bilingual audio or SAP, it shall fall back to ``MODE_LANG1`` or
|
|
``MODE_MONO``. Only ``V4L2_TUNER_ANALOG_TV`` tuners support this
|
|
mode.
|
|
|
|
.. raw:: latex
|
|
|
|
\scriptsize
|
|
|
|
.. tabularcolumns:: |p{1.5cm}|p{1.5cm}|p{2.9cm}|p{2.9cm}|p{2.9cm}|p{2.9cm}|
|
|
|
|
.. _tuner-matrix:
|
|
|
|
.. flat-table:: Tuner Audio Matrix
|
|
:header-rows: 2
|
|
:stub-columns: 0
|
|
:widths: 7 7 14 14 14 14
|
|
|
|
* -
|
|
- :cspan:`4` Selected ``V4L2_TUNER_MODE_``
|
|
* - Received ``V4L2_TUNER_SUB_``
|
|
- ``MONO``
|
|
- ``STEREO``
|
|
- ``LANG1``
|
|
- ``LANG2 = SAP``
|
|
- ``LANG1_LANG2``\ [#f1]_
|
|
* - ``MONO``
|
|
- Mono
|
|
- Mono/Mono
|
|
- Mono
|
|
- Mono
|
|
- Mono/Mono
|
|
* - ``MONO | SAP``
|
|
- Mono
|
|
- Mono/Mono
|
|
- Mono
|
|
- SAP
|
|
- Mono/SAP (preferred) or Mono/Mono
|
|
* - ``STEREO``
|
|
- L+R
|
|
- L/R
|
|
- Stereo L/R (preferred) or Mono L+R
|
|
- Stereo L/R (preferred) or Mono L+R
|
|
- L/R (preferred) or L+R/L+R
|
|
* - ``STEREO | SAP``
|
|
- L+R
|
|
- L/R
|
|
- Stereo L/R (preferred) or Mono L+R
|
|
- SAP
|
|
- L+R/SAP (preferred) or L/R or L+R/L+R
|
|
* - ``LANG1 | LANG2``
|
|
- Language 1
|
|
- Lang1/Lang2 (deprecated\ [#f2]_) or Lang1/Lang1
|
|
- Language 1
|
|
- Language 2
|
|
- Lang1/Lang2 (preferred) or Lang1/Lang1
|
|
|
|
.. raw:: latex
|
|
|
|
\normalsize
|
|
|
|
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.
|
|
|
|
EINVAL
|
|
The struct :c:type:`v4l2_tuner` ``index`` is out of
|
|
bounds.
|
|
|
|
.. [#f1]
|
|
This mode has been added in Linux 2.6.17 and may not be supported by
|
|
older drivers.
|
|
|
|
.. [#f2]
|
|
Playback of both languages in ``MODE_STEREO`` is deprecated. In the
|
|
future drivers should produce only the primary language in this mode.
|
|
Applications should request ``MODE_LANG1_LANG2`` to record both
|
|
languages or a stereo signal.
|