← Documents Documentation/admin-guide/media/vivid.rst GitHub 원문 ↗

Linux 6.18.37 · Administration / Media

The Virtual Video Test Driver (vivid)

V4L2의 video, VBI, radio, SDR, metadata, touch, overlay와 오류 경로를 실제 hardware 없이 검증하는 vivid 가상 드라이버를 설명합니다.

Source pathDocumentation/admin-guide/media/vivid.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

vivid 검증 영역

vivid.rst:1-1361

vivid는 단순 영상 생성기를 넘어 node 구성, timing, colorspace, field, buffer I/O, control event, loop, CEC, 고장 복구까지 V4L2 application의 전체 동작면을 재현합니다.

영역가상 장치·인터페이스주요 검증
Videowebcam, TV, S-Video, HDMI capture/outputtiming, colorspace, field, EDID 시험
VBIraw/sliced capture/outputCC, XDS, WSS, teletext 생성과 loop
RadioFM/AM/SW receiver/transmitter, RDS주파수·신호 세기·오류·seek 시험
SDRADC/RF tuner1 kHz I/Q tone 생성
MetadataUVC capture/outputPTS/SCR 및 영상 control 전달
Touch8종 touch patterntap, move, zoom, palm, 16-point 시험
Processingcrop, compose, scale, overlay조합별 V4L2 API 검증
Faultsbuffer/ioctl/stream/disconnect injectionapplication 복구 경로 검증

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 .. SPDX-License-Identifier: GPL-2.0
2
3 The Virtual Video Test Driver (vivid)
4 =====================================
5
6 This driver emulates video4linux hardware of various types: video capture, video
7 output, vbi capture and output, metadata capture and output, radio receivers and
8 transmitters, touch capture and a software defined radio receiver. In addition a
9 simple framebuffer device is available for testing capture and output overlays.
10
11 Up to 64 vivid instances can be created, each with up to 16 inputs and 16 outputs.
12
13 Each input can be a webcam, TV capture device, S-Video capture device or an HDMI
14 capture device. Each output can be an S-Video output device or an HDMI output
15 device.
16
17 These inputs and outputs act exactly as a real hardware device would behave. This
18 allows you to use this driver as a test input for application development, since
19 you can test the various features without requiring special hardware.
20
21 This document describes the features implemented by this driver:
22
23 - Support for read()/write(), MMAP, USERPTR and DMABUF streaming I/O.
24 - A large list of test patterns and variations thereof
25 - Working brightness, contrast, saturation and hue controls
26 - Support for the alpha color component
27 - Full colorspace support, including limited/full RGB range
28 - All possible control types are present
29 - Support for various pixel aspect ratios and video aspect ratios
30 - Error injection to test what happens if errors occur
31 - Supports crop/compose/scale in any combination for both input and output
32 - Can emulate up to 4K resolutions
33 - All Field settings are supported for testing interlaced capturing
34 - Supports all standard YUV and RGB formats, including two multiplanar YUV formats
35 - Raw and Sliced VBI capture and output support
36 - Radio receiver and transmitter support, including RDS support
37 - Software defined radio (SDR) support
38 - Capture and output overlay support
39 - Metadata capture and output support
40 - Touch capture support
41
42 These features will be described in more detail below.
43
44 Configuring the driver
45 ----------------------
46
47 By default the driver will create a single instance that has a video capture
48 device with webcam, TV, S-Video and HDMI inputs, a video output device with
49 S-Video and HDMI outputs, one vbi capture device, one vbi output device, one
50 radio receiver device, one radio transmitter device and one SDR device.
51
52 The number of instances, devices, video inputs and outputs and their types are
53 all configurable using the following module options:
54
55 - n_devs:
56
57 number of driver instances to create. By default set to 1. Up to 64
58 instances can be created.
59
60 - node_types:
61
62 which devices should each driver instance create. An array of
63 hexadecimal values, one for each instance. The default is 0xe1d3d.
64 Each value is a bitmask with the following meaning:
65
66 - bit 0: Video Capture node
67 - bit 2-3: VBI Capture node: 0 = none, 1 = raw vbi, 2 = sliced vbi, 3 = both
68 - bit 4: Radio Receiver node
69 - bit 5: Software Defined Radio Receiver node
70 - bit 8: Video Output node
71 - bit 10-11: VBI Output node: 0 = none, 1 = raw vbi, 2 = sliced vbi, 3 = both
72 - bit 12: Radio Transmitter node
73 - bit 16: Framebuffer for testing overlays
74 - bit 17: Metadata Capture node
75 - bit 18: Metadata Output node
76 - bit 19: Touch Capture node
77
78 So to create four instances, the first two with just one video capture
79 device, the second two with just one video output device you would pass
80 these module options to vivid:
81
82 .. code-block:: none
83
84 n_devs=4 node_types=0x1,0x1,0x100,0x100
85
86 - num_inputs:
87
88 the number of inputs, one for each instance. By default 4 inputs
89 are created for each video capture device. At most 16 inputs can be created,
90 and there must be at least one.
91
92 - input_types:
93
94 the input types for each instance, the default is 0xe4. This defines
95 what the type of each input is when the inputs are created for each driver
96 instance. This is a hexadecimal value with up to 16 pairs of bits, each
97 pair gives the type and bits 0-1 map to input 0, bits 2-3 map to input 1,
98 30-31 map to input 15. Each pair of bits has the following meaning:
99
100 - 00: this is a webcam input
101 - 01: this is a TV tuner input
102 - 10: this is an S-Video input
103 - 11: this is an HDMI input
104
105 So to create a video capture device with 8 inputs where input 0 is a TV
106 tuner, inputs 1-3 are S-Video inputs and inputs 4-7 are HDMI inputs you
107 would use the following module options:
108
109 .. code-block:: none
110
111 num_inputs=8 input_types=0xffa9
112
113 - num_outputs:
114
115 the number of outputs, one for each instance. By default 2 outputs
116 are created for each video output device. At most 16 outputs can be
117 created, and there must be at least one.
118
119 - output_types:
120
121 the output types for each instance, the default is 0x02. This defines
122 what the type of each output is when the outputs are created for each
123 driver instance. This is a hexadecimal value with up to 16 bits, each bit
124 gives the type and bit 0 maps to output 0, bit 1 maps to output 1, bit
125 15 maps to output 15. The meaning of each bit is as follows:
126
127 - 0: this is an S-Video output
128 - 1: this is an HDMI output
129
130 So to create a video output device with 8 outputs where outputs 0-3 are
131 S-Video outputs and outputs 4-7 are HDMI outputs you would use the
132 following module options:
133
134 .. code-block:: none
135
136 num_outputs=8 output_types=0xf0
137
138 - vid_cap_nr:
139
140 give the desired videoX start number for each video capture device.
141 The default is -1 which will just take the first free number. This allows
142 you to map capture video nodes to specific videoX device nodes. Example:
143
144 .. code-block:: none
145
146 n_devs=4 vid_cap_nr=2,4,6,8
147
148 This will attempt to assign /dev/video2 for the video capture device of
149 the first vivid instance, video4 for the next up to video8 for the last
150 instance. If it can't succeed, then it will just take the next free
151 number.
152
153 - vid_out_nr:
154
155 give the desired videoX start number for each video output device.
156 The default is -1 which will just take the first free number.
157
158 - vbi_cap_nr:
159
160 give the desired vbiX start number for each vbi capture device.
161 The default is -1 which will just take the first free number.
162
163 - vbi_out_nr:
164
165 give the desired vbiX start number for each vbi output device.
166 The default is -1 which will just take the first free number.
167
168 - radio_rx_nr:
169
170 give the desired radioX start number for each radio receiver device.
171 The default is -1 which will just take the first free number.
172
173 - radio_tx_nr:
174
175 give the desired radioX start number for each radio transmitter
176 device. The default is -1 which will just take the first free number.
177
178 - sdr_cap_nr:
179
180 give the desired swradioX start number for each SDR capture device.
181 The default is -1 which will just take the first free number.
182
183 - meta_cap_nr:
184
185 give the desired videoX start number for each metadata capture device.
186 The default is -1 which will just take the first free number.
187
188 - meta_out_nr:
189
190 give the desired videoX start number for each metadata output device.
191 The default is -1 which will just take the first free number.
192
193 - touch_cap_nr:
194
195 give the desired v4l-touchX start number for each touch capture device.
196 The default is -1 which will just take the first free number.
197
198 - ccs_cap_mode:
199
200 specify the allowed video capture crop/compose/scaling combination
201 for each driver instance. Video capture devices can have any combination
202 of cropping, composing and scaling capabilities and this will tell the
203 vivid driver which of those is should emulate. By default the user can
204 select this through controls.
205
206 The value is either -1 (controlled by the user) or a set of three bits,
207 each enabling (1) or disabling (0) one of the features:
208
209 - bit 0:
210
211 Enable crop support. Cropping will take only part of the
212 incoming picture.
213 - bit 1:
214
215 Enable compose support. Composing will copy the incoming
216 picture into a larger buffer.
217
218 - bit 2:
219
220 Enable scaling support. Scaling can scale the incoming
221 picture. The scaler of the vivid driver can enlarge up
222 or down to four times the original size. The scaler is
223 very simple and low-quality. Simplicity and speed were
224 key, not quality.
225
226 Note that this value is ignored by webcam inputs: those enumerate
227 discrete framesizes and that is incompatible with cropping, composing
228 or scaling.
229
230 - ccs_out_mode:
231
232 specify the allowed video output crop/compose/scaling combination
233 for each driver instance. Video output devices can have any combination
234 of cropping, composing and scaling capabilities and this will tell the
235 vivid driver which of those is should emulate. By default the user can
236 select this through controls.
237
238 The value is either -1 (controlled by the user) or a set of three bits,
239 each enabling (1) or disabling (0) one of the features:
240
241 - bit 0:
242
243 Enable crop support. Cropping will take only part of the
244 outgoing buffer.
245
246 - bit 1:
247
248 Enable compose support. Composing will copy the incoming
249 buffer into a larger picture frame.
250
251 - bit 2:
252
253 Enable scaling support. Scaling can scale the incoming
254 buffer. The scaler of the vivid driver can enlarge up
255 or down to four times the original size. The scaler is
256 very simple and low-quality. Simplicity and speed were
257 key, not quality.
258
259 - multiplanar:
260
261 select whether each device instance supports multi-planar formats,
262 and thus the V4L2 multi-planar API. By default device instances are
263 single-planar.
264
265 This module option can override that for each instance. Values are:
266
267 - 1: this is a single-planar instance.
268 - 2: this is a multi-planar instance.
269
270 - vivid_debug:
271
272 enable driver debugging info
273
274 - no_error_inj:
275
276 if set disable the error injecting controls. This option is
277 needed in order to run a tool like v4l2-compliance. Tools like that
278 exercise all controls including a control like 'Disconnect' which
279 emulates a USB disconnect, making the device inaccessible and so
280 all tests that v4l2-compliance is doing will fail afterwards.
281
282 There may be other situations as well where you want to disable the
283 error injection support of vivid. When this option is set, then the
284 controls that select crop, compose and scale behavior are also
285 removed. Unless overridden by ccs_cap_mode and/or ccs_out_mode the
286 will default to enabling crop, compose and scaling.
287
288 - allocators:
289
290 memory allocator selection, default is 0. It specifies the way buffers
291 will be allocated.
292
293 - 0: vmalloc
294 - 1: dma-contig
295
296 - cache_hints:
297
298 specifies if the device should set queues' user-space cache and memory
299 consistency hint capability (V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS).
300 The hints are valid only when using MMAP streaming I/O. Default is 0.
301
302 - 0: forbid hints
303 - 1: allow hints
304
305 - supports_requests:
306
307 specifies if the device should support the Request API. There are
308 three possible values, default is 1:
309
310 - 0: no request
311 - 1: supports requests
312 - 2: requires requests
313
314 Taken together, all these module options allow you to precisely customize
315 the driver behavior and test your application with all sorts of permutations.
316 It is also very suitable to emulate hardware that is not yet available, e.g.
317 when developing software for a new upcoming device.
318
319
320 Video Capture
321 -------------
322
323 This is probably the most frequently used feature. The video capture device
324 can be configured by using the module options num_inputs, input_types and
325 ccs_cap_mode (see "Configuring the driver" for more detailed information),
326 but by default four inputs are configured: a webcam, a TV tuner, an S-Video
327 and an HDMI input, one input for each input type. Those are described in more
328 detail below.
329
330 Special attention has been given to the rate at which new frames become
331 available. The jitter will be around 1 jiffy (that depends on the HZ
332 configuration of your kernel, so usually 1/100, 1/250 or 1/1000 of a second),
333 but the long-term behavior is exactly following the framerate. So a
334 framerate of 59.94 Hz is really different from 60 Hz. If the framerate
335 exceeds your kernel's HZ value, then you will get dropped frames, but the
336 frame/field sequence counting will keep track of that so the sequence
337 count will skip whenever frames are dropped.
338
339
340 Webcam Input
341 ~~~~~~~~~~~~
342
343 The webcam input supports three framesizes: 320x180, 640x360 and 1280x720. It
344 supports frames per second settings of 10, 15, 25, 30, 50 and 60 fps. Which ones
345 are available depends on the chosen framesize: the larger the framesize, the
346 lower the maximum frames per second.
347
348 The initially selected colorspace when you switch to the webcam input will be
349 sRGB.
350
351
352 TV and S-Video Inputs
353 ~~~~~~~~~~~~~~~~~~~~~
354
355 The only difference between the TV and S-Video input is that the TV has a
356 tuner. Otherwise they behave identically.
357
358 These inputs support audio inputs as well: one TV and one Line-In. They
359 both support all TV standards. If the standard is queried, then the Vivid
360 controls 'Standard Signal Mode' and 'Standard' determine what
361 the result will be.
362
363 These inputs support all combinations of the field setting. Special care has
364 been taken to faithfully reproduce how fields are handled for the different
365 TV standards. This is particularly noticeable when generating a horizontally
366 moving image so the temporal effect of using interlaced formats becomes clearly
367 visible. For 50 Hz standards the top field is the oldest and the bottom field
368 is the newest in time. For 60 Hz standards that is reversed: the bottom field
369 is the oldest and the top field is the newest in time.
370
371 When you start capturing in V4L2_FIELD_ALTERNATE mode the first buffer will
372 contain the top field for 50 Hz standards and the bottom field for 60 Hz
373 standards. This is what capture hardware does as well.
374
375 Finally, for PAL/SECAM standards the first half of the top line contains noise.
376 This simulates the Wide Screen Signal that is commonly placed there.
377
378 The initially selected colorspace when you switch to the TV or S-Video input
379 will be SMPTE-170M.
380
381 The pixel aspect ratio will depend on the TV standard. The video aspect ratio
382 can be selected through the 'Standard Aspect Ratio' Vivid control.
383 Choices are '4x3', '16x9' which will give letterboxed widescreen video and
384 '16x9 Anamorphic' which will give full screen squashed anamorphic widescreen
385 video that will need to be scaled accordingly.
386
387 The TV 'tuner' supports a frequency range of 44-958 MHz. Channels are available
388 every 6 MHz, starting from 49.25 MHz. For each channel the generated image
389 will be in color for the +/- 0.25 MHz around it, and in grayscale for
390 +/- 1 MHz around the channel. Beyond that it is just noise. The VIDIOC_G_TUNER
391 ioctl will return 100% signal strength for +/- 0.25 MHz and 50% for +/- 1 MHz.
392 It will also return correct afc values to show whether the frequency is too
393 low or too high.
394
395 The audio subchannels that are returned are MONO for the +/- 1 MHz range around
396 a valid channel frequency. When the frequency is within +/- 0.25 MHz of the
397 channel it will return either MONO, STEREO, either MONO | SAP (for NTSC) or
398 LANG1 | LANG2 (for others), or STEREO | SAP.
399
400 Which one is returned depends on the chosen channel, each next valid channel
401 will cycle through the possible audio subchannel combinations. This allows
402 you to test the various combinations by just switching channels..
403
404 Finally, for these inputs the v4l2_timecode struct is filled in the
405 dequeued v4l2_buffer struct.
406
407
408 HDMI Input
409 ~~~~~~~~~~
410
411 The HDMI inputs supports all CEA-861 and DMT timings, both progressive and
412 interlaced, for pixelclock frequencies between 25 and 600 MHz. The field
413 mode for interlaced formats is always V4L2_FIELD_ALTERNATE. For HDMI the
414 field order is always top field first, and when you start capturing an
415 interlaced format you will receive the top field first.
416
417 The initially selected colorspace when you switch to the HDMI input or
418 select an HDMI timing is based on the format resolution: for resolutions
419 less than or equal to 720x576 the colorspace is set to SMPTE-170M, for
420 others it is set to REC-709 (CEA-861 timings) or sRGB (VESA DMT timings).
421
422 The pixel aspect ratio will depend on the HDMI timing: for 720x480 is it
423 set as for the NTSC TV standard, for 720x576 it is set as for the PAL TV
424 standard, and for all others a 1:1 pixel aspect ratio is returned.
425
426 The video aspect ratio can be selected through the 'DV Timings Aspect Ratio'
427 Vivid control. Choices are 'Source Width x Height' (just use the
428 same ratio as the chosen format), '4x3' or '16x9', either of which can
429 result in pillarboxed or letterboxed video.
430
431 For HDMI inputs it is possible to set the EDID. By default a simple EDID
432 is provided. You can only set the EDID for HDMI inputs. Internally, however,
433 the EDID is shared between all HDMI inputs.
434
435 No interpretation is done of the EDID data with the exception of the
436 physical address. See the CEC section for more details.
437
438 There is a maximum of 15 HDMI inputs (if there are more, then they will be
439 reduced to 15) since that's the limitation of the EDID physical address.
440
441
442 Video Output
443 ------------
444
445 The video output device can be configured by using the module options
446 num_outputs, output_types and ccs_out_mode (see "Configuring the driver"
447 for more detailed information), but by default two outputs are configured:
448 an S-Video and an HDMI input, one output for each output type. Those are
449 described in more detail below.
450
451 Like with video capture the framerate is also exact in the long term.
452
453
454 S-Video Output
455 ~~~~~~~~~~~~~~
456
457 This output supports audio outputs as well: "Line-Out 1" and "Line-Out 2".
458 The S-Video output supports all TV standards.
459
460 This output supports all combinations of the field setting.
461
462 The initially selected colorspace when you switch to the TV or S-Video input
463 will be SMPTE-170M.
464
465
466 HDMI Output
467 ~~~~~~~~~~~
468
469 The HDMI output supports all CEA-861 and DMT timings, both progressive and
470 interlaced, for pixelclock frequencies between 25 and 600 MHz. The field
471 mode for interlaced formats is always V4L2_FIELD_ALTERNATE.
472
473 The initially selected colorspace when you switch to the HDMI output or
474 select an HDMI timing is based on the format resolution: for resolutions
475 less than or equal to 720x576 the colorspace is set to SMPTE-170M, for
476 others it is set to REC-709 (CEA-861 timings) or sRGB (VESA DMT timings).
477
478 The pixel aspect ratio will depend on the HDMI timing: for 720x480 is it
479 set as for the NTSC TV standard, for 720x576 it is set as for the PAL TV
480 standard, and for all others a 1:1 pixel aspect ratio is returned.
481
482 An HDMI output has a valid EDID which can be obtained through VIDIOC_G_EDID.
483
484 There is a maximum of 15 HDMI outputs (if there are more, then they will be
485 reduced to 15) since that's the limitation of the EDID physical address. See
486 also the CEC section for more details.
487
488 VBI Capture
489 -----------
490
491 There are three types of VBI capture devices: those that only support raw
492 (undecoded) VBI, those that only support sliced (decoded) VBI and those that
493 support both. This is determined by the node_types module option. In all
494 cases the driver will generate valid VBI data: for 60 Hz standards it will
495 generate Closed Caption and XDS data. The closed caption stream will
496 alternate between "Hello world!" and "Closed captions test" every second.
497 The XDS stream will give the current time once a minute. For 50 Hz standards
498 it will generate the Wide Screen Signal which is based on the actual Video
499 Aspect Ratio control setting and teletext pages 100-159, one page per frame.
500
501 The VBI device will only work for the S-Video and TV inputs, it will give
502 back an error if the current input is a webcam or HDMI.
503
504
505 VBI Output
506 ----------
507
508 There are three types of VBI output devices: those that only support raw
509 (undecoded) VBI, those that only support sliced (decoded) VBI and those that
510 support both. This is determined by the node_types module option.
511
512 The sliced VBI output supports the Wide Screen Signal and the teletext signal
513 for 50 Hz standards and Closed Captioning + XDS for 60 Hz standards.
514
515 The VBI device will only work for the S-Video output, it will give
516 back an error if the current output is HDMI.
517
518
519 Radio Receiver
520 --------------
521
522 The radio receiver emulates an FM/AM/SW receiver. The FM band also supports RDS.
523 The frequency ranges are:
524
525 - FM: 64 MHz - 108 MHz
526 - AM: 520 kHz - 1710 kHz
527 - SW: 2300 kHz - 26.1 MHz
528
529 Valid channels are emulated every 1 MHz for FM and every 100 kHz for AM and SW.
530 The signal strength decreases the further the frequency is from the valid
531 frequency until it becomes 0% at +/- 50 kHz (FM) or 5 kHz (AM/SW) from the
532 ideal frequency. The initial frequency when the driver is loaded is set to
533 95 MHz.
534
535 The FM receiver supports RDS as well, both using 'Block I/O' and 'Controls'
536 modes. In the 'Controls' mode the RDS information is stored in read-only
537 controls. These controls are updated every time the frequency is changed,
538 or when the tuner status is requested. The Block I/O method uses the read()
539 interface to pass the RDS blocks on to the application for decoding.
540
541 The RDS signal is 'detected' for +/- 12.5 kHz around the channel frequency,
542 and the further the frequency is away from the valid frequency the more RDS
543 errors are randomly introduced into the block I/O stream, up to 50% of all
544 blocks if you are +/- 12.5 kHz from the channel frequency. All four errors
545 can occur in equal proportions: blocks marked 'CORRECTED', blocks marked
546 'ERROR', blocks marked 'INVALID' and dropped blocks.
547
548 The generated RDS stream contains all the standard fields contained in a
549 0B group, and also radio text and the current time.
550
551 The receiver supports HW frequency seek, either in Bounded mode, Wrap Around
552 mode or both, which is configurable with the "Radio HW Seek Mode" control.
553
554
555 Radio Transmitter
556 -----------------
557
558 The radio transmitter emulates an FM/AM/SW transmitter. The FM band also supports RDS.
559 The frequency ranges are:
560
561 - FM: 64 MHz - 108 MHz
562 - AM: 520 kHz - 1710 kHz
563 - SW: 2300 kHz - 26.1 MHz
564
565 The initial frequency when the driver is loaded is 95.5 MHz.
566
567 The FM transmitter supports RDS as well, both using 'Block I/O' and 'Controls'
568 modes. In the 'Controls' mode the transmitted RDS information is configured
569 using controls, and in 'Block I/O' mode the blocks are passed to the driver
570 using write().
571
572
573 Software Defined Radio Receiver
574 -------------------------------
575
576 The SDR receiver has three frequency bands for the ADC tuner:
577
578 - 300 kHz
579 - 900 kHz - 2800 kHz
580 - 3200 kHz
581
582 The RF tuner supports 50 MHz - 2000 MHz.
583
584 The generated data contains the In-phase and Quadrature components of a
585 1 kHz tone that has an amplitude of sqrt(2).
586
587
588 Metadata Capture
589 ----------------
590
591 The Metadata capture generates UVC format metadata. The PTS and SCR are
592 transmitted based on the values set in vivid controls.
593
594 The Metadata device will only work for the Webcam input, it will give
595 back an error for all other inputs.
596
597
598 Metadata Output
599 ---------------
600
601 The Metadata output can be used to set brightness, contrast, saturation and hue.
602
603 The Metadata device will only work for the Webcam output, it will give
604 back an error for all other outputs.
605
606
607 Touch Capture
608 -------------
609
610 The Touch capture generates touch patterns simulating single tap, double tap,
611 triple tap, move from left to right, zoom in, zoom out, palm press (simulating
612 a large area being pressed on a touchpad), and simulating 16 simultaneous
613 touch points.
614
615 Controls
616 --------
617
618 Different devices support different controls. The sections below will describe
619 each control and which devices support them.
620
621
622 User Controls - Test Controls
623 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
624
625 The Button, Boolean, Integer 32 Bits, Integer 64 Bits, Menu, String, Bitmask and
626 Integer Menu are controls that represent all possible control types. The Menu
627 control and the Integer Menu control both have 'holes' in their menu list,
628 meaning that one or more menu items return EINVAL when VIDIOC_QUERYMENU is called.
629 Both menu controls also have a non-zero minimum control value. These features
630 allow you to check if your application can handle such things correctly.
631 These controls are supported for every device type.
632
633
634 User Controls - Video Capture
635 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
636
637 The following controls are specific to video capture.
638
639 The Brightness, Contrast, Saturation and Hue controls actually work and are
640 standard. There is one special feature with the Brightness control: each
641 video input has its own brightness value, so changing input will restore
642 the brightness for that input. In addition, each video input uses a different
643 brightness range (minimum and maximum control values). Switching inputs will
644 cause a control event to be sent with the V4L2_EVENT_CTRL_CH_RANGE flag set.
645 This allows you to test controls that can change their range.
646
647 The 'Gain, Automatic' and Gain controls can be used to test volatile controls:
648 if 'Gain, Automatic' is set, then the Gain control is volatile and changes
649 constantly. If 'Gain, Automatic' is cleared, then the Gain control is a normal
650 control.
651
652 The 'Horizontal Flip' and 'Vertical Flip' controls can be used to flip the
653 image. These combine with the 'Sensor Flipped Horizontally/Vertically' Vivid
654 controls.
655
656 The 'Alpha Component' control can be used to set the alpha component for
657 formats containing an alpha channel.
658
659
660 User Controls - Audio
661 ~~~~~~~~~~~~~~~~~~~~~
662
663 The following controls are specific to video capture and output and radio
664 receivers and transmitters.
665
666 The 'Volume' and 'Mute' audio controls are typical for such devices to
667 control the volume and mute the audio. They don't actually do anything in
668 the vivid driver.
669
670
671 Vivid Controls
672 ~~~~~~~~~~~~~~
673
674 These vivid custom controls control the image generation, error injection, etc.
675
676
677 Test Pattern Controls
678 ^^^^^^^^^^^^^^^^^^^^^
679
680 The Test Pattern Controls are all specific to video capture.
681
682 - Test Pattern:
683
684 selects which test pattern to use. Use the CSC Colorbar for
685 testing colorspace conversions: the colors used in that test pattern
686 map to valid colors in all colorspaces. The colorspace conversion
687 is disabled for the other test patterns.
688
689 - OSD Text Mode:
690
691 selects whether the text superimposed on the
692 test pattern should be shown, and if so, whether only counters should
693 be displayed or the full text.
694
695 - Horizontal Movement:
696
697 selects whether the test pattern should
698 move to the left or right and at what speed.
699
700 - Vertical Movement:
701
702 does the same for the vertical direction.
703
704 - Show Border:
705
706 show a two-pixel wide border at the edge of the actual image,
707 excluding letter or pillarboxing.
708
709 - Show Square:
710
711 show a square in the middle of the image. If the image is
712 displayed with the correct pixel and image aspect ratio corrections,
713 then the width and height of the square on the monitor should be
714 the same.
715
716 - Insert SAV Code in Image:
717
718 adds a SAV (Start of Active Video) code to the image.
719 This can be used to check if such codes in the image are inadvertently
720 interpreted instead of being ignored.
721
722 - Insert EAV Code in Image:
723
724 does the same for the EAV (End of Active Video) code.
725
726 - Insert Video Guard Band
727
728 adds 4 columns of pixels with the HDMI Video Guard Band code at the
729 left hand side of the image. This only works with 3 or 4 byte RGB pixel
730 formats. The RGB pixel value 0xab/0x55/0xab turns out to be equivalent
731 to the HDMI Video Guard Band code that precedes each active video line
732 (see section 5.2.2.1 in the HDMI 1.3 Specification). To test if a video
733 receiver has correct HDMI Video Guard Band processing, enable this
734 control and then move the image to the left hand side of the screen.
735 That will result in video lines that start with multiple pixels that
736 have the same value as the Video Guard Band that precedes them.
737 Receivers that will just keep skipping Video Guard Band values will
738 now fail and either loose sync or these video lines will shift.
739
740
741 Capture Feature Selection Controls
742 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
743
744 These controls are all specific to video capture.
745
746 - Sensor Flipped Horizontally:
747
748 the image is flipped horizontally and the
749 V4L2_IN_ST_HFLIP input status flag is set. This emulates the case where
750 a sensor is for example mounted upside down.
751
752 - Sensor Flipped Vertically:
753
754 the image is flipped vertically and the
755 V4L2_IN_ST_VFLIP input status flag is set. This emulates the case where
756 a sensor is for example mounted upside down.
757
758 - Standard Aspect Ratio:
759
760 selects if the image aspect ratio as used for the TV or
761 S-Video input should be 4x3, 16x9 or anamorphic widescreen. This may
762 introduce letterboxing.
763
764 - DV Timings Aspect Ratio:
765
766 selects if the image aspect ratio as used for the HDMI
767 input should be the same as the source width and height ratio, or if
768 it should be 4x3 or 16x9. This may introduce letter or pillarboxing.
769
770 - Timestamp Source:
771
772 selects when the timestamp for each buffer is taken.
773
774 - Colorspace:
775
776 selects which colorspace should be used when generating the image.
777 This only applies if the CSC Colorbar test pattern is selected,
778 otherwise the test pattern will go through unconverted.
779 This behavior is also what you want, since a 75% Colorbar
780 should really have 75% signal intensity and should not be affected
781 by colorspace conversions.
782
783 Changing the colorspace will result in the V4L2_EVENT_SOURCE_CHANGE
784 to be sent since it emulates a detected colorspace change.
785
786 - Transfer Function:
787
788 selects which colorspace transfer function should be used when
789 generating an image. This only applies if the CSC Colorbar test pattern is
790 selected, otherwise the test pattern will go through unconverted.
791 This behavior is also what you want, since a 75% Colorbar
792 should really have 75% signal intensity and should not be affected
793 by colorspace conversions.
794
795 Changing the transfer function will result in the V4L2_EVENT_SOURCE_CHANGE
796 to be sent since it emulates a detected colorspace change.
797
798 - Y'CbCr Encoding:
799
800 selects which Y'CbCr encoding should be used when generating
801 a Y'CbCr image. This only applies if the format is set to a Y'CbCr format
802 as opposed to an RGB format.
803
804 Changing the Y'CbCr encoding will result in the V4L2_EVENT_SOURCE_CHANGE
805 to be sent since it emulates a detected colorspace change.
806
807 - Quantization:
808
809 selects which quantization should be used for the RGB or Y'CbCr
810 encoding when generating the test pattern.
811
812 Changing the quantization will result in the V4L2_EVENT_SOURCE_CHANGE
813 to be sent since it emulates a detected colorspace change.
814
815 - Limited RGB Range (16-235):
816
817 selects if the RGB range of the HDMI source should
818 be limited or full range. This combines with the Digital Video 'Rx RGB
819 Quantization Range' control and can be used to test what happens if
820 a source provides you with the wrong quantization range information.
821 See the description of that control for more details.
822
823 - Apply Alpha To Red Only:
824
825 apply the alpha channel as set by the 'Alpha Component'
826 user control to the red color of the test pattern only.
827
828 - Enable Capture Cropping:
829
830 enables crop support. This control is only present if
831 the ccs_cap_mode module option is set to the default value of -1 and if
832 the no_error_inj module option is set to 0 (the default).
833
834 - Enable Capture Composing:
835
836 enables composing support. This control is only
837 present if the ccs_cap_mode module option is set to the default value of
838 -1 and if the no_error_inj module option is set to 0 (the default).
839
840 - Enable Capture Scaler:
841
842 enables support for a scaler (maximum 4 times upscaling
843 and downscaling). This control is only present if the ccs_cap_mode
844 module option is set to the default value of -1 and if the no_error_inj
845 module option is set to 0 (the default).
846
847 - Maximum EDID Blocks:
848
849 determines how many EDID blocks the driver supports.
850 Note that the vivid driver does not actually interpret new EDID
851 data, it just stores it. It allows for up to 256 EDID blocks
852 which is the maximum supported by the standard.
853
854 - Fill Percentage of Frame:
855
856 can be used to draw only the top X percent
857 of the image. Since each frame has to be drawn by the driver, this
858 demands a lot of the CPU. For large resolutions this becomes
859 problematic. By drawing only part of the image this CPU load can
860 be reduced.
861
862
863 Output Feature Selection Controls
864 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
865
866 These controls are all specific to video output.
867
868 - Enable Output Cropping:
869
870 enables crop support. This control is only present if
871 the ccs_out_mode module option is set to the default value of -1 and if
872 the no_error_inj module option is set to 0 (the default).
873
874 - Enable Output Composing:
875
876 enables composing support. This control is only
877 present if the ccs_out_mode module option is set to the default value of
878 -1 and if the no_error_inj module option is set to 0 (the default).
879
880 - Enable Output Scaler:
881
882 enables support for a scaler (maximum 4 times upscaling
883 and downscaling). This control is only present if the ccs_out_mode
884 module option is set to the default value of -1 and if the no_error_inj
885 module option is set to 0 (the default).
886
887
888 Error Injection Controls
889 ^^^^^^^^^^^^^^^^^^^^^^^^
890
891 The following two controls are only valid for video and vbi capture.
892
893 - Standard Signal Mode:
894
895 selects the behavior of VIDIOC_QUERYSTD: what should it return?
896
897 Changing this control will result in the V4L2_EVENT_SOURCE_CHANGE
898 to be sent since it emulates a changed input condition (e.g. a cable
899 was plugged in or out).
900
901 - Standard:
902
903 selects the standard that VIDIOC_QUERYSTD should return if the
904 previous control is set to "Selected Standard".
905
906 Changing this control will result in the V4L2_EVENT_SOURCE_CHANGE
907 to be sent since it emulates a changed input standard.
908
909
910 The following two controls are only valid for video capture.
911
912 - DV Timings Signal Mode:
913
914 selects the behavior of VIDIOC_QUERY_DV_TIMINGS: what
915 should it return?
916
917 Changing this control will result in the V4L2_EVENT_SOURCE_CHANGE
918 to be sent since it emulates a changed input condition (e.g. a cable
919 was plugged in or out).
920
921 - DV Timings:
922
923 selects the timings the VIDIOC_QUERY_DV_TIMINGS should return
924 if the previous control is set to "Selected DV Timings".
925
926 Changing this control will result in the V4L2_EVENT_SOURCE_CHANGE
927 to be sent since it emulates changed input timings.
928
929
930 The following controls are only present if the no_error_inj module option
931 is set to 0 (the default). These controls are valid for video and vbi
932 capture and output streams and for the SDR capture device except for the
933 Disconnect control which is valid for all devices.
934
935 - Wrap Sequence Number:
936
937 test what happens when you wrap the sequence number in
938 struct v4l2_buffer around.
939
940 - Wrap Timestamp:
941
942 test what happens when you wrap the timestamp in struct
943 v4l2_buffer around.
944
945 - Percentage of Dropped Buffers:
946
947 sets the percentage of buffers that
948 are never returned by the driver (i.e., they are dropped).
949
950 - Disconnect:
951
952 emulates a USB disconnect. The device will act as if it has
953 been disconnected. Only after all open filehandles to the device
954 node have been closed will the device become 'connected' again.
955
956 - Inject V4L2_BUF_FLAG_ERROR:
957
958 when pressed, the next frame returned by
959 the driver will have the error flag set (i.e. the frame is marked
960 corrupt).
961
962 - Inject VIDIOC_REQBUFS Error:
963
964 when pressed, the next REQBUFS or CREATE_BUFS
965 ioctl call will fail with an error. To be precise: the videobuf2
966 queue_setup() op will return -EINVAL.
967
968 - Inject VIDIOC_QBUF Error:
969
970 when pressed, the next VIDIOC_QBUF or
971 VIDIOC_PREPARE_BUFFER ioctl call will fail with an error. To be
972 precise: the videobuf2 buf_prepare() op will return -EINVAL.
973
974 - Inject VIDIOC_STREAMON Error:
975
976 when pressed, the next VIDIOC_STREAMON ioctl
977 call will fail with an error. To be precise: the videobuf2
978 start_streaming() op will return -EINVAL.
979
980 - Inject Fatal Streaming Error:
981
982 when pressed, the streaming core will be
983 marked as having suffered a fatal error, the only way to recover
984 from that is to stop streaming. To be precise: the videobuf2
985 vb2_queue_error() function is called.
986
987
988 VBI Raw Capture Controls
989 ^^^^^^^^^^^^^^^^^^^^^^^^
990
991 - Interlaced VBI Format:
992
993 if set, then the raw VBI data will be interlaced instead
994 of providing it grouped by field.
995
996
997 Digital Video Controls
998 ~~~~~~~~~~~~~~~~~~~~~~
999
1000 - Rx RGB Quantization Range:
1002 sets the RGB quantization detection of the HDMI
1003 input. This combines with the Vivid 'Limited RGB Range (16-235)'
1004 control and can be used to test what happens if a source provides
1005 you with the wrong quantization range information. This can be tested
1006 by selecting an HDMI input, setting this control to Full or Limited
1007 range and selecting the opposite in the 'Limited RGB Range (16-235)'
1008 control. The effect is easy to see if the 'Gray Ramp' test pattern
1009 is selected.
1011 - Tx RGB Quantization Range:
1013 sets the RGB quantization detection of the HDMI
1014 output. It is currently not used for anything in vivid, but most HDMI
1015 transmitters would typically have this control.
1017 - Transmit Mode:
1019 sets the transmit mode of the HDMI output to HDMI or DVI-D. This
1020 affects the reported colorspace since DVI_D outputs will always use
1021 sRGB.
1024 FM Radio Receiver Controls
1025 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1027 - RDS Reception:
1029 set if the RDS receiver should be enabled.
1031 - RDS Program Type:
1034 - RDS PS Name:
1037 - RDS Radio Text:
1040 - RDS Traffic Announcement:
1043 - RDS Traffic Program:
1046 - RDS Music:
1048 these are all read-only controls. If RDS Rx I/O Mode is set to
1049 "Block I/O", then they are inactive as well. If RDS Rx I/O Mode is set
1050 to "Controls", then these controls report the received RDS data.
1052 .. note::
1053 The vivid implementation of this is pretty basic: they are only
1054 updated when you set a new frequency or when you get the tuner status
1055 (VIDIOC_G_TUNER).
1057 - Radio HW Seek Mode:
1059 can be one of "Bounded", "Wrap Around" or "Both". This
1060 determines if VIDIOC_S_HW_FREQ_SEEK will be bounded by the frequency
1061 range or wrap-around or if it is selectable by the user.
1063 - Radio Programmable HW Seek:
1065 if set, then the user can provide the lower and
1066 upper bound of the HW Seek. Otherwise the frequency range boundaries
1067 will be used.
1069 - Generate RBDS Instead of RDS:
1071 if set, then generate RBDS (the US variant of
1072 RDS) data instead of RDS (European-style RDS). This affects only the
1073 PICODE and PTY codes.
1075 - RDS Rx I/O Mode:
1077 this can be "Block I/O" where the RDS blocks have to be read()
1078 by the application, or "Controls" where the RDS data is provided by
1079 the RDS controls mentioned above.
1082 FM Radio Modulator Controls
1083 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
1085 - RDS Program ID:
1088 - RDS Program Type:
1091 - RDS PS Name:
1094 - RDS Radio Text:
1097 - RDS Stereo:
1100 - RDS Artificial Head:
1103 - RDS Compressed:
1106 - RDS Dynamic PTY:
1109 - RDS Traffic Announcement:
1112 - RDS Traffic Program:
1115 - RDS Music:
1117 these are all controls that set the RDS data that is transmitted by
1118 the FM modulator.
1120 - RDS Tx I/O Mode:
1122 this can be "Block I/O" where the application has to use write()
1123 to pass the RDS blocks to the driver, or "Controls" where the RDS data
1124 is Provided by the RDS controls mentioned above.
1126 Metadata Capture Controls
1127 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1129 - Generate PTS
1131 if set, then the generated metadata stream contains Presentation timestamp.
1133 - Generate SCR
1135 if set, then the generated metadata stream contains Source Clock information.
1138 Video, Sliced VBI and HDMI CEC Looping
1139 --------------------------------------
1141 Video Looping functionality is supported for devices created by the same
1142 vivid driver instance, as well as across multiple instances of the vivid driver.
1143 The vivid driver supports looping of video and Sliced VBI data between an S-Video output
1144 and an S-Video input. It also supports looping of video and HDMI CEC data between an
1145 HDMI output and an HDMI input.
1147 To enable looping, set the 'HDMI/S-Video XXX-N Is Connected To' control(s) to select
1148 whether an input uses the Test Pattern Generator, or is disconnected, or is connected
1149 to an output. An input can be connected to an output from any vivid instance.
1150 The inputs and outputs are numbered XXX-N where XXX is the vivid instance number
1151 (see module option n_devs). If there is only one vivid instance (the default), then
1152 XXX will be 000. And N is the Nth S-Video/HDMI input or output of that instance.
1153 If vivid is loaded without module options, then you can connect the S-Video 000-0 input
1154 to the S-Video 000-0 output, or the HDMI 000-0 input to the HDMI 000-0 output.
1155 This is the equivalent of connecting or disconnecting a cable between an input and an
1156 output in a physical device.
1158 If an 'HDMI/S-Video XXX-N Is Connected To' control selected an output, then the video
1159 output will be looped to the video input provided that:
1161 - the currently selected input matches the input indicated by the control name.
1163 - in the vivid instance of the output connector, the currently selected output matches
1164 the output indicated by the control's value.
1166 - the video resolution of the video input must match that of the video output.
1167 So it is not possible to loop a 50 Hz (720x576) S-Video output to a 60 Hz
1168 (720x480) S-Video input, or a 720p60 HDMI output to a 1080p30 input.
1170 - the pixel formats must be identical on both sides. Otherwise the driver would
1171 have to do pixel format conversion as well, and that's taking things too far.
1173 - the field settings must be identical on both sides. Same reason as above:
1174 requiring the driver to convert from one field format to another complicated
1175 matters too much. This also prohibits capturing with 'Field Top' or 'Field
1176 Bottom' when the output video is set to 'Field Alternate'. This combination,
1177 while legal, became too complicated to support. Both sides have to be 'Field
1178 Alternate' for this to work. Also note that for this specific case the
1179 sequence and field counting in struct v4l2_buffer on the capture side may not
1180 be 100% accurate.
1182 - field settings V4L2_FIELD_SEQ_TB/BT are not supported. While it is possible to
1183 implement this, it would mean a lot of work to get this right. Since these
1184 field values are rarely used the decision was made not to implement this for
1185 now.
1187 - on the input side the "Standard Signal Mode" for the S-Video input or the
1188 "DV Timings Signal Mode" for the HDMI input should be configured so that a
1189 valid signal is passed to the video input.
1191 If any condition is not valid, then the 'Noise' test pattern is shown.
1193 The framerates do not have to match, although this might change in the future.
1195 By default you will see the OSD text superimposed on top of the looped video.
1196 This can be turned off by changing the "OSD Text Mode" control of the video
1197 capture device.
1199 For VBI looping to work all of the above must be valid and in addition the vbi
1200 output must be configured for sliced VBI. The VBI capture side can be configured
1201 for either raw or sliced VBI. Note that at the moment only CC/XDS (60 Hz formats)
1202 and WSS (50 Hz formats) VBI data is looped. Teletext VBI data is not looped.
1205 Radio & RDS Looping
1206 -------------------
1208 The vivid driver supports looping of RDS output to RDS input.
1210 Since radio is wireless this looping always happens if the radio receiver
1211 frequency is close to the radio transmitter frequency. In that case the radio
1212 transmitter will 'override' the emulated radio stations.
1214 RDS looping is currently supported only between devices created by the same
1215 vivid driver instance.
1217 As mentioned in the "Radio Receiver" section, the radio receiver emulates
1218 stations at regular frequency intervals. Depending on the frequency of the
1219 radio receiver a signal strength value is calculated (this is returned by
1220 VIDIOC_G_TUNER). However, it will also look at the frequency set by the radio
1221 transmitter and if that results in a higher signal strength than the settings
1222 of the radio transmitter will be used as if it was a valid station. This also
1223 includes the RDS data (if any) that the transmitter 'transmits'. This is
1224 received faithfully on the receiver side. Note that when the driver is loaded
1225 the frequencies of the radio receiver and transmitter are not identical, so
1226 initially no looping takes place.
1229 Cropping, Composing, Scaling
1230 ----------------------------
1232 This driver supports cropping, composing and scaling in any combination. Normally
1233 which features are supported can be selected through the Vivid controls,
1234 but it is also possible to hardcode it when the module is loaded through the
1235 ccs_cap_mode and ccs_out_mode module options. See "Configuring the driver" on
1236 the details of these module options.
1238 This allows you to test your application for all these variations.
1240 Note that the webcam input never supports cropping, composing or scaling. That
1241 only applies to the TV/S-Video/HDMI inputs and outputs. The reason is that
1242 webcams, including this virtual implementation, normally use
1243 VIDIOC_ENUM_FRAMESIZES to list a set of discrete framesizes that it supports.
1244 And that does not combine with cropping, composing or scaling. This is
1245 primarily a limitation of the V4L2 API which is carefully reproduced here.
1247 The minimum and maximum resolutions that the scaler can achieve are 16x16 and
1248 (4096 * 4) x (2160 x 4), but it can only scale up or down by a factor of 4 or
1249 less. So for a source resolution of 1280x720 the minimum the scaler can do is
1250 320x180 and the maximum is 5120x2880. You can play around with this using the
1251 qv4l2 test tool and you will see these dependencies.
1253 This driver also supports larger 'bytesperline' settings, something that
1254 VIDIOC_S_FMT allows but that few drivers implement.
1256 The scaler is a simple scaler that uses the Coarse Bresenham algorithm. It's
1257 designed for speed and simplicity, not quality.
1259 If the combination of crop, compose and scaling allows it, then it is possible
1260 to change crop and compose rectangles on the fly.
1263 Formats
1264 -------
1266 The driver supports all the regular packed and planar 4:4:4, 4:2:2 and 4:2:0
1267 YUYV formats, 8, 16, 24 and 32 RGB packed formats and various multiplanar
1268 formats.
1270 The alpha component can be set through the 'Alpha Component' User control
1271 for those formats that support it. If the 'Apply Alpha To Red Only' control
1272 is set, then the alpha component is only used for the color red and set to
1273 0 otherwise.
1275 The driver has to be configured to support the multiplanar formats. By default
1276 the driver instances are single-planar. This can be changed by setting the
1277 multiplanar module option, see "Configuring the driver" for more details on that
1278 option.
1280 If the driver instance is using the multiplanar formats/API, then the first
1281 single planar format (YUYV) and the multiplanar NV16M and NV61M formats the
1282 will have a plane that has a non-zero data_offset of 128 bytes. It is rare for
1283 data_offset to be non-zero, so this is a useful feature for testing applications.
1285 Video output will also honor any data_offset that the application set.
1288 Output Overlay
1289 --------------
1291 Note: output overlays are primarily implemented in order to test the existing
1292 V4L2 output overlay API. Whether this API should be used for new drivers is
1293 questionable.
1295 This driver has support for an output overlay and is capable of:
1297 - bitmap clipping,
1298 - list clipping (up to 16 rectangles)
1299 - chromakey
1300 - source chromakey
1301 - global alpha
1302 - local alpha
1303 - local inverse alpha
1305 Output overlays are not supported for multiplanar formats. In addition, the
1306 pixelformat of the capture format and that of the framebuffer must be the
1307 same for the overlay to work. Otherwise VIDIOC_OVERLAY will return an error.
1309 Output overlays only work if the driver has been configured to create a
1310 framebuffer by setting flag 0x10000 in the node_types module option. The
1311 created framebuffer has a size of 720x576 and supports ARGB 1:5:5:5 and
1312 RGB 5:6:5.
1314 In order to see the effects of the various clipping, chromakeying or alpha
1315 processing capabilities you need to turn on video looping and see the results
1316 on the capture side. The use of the clipping, chromakeying or alpha processing
1317 capabilities will slow down the video loop considerably as a lot of checks have
1318 to be done per pixel.
1321 CEC (Consumer Electronics Control)
1322 ----------------------------------
1324 If there are HDMI inputs then a CEC adapter will be created that has
1325 the same number of input ports. This is the equivalent of e.g. a TV that
1326 has that number of inputs. Each HDMI output will also create a
1327 CEC adapter that is hooked up to the corresponding input port, or (if there
1328 are more outputs than inputs) is not hooked up at all. In other words,
1329 this is the equivalent of hooking up each output device to an input port of
1330 the TV. Any remaining output devices remain unconnected.
1332 The EDID that each output reads reports a unique CEC physical address that is
1333 based on the physical address of the EDID of the input. So if the EDID of the
1334 receiver has physical address A.B.0.0, then each output will see an EDID
1335 containing physical address A.B.C.0 where C is 1 to the number of inputs. If
1336 there are more outputs than inputs then the remaining outputs have a CEC adapter
1337 that is disabled and reports an invalid physical address.
1340 Some Future Improvements
1341 ------------------------
1343 Just as a reminder and in no particular order:
1345 - Add a virtual alsa driver to test audio
1346 - Add virtual sub-devices
1347 - Some support for testing compressed video
1348 - Add support to loop raw VBI output to raw VBI input
1349 - Add support to loop teletext sliced VBI output to VBI input
1350 - Fix sequence/field numbering when looping of video with alternate fields
1351 - Add support for V4L2_CID_BG_COLOR for video outputs
1352 - Add ARGB888 overlay support: better testing of the alpha channel
1353 - Improve pixel aspect support in the tpg code by passing a real v4l2_fract
1354 - Use per-queue locks and/or per-device locks to improve throughput
1355 - The SDR radio should use the same 'frequencies' for stations as the normal
1356 radio receiver, and give back noise if the frequency doesn't match up with
1357 a station frequency
1358 - Make a thread for the RDS generation, that would help in particular for the
1359 "Controls" RDS Rx I/O Mode as the read-only RDS controls could be updated
1360 in real-time.
1361 - Changing the EDID doesn't wait 100 ms before setting the HPD signal.

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

Virtual Video Test Driver 개요

1-43

이 문서는 GPL-2.0 라이선스를 따릅니다. `vivid`는 video capture/output, VBI capture/output, metadata capture/output, radio receiver/transmitter, touch capture, SDR receiver를 비롯한 여러 종류의 Video4Linux hardware를 가상으로 구현합니다. capture/output overlay 시험용 단순 framebuffer도 제공합니다.

최대 64개 인스턴스를 만들 수 있고 각 인스턴스는 최대 16개 입력과 16개 출력을 가집니다. 입력은 webcam, TV capture, S-Video capture, HDMI capture가 될 수 있고 출력은 S-Video 또는 HDMI가 될 수 있습니다.

입출력은 실제 hardware처럼 동작하므로 별도 장비 없이 application의 V4L2 기능과 예외 처리를 개발·시험할 수 있습니다. 이 driver가 구현하는 기능은 다음과 같습니다.

  • read()/write(), MMAP, USERPTR, DMABUF 스트리밍 I/O 지원
  • 다양한 변형을 포함한 광범위한 테스트 패턴
  • 실제로 영상에 적용되는 brightness, contrast, saturation, hue 제어
  • alpha 색상 성분 지원
  • limited/full RGB 범위를 포함한 전체 colorspace 지원
  • 가능한 모든 V4L2 control 유형 제공
  • 여러 pixel aspect ratio와 video aspect ratio 지원
  • 오류 발생 시 동작을 검증하는 error injection
  • 입력과 출력 모두에서 crop, compose, scale의 모든 조합 지원
  • 최대 4K 해상도 에뮬레이션
  • interlaced capture 시험을 위한 모든 Field 설정 지원
  • 두 가지 multiplanar YUV 형식을 포함한 표준 YUV/RGB 형식 지원
  • raw/sliced VBI capture 및 output
  • RDS를 포함한 radio receiver/transmitter 지원
  • software-defined radio(SDR) 지원
  • capture/output overlay
  • metadata capture/output
  • touch capture

드라이버 구성

44-319

기본 구성은 webcam, TV, S-Video, HDMI 입력을 가진 video capture 장치, S-Video와 HDMI 출력을 가진 video output 장치, VBI capture/output, radio receiver/transmitter, SDR 장치를 각각 하나씩 포함한 인스턴스 한 개입니다.

인스턴스 수와 node, video 입출력 수·유형은 다음 module option으로 조정합니다. 배열형 option은 인스턴스 순서대로 값을 받습니다.

Module option기본값·범위동작
n_devs기본 1, 최대 64생성할 vivid 드라이버 인스턴스 수를 지정합니다.
node_types기본 0xe1d3d, 인스턴스별 16진수 bitmaskbit 0은 Video Capture, bit 2-3은 VBI Capture(none/raw/sliced/both), bit 4는 Radio Receiver, bit 5는 SDR Receiver, bit 8은 Video Output, bit 10-11은 VBI Output, bit 12는 Radio Transmitter, bit 16은 overlay용 framebuffer, bit 17은 Metadata Capture, bit 18은 Metadata Output, bit 19는 Touch Capture입니다.
num_inputs기본 4, 1-16각 인스턴스의 video capture 입력 수를 지정합니다.
input_types기본 0xe4, 입력마다 2비트각 쌍은 00 webcam, 01 TV tuner, 10 S-Video, 11 HDMI이며 bit 0-1부터 input 0에 대응합니다.
num_outputs기본 2, 1-16각 인스턴스의 video output 수를 지정합니다.
output_types기본 0x02, 출력마다 1비트0은 S-Video output, 1은 HDMI output이며 bit N이 output N에 대응합니다.
vid_cap_nr기본 -1video capture 장치마다 원하는 videoX 시작 번호를 지정합니다. 할당에 실패하면 다음 빈 번호를 사용합니다.
vid_out_nr기본 -1video output 장치마다 원하는 videoX 시작 번호를 지정합니다.
vbi_cap_nr기본 -1VBI capture 장치마다 원하는 vbiX 시작 번호를 지정합니다.
vbi_out_nr기본 -1VBI output 장치마다 원하는 vbiX 시작 번호를 지정합니다.
radio_rx_nr기본 -1radio receiver마다 원하는 radioX 시작 번호를 지정합니다.
radio_tx_nr기본 -1radio transmitter마다 원하는 radioX 시작 번호를 지정합니다.
sdr_cap_nr기본 -1SDR capture 장치마다 원하는 swradioX 시작 번호를 지정합니다.
meta_cap_nr기본 -1metadata capture 장치마다 원하는 videoX 시작 번호를 지정합니다.
meta_out_nr기본 -1metadata output 장치마다 원하는 videoX 시작 번호를 지정합니다.
touch_cap_nr기본 -1touch capture 장치마다 원하는 v4l-touchX 시작 번호를 지정합니다.
ccs_cap_mode기본 -1 또는 3비트capture의 crop/compose/scale 조합을 고정합니다. -1은 control 선택이며 bit 0 crop, bit 1 compose, bit 2 scale입니다. scaler는 원본의 1/4배부터 4배까지 단순 저품질 방식으로 처리합니다. discrete framesize를 쓰는 webcam에는 적용되지 않습니다.
ccs_out_mode기본 -1 또는 3비트output의 crop/compose/scale 조합을 고정합니다. bit 0은 outgoing buffer crop, bit 1은 더 큰 picture frame으로 compose, bit 2는 최대 4배 상하향 scale입니다.
multiplanar인스턴스별 1 또는 21은 single-planar, 2는 multi-planar 형식과 V4L2 multi-planar API를 사용합니다. 기본은 single-planar입니다.
vivid_debug기본 비활성드라이버 디버그 정보를 활성화합니다.
no_error_inj기본 0설정하면 error-injection control을 제거하여 v4l2-compliance 같은 도구가 Disconnect 뒤에 연쇄 실패하지 않게 합니다. crop/compose/scale 선택 control도 제거하며 ccs_*_mode가 별도로 지정되지 않으면 세 기능을 모두 활성화합니다.
allocators기본 0buffer allocator를 고릅니다. 0은 vmalloc, 1은 dma-contig입니다.
cache_hints기본 0MMAP streaming I/O에서 V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS를 제공할지 정합니다. 0은 금지, 1은 허용입니다.
supports_requests기본 1Request API 정책을 정합니다. 0은 미지원, 1은 지원, 2는 request 필수입니다.

capture node만 두 개, output node만 두 개를 만드는 예입니다.

n_devs=4 node_types=0x1,0x1,0x100,0x100

TV 1개, S-Video 3개, HDMI 4개로 여덟 입력을 만드는 예입니다.

num_inputs=8 input_types=0xffa9

S-Video 4개와 HDMI 4개로 여덟 출력을 만드는 예입니다.

num_outputs=8 output_types=0xf0

네 인스턴스의 capture node를 `/dev/video2`, `/dev/video4`, `/dev/video6`, `/dev/video8`에 할당하려는 예입니다. 원하는 번호를 사용할 수 없으면 다음 빈 번호가 선택됩니다.

n_devs=4 vid_cap_nr=2,4,6,8

이 option들을 조합하면 여러 hardware 구성을 정밀하게 재현할 수 있으며 아직 출시되지 않은 장치를 위한 software를 미리 개발하는 데도 적합합니다.

Video Capture

320-339

video capture는 가장 자주 쓰이는 기능입니다. `num_inputs`, `input_types`, `ccs_cap_mode`로 구성하며 기본은 webcam, TV tuner, S-Video, HDMI 입력 각각 하나입니다.

새 frame의 jitter는 약 1 jiffy로 kernel HZ에 따라 대개 1/100, 1/250, 1/1000초입니다. 장기적으로는 정확한 frame rate를 따르므로 59.94 Hz와 60 Hz를 구분합니다. frame rate가 HZ를 넘으면 frame을 drop하지만 frame/field sequence count는 이를 반영해 번호를 건너뜁니다.

Webcam 입력

340-351

webcam 입력은 320x180, 640x360, 1280x720 세 frame size와 10, 15, 25, 30, 50, 60 fps를 지원합니다. 큰 frame일수록 최대 fps가 낮아집니다. 입력 전환 시 초기 colorspace는 sRGB입니다.

TV 및 S-Video 입력

352-407

TV 입력에 tuner가 있다는 점 외에는 두 입력이 같습니다. TV와 Line-In audio 입력을 제공하고 모든 TV 표준을 지원하며 `Standard Signal Mode`와 `Standard` control이 표준 질의 결과를 정합니다.

모든 field 조합을 지원하고 interlaced 시간 순서를 재현합니다. 50 Hz 표준은 top field가 오래되고 bottom field가 새로우며 60 Hz는 반대입니다. V4L2_FIELD_ALTERNATE capture를 시작하면 50 Hz에서는 top field, 60 Hz에서는 bottom field가 첫 buffer에 들어갑니다.

PAL/SECAM에서는 top line 앞 절반에 Wide Screen Signal을 흉내 내는 noise를 넣습니다. 초기 colorspace는 SMPTE-170M이고 pixel aspect ratio는 TV 표준에 따릅니다. `Standard Aspect Ratio`에서 4x3, letterboxed 16x9, scale이 필요한 full-screen `16x9 Anamorphic`을 고릅니다.

TV tuner 범위는 44-958 MHz이며 49.25 MHz부터 6 MHz 간격으로 channel을 둡니다. 중심 ±0.25 MHz는 color와 100% signal, ±1 MHz는 grayscale와 50% signal이고 그 밖은 noise입니다. VIDIOC_G_TUNER는 주파수가 낮거나 높은지 나타내는 올바른 afc도 반환합니다.

audio subchannel은 유효 channel ±1 MHz에서 MONO이며 중심 ±0.25 MHz에서는 channel마다 MONO, STEREO, NTSC의 MONO | SAP 또는 다른 표준의 LANG1 | LANG2, STEREO | SAP 조합을 순환합니다. dequeued `v4l2_buffer`의 `v4l2_timecode`도 채웁니다.

HDMI 입력

408-441

HDMI 입력은 25-600 MHz pixel clock 범위의 progressive/interlaced CEA-861 및 DMT timing을 모두 지원합니다. interlaced 형식은 항상 V4L2_FIELD_ALTERNATE이고 top field first이며 capture 첫 field도 top입니다.

해상도가 720x576 이하이면 초기 colorspace는 SMPTE-170M, 그보다 크면 CEA-861은 REC-709, VESA DMT는 sRGB입니다. pixel aspect ratio는 720x480에서 NTSC, 720x576에서 PAL과 같고 나머지는 1:1입니다.

`DV Timings Aspect Ratio`에서 source width/height, 4x3, 16x9를 선택해 pillarbox 또는 letterbox를 시험합니다. HDMI 입력에만 EDID를 설정할 수 있으며 기본 EDID가 있고 모든 HDMI 입력이 내부에서 같은 EDID를 공유합니다. physical address 외에는 EDID를 해석하지 않습니다.

EDID physical-address 제약 때문에 HDMI 입력은 최대 15개이며 더 많이 요청하면 15개로 줄입니다.

Video Output

442-453

video output은 `num_outputs`, `output_types`, `ccs_out_mode`로 구성하며 기본은 S-Video와 HDMI 출력 하나씩입니다. capture와 마찬가지로 장기 frame rate는 정확합니다.

S-Video 출력

454-465

S-Video output은 `Line-Out 1`, `Line-Out 2` audio output과 모든 TV 표준·field 조합을 지원합니다. 초기 colorspace는 SMPTE-170M입니다.

HDMI 출력

466-487

HDMI output은 25-600 MHz pixel clock 범위의 progressive/interlaced CEA-861 및 DMT timing을 모두 지원하고 interlaced field mode는 V4L2_FIELD_ALTERNATE입니다.

720x576 이하의 초기 colorspace는 SMPTE-170M, 그보다 크면 CEA-861은 REC-709, VESA DMT는 sRGB입니다. 720x480 pixel aspect ratio는 NTSC, 720x576은 PAL, 나머지는 1:1입니다.

VIDIOC_G_EDID로 유효한 EDID를 읽을 수 있습니다. physical-address 제한으로 HDMI 출력도 최대 15개입니다.

VBI Capture

488-504

`node_types`에 따라 raw VBI 전용, sliced VBI 전용, 둘 다 지원하는 capture node를 만듭니다. 60 Hz에서는 Closed Caption과 XDS를 생성하며 caption은 1초마다 `Hello world!`와 `Closed captions test`를 번갈아 내보내고 XDS는 1분마다 현재 시간을 전달합니다.

50 Hz에서는 Video Aspect Ratio control에 따른 Wide Screen Signal과 frame마다 한 페이지씩 teletext page 100-159를 생성합니다. VBI 장치는 TV/S-Video 입력에서만 동작하며 webcam이나 HDMI 입력에서는 오류를 반환합니다.

VBI Output

505-518

`node_types`에 따라 raw, sliced, 둘 다 지원하는 VBI output node를 만듭니다. sliced output은 50 Hz의 WSS·teletext와 60 Hz의 Closed Captioning·XDS를 지원합니다. S-Video output에서만 동작하고 HDMI에서는 오류를 반환합니다.

Radio Receiver

519-554

FM/AM/SW receiver를 흉내 내며 FM은 RDS도 지원합니다. 범위는 FM 64-108 MHz, AM 520-1710 kHz, SW 2300 kHz-26.1 MHz입니다. 유효 channel은 FM 1 MHz, AM/SW 100 kHz 간격이며 초기 주파수는 95 MHz입니다.

중심에서 멀어질수록 signal이 약해져 FM ±50 kHz, AM/SW ±5 kHz에서 0%가 됩니다. FM RDS는 read-only control을 쓰는 Controls mode와 read()로 block을 전달하는 Block I/O mode를 제공합니다.

RDS는 channel 중심 ±12.5 kHz에서 감지됩니다. 중심에서 멀수록 CORRECTED, ERROR, INVALID, dropped block 오류를 같은 비율로 무작위 삽입하며 경계에서 최대 50%에 이릅니다. stream은 0B group의 표준 field, radio text, 현재 시간을 포함합니다.

`Radio HW Seek Mode`로 bounded seek, wrap-around seek 또는 둘 다 지원하도록 설정할 수 있습니다.

Radio Transmitter

555-572

FM/AM/SW transmitter의 범위는 receiver와 같고 초기 주파수는 95.5 MHz입니다. FM RDS는 control로 송신 내용을 구성하는 Controls mode와 write()로 block을 넘기는 Block I/O mode를 지원합니다.

Software Defined Radio Receiver

573-587

SDR ADC tuner는 300 kHz, 900-2800 kHz, 3200 kHz의 세 대역을 가지며 RF tuner는 50-2000 MHz를 지원합니다. 생성 데이터에는 amplitude가 sqrt(2)인 1 kHz tone의 In-phase와 Quadrature 성분이 들어갑니다.

Metadata Capture

588-597

UVC 형식 metadata를 생성하고 vivid control에 설정된 값으로 PTS와 SCR을 전송합니다. webcam 입력에서만 동작하고 다른 입력에서는 오류를 반환합니다.

Metadata Output

598-606

metadata output으로 brightness, contrast, saturation, hue를 설정할 수 있습니다. webcam output에서만 동작하며 다른 출력에서는 오류를 반환합니다.

Touch Capture

607-614

single/double/triple tap, 좌우 이동, zoom in/out, 넓은 영역을 누르는 palm press, 16개 동시 touch point를 흉내 내는 pattern을 생성합니다.

Control 구성

615-621

장치 종류마다 지원하는 control이 다르며 아래 절에서 각 control과 적용 장치를 설명합니다.

User Controls - Test Controls

622-633

Button, Boolean, Integer 32 Bits, Integer 64 Bits, Menu, String, Bitmask, Integer Menu로 가능한 control type을 모두 표현합니다. Menu 두 종류에는 VIDIOC_QUERYMENU가 EINVAL을 반환하는 빈 항목이 있고 minimum도 0이 아니므로 application이 이런 경우를 올바르게 다루는지 검사할 수 있습니다. 모든 장치 유형이 지원합니다.

User Controls - Video Capture

634-659

Brightness, Contrast, Saturation, Hue는 실제로 영상에 적용됩니다. 입력마다 brightness 값과 min/max 범위가 달라 입력을 바꾸면 해당 값이 복원되고 V4L2_EVENT_CTRL_CH_RANGE flag가 붙은 control event가 발생합니다.

`Gain, Automatic`을 켜면 Gain이 계속 변하는 volatile control이 되고 끄면 일반 control이 됩니다. `Horizontal Flip`, `Vertical Flip`은 영상 반전에 쓰며 vivid의 sensor flip control과 조합됩니다. `Alpha Component`는 alpha channel을 가진 형식의 alpha 값을 설정합니다.

User Controls - Audio

660-670

video capture/output과 radio receiver/transmitter는 전형적인 `Volume`, `Mute` control을 제공하지만 vivid 내부 동작에는 실제 영향을 주지 않습니다.

Vivid Controls

671-676

vivid 전용 control은 image generation, error injection 등의 시험 동작을 제어합니다.

Test Pattern Controls

677-740

다음 control은 모두 video capture 전용입니다.

Control동작
Test Pattern사용할 패턴을 선택합니다. CSC Colorbar는 모든 colorspace에서 유효한 색으로 변환 시험에 쓰며, 다른 패턴에는 colorspace conversion을 적용하지 않습니다.
OSD Text Mode패턴 위 텍스트 표시 여부와 counter만 표시할지 전체 텍스트를 표시할지 정합니다.
Horizontal Movement패턴의 좌우 이동 방향과 속도를 정합니다.
Vertical Movement패턴의 상하 이동 방향과 속도를 정합니다.
Show Borderletterbox/pillarbox를 제외한 실제 영상 가장자리에 2픽셀 테두리를 표시합니다.
Show Square영상 중앙에 정사각형을 표시합니다. pixel/image aspect ratio 보정이 맞으면 화면에서도 가로와 세로가 같아야 합니다.
Insert SAV Code in Image영상에 SAV(Start of Active Video) 코드를 넣어 수신기가 이를 실수로 해석하지 않고 무시하는지 검사합니다.
Insert EAV Code in Image영상에 EAV(End of Active Video) 코드를 넣어 같은 동작을 검사합니다.
Insert Video Guard Band3/4-byte RGB에서 영상 왼쪽에 HDMI Video Guard Band 값과 같은 0xab/0x55/0xab 픽셀 4열을 넣습니다. 영상을 왼쪽으로 옮겨 값만 계속 건너뛰는 잘못된 수신기가 sync를 잃거나 line을 이동시키는지 시험합니다.

Capture Feature Selection Controls

741-862

다음 control은 video capture의 sensor 방향, aspect ratio, timestamp, colorspace와 crop/compose/scale 기능을 선택합니다. CSC Colorbar가 아닌 패턴은 원래 75% signal intensity를 보존하도록 colorspace conversion을 거치지 않습니다.

Control동작
Sensor Flipped Horizontally영상을 수평 반전하고 V4L2_IN_ST_HFLIP을 설정해 뒤집혀 장착된 sensor를 흉내 냅니다.
Sensor Flipped Vertically영상을 수직 반전하고 V4L2_IN_ST_VFLIP을 설정합니다.
Standard Aspect RatioTV/S-Video 입력의 4x3, 16x9, anamorphic widescreen을 선택하며 letterbox가 생길 수 있습니다.
DV Timings Aspect RatioHDMI 입력의 source width/height 비율, 4x3, 16x9를 선택하며 letterbox나 pillarbox가 생길 수 있습니다.
Timestamp Source각 buffer의 timestamp를 취하는 시점을 선택합니다.
ColorspaceCSC Colorbar 생성에 사용할 colorspace를 선택합니다. 변경하면 V4L2_EVENT_SOURCE_CHANGE를 보냅니다.
Transfer FunctionCSC Colorbar의 colorspace transfer function을 선택하며 변경 시 V4L2_EVENT_SOURCE_CHANGE를 보냅니다.
Y'CbCr EncodingRGB가 아닌 Y'CbCr 형식의 encoding을 선택하며 변경 시 source-change event를 보냅니다.
QuantizationRGB 또는 Y'CbCr test pattern의 quantization을 선택하며 변경 시 source-change event를 보냅니다.
Limited RGB Range (16-235)HDMI source의 RGB 범위를 limited/full로 지정하고 Rx RGB Quantization Range와 반대로 설정해 잘못된 source 정보 처리도 시험합니다.
Apply Alpha To Red OnlyAlpha Component control 값을 test pattern의 빨간색에만 적용합니다.
Enable Capture Croppingccs_cap_mode=-1이고 no_error_inj=0일 때 capture crop 지원을 켭니다.
Enable Capture Composingccs_cap_mode=-1이고 no_error_inj=0일 때 capture compose 지원을 켭니다.
Enable Capture Scalerccs_cap_mode=-1이고 no_error_inj=0일 때 최대 4배 상하향 scaler를 켭니다.
Maximum EDID Blocks저장할 EDID block 수를 정합니다. 내용은 해석하지 않으며 표준 최대치인 256개까지 저장합니다.
Fill Percentage of Frame영상 상단 X%만 그려 큰 해상도에서 driver의 CPU 부하를 줄입니다.

Output Feature Selection Controls

863-887

다음 control은 video output 전용입니다.

Control동작
Enable Output Croppingccs_out_mode=-1이고 no_error_inj=0일 때 output crop을 켭니다.
Enable Output Composingccs_out_mode=-1이고 no_error_inj=0일 때 output compose를 켭니다.
Enable Output Scalerccs_out_mode=-1이고 no_error_inj=0일 때 최대 4배 상하향 scaler를 켭니다.

Error Injection Controls

888-987

앞 네 control 중 Standard 관련 두 개는 video/VBI capture, DV Timings 관련 두 개는 video capture에 적용됩니다. 나머지는 `no_error_inj=0`일 때만 나타나며 video/VBI capture/output과 SDR capture에 적용됩니다. Disconnect만 모든 장치에 적용됩니다.

Control시험 동작
Standard Signal Modevideo/VBI capture에서 VIDIOC_QUERYSTD의 반환 동작을 선택하고 input condition 변경을 흉내 내는 source-change event를 보냅니다.
Standard앞 control이 Selected Standard일 때 VIDIOC_QUERYSTD가 반환할 표준을 선택하고 변경 event를 보냅니다.
DV Timings Signal Modevideo capture에서 VIDIOC_QUERY_DV_TIMINGS의 반환 동작을 선택하고 cable 연결 상태 변경을 흉내 냅니다.
DV Timings앞 control이 Selected DV Timings일 때 반환할 timing을 선택하고 변경 event를 보냅니다.
Wrap Sequence Numberstruct v4l2_buffer의 sequence number wraparound를 시험합니다.
Wrap Timestampstruct v4l2_buffer의 timestamp wraparound를 시험합니다.
Percentage of Dropped Buffersdriver가 반환하지 않고 drop할 buffer 비율을 정합니다.
DisconnectUSB disconnect를 흉내 냅니다. 열린 filehandle을 모두 닫아야 장치가 다시 연결됩니다.
Inject V4L2_BUF_FLAG_ERROR다음 반환 frame에 error flag를 설정해 손상된 frame으로 표시합니다.
Inject VIDIOC_REQBUFS Error다음 REQBUFS/CREATE_BUFS에서 videobuf2 queue_setup()이 -EINVAL을 반환하게 합니다.
Inject VIDIOC_QBUF Error다음 VIDIOC_QBUF/VIDIOC_PREPARE_BUFFER에서 videobuf2 buf_prepare()가 -EINVAL을 반환하게 합니다.
Inject VIDIOC_STREAMON Error다음 VIDIOC_STREAMON에서 videobuf2 start_streaming()이 -EINVAL을 반환하게 합니다.
Inject Fatal Streaming Errorvb2_queue_error()를 호출해 streaming core를 fatal error 상태로 만들며 streaming을 중지해야 복구됩니다.

VBI Raw Capture Controls

988-996

`Interlaced VBI Format`을 설정하면 raw VBI 데이터를 field별로 묶지 않고 interlaced 형식으로 제공합니다.

Digital Video Controls

997-1023

`Rx RGB Quantization Range`는 HDMI input의 RGB quantization 감지 값을 정합니다. `Limited RGB Range (16-235)`와 반대로 설정하고 `Gray Ramp`를 선택하면 source가 잘못된 범위 정보를 줄 때의 효과를 쉽게 확인할 수 있습니다.

`Tx RGB Quantization Range`는 HDMI transmitter에서 흔한 output control이지만 현재 vivid에서는 사용하지 않습니다. `Transmit Mode`는 HDMI output을 HDMI 또는 DVI-D로 정하며 DVI-D는 항상 sRGB로 보고됩니다.

FM Radio Receiver Controls

1024-1081
Control동작
RDS ReceptionRDS receiver 활성화 여부를 정합니다.
RDS Program Type수신한 RDS program type을 읽기 전용으로 제공합니다.
RDS PS Name수신한 program service name을 읽기 전용으로 제공합니다.
RDS Radio Text수신한 radio text를 읽기 전용으로 제공합니다.
RDS Traffic Announcement수신한 traffic-announcement 상태를 읽기 전용으로 제공합니다.
RDS Traffic Program수신한 traffic-program 상태를 읽기 전용으로 제공합니다.
RDS Music수신한 music/speech 상태를 읽기 전용으로 제공합니다.
Radio HW Seek ModeVIDIOC_S_HW_FREQ_SEEK가 Bounded, Wrap Around, Both 중 어떤 방식을 지원할지 정합니다.
Radio Programmable HW Seek사용자가 HW seek 상하한을 지정할지, 주파수 대역 경계를 쓸지 정합니다.
Generate RBDS Instead of RDS유럽식 RDS 대신 미국식 RBDS를 생성하며 PICODE와 PTY code에 영향을 줍니다.
RDS Rx I/O Modeapplication이 read()로 block을 받는 Block I/O와 위 control로 데이터를 받는 Controls 중에서 선택합니다.

vivid의 RDS control 구현은 기본적인 수준입니다. read-only 값은 새 주파수를 설정하거나 VIDIOC_G_TUNER로 tuner status를 읽을 때만 갱신됩니다. Block I/O mode에서는 이 control들이 inactive입니다.

FM Radio Modulator Controls

1082-1125
Control동작
RDS Program ID송신할 RDS program ID를 설정합니다.
RDS Program Type송신할 RDS program type을 설정합니다.
RDS PS Name송신할 program service name을 설정합니다.
RDS Radio Text송신할 radio text를 설정합니다.
RDS Stereo송신할 stereo 상태를 설정합니다.
RDS Artificial Head송신할 artificial-head 상태를 설정합니다.
RDS Compressed송신할 compressed 상태를 설정합니다.
RDS Dynamic PTY송신할 dynamic-PTY 상태를 설정합니다.
RDS Traffic Announcement송신할 traffic-announcement 상태를 설정합니다.
RDS Traffic Program송신할 traffic-program 상태를 설정합니다.
RDS Music송신할 music/speech 상태를 설정합니다.
RDS Tx I/O Modeapplication이 write()로 block을 넘기는 Block I/O와 위 control 값을 쓰는 Controls 중에서 선택합니다.

Metadata Capture Controls

1126-1137

`Generate PTS`를 설정하면 metadata stream에 Presentation timestamp를 넣고 `Generate SCR`을 설정하면 Source Clock 정보를 넣습니다.

Video, Sliced VBI 및 HDMI CEC Looping

1138-1204

같은 vivid 인스턴스뿐 아니라 서로 다른 인스턴스 사이에서도 video loop를 지원합니다. S-Video output/input 사이에는 video와 sliced VBI를, HDMI output/input 사이에는 video와 HDMI CEC를 loop할 수 있습니다.

`HDMI/S-Video XXX-N Is Connected To` control에서 Test Pattern Generator, disconnected, 임의 인스턴스의 output 중 하나를 입력 source로 선택합니다. XXX는 `n_devs`의 인스턴스 번호이고 N은 해당 인스턴스의 N번째 connector입니다. 기본 한 인스턴스에서는 S-Video 000-0 또는 HDMI 000-0 입출력을 연결할 수 있으며 실제 cable 연결·해제와 같습니다.

output video가 input으로 loop되려면 다음 조건을 모두 만족해야 합니다.

  • 현재 선택한 input이 control 이름의 input과 같아야 합니다.
  • output 인스턴스의 현재 output이 control 값의 output과 같아야 합니다.
  • 입출력 해상도가 같아야 합니다. 720x576 50 Hz와 720x480 60 Hz, 720p60과 1080p30은 연결할 수 없습니다.
  • pixel format이 같아야 하며 driver는 format conversion을 하지 않습니다.
  • field 설정이 같아야 합니다. Field Alternate는 양쪽 모두 써야 하고 capture의 sequence/field count가 완전히 정확하지 않을 수 있습니다.
  • V4L2_FIELD_SEQ_TB/BT는 구현 복잡도와 낮은 사용 빈도 때문에 지원하지 않습니다.
  • S-Video의 Standard Signal Mode 또는 HDMI의 DV Timings Signal Mode가 유효한 signal을 input에 전달하도록 설정되어야 합니다.

조건을 만족하지 않으면 `Noise` pattern이 표시됩니다. frame rate는 같지 않아도 되며 기본적으로 loop video 위에 OSD가 겹쳐집니다. capture의 `OSD Text Mode`로 끌 수 있습니다.

VBI loop는 위 조건에 더해 output이 sliced VBI여야 합니다. capture는 raw 또는 sliced 모두 가능하지만 현재 loop되는 데이터는 60 Hz의 CC/XDS와 50 Hz의 WSS뿐이며 teletext는 제외됩니다.

Radio 및 RDS Looping

1205-1228

vivid는 RDS output을 input으로 loop합니다. radio는 무선이므로 receiver와 transmitter 주파수가 가까우면 자동으로 발생하고 transmitter가 가상 station을 덮어씁니다. RDS loop는 현재 같은 vivid 인스턴스 안에서만 지원합니다.

receiver는 정규 간격 station에 대한 signal strength를 VIDIOC_G_TUNER로 반환하지만 transmitter 주파수가 더 강한 signal을 만들면 그 설정과 RDS 데이터를 유효 station처럼 사용합니다. driver 로드 직후에는 receiver와 transmitter 기본 주파수가 달라 loop되지 않습니다.

Cropping, Composing, Scaling

1229-1262

crop, compose, scale의 모든 조합을 지원합니다. 보통 vivid control로 선택하지만 `ccs_cap_mode`, `ccs_out_mode` module option으로 고정할 수도 있습니다.

webcam은 discrete frame size를 VIDIOC_ENUM_FRAMESIZES로 열거하므로 이 세 기능을 지원하지 않습니다. 이는 V4L2 API 제약을 재현한 것이며 TV/S-Video/HDMI 입출력에만 적용됩니다.

scaler의 절대 범위는 16x16부터 (4096 * 4) x (2160 * 4)까지지만 한 번에 1/4배부터 4배까지만 변환합니다. 1280x720 source에서는 320x180부터 5120x2880까지이며 qv4l2로 관계를 시험할 수 있습니다.

VIDIOC_S_FMT가 허용하지만 많은 driver가 구현하지 않는 큰 `bytesperline`도 지원합니다. scaler는 속도와 단순성을 위한 Coarse Bresenham 방식이며 조합이 허용하면 streaming 중 crop/compose rectangle을 바꿀 수 있습니다.

Formats

1263-1287

일반 packed/planar 4:4:4, 4:2:2, 4:2:0 YUYV, 8/16/24/32-bit packed RGB와 여러 multiplanar 형식을 지원합니다. alpha 형식에서는 `Alpha Component` 값을 사용하고 `Apply Alpha To Red Only`를 켜면 빨간색에만 alpha를 적용하며 나머지는 0으로 둡니다.

multiplanar 형식/API는 `multiplanar` module option으로 켭니다. 이 모드에서는 첫 single-planar YUYV와 NV16M/NV61M 형식에 `data_offset=128`인 plane이 있어 드문 non-zero offset 처리를 시험할 수 있습니다. video output은 application이 지정한 data_offset도 따릅니다.

Output Overlay

1288-1320

output overlay는 기존 V4L2 output-overlay API 시험을 위해 구현되었으며 새 driver에서 이 API를 쓸지는 신중히 판단해야 합니다.

bitmap clipping, 최대 16 rectangle의 list clipping, chromakey, source chromakey, global/local alpha, local inverse alpha를 지원합니다.

multiplanar 형식에서는 지원하지 않으며 capture와 framebuffer pixel format이 같아야 합니다. 다르면 VIDIOC_OVERLAY가 오류를 반환합니다. `node_types`에 0x10000을 설정해 720x576 framebuffer를 만들어야 하고 ARGB 1:5:5:5와 RGB 5:6:5를 지원합니다.

clipping, chromakey, alpha 결과를 보려면 video loop를 켜고 capture 쪽에서 확인합니다. 각 pixel에 많은 검사가 필요하므로 이런 기능은 loop 속도를 크게 낮춥니다.

CEC (Consumer Electronics Control)

1321-1339

HDMI 입력이 있으면 입력 port 수와 같은 CEC adapter를 만듭니다. 각 HDMI output도 대응 입력 port에 연결된 adapter를 만들고 output이 더 많으면 남는 adapter는 연결하지 않습니다. 이는 여러 source 장치를 TV 입력에 연결한 구성을 흉내 냅니다.

각 output이 읽는 EDID의 고유 CEC physical address는 input EDID를 바탕으로 합니다. receiver가 A.B.0.0이면 output은 A.B.C.0을 보고하며 C는 1부터 입력 수까지입니다. 입력보다 많은 output의 CEC adapter는 disabled이고 invalid physical address를 보고합니다.

향후 개선 항목

1340-1361

현재 문서가 제시하는 향후 개선 후보는 다음과 같습니다.

  • audio 시험용 virtual ALSA driver와 virtual sub-device 추가
  • compressed video 시험 지원
  • raw VBI output-input loop와 teletext sliced VBI loop 추가
  • alternate-field video loop의 sequence/field numbering 수정
  • video output의 V4L2_CID_BG_COLOR 지원
  • alpha channel 시험을 강화하는 ARGB888 overlay 지원
  • 실제 v4l2_fract를 전달하도록 TPG pixel-aspect 처리 개선
  • per-queue/per-device lock으로 throughput 개선
  • SDR이 일반 receiver와 같은 station 주파수를 쓰고 불일치 시 noise를 반환하도록 개선
  • RDS 생성 thread로 Controls RDS Rx I/O Mode의 read-only control을 실시간 갱신
  • EDID 변경 뒤 HPD signal을 설정하기 전에 100 ms를 기다리도록 수정