| .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later | |
| .. c:namespace:: V4L | |
| .. _VIDIOC_ENUMSTD: | |
| ******************************************* | |
| ioctl VIDIOC_ENUMSTD, VIDIOC_SUBDEV_ENUMSTD | |
| ******************************************* | |
| Name | |
| ==== | |
| VIDIOC_ENUMSTD - VIDIOC_SUBDEV_ENUMSTD - Enumerate supported video standards | |
| Synopsis | |
| ======== | |
| .. c:macro:: VIDIOC_ENUMSTD | |
| ``int ioctl(int fd, VIDIOC_ENUMSTD, struct v4l2_standard *argp)`` | |
| .. c:macro:: VIDIOC_SUBDEV_ENUMSTD | |
| ``int ioctl(int fd, VIDIOC_SUBDEV_ENUMSTD, struct v4l2_standard *argp)`` | |
| Arguments | |
| ========= | |
| ``fd`` | |
| File descriptor returned by :c:func:`open()`. | |
| ``argp`` | |
| Pointer to struct :c:type:`v4l2_standard`. | |
| Description | |
| =========== | |
| To query the attributes of a video standard, especially a custom (driver | |
| defined) one, applications initialize the ``index`` field of struct | |
| :c:type:`v4l2_standard` and call the :ref:`VIDIOC_ENUMSTD` | |
| 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 standards applications shall begin at index | |
| zero, incrementing by one until the driver returns ``EINVAL``. Drivers may | |
| enumerate a different set of standards after switching the video input | |
| or output. [#f1]_ | |
| .. c:type:: v4l2_standard | |
| .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}| | |
| .. flat-table:: struct v4l2_standard | |
| :header-rows: 0 | |
| :stub-columns: 0 | |
| :widths: 1 1 2 | |
| * - __u32 | |
| - ``index`` | |
| - Number of the video standard, set by the application. | |
| * - :ref:`v4l2_std_id <v4l2-std-id>` | |
| - ``id`` | |
| - The bits in this field identify the standard as one of the common | |
| standards listed in :ref:`v4l2-std-id`, or if bits 32 to 63 are | |
| set as custom standards. Multiple bits can be set if the hardware | |
| does not distinguish between these standards, however separate | |
| indices do not indicate the opposite. The ``id`` must be unique. | |
| No other enumerated struct :c:type:`v4l2_standard` structure, | |
| for this input or output anyway, can contain the same set of bits. | |
| * - __u8 | |
| - ``name``\ [24] | |
| - Name of the standard, a NUL-terminated ASCII string, for example: | |
| "PAL-B/G", "NTSC Japan". This information is intended for the | |
| user. | |
| * - struct :c:type:`v4l2_fract` | |
| - ``frameperiod`` | |
| - The frame period (not field period) is numerator / denominator. | |
| For example M/NTSC has a frame period of 1001 / 30000 seconds. | |
| * - __u32 | |
| - ``framelines`` | |
| - Total lines per frame including blanking, e. g. 625 for B/PAL. | |
| * - __u32 | |
| - ``reserved``\ [4] | |
| - Reserved for future extensions. Drivers must set the array to | |
| zero. | |
| .. c:type:: v4l2_fract | |
| .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}| | |
| .. flat-table:: struct v4l2_fract | |
| :header-rows: 0 | |
| :stub-columns: 0 | |
| :widths: 1 1 2 | |
| * - __u32 | |
| - ``numerator`` | |
| - | |
| * - __u32 | |
| - ``denominator`` | |
| - | |
| .. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.5cm}| | |
| .. _v4l2-std-id: | |
| .. flat-table:: typedef v4l2_std_id | |
| :header-rows: 0 | |
| :stub-columns: 0 | |
| :widths: 1 1 2 | |
| * - __u64 | |
| - ``v4l2_std_id`` | |
| - This type is a set, each bit representing another video standard | |
| as listed below and in :ref:`video-standards`. The 32 most | |
| significant bits are reserved for custom (driver defined) video | |
| standards. | |
| .. code-block:: c | |
| #define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001) | |
| #define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002) | |
| #define V4L2_STD_PAL_G ((v4l2_std_id)0x00000004) | |
| #define V4L2_STD_PAL_H ((v4l2_std_id)0x00000008) | |
| #define V4L2_STD_PAL_I ((v4l2_std_id)0x00000010) | |
| #define V4L2_STD_PAL_D ((v4l2_std_id)0x00000020) | |
| #define V4L2_STD_PAL_D1 ((v4l2_std_id)0x00000040) | |
| #define V4L2_STD_PAL_K ((v4l2_std_id)0x00000080) | |
| #define V4L2_STD_PAL_M ((v4l2_std_id)0x00000100) | |
| #define V4L2_STD_PAL_N ((v4l2_std_id)0x00000200) | |
| #define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400) | |
| #define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800) | |
| ``V4L2_STD_PAL_60`` is a hybrid standard with 525 lines, 60 Hz refresh | |
| rate, and PAL color modulation with a 4.43 MHz color subcarrier. Some | |
| PAL video recorders can play back NTSC tapes in this mode for display on | |
| a 50/60 Hz agnostic PAL TV. | |
| .. code-block:: c | |
| #define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000) | |
| #define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000) | |
| #define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000) | |
| ``V4L2_STD_NTSC_443`` is a hybrid standard with 525 lines, 60 Hz refresh | |
| rate, and NTSC color modulation with a 4.43 MHz color subcarrier. | |
| .. code-block:: c | |
| #define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000) | |
| #define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000) | |
| #define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000) | |
| #define V4L2_STD_SECAM_G ((v4l2_std_id)0x00040000) | |
| #define V4L2_STD_SECAM_H ((v4l2_std_id)0x00080000) | |
| #define V4L2_STD_SECAM_K ((v4l2_std_id)0x00100000) | |
| #define V4L2_STD_SECAM_K1 ((v4l2_std_id)0x00200000) | |
| #define V4L2_STD_SECAM_L ((v4l2_std_id)0x00400000) | |
| #define V4L2_STD_SECAM_LC ((v4l2_std_id)0x00800000) | |
| /* ATSC/HDTV */ | |
| #define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000) | |
| #define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000) | |
| ``V4L2_STD_ATSC_8_VSB`` and ``V4L2_STD_ATSC_16_VSB`` are U.S. | |
| terrestrial digital TV standards. Presently the V4L2 API does not | |
| support digital TV. See also the Linux DVB API at | |
| `https://linuxtv.org <https://linuxtv.org>`__. | |
| .. code-block:: c | |
| #define V4L2_STD_PAL_BG (V4L2_STD_PAL_B | | |
| V4L2_STD_PAL_B1 | | |
| V4L2_STD_PAL_G) | |
| #define V4L2_STD_B (V4L2_STD_PAL_B | | |
| V4L2_STD_PAL_B1 | | |
| V4L2_STD_SECAM_B) | |
| #define V4L2_STD_GH (V4L2_STD_PAL_G | | |
| V4L2_STD_PAL_H | | |
| V4L2_STD_SECAM_G | | |
| V4L2_STD_SECAM_H) | |
| #define V4L2_STD_PAL_DK (V4L2_STD_PAL_D | | |
| V4L2_STD_PAL_D1 | | |
| V4L2_STD_PAL_K) | |
| #define V4L2_STD_PAL (V4L2_STD_PAL_BG | | |
| V4L2_STD_PAL_DK | | |
| V4L2_STD_PAL_H | | |
| V4L2_STD_PAL_I) | |
| #define V4L2_STD_NTSC (V4L2_STD_NTSC_M | | |
| V4L2_STD_NTSC_M_JP | | |
| V4L2_STD_NTSC_M_KR) | |
| #define V4L2_STD_MN (V4L2_STD_PAL_M | | |
| V4L2_STD_PAL_N | | |
| V4L2_STD_PAL_Nc | | |
| V4L2_STD_NTSC) | |
| #define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D | | |
| V4L2_STD_SECAM_K | | |
| V4L2_STD_SECAM_K1) | |
| #define V4L2_STD_DK (V4L2_STD_PAL_DK | | |
| V4L2_STD_SECAM_DK) | |
| #define V4L2_STD_SECAM (V4L2_STD_SECAM_B | | |
| V4L2_STD_SECAM_G | | |
| V4L2_STD_SECAM_H | | |
| V4L2_STD_SECAM_DK | | |
| V4L2_STD_SECAM_L | | |
| V4L2_STD_SECAM_LC) | |
| #define V4L2_STD_525_60 (V4L2_STD_PAL_M | | |
| V4L2_STD_PAL_60 | | |
| V4L2_STD_NTSC | | |
| V4L2_STD_NTSC_443) | |
| #define V4L2_STD_625_50 (V4L2_STD_PAL | | |
| V4L2_STD_PAL_N | | |
| V4L2_STD_PAL_Nc | | |
| V4L2_STD_SECAM) | |
| #define V4L2_STD_UNKNOWN 0 | |
| #define V4L2_STD_ALL (V4L2_STD_525_60 | | |
| V4L2_STD_625_50) | |
| .. raw:: latex | |
| \begingroup | |
| \tiny | |
| \setlength{\tabcolsep}{2pt} | |
| .. NTSC/M PAL/M /N /B /D /H /I SECAM/B /D /K1 /L | |
| .. tabularcolumns:: |p{1.43cm}|p{1.38cm}|p{1.59cm}|p{1.7cm}|p{1.7cm}|p{1.17cm}|p{0.64cm}|p{1.71cm}|p{1.6cm}|p{1.07cm}|p{1.07cm}|p{1.07cm}| | |
| .. _video-standards: | |
| .. flat-table:: Video Standards (based on :ref:`itu470`) | |
| :header-rows: 1 | |
| :stub-columns: 0 | |
| * - Characteristics | |
| - M/NTSC [#f2]_ | |
| - M/PAL | |
| - N/PAL [#f3]_ | |
| - B, B1, G/PAL | |
| - D, D1, K/PAL | |
| - H/PAL | |
| - I/PAL | |
| - B, G/SECAM | |
| - D, K/SECAM | |
| - K1/SECAM | |
| - L/SECAM | |
| * - Frame lines | |
| - :cspan:`1` 525 | |
| - :cspan:`8` 625 | |
| * - Frame period (s) | |
| - :cspan:`1` 1001/30000 | |
| - :cspan:`8` 1/25 | |
| * - Chrominance sub-carrier frequency (Hz) | |
| - 3579545 ± 10 | |
| - 3579611.49 ± 10 | |
| - 4433618.75 ± 5 | |
| (3582056.25 ± 5) | |
| - :cspan:`3` 4433618.75 ± 5 | |
| - 4433618.75 ± 1 | |
| - :cspan:`2` f\ :sub:`OR` = 4406250 ± 2000, | |
| f\ :sub:`OB` = 4250000 ± 2000 | |
| * - Nominal radio-frequency channel bandwidth (MHz) | |
| - 6 | |
| - 6 | |
| - 6 | |
| - B: 7; B1, G: 8 | |
| - 8 | |
| - 8 | |
| - 8 | |
| - 8 | |
| - 8 | |
| - 8 | |
| - 8 | |
| * - Sound carrier relative to vision carrier (MHz) | |
| - 4.5 | |
| - 4.5 | |
| - 4.5 | |
| - 5.5 ± 0.001 [#f4]_ [#f5]_ [#f6]_ [#f7]_ | |
| - 6.5 ± 0.001 | |
| - 5.5 | |
| - 5.9996 ± 0.0005 | |
| - 5.5 ± 0.001 | |
| - 6.5 ± 0.001 | |
| - 6.5 | |
| - 6.5 [#f8]_ | |
| .. raw:: latex | |
| \endgroup | |
| 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_standard` ``index`` is out | |
| of bounds. | |
| ENODATA | |
| Standard video timings are not supported for this input or output. | |
| .. [#f1] | |
| The supported standards may overlap and we need an unambiguous set to | |
| find the current standard returned by :ref:`VIDIOC_G_STD <VIDIOC_G_STD>`. | |
| .. [#f2] | |
| Japan uses a standard similar to M/NTSC (V4L2_STD_NTSC_M_JP). | |
| .. [#f3] | |
| The values in brackets apply to the combination N/PAL a.k.a. | |
| N\ :sub:`C` used in Argentina (V4L2_STD_PAL_Nc). | |
| .. [#f4] | |
| In the Federal Republic of Germany, Austria, Italy, the Netherlands, | |
| Slovakia and Switzerland a system of two sound carriers is used, the | |
| frequency of the second carrier being 242.1875 kHz above the | |
| frequency of the first sound carrier. For stereophonic sound | |
| transmissions a similar system is used in Australia. | |
| .. [#f5] | |
| New Zealand uses a sound carrier displaced 5.4996 ± 0.0005 MHz from | |
| the vision carrier. | |
| .. [#f6] | |
| In Denmark, Finland, New Zealand, Sweden and Spain a system of two | |
| sound carriers is used. In Iceland, Norway and Poland the same system | |
| is being introduced. The second carrier is 5.85 MHz above the vision | |
| carrier and is DQPSK modulated with 728 kbit/s sound and data | |
| multiplex. (NICAM system) | |
| .. [#f7] | |
| In the United Kingdom, a system of two sound carriers is used. The | |
| second sound carrier is 6.552 MHz above the vision carrier and is | |
| DQPSK modulated with a 728 kbit/s sound and data multiplex able to | |
| carry two sound channels. (NICAM system) | |
| .. [#f8] | |
| In France, a digital carrier 5.85 MHz away from the vision carrier | |
| may be used in addition to the main sound carrier. It is modulated in | |
| differentially encoded QPSK with a 728 kbit/s sound and data | |
| multiplexer capable of carrying two sound channels. (NICAM system) |