blob: 28f00a027cc750ef4abb75cc3b1ac9be5fd7356e [file] [log] [blame]
Markus Heiser5377d912016-06-30 15:18:56 +02001.. -*- coding: utf-8; mode: rst -*-
2
Mauro Carvalho Chehabaf4a4d02016-07-01 13:42:29 -03003.. _VIDIOC_ENUMSTD:
Markus Heiser5377d912016-06-30 15:18:56 +02004
5********************
6ioctl VIDIOC_ENUMSTD
7********************
8
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -03009Name
Mauro Carvalho Chehab586027c2016-07-05 07:58:48 -030010====
Markus Heiser5377d912016-06-30 15:18:56 +020011
Mauro Carvalho Chehab586027c2016-07-05 07:58:48 -030012VIDIOC_ENUMSTD - Enumerate supported video standards
Markus Heiser5377d912016-06-30 15:18:56 +020013
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030014
15Synopsis
Markus Heiser5377d912016-06-30 15:18:56 +020016========
17
Mauro Carvalho Chehabb7e67f62016-07-02 09:49:16 -030018.. cpp:function:: int ioctl( int fd, int request, struct v4l2_standard *argp )
Markus Heiser5377d912016-06-30 15:18:56 +020019
Mauro Carvalho Chehab586027c2016-07-05 07:58:48 -030020
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030021Arguments
Markus Heiser5377d912016-06-30 15:18:56 +020022=========
23
24``fd``
25 File descriptor returned by :ref:`open() <func-open>`.
26
27``request``
28 VIDIOC_ENUMSTD
29
30``argp``
31
32
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030033Description
Markus Heiser5377d912016-06-30 15:18:56 +020034===========
35
36To query the attributes of a video standard, especially a custom (driver
37defined) one, applications initialize the ``index`` field of struct
Mauro Carvalho Chehab2212ff22016-07-01 14:33:56 -030038:ref:`v4l2_standard <v4l2-standard>` and call the :ref:`VIDIOC_ENUMSTD`
Markus Heiser5377d912016-06-30 15:18:56 +020039ioctl with a pointer to this structure. Drivers fill the rest of the
Mauro Carvalho Chehabcdb4af02016-07-03 11:53:09 -030040structure or return an ``EINVAL`` error code when the index is out of
Markus Heiser5377d912016-06-30 15:18:56 +020041bounds. To enumerate all standards applications shall begin at index
Mauro Carvalho Chehabcdb4af02016-07-03 11:53:09 -030042zero, incrementing by one until the driver returns ``EINVAL``. Drivers may
Markus Heiser5377d912016-06-30 15:18:56 +020043enumerate a different set of standards after switching the video input
Mauro Carvalho Chehab48553072016-07-12 15:15:23 -030044or output. [#f1]_
Markus Heiser5377d912016-06-30 15:18:56 +020045
46
47.. _v4l2-standard:
48
Mauro Carvalho Chehab5bd4bb72016-08-17 08:14:19 -030049.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}|
50
Markus Heiser5377d912016-06-30 15:18:56 +020051.. flat-table:: struct v4l2_standard
52 :header-rows: 0
53 :stub-columns: 0
54 :widths: 1 1 2
55
56
57 - .. row 1
58
59 - __u32
60
61 - ``index``
62
63 - Number of the video standard, set by the application.
64
65 - .. row 2
66
67 - :ref:`v4l2_std_id <v4l2-std-id>`
68
69 - ``id``
70
71 - The bits in this field identify the standard as one of the common
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -030072 standards listed in :ref:`v4l2-std-id`, or if bits 32 to 63 are
73 set as custom standards. Multiple bits can be set if the hardware
74 does not distinguish between these standards, however separate
75 indices do not indicate the opposite. The ``id`` must be unique.
76 No other enumerated :ref:`struct v4l2_standard <v4l2-standard>` structure,
77 for this input or output anyway, can contain the same set of bits.
Markus Heiser5377d912016-06-30 15:18:56 +020078
79 - .. row 3
80
81 - __u8
82
Mauro Carvalho Chehab8968da92016-07-13 08:43:30 -030083 - ``name``\ [24]
Markus Heiser5377d912016-06-30 15:18:56 +020084
85 - Name of the standard, a NUL-terminated ASCII string, for example:
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -030086 "PAL-B/G", "NTSC Japan". This information is intended for the
87 user.
Markus Heiser5377d912016-06-30 15:18:56 +020088
89 - .. row 4
90
91 - struct :ref:`v4l2_fract <v4l2-fract>`
92
93 - ``frameperiod``
94
95 - The frame period (not field period) is numerator / denominator.
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -030096 For example M/NTSC has a frame period of 1001 / 30000 seconds.
Markus Heiser5377d912016-06-30 15:18:56 +020097
98 - .. row 5
99
100 - __u32
101
102 - ``framelines``
103
104 - Total lines per frame including blanking, e. g. 625 for B/PAL.
105
106 - .. row 6
107
108 - __u32
109
Mauro Carvalho Chehab8968da92016-07-13 08:43:30 -0300110 - ``reserved``\ [4]
Markus Heiser5377d912016-06-30 15:18:56 +0200111
112 - Reserved for future extensions. Drivers must set the array to
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300113 zero.
Markus Heiser5377d912016-06-30 15:18:56 +0200114
115
116
117.. _v4l2-fract:
118
Mauro Carvalho Chehab5bd4bb72016-08-17 08:14:19 -0300119.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}|
120
Markus Heiser5377d912016-06-30 15:18:56 +0200121.. flat-table:: struct v4l2_fract
122 :header-rows: 0
123 :stub-columns: 0
124 :widths: 1 1 2
125
126
127 - .. row 1
128
129 - __u32
130
131 - ``numerator``
132
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300133 -
Markus Heiser5377d912016-06-30 15:18:56 +0200134
135 - .. row 2
136
137 - __u32
138
139 - ``denominator``
140
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300141 -
Markus Heiser5377d912016-06-30 15:18:56 +0200142
143
144
145.. _v4l2-std-id:
146
Mauro Carvalho Chehab5bd4bb72016-08-17 08:14:19 -0300147.. tabularcolumns:: |p{4.4cm}|p{4.4cm}|p{8.7cm}|
148
Markus Heiser5377d912016-06-30 15:18:56 +0200149.. flat-table:: typedef v4l2_std_id
150 :header-rows: 0
151 :stub-columns: 0
152 :widths: 1 1 2
153
154
155 - .. row 1
156
157 - __u64
158
159 - ``v4l2_std_id``
160
161 - This type is a set, each bit representing another video standard
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300162 as listed below and in :ref:`video-standards`. The 32 most
163 significant bits are reserved for custom (driver defined) video
164 standards.
Markus Heiser5377d912016-06-30 15:18:56 +0200165
166
167
168.. code-block:: c
169
170 #define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001)
171 #define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002)
172 #define V4L2_STD_PAL_G ((v4l2_std_id)0x00000004)
173 #define V4L2_STD_PAL_H ((v4l2_std_id)0x00000008)
174 #define V4L2_STD_PAL_I ((v4l2_std_id)0x00000010)
175 #define V4L2_STD_PAL_D ((v4l2_std_id)0x00000020)
176 #define V4L2_STD_PAL_D1 ((v4l2_std_id)0x00000040)
177 #define V4L2_STD_PAL_K ((v4l2_std_id)0x00000080)
178
179 #define V4L2_STD_PAL_M ((v4l2_std_id)0x00000100)
180 #define V4L2_STD_PAL_N ((v4l2_std_id)0x00000200)
181 #define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400)
182 #define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800)
183
184``V4L2_STD_PAL_60`` is a hybrid standard with 525 lines, 60 Hz refresh
185rate, and PAL color modulation with a 4.43 MHz color subcarrier. Some
186PAL video recorders can play back NTSC tapes in this mode for display on
187a 50/60 Hz agnostic PAL TV.
188
189
190.. code-block:: c
191
192 #define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000)
193 #define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000)
194 #define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000)
195
196``V4L2_STD_NTSC_443`` is a hybrid standard with 525 lines, 60 Hz refresh
197rate, and NTSC color modulation with a 4.43 MHz color subcarrier.
198
199
200.. code-block:: c
201
202 #define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000)
203
204 #define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000)
205 #define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000)
206 #define V4L2_STD_SECAM_G ((v4l2_std_id)0x00040000)
207 #define V4L2_STD_SECAM_H ((v4l2_std_id)0x00080000)
208 #define V4L2_STD_SECAM_K ((v4l2_std_id)0x00100000)
209 #define V4L2_STD_SECAM_K1 ((v4l2_std_id)0x00200000)
210 #define V4L2_STD_SECAM_L ((v4l2_std_id)0x00400000)
211 #define V4L2_STD_SECAM_LC ((v4l2_std_id)0x00800000)
212
213 /* ATSC/HDTV */
214 #define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000)
215 #define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000)
216
217``V4L2_STD_ATSC_8_VSB`` and ``V4L2_STD_ATSC_16_VSB`` are U.S.
218terrestrial digital TV standards. Presently the V4L2 API does not
219support digital TV. See also the Linux DVB API at
220`https://linuxtv.org <https://linuxtv.org>`__.
221
222
223.. code-block:: c
224
225 #define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300226 V4L2_STD_PAL_B1 |
227 V4L2_STD_PAL_G)
Markus Heiser5377d912016-06-30 15:18:56 +0200228 #define V4L2_STD_B (V4L2_STD_PAL_B |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300229 V4L2_STD_PAL_B1 |
230 V4L2_STD_SECAM_B)
Markus Heiser5377d912016-06-30 15:18:56 +0200231 #define V4L2_STD_GH (V4L2_STD_PAL_G |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300232 V4L2_STD_PAL_H |
233 V4L2_STD_SECAM_G |
234 V4L2_STD_SECAM_H)
Markus Heiser5377d912016-06-30 15:18:56 +0200235 #define V4L2_STD_PAL_DK (V4L2_STD_PAL_D |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300236 V4L2_STD_PAL_D1 |
237 V4L2_STD_PAL_K)
Markus Heiser5377d912016-06-30 15:18:56 +0200238 #define V4L2_STD_PAL (V4L2_STD_PAL_BG |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300239 V4L2_STD_PAL_DK |
240 V4L2_STD_PAL_H |
241 V4L2_STD_PAL_I)
Markus Heiser5377d912016-06-30 15:18:56 +0200242 #define V4L2_STD_NTSC (V4L2_STD_NTSC_M |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300243 V4L2_STD_NTSC_M_JP |
244 V4L2_STD_NTSC_M_KR)
Markus Heiser5377d912016-06-30 15:18:56 +0200245 #define V4L2_STD_MN (V4L2_STD_PAL_M |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300246 V4L2_STD_PAL_N |
247 V4L2_STD_PAL_Nc |
248 V4L2_STD_NTSC)
Markus Heiser5377d912016-06-30 15:18:56 +0200249 #define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300250 V4L2_STD_SECAM_K |
251 V4L2_STD_SECAM_K1)
Markus Heiser5377d912016-06-30 15:18:56 +0200252 #define V4L2_STD_DK (V4L2_STD_PAL_DK |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300253 V4L2_STD_SECAM_DK)
Markus Heiser5377d912016-06-30 15:18:56 +0200254
255 #define V4L2_STD_SECAM (V4L2_STD_SECAM_B |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300256 V4L2_STD_SECAM_G |
257 V4L2_STD_SECAM_H |
258 V4L2_STD_SECAM_DK |
259 V4L2_STD_SECAM_L |
260 V4L2_STD_SECAM_LC)
Markus Heiser5377d912016-06-30 15:18:56 +0200261
262 #define V4L2_STD_525_60 (V4L2_STD_PAL_M |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300263 V4L2_STD_PAL_60 |
264 V4L2_STD_NTSC |
265 V4L2_STD_NTSC_443)
Markus Heiser5377d912016-06-30 15:18:56 +0200266 #define V4L2_STD_625_50 (V4L2_STD_PAL |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300267 V4L2_STD_PAL_N |
268 V4L2_STD_PAL_Nc |
269 V4L2_STD_SECAM)
Markus Heiser5377d912016-06-30 15:18:56 +0200270
271 #define V4L2_STD_UNKNOWN 0
272 #define V4L2_STD_ALL (V4L2_STD_525_60 |
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300273 V4L2_STD_625_50)
Markus Heiser5377d912016-06-30 15:18:56 +0200274
Mauro Carvalho Chehab2bff5522016-08-18 14:55:24 -0300275.. raw:: latex
276
277 \newline\newline\begin{adjustbox}{width=\columnwidth}
278
279.. NTSC/M PAL/M /N /B /D /H /I SECAM/B /D /K1 /L
280.. tabularcolumns:: |p{2.7cm}|p{2.6cm}|p{3.0cm}|p{3.2cm}|p{3.2cm}|p{2.2cm}|p{1.2cm}|p{3.2cm}|p{3.0cm}|p{2.0cm}|p{2.0cm}|p{2.0cm}|
Markus Heiser5377d912016-06-30 15:18:56 +0200281
282.. _video-standards:
283
Mauro Carvalho Chehabedec4f42016-08-15 13:05:05 -0300284.. flat-table:: Video Standards (based on :ref:`itu470`)
Markus Heiser5377d912016-06-30 15:18:56 +0200285 :header-rows: 1
286 :stub-columns: 0
287
288
289 - .. row 1
290
291 - Characteristics
292
Mauro Carvalho Chehab48553072016-07-12 15:15:23 -0300293 - M/NTSC [#f2]_
Markus Heiser5377d912016-06-30 15:18:56 +0200294
295 - M/PAL
296
Mauro Carvalho Chehab48553072016-07-12 15:15:23 -0300297 - N/PAL [#f3]_
Markus Heiser5377d912016-06-30 15:18:56 +0200298
299 - B, B1, G/PAL
300
301 - D, D1, K/PAL
302
303 - H/PAL
304
305 - I/PAL
306
307 - B, G/SECAM
308
309 - D, K/SECAM
310
311 - K1/SECAM
312
313 - L/SECAM
314
315 - .. row 2
316
317 - Frame lines
318
319 - :cspan:`1` 525
320
Mauro Carvalho Chehab2bff5522016-08-18 14:55:24 -0300321 - :cspan:`8` 625
Markus Heiser5377d912016-06-30 15:18:56 +0200322
323 - .. row 3
324
325 - Frame period (s)
326
327 - :cspan:`1` 1001/30000
328
Mauro Carvalho Chehab2bff5522016-08-18 14:55:24 -0300329 - :cspan:`8` 1/25
Markus Heiser5377d912016-06-30 15:18:56 +0200330
331 - .. row 4
332
333 - Chrominance sub-carrier frequency (Hz)
334
335 - 3579545 ± 10
336
337 - 3579611.49 ± 10
338
Mauro Carvalho Chehab2bff5522016-08-18 14:55:24 -0300339 - 4433618.75 ± 5
340
341 (3582056.25 ± 5)
Markus Heiser5377d912016-06-30 15:18:56 +0200342
343 - :cspan:`3` 4433618.75 ± 5
344
345 - 4433618.75 ± 1
346
Mauro Carvalho Chehab2bff5522016-08-18 14:55:24 -0300347 - :cspan:`2` f\ :sub:`OR` = 4406250 ± 2000,
348
349 f\ :sub:`OB` = 4250000 ± 2000
Markus Heiser5377d912016-06-30 15:18:56 +0200350
351 - .. row 5
352
353 - Nominal radio-frequency channel bandwidth (MHz)
354
355 - 6
356
357 - 6
358
359 - 6
360
361 - B: 7; B1, G: 8
362
363 - 8
364
365 - 8
366
367 - 8
368
369 - 8
370
371 - 8
372
373 - 8
374
375 - 8
376
377 - .. row 6
378
379 - Sound carrier relative to vision carrier (MHz)
380
Mauro Carvalho Chehab18759442016-08-15 13:37:54 -0300381 - 4.5
Markus Heiser5377d912016-06-30 15:18:56 +0200382
Mauro Carvalho Chehab18759442016-08-15 13:37:54 -0300383 - 4.5
Markus Heiser5377d912016-06-30 15:18:56 +0200384
Mauro Carvalho Chehab18759442016-08-15 13:37:54 -0300385 - 4.5
Markus Heiser5377d912016-06-30 15:18:56 +0200386
Mauro Carvalho Chehab18759442016-08-15 13:37:54 -0300387 - 5.5 ± 0.001 [#f4]_ [#f5]_ [#f6]_ [#f7]_
Markus Heiser5377d912016-06-30 15:18:56 +0200388
Mauro Carvalho Chehab18759442016-08-15 13:37:54 -0300389 - 6.5 ± 0.001
Markus Heiser5377d912016-06-30 15:18:56 +0200390
Mauro Carvalho Chehab18759442016-08-15 13:37:54 -0300391 - 5.5
Markus Heiser5377d912016-06-30 15:18:56 +0200392
Mauro Carvalho Chehab18759442016-08-15 13:37:54 -0300393 - 5.9996 ± 0.0005
Markus Heiser5377d912016-06-30 15:18:56 +0200394
Mauro Carvalho Chehab18759442016-08-15 13:37:54 -0300395 - 5.5 ± 0.001
Markus Heiser5377d912016-06-30 15:18:56 +0200396
Mauro Carvalho Chehab18759442016-08-15 13:37:54 -0300397 - 6.5 ± 0.001
Markus Heiser5377d912016-06-30 15:18:56 +0200398
Mauro Carvalho Chehab18759442016-08-15 13:37:54 -0300399 - 6.5
Markus Heiser5377d912016-06-30 15:18:56 +0200400
Mauro Carvalho Chehab18759442016-08-15 13:37:54 -0300401 - 6.5 [#f8]_
Markus Heiser5377d912016-06-30 15:18:56 +0200402
Mauro Carvalho Chehab2bff5522016-08-18 14:55:24 -0300403.. raw:: latex
404
405 \end{adjustbox}\newline\newline
406
407
Markus Heiser5377d912016-06-30 15:18:56 +0200408
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -0300409Return Value
Markus Heiser5377d912016-06-30 15:18:56 +0200410============
411
412On success 0 is returned, on error -1 and the ``errno`` variable is set
413appropriately. The generic error codes are described at the
414:ref:`Generic Error Codes <gen-errors>` chapter.
415
416EINVAL
417 The struct :ref:`v4l2_standard <v4l2-standard>` ``index`` is out
418 of bounds.
419
420ENODATA
421 Standard video timings are not supported for this input or output.
422
Mauro Carvalho Chehab48553072016-07-12 15:15:23 -0300423.. [#f1]
Markus Heiser5377d912016-06-30 15:18:56 +0200424 The supported standards may overlap and we need an unambiguous set to
Mauro Carvalho Chehab4e03cb72016-07-03 10:02:29 -0300425 find the current standard returned by :ref:`VIDIOC_G_STD <VIDIOC_G_STD>`.
Markus Heiser5377d912016-06-30 15:18:56 +0200426
Mauro Carvalho Chehab48553072016-07-12 15:15:23 -0300427.. [#f2]
Markus Heiser5377d912016-06-30 15:18:56 +0200428 Japan uses a standard similar to M/NTSC (V4L2_STD_NTSC_M_JP).
429
Mauro Carvalho Chehab48553072016-07-12 15:15:23 -0300430.. [#f3]
Markus Heiser5377d912016-06-30 15:18:56 +0200431 The values in brackets apply to the combination N/PAL a.k.a.
Mauro Carvalho Chehabeba9e912016-07-04 09:04:31 -0300432 N\ :sub:`C` used in Argentina (V4L2_STD_PAL_Nc).
Markus Heiser5377d912016-06-30 15:18:56 +0200433
Mauro Carvalho Chehab48553072016-07-12 15:15:23 -0300434.. [#f4]
Markus Heiser5377d912016-06-30 15:18:56 +0200435 In the Federal Republic of Germany, Austria, Italy, the Netherlands,
436 Slovakia and Switzerland a system of two sound carriers is used, the
437 frequency of the second carrier being 242.1875 kHz above the
438 frequency of the first sound carrier. For stereophonic sound
439 transmissions a similar system is used in Australia.
440
Mauro Carvalho Chehab48553072016-07-12 15:15:23 -0300441.. [#f5]
Markus Heiser5377d912016-06-30 15:18:56 +0200442 New Zealand uses a sound carrier displaced 5.4996 ± 0.0005 MHz from
443 the vision carrier.
444
Mauro Carvalho Chehab48553072016-07-12 15:15:23 -0300445.. [#f6]
Markus Heiser5377d912016-06-30 15:18:56 +0200446 In Denmark, Finland, New Zealand, Sweden and Spain a system of two
447 sound carriers is used. In Iceland, Norway and Poland the same system
448 is being introduced. The second carrier is 5.85 MHz above the vision
449 carrier and is DQPSK modulated with 728 kbit/s sound and data
450 multiplex. (NICAM system)
451
Mauro Carvalho Chehab48553072016-07-12 15:15:23 -0300452.. [#f7]
Markus Heiser5377d912016-06-30 15:18:56 +0200453 In the United Kingdom, a system of two sound carriers is used. The
454 second sound carrier is 6.552 MHz above the vision carrier and is
455 DQPSK modulated with a 728 kbit/s sound and data multiplex able to
456 carry two sound channels. (NICAM system)
457
Mauro Carvalho Chehab48553072016-07-12 15:15:23 -0300458.. [#f8]
Markus Heiser5377d912016-06-30 15:18:56 +0200459 In France, a digital carrier 5.85 MHz away from the vision carrier
460 may be used in addition to the main sound carrier. It is modulated in
461 differentially encoded QPSK with a 728 kbit/s sound and data
462 multiplexer capable of carrying two sound channels. (NICAM system)