at v3.0 2500 lines 98 kB view raw
1 <title>Changes</title> 2 3 <para>The following chapters document the evolution of the V4L2 API, 4errata or extensions. They are also intended to help application and 5driver writers to port or update their code.</para> 6 7 <section id="diff-v4l"> 8 <title>Differences between V4L and V4L2</title> 9 10 <para>The Video For Linux API was first introduced in Linux 2.1 to 11unify and replace various TV and radio device related interfaces, 12developed independently by driver writers in prior years. Starting 13with Linux 2.5 the much improved V4L2 API replaces the V4L API, 14although existing drivers will continue to support V4L applications in 15the future, either directly or through the V4L2 compatibility layer in 16the <filename>videodev</filename> kernel module translating ioctls on 17the fly. For a transition period not all drivers will support the V4L2 18API.</para> 19 20 <section> 21 <title>Opening and Closing Devices</title> 22 23 <para>For compatibility reasons the character device file names 24recommended for V4L2 video capture, overlay, radio and raw 25vbi capture devices did not change from those used by V4L. They are 26listed in <xref linkend="devices" /> and below in <xref 27 linkend="v4l-dev" />.</para> 28 29 <para>The teletext devices (minor range 192-223) have been removed in 30V4L2 and no longer exist. There is no hardware available anymore for handling 31pure teletext. Instead raw or sliced VBI is used.</para> 32 33 <para>The V4L <filename>videodev</filename> module automatically 34assigns minor numbers to drivers in load order, depending on the 35registered device type. We recommend that V4L2 drivers by default 36register devices with the same numbers, but the system administrator 37can assign arbitrary minor numbers using driver module options. The 38major device number remains 81.</para> 39 40 <table id="v4l-dev"> 41 <title>V4L Device Types, Names and Numbers</title> 42 <tgroup cols="3"> 43 <thead> 44 <row> 45 <entry>Device Type</entry> 46 <entry>File Name</entry> 47 <entry>Minor Numbers</entry> 48 </row> 49 </thead> 50 <tbody valign="top"> 51 <row> 52 <entry>Video capture and overlay</entry> 53 <entry><para><filename>/dev/video</filename> and 54<filename>/dev/bttv0</filename><footnote> <para>According to 55Documentation/devices.txt these should be symbolic links to 56<filename>/dev/video0</filename>. Note the original bttv interface is 57not compatible with V4L or V4L2.</para> </footnote>, 58<filename>/dev/video0</filename> to 59<filename>/dev/video63</filename></para></entry> 60 <entry>0-63</entry> 61 </row> 62 <row> 63 <entry>Radio receiver</entry> 64 <entry><para><filename>/dev/radio</filename><footnote> 65 <para>According to 66<filename>Documentation/devices.txt</filename> a symbolic link to 67<filename>/dev/radio0</filename>.</para> 68 </footnote>, <filename>/dev/radio0</filename> to 69<filename>/dev/radio63</filename></para></entry> 70 <entry>64-127</entry> 71 </row> 72 <row> 73 <entry>Raw VBI capture</entry> 74 <entry><para><filename>/dev/vbi</filename>, 75<filename>/dev/vbi0</filename> to 76<filename>/dev/vbi31</filename></para></entry> 77 <entry>224-255</entry> 78 </row> 79 </tbody> 80 </tgroup> 81 </table> 82 83 <para>V4L prohibits (or used to prohibit) multiple opens of a 84device file. V4L2 drivers <emphasis>may</emphasis> support multiple 85opens, see <xref linkend="open" /> for details and consequences.</para> 86 87 <para>V4L drivers respond to V4L2 ioctls with an &EINVAL;. The 88compatibility layer in the V4L2 <filename>videodev</filename> module 89can translate V4L ioctl requests to their V4L2 counterpart, however a 90V4L2 driver usually needs more preparation to become fully V4L 91compatible. This is covered in more detail in <xref 92 linkend="driver" />.</para> 93 </section> 94 95 <section> 96 <title>Querying Capabilities</title> 97 98 <para>The V4L <constant>VIDIOCGCAP</constant> ioctl is 99equivalent to V4L2's &VIDIOC-QUERYCAP;.</para> 100 101 <para>The <structfield>name</structfield> field in struct 102<structname>video_capability</structname> became 103<structfield>card</structfield> in &v4l2-capability;, 104<structfield>type</structfield> was replaced by 105<structfield>capabilities</structfield>. Note V4L2 does not 106distinguish between device types like this, better think of basic 107video input, video output and radio devices supporting a set of 108related functions like video capturing, video overlay and VBI 109capturing. See <xref linkend="open" /> for an 110introduction.<informaltable> 111 <tgroup cols="3"> 112 <thead> 113 <row> 114 <entry>struct 115<structname>video_capability</structname> 116<structfield>type</structfield></entry> 117 <entry>&v4l2-capability; 118<structfield>capabilities</structfield> flags</entry> 119 <entry>Purpose</entry> 120 </row> 121 </thead> 122 <tbody valign="top"> 123 <row> 124 <entry><constant>VID_TYPE_CAPTURE</constant></entry> 125 <entry><constant>V4L2_CAP_VIDEO_CAPTURE</constant></entry> 126 <entry>The <link linkend="capture">video 127capture</link> interface is supported.</entry> 128 </row> 129 <row> 130 <entry><constant>VID_TYPE_TUNER</constant></entry> 131 <entry><constant>V4L2_CAP_TUNER</constant></entry> 132 <entry>The device has a <link linkend="tuner">tuner or 133modulator</link>.</entry> 134 </row> 135 <row> 136 <entry><constant>VID_TYPE_TELETEXT</constant></entry> 137 <entry><constant>V4L2_CAP_VBI_CAPTURE</constant></entry> 138 <entry>The <link linkend="raw-vbi">raw VBI 139capture</link> interface is supported.</entry> 140 </row> 141 <row> 142 <entry><constant>VID_TYPE_OVERLAY</constant></entry> 143 <entry><constant>V4L2_CAP_VIDEO_OVERLAY</constant></entry> 144 <entry>The <link linkend="overlay">video 145overlay</link> interface is supported.</entry> 146 </row> 147 <row> 148 <entry><constant>VID_TYPE_CHROMAKEY</constant></entry> 149 <entry><constant>V4L2_FBUF_CAP_CHROMAKEY</constant> in 150field <structfield>capability</structfield> of 151&v4l2-framebuffer;</entry> 152 <entry>Whether chromakey overlay is supported. For 153more information on overlay see 154<xref linkend="overlay" />.</entry> 155 </row> 156 <row> 157 <entry><constant>VID_TYPE_CLIPPING</constant></entry> 158 <entry><constant>V4L2_FBUF_CAP_LIST_CLIPPING</constant> 159and <constant>V4L2_FBUF_CAP_BITMAP_CLIPPING</constant> in field 160<structfield>capability</structfield> of &v4l2-framebuffer;</entry> 161 <entry>Whether clipping the overlaid image is 162supported, see <xref linkend="overlay" />.</entry> 163 </row> 164 <row> 165 <entry><constant>VID_TYPE_FRAMERAM</constant></entry> 166 <entry><constant>V4L2_FBUF_CAP_EXTERNOVERLAY</constant> 167<emphasis>not set</emphasis> in field 168<structfield>capability</structfield> of &v4l2-framebuffer;</entry> 169 <entry>Whether overlay overwrites frame buffer memory, 170see <xref linkend="overlay" />.</entry> 171 </row> 172 <row> 173 <entry><constant>VID_TYPE_SCALES</constant></entry> 174 <entry><constant>-</constant></entry> 175 <entry>This flag indicates if the hardware can scale 176images. The V4L2 API implies the scale factor by setting the cropping 177dimensions and image size with the &VIDIOC-S-CROP; and &VIDIOC-S-FMT; 178ioctl, respectively. The driver returns the closest sizes possible. 179For more information on cropping and scaling see <xref 180 linkend="crop" />.</entry> 181 </row> 182 <row> 183 <entry><constant>VID_TYPE_MONOCHROME</constant></entry> 184 <entry><constant>-</constant></entry> 185 <entry>Applications can enumerate the supported image 186formats with the &VIDIOC-ENUM-FMT; ioctl to determine if the device 187supports grey scale capturing only. For more information on image 188formats see <xref linkend="pixfmt" />.</entry> 189 </row> 190 <row> 191 <entry><constant>VID_TYPE_SUBCAPTURE</constant></entry> 192 <entry><constant>-</constant></entry> 193 <entry>Applications can call the &VIDIOC-G-CROP; ioctl 194to determine if the device supports capturing a subsection of the full 195picture ("cropping" in V4L2). If not, the ioctl returns the &EINVAL;. 196For more information on cropping and scaling see <xref 197 linkend="crop" />.</entry> 198 </row> 199 <row> 200 <entry><constant>VID_TYPE_MPEG_DECODER</constant></entry> 201 <entry><constant>-</constant></entry> 202 <entry>Applications can enumerate the supported image 203formats with the &VIDIOC-ENUM-FMT; ioctl to determine if the device 204supports MPEG streams.</entry> 205 </row> 206 <row> 207 <entry><constant>VID_TYPE_MPEG_ENCODER</constant></entry> 208 <entry><constant>-</constant></entry> 209 <entry>See above.</entry> 210 </row> 211 <row> 212 <entry><constant>VID_TYPE_MJPEG_DECODER</constant></entry> 213 <entry><constant>-</constant></entry> 214 <entry>See above.</entry> 215 </row> 216 <row> 217 <entry><constant>VID_TYPE_MJPEG_ENCODER</constant></entry> 218 <entry><constant>-</constant></entry> 219 <entry>See above.</entry> 220 </row> 221 </tbody> 222 </tgroup> 223 </informaltable></para> 224 225 <para>The <structfield>audios</structfield> field was replaced 226by <structfield>capabilities</structfield> flag 227<constant>V4L2_CAP_AUDIO</constant>, indicating 228<emphasis>if</emphasis> the device has any audio inputs or outputs. To 229determine their number applications can enumerate audio inputs with 230the &VIDIOC-G-AUDIO; ioctl. The audio ioctls are described in <xref 231 linkend="audio" />.</para> 232 233 <para>The <structfield>maxwidth</structfield>, 234<structfield>maxheight</structfield>, 235<structfield>minwidth</structfield> and 236<structfield>minheight</structfield> fields were removed. Calling the 237&VIDIOC-S-FMT; or &VIDIOC-TRY-FMT; ioctl with the desired dimensions 238returns the closest size possible, taking into account the current 239video standard, cropping and scaling limitations.</para> 240 </section> 241 242 <section> 243 <title>Video Sources</title> 244 245 <para>V4L provides the <constant>VIDIOCGCHAN</constant> and 246<constant>VIDIOCSCHAN</constant> ioctl using struct 247<structname>video_channel</structname> to enumerate 248the video inputs of a V4L device. The equivalent V4L2 ioctls 249are &VIDIOC-ENUMINPUT;, &VIDIOC-G-INPUT; and &VIDIOC-S-INPUT; 250using &v4l2-input; as discussed in <xref linkend="video" />.</para> 251 252 <para>The <structfield>channel</structfield> field counting 253inputs was renamed to <structfield>index</structfield>, the video 254input types were renamed as follows: <informaltable> 255 <tgroup cols="2"> 256 <thead> 257 <row> 258 <entry>struct <structname>video_channel</structname> 259<structfield>type</structfield></entry> 260 <entry>&v4l2-input; 261<structfield>type</structfield></entry> 262 </row> 263 </thead> 264 <tbody valign="top"> 265 <row> 266 <entry><constant>VIDEO_TYPE_TV</constant></entry> 267 <entry><constant>V4L2_INPUT_TYPE_TUNER</constant></entry> 268 </row> 269 <row> 270 <entry><constant>VIDEO_TYPE_CAMERA</constant></entry> 271 <entry><constant>V4L2_INPUT_TYPE_CAMERA</constant></entry> 272 </row> 273 </tbody> 274 </tgroup> 275 </informaltable></para> 276 277 <para>Unlike the <structfield>tuners</structfield> field 278expressing the number of tuners of this input, V4L2 assumes each video 279input is connected to at most one tuner. However a tuner can have more 280than one input, &ie; RF connectors, and a device can have multiple 281tuners. The index number of the tuner associated with the input, if 282any, is stored in field <structfield>tuner</structfield> of 283&v4l2-input;. Enumeration of tuners is discussed in <xref 284 linkend="tuner" />.</para> 285 286 <para>The redundant <constant>VIDEO_VC_TUNER</constant> flag was 287dropped. Video inputs associated with a tuner are of type 288<constant>V4L2_INPUT_TYPE_TUNER</constant>. The 289<constant>VIDEO_VC_AUDIO</constant> flag was replaced by the 290<structfield>audioset</structfield> field. V4L2 considers devices with 291up to 32 audio inputs. Each set bit in the 292<structfield>audioset</structfield> field represents one audio input 293this video input combines with. For information about audio inputs and 294how to switch between them see <xref linkend="audio" />.</para> 295 296 <para>The <structfield>norm</structfield> field describing the 297supported video standards was replaced by 298<structfield>std</structfield>. The V4L specification mentions a flag 299<constant>VIDEO_VC_NORM</constant> indicating whether the standard can 300be changed. This flag was a later addition together with the 301<structfield>norm</structfield> field and has been removed in the 302meantime. V4L2 has a similar, albeit more comprehensive approach 303to video standards, see <xref linkend="standard" /> for more 304information.</para> 305 </section> 306 307 <section> 308 <title>Tuning</title> 309 310 <para>The V4L <constant>VIDIOCGTUNER</constant> and 311<constant>VIDIOCSTUNER</constant> ioctl and struct 312<structname>video_tuner</structname> can be used to enumerate the 313tuners of a V4L TV or radio device. The equivalent V4L2 ioctls are 314&VIDIOC-G-TUNER; and &VIDIOC-S-TUNER; using &v4l2-tuner;. Tuners are 315covered in <xref linkend="tuner" />.</para> 316 317 <para>The <structfield>tuner</structfield> field counting tuners 318was renamed to <structfield>index</structfield>. The fields 319<structfield>name</structfield>, <structfield>rangelow</structfield> 320and <structfield>rangehigh</structfield> remained unchanged.</para> 321 322 <para>The <constant>VIDEO_TUNER_PAL</constant>, 323<constant>VIDEO_TUNER_NTSC</constant> and 324<constant>VIDEO_TUNER_SECAM</constant> flags indicating the supported 325video standards were dropped. This information is now contained in the 326associated &v4l2-input;. No replacement exists for the 327<constant>VIDEO_TUNER_NORM</constant> flag indicating whether the 328video standard can be switched. The <structfield>mode</structfield> 329field to select a different video standard was replaced by a whole new 330set of ioctls and structures described in <xref linkend="standard" />. 331Due to its ubiquity it should be mentioned the BTTV driver supports 332several standards in addition to the regular 333<constant>VIDEO_MODE_PAL</constant> (0), 334<constant>VIDEO_MODE_NTSC</constant>, 335<constant>VIDEO_MODE_SECAM</constant> and 336<constant>VIDEO_MODE_AUTO</constant> (3). Namely N/PAL Argentina, 337M/PAL, N/PAL, and NTSC Japan with numbers 3-6 (sic).</para> 338 339 <para>The <constant>VIDEO_TUNER_STEREO_ON</constant> flag 340indicating stereo reception became 341<constant>V4L2_TUNER_SUB_STEREO</constant> in field 342<structfield>rxsubchans</structfield>. This field also permits the 343detection of monaural and bilingual audio, see the definition of 344&v4l2-tuner; for details. Presently no replacement exists for the 345<constant>VIDEO_TUNER_RDS_ON</constant> and 346<constant>VIDEO_TUNER_MBS_ON</constant> flags.</para> 347 348 <para> The <constant>VIDEO_TUNER_LOW</constant> flag was renamed 349to <constant>V4L2_TUNER_CAP_LOW</constant> in the &v4l2-tuner; 350<structfield>capability</structfield> field.</para> 351 352 <para>The <constant>VIDIOCGFREQ</constant> and 353<constant>VIDIOCSFREQ</constant> ioctl to change the tuner frequency 354where renamed to &VIDIOC-G-FREQUENCY; and &VIDIOC-S-FREQUENCY;. They 355take a pointer to a &v4l2-frequency; instead of an unsigned long 356integer.</para> 357 </section> 358 359 <section id="v4l-image-properties"> 360 <title>Image Properties</title> 361 362 <para>V4L2 has no equivalent of the 363<constant>VIDIOCGPICT</constant> and <constant>VIDIOCSPICT</constant> 364ioctl and struct <structname>video_picture</structname>. The following 365fields where replaced by V4L2 controls accessible with the 366&VIDIOC-QUERYCTRL;, &VIDIOC-G-CTRL; and &VIDIOC-S-CTRL; ioctls:<informaltable> 367 <tgroup cols="2"> 368 <thead> 369 <row> 370 <entry>struct <structname>video_picture</structname></entry> 371 <entry>V4L2 Control ID</entry> 372 </row> 373 </thead> 374 <tbody valign="top"> 375 <row> 376 <entry><structfield>brightness</structfield></entry> 377 <entry><constant>V4L2_CID_BRIGHTNESS</constant></entry> 378 </row> 379 <row> 380 <entry><structfield>hue</structfield></entry> 381 <entry><constant>V4L2_CID_HUE</constant></entry> 382 </row> 383 <row> 384 <entry><structfield>colour</structfield></entry> 385 <entry><constant>V4L2_CID_SATURATION</constant></entry> 386 </row> 387 <row> 388 <entry><structfield>contrast</structfield></entry> 389 <entry><constant>V4L2_CID_CONTRAST</constant></entry> 390 </row> 391 <row> 392 <entry><structfield>whiteness</structfield></entry> 393 <entry><constant>V4L2_CID_WHITENESS</constant></entry> 394 </row> 395 </tbody> 396 </tgroup> 397 </informaltable></para> 398 399 <para>The V4L picture controls are assumed to range from 0 to 40065535 with no particular reset value. The V4L2 API permits arbitrary 401limits and defaults which can be queried with the &VIDIOC-QUERYCTRL; 402ioctl. For general information about controls see <xref 403linkend="control" />.</para> 404 405 <para>The <structfield>depth</structfield> (average number of 406bits per pixel) of a video image is implied by the selected image 407format. V4L2 does not explicitely provide such information assuming 408applications recognizing the format are aware of the image depth and 409others need not know. The <structfield>palette</structfield> field 410moved into the &v4l2-pix-format;:<informaltable> 411 <tgroup cols="2"> 412 <thead> 413 <row> 414 <entry>struct <structname>video_picture</structname> 415<structfield>palette</structfield></entry> 416 <entry>&v4l2-pix-format; 417<structfield>pixfmt</structfield></entry> 418 </row> 419 </thead> 420 <tbody valign="top"> 421 <row> 422 <entry><constant>VIDEO_PALETTE_GREY</constant></entry> 423 <entry><para><link 424linkend="V4L2-PIX-FMT-GREY"><constant>V4L2_PIX_FMT_GREY</constant></link></para></entry> 425 </row> 426 <row> 427 <entry><constant>VIDEO_PALETTE_HI240</constant></entry> 428 <entry><para><link 429linkend="pixfmt-reserved"><constant>V4L2_PIX_FMT_HI240</constant></link><footnote> 430 <para>This is a custom format used by the BTTV 431driver, not one of the V4L2 standard formats.</para> 432 </footnote></para></entry> 433 </row> 434 <row> 435 <entry><constant>VIDEO_PALETTE_RGB565</constant></entry> 436 <entry><para><link 437linkend="pixfmt-rgb"><constant>V4L2_PIX_FMT_RGB565</constant></link></para></entry> 438 </row> 439 <row> 440 <entry><constant>VIDEO_PALETTE_RGB555</constant></entry> 441 <entry><para><link 442linkend="pixfmt-rgb"><constant>V4L2_PIX_FMT_RGB555</constant></link></para></entry> 443 </row> 444 <row> 445 <entry><constant>VIDEO_PALETTE_RGB24</constant></entry> 446 <entry><para><link 447linkend="pixfmt-rgb"><constant>V4L2_PIX_FMT_BGR24</constant></link></para></entry> 448 </row> 449 <row> 450 <entry><constant>VIDEO_PALETTE_RGB32</constant></entry> 451 <entry><para><link 452linkend="pixfmt-rgb"><constant>V4L2_PIX_FMT_BGR32</constant></link><footnote> 453 <para>Presumably all V4L RGB formats are 454little-endian, although some drivers might interpret them according to machine endianess. V4L2 defines little-endian, big-endian and red/blue 455swapped variants. For details see <xref linkend="pixfmt-rgb" />.</para> 456 </footnote></para></entry> 457 </row> 458 <row> 459 <entry><constant>VIDEO_PALETTE_YUV422</constant></entry> 460 <entry><para><link 461linkend="V4L2-PIX-FMT-YUYV"><constant>V4L2_PIX_FMT_YUYV</constant></link></para></entry> 462 </row> 463 <row> 464 <entry><para><constant>VIDEO_PALETTE_YUYV</constant><footnote> 465 <para><constant>VIDEO_PALETTE_YUV422</constant> 466and <constant>VIDEO_PALETTE_YUYV</constant> are the same formats. Some 467V4L drivers respond to one, some to the other.</para> 468 </footnote></para></entry> 469 <entry><para><link 470linkend="V4L2-PIX-FMT-YUYV"><constant>V4L2_PIX_FMT_YUYV</constant></link></para></entry> 471 </row> 472 <row> 473 <entry><constant>VIDEO_PALETTE_UYVY</constant></entry> 474 <entry><para><link 475linkend="V4L2-PIX-FMT-UYVY"><constant>V4L2_PIX_FMT_UYVY</constant></link></para></entry> 476 </row> 477 <row> 478 <entry><constant>VIDEO_PALETTE_YUV420</constant></entry> 479 <entry>None</entry> 480 </row> 481 <row> 482 <entry><constant>VIDEO_PALETTE_YUV411</constant></entry> 483 <entry><para><link 484linkend="V4L2-PIX-FMT-Y41P"><constant>V4L2_PIX_FMT_Y41P</constant></link><footnote> 485 <para>Not to be confused with 486<constant>V4L2_PIX_FMT_YUV411P</constant>, which is a planar 487format.</para> </footnote></para></entry> 488 </row> 489 <row> 490 <entry><constant>VIDEO_PALETTE_RAW</constant></entry> 491 <entry><para>None<footnote> <para>V4L explains this 492as: "RAW capture (BT848)"</para> </footnote></para></entry> 493 </row> 494 <row> 495 <entry><constant>VIDEO_PALETTE_YUV422P</constant></entry> 496 <entry><para><link 497linkend="V4L2-PIX-FMT-YUV422P"><constant>V4L2_PIX_FMT_YUV422P</constant></link></para></entry> 498 </row> 499 <row> 500 <entry><constant>VIDEO_PALETTE_YUV411P</constant></entry> 501 <entry><para><link 502linkend="V4L2-PIX-FMT-YUV411P"><constant>V4L2_PIX_FMT_YUV411P</constant></link><footnote> 503 <para>Not to be confused with 504<constant>V4L2_PIX_FMT_Y41P</constant>, which is a packed 505format.</para> </footnote></para></entry> 506 </row> 507 <row> 508 <entry><constant>VIDEO_PALETTE_YUV420P</constant></entry> 509 <entry><para><link 510linkend="V4L2-PIX-FMT-YVU420"><constant>V4L2_PIX_FMT_YVU420</constant></link></para></entry> 511 </row> 512 <row> 513 <entry><constant>VIDEO_PALETTE_YUV410P</constant></entry> 514 <entry><para><link 515linkend="V4L2-PIX-FMT-YVU410"><constant>V4L2_PIX_FMT_YVU410</constant></link></para></entry> 516 </row> 517 </tbody> 518 </tgroup> 519 </informaltable></para> 520 521 <para>V4L2 image formats are defined in <xref 522linkend="pixfmt" />. The image format can be selected with the 523&VIDIOC-S-FMT; ioctl.</para> 524 </section> 525 526 <section> 527 <title>Audio</title> 528 529 <para>The <constant>VIDIOCGAUDIO</constant> and 530<constant>VIDIOCSAUDIO</constant> ioctl and struct 531<structname>video_audio</structname> are used to enumerate the 532audio inputs of a V4L device. The equivalent V4L2 ioctls are 533&VIDIOC-G-AUDIO; and &VIDIOC-S-AUDIO; using &v4l2-audio; as 534discussed in <xref linkend="audio" />.</para> 535 536 <para>The <structfield>audio</structfield> "channel number" 537field counting audio inputs was renamed to 538<structfield>index</structfield>.</para> 539 540 <para>On <constant>VIDIOCSAUDIO</constant> the 541<structfield>mode</structfield> field selects <emphasis>one</emphasis> 542of the <constant>VIDEO_SOUND_MONO</constant>, 543<constant>VIDEO_SOUND_STEREO</constant>, 544<constant>VIDEO_SOUND_LANG1</constant> or 545<constant>VIDEO_SOUND_LANG2</constant> audio demodulation modes. When 546the current audio standard is BTSC 547<constant>VIDEO_SOUND_LANG2</constant> refers to SAP and 548<constant>VIDEO_SOUND_LANG1</constant> is meaningless. Also 549undocumented in the V4L specification, there is no way to query the 550selected mode. On <constant>VIDIOCGAUDIO</constant> the driver returns 551the <emphasis>actually received</emphasis> audio programmes in this 552field. In the V4L2 API this information is stored in the &v4l2-tuner; 553<structfield>rxsubchans</structfield> and 554<structfield>audmode</structfield> fields, respectively. See <xref 555linkend="tuner" /> for more information on tuners. Related to audio 556modes &v4l2-audio; also reports if this is a mono or stereo 557input, regardless if the source is a tuner.</para> 558 559 <para>The following fields where replaced by V4L2 controls 560accessible with the &VIDIOC-QUERYCTRL;, &VIDIOC-G-CTRL; and 561&VIDIOC-S-CTRL; ioctls:<informaltable> 562 <tgroup cols="2"> 563 <thead> 564 <row> 565 <entry>struct 566<structname>video_audio</structname></entry> 567 <entry>V4L2 Control ID</entry> 568 </row> 569 </thead> 570 <tbody valign="top"> 571 <row> 572 <entry><structfield>volume</structfield></entry> 573 <entry><constant>V4L2_CID_AUDIO_VOLUME</constant></entry> 574 </row> 575 <row> 576 <entry><structfield>bass</structfield></entry> 577 <entry><constant>V4L2_CID_AUDIO_BASS</constant></entry> 578 </row> 579 <row> 580 <entry><structfield>treble</structfield></entry> 581 <entry><constant>V4L2_CID_AUDIO_TREBLE</constant></entry> 582 </row> 583 <row> 584 <entry><structfield>balance</structfield></entry> 585 <entry><constant>V4L2_CID_AUDIO_BALANCE</constant></entry> 586 </row> 587 </tbody> 588 </tgroup> 589 </informaltable></para> 590 591 <para>To determine which of these controls are supported by a 592driver V4L provides the <structfield>flags</structfield> 593<constant>VIDEO_AUDIO_VOLUME</constant>, 594<constant>VIDEO_AUDIO_BASS</constant>, 595<constant>VIDEO_AUDIO_TREBLE</constant> and 596<constant>VIDEO_AUDIO_BALANCE</constant>. In the V4L2 API the 597&VIDIOC-QUERYCTRL; ioctl reports if the respective control is 598supported. Accordingly the <constant>VIDEO_AUDIO_MUTABLE</constant> 599and <constant>VIDEO_AUDIO_MUTE</constant> flags where replaced by the 600boolean <constant>V4L2_CID_AUDIO_MUTE</constant> control.</para> 601 602 <para>All V4L2 controls have a <structfield>step</structfield> 603attribute replacing the struct <structname>video_audio</structname> 604<structfield>step</structfield> field. The V4L audio controls are 605assumed to range from 0 to 65535 with no particular reset value. The 606V4L2 API permits arbitrary limits and defaults which can be queried 607with the &VIDIOC-QUERYCTRL; ioctl. For general information about 608controls see <xref linkend="control" />.</para> 609 </section> 610 611 <section> 612 <title>Frame Buffer Overlay</title> 613 614 <para>The V4L2 ioctls equivalent to 615<constant>VIDIOCGFBUF</constant> and <constant>VIDIOCSFBUF</constant> 616are &VIDIOC-G-FBUF; and &VIDIOC-S-FBUF;. The 617<structfield>base</structfield> field of struct 618<structname>video_buffer</structname> remained unchanged, except V4L2 619defines a flag to indicate non-destructive overlays instead of a 620<constant>NULL</constant> pointer. All other fields moved into the 621&v4l2-pix-format; <structfield>fmt</structfield> substructure of 622&v4l2-framebuffer;. The <structfield>depth</structfield> field was 623replaced by <structfield>pixelformat</structfield>. See <xref 624 linkend="pixfmt-rgb" /> for a list of RGB formats and their 625respective color depths.</para> 626 627 <para>Instead of the special ioctls 628<constant>VIDIOCGWIN</constant> and <constant>VIDIOCSWIN</constant> 629V4L2 uses the general-purpose data format negotiation ioctls 630&VIDIOC-G-FMT; and &VIDIOC-S-FMT;. They take a pointer to a 631&v4l2-format; as argument. Here the <structfield>win</structfield> 632member of the <structfield>fmt</structfield> union is used, a 633&v4l2-window;.</para> 634 635 <para>The <structfield>x</structfield>, 636<structfield>y</structfield>, <structfield>width</structfield> and 637<structfield>height</structfield> fields of struct 638<structname>video_window</structname> moved into &v4l2-rect; 639substructure <structfield>w</structfield> of struct 640<structname>v4l2_window</structname>. The 641<structfield>chromakey</structfield>, 642<structfield>clips</structfield>, and 643<structfield>clipcount</structfield> fields remained unchanged. Struct 644<structname>video_clip</structname> was renamed to &v4l2-clip;, also 645containing a struct <structname>v4l2_rect</structname>, but the 646semantics are still the same.</para> 647 648 <para>The <constant>VIDEO_WINDOW_INTERLACE</constant> flag was 649dropped. Instead applications must set the 650<structfield>field</structfield> field to 651<constant>V4L2_FIELD_ANY</constant> or 652<constant>V4L2_FIELD_INTERLACED</constant>. The 653<constant>VIDEO_WINDOW_CHROMAKEY</constant> flag moved into 654&v4l2-framebuffer;, under the new name 655<constant>V4L2_FBUF_FLAG_CHROMAKEY</constant>.</para> 656 657 <para>In V4L, storing a bitmap pointer in 658<structfield>clips</structfield> and setting 659<structfield>clipcount</structfield> to 660<constant>VIDEO_CLIP_BITMAP</constant> (-1) requests bitmap 661clipping, using a fixed size bitmap of 1024 &times; 625 bits. Struct 662<structname>v4l2_window</structname> has a separate 663<structfield>bitmap</structfield> pointer field for this purpose and 664the bitmap size is determined by <structfield>w.width</structfield> and 665<structfield>w.height</structfield>.</para> 666 667 <para>The <constant>VIDIOCCAPTURE</constant> ioctl to enable or 668disable overlay was renamed to &VIDIOC-OVERLAY;.</para> 669 </section> 670 671 <section> 672 <title>Cropping</title> 673 674 <para>To capture only a subsection of the full picture V4L 675defines the <constant>VIDIOCGCAPTURE</constant> and 676<constant>VIDIOCSCAPTURE</constant> ioctls using struct 677<structname>video_capture</structname>. The equivalent V4L2 ioctls are 678&VIDIOC-G-CROP; and &VIDIOC-S-CROP; using &v4l2-crop;, and the related 679&VIDIOC-CROPCAP; ioctl. This is a rather complex matter, see 680<xref linkend="crop" /> for details.</para> 681 682 <para>The <structfield>x</structfield>, 683<structfield>y</structfield>, <structfield>width</structfield> and 684<structfield>height</structfield> fields moved into &v4l2-rect; 685substructure <structfield>c</structfield> of struct 686<structname>v4l2_crop</structname>. The 687<structfield>decimation</structfield> field was dropped. In the V4L2 688API the scaling factor is implied by the size of the cropping 689rectangle and the size of the captured or overlaid image.</para> 690 691 <para>The <constant>VIDEO_CAPTURE_ODD</constant> 692and <constant>VIDEO_CAPTURE_EVEN</constant> flags to capture only the 693odd or even field, respectively, were replaced by 694<constant>V4L2_FIELD_TOP</constant> and 695<constant>V4L2_FIELD_BOTTOM</constant> in the field named 696<structfield>field</structfield> of &v4l2-pix-format; and 697&v4l2-window;. These structures are used to select a capture or 698overlay format with the &VIDIOC-S-FMT; ioctl.</para> 699 </section> 700 701 <section> 702 <title>Reading Images, Memory Mapping</title> 703 704 <section> 705 <title>Capturing using the read method</title> 706 707 <para>There is no essential difference between reading images 708from a V4L or V4L2 device using the &func-read; function, however V4L2 709drivers are not required to support this I/O method. Applications can 710determine if the function is available with the &VIDIOC-QUERYCAP; 711ioctl. All V4L2 devices exchanging data with applications must support 712the &func-select; and &func-poll; functions.</para> 713 714 <para>To select an image format and size, V4L provides the 715<constant>VIDIOCSPICT</constant> and <constant>VIDIOCSWIN</constant> 716ioctls. V4L2 uses the general-purpose data format negotiation ioctls 717&VIDIOC-G-FMT; and &VIDIOC-S-FMT;. They take a pointer to a 718&v4l2-format; as argument, here the &v4l2-pix-format; named 719<structfield>pix</structfield> of its <structfield>fmt</structfield> 720union is used.</para> 721 722 <para>For more information about the V4L2 read interface see 723<xref linkend="rw" />.</para> 724 </section> 725 <section> 726 <title>Capturing using memory mapping</title> 727 728 <para>Applications can read from V4L devices by mapping 729buffers in device memory, or more often just buffers allocated in 730DMA-able system memory, into their address space. This avoids the data 731copying overhead of the read method. V4L2 supports memory mapping as 732well, with a few differences.</para> 733 734 <informaltable> 735 <tgroup cols="2"> 736 <thead> 737 <row> 738 <entry>V4L</entry> 739 <entry>V4L2</entry> 740 </row> 741 </thead> 742 <tbody valign="top"> 743 <row> 744 <entry></entry> 745 <entry>The image format must be selected before 746buffers are allocated, with the &VIDIOC-S-FMT; ioctl. When no format 747is selected the driver may use the last, possibly by another 748application requested format.</entry> 749 </row> 750 <row> 751 <entry><para>Applications cannot change the number of 752buffers. The it is built into the driver, unless it has a module 753option to change the number when the driver module is 754loaded.</para></entry> 755 <entry><para>The &VIDIOC-REQBUFS; ioctl allocates the 756desired number of buffers, this is a required step in the initialization 757sequence.</para></entry> 758 </row> 759 <row> 760 <entry><para>Drivers map all buffers as one contiguous 761range of memory. The <constant>VIDIOCGMBUF</constant> ioctl is 762available to query the number of buffers, the offset of each buffer 763from the start of the virtual file, and the overall amount of memory 764used, which can be used as arguments for the &func-mmap; 765function.</para></entry> 766 <entry><para>Buffers are individually mapped. The 767offset and size of each buffer can be determined with the 768&VIDIOC-QUERYBUF; ioctl.</para></entry> 769 </row> 770 <row> 771 <entry><para>The <constant>VIDIOCMCAPTURE</constant> 772ioctl prepares a buffer for capturing. It also determines the image 773format for this buffer. The ioctl returns immediately, eventually with 774an &EAGAIN; if no video signal had been detected. When the driver 775supports more than one buffer applications can call the ioctl multiple 776times and thus have multiple outstanding capture 777requests.</para><para>The <constant>VIDIOCSYNC</constant> ioctl 778suspends execution until a particular buffer has been 779filled.</para></entry> 780 <entry><para>Drivers maintain an incoming and outgoing 781queue. &VIDIOC-QBUF; enqueues any empty buffer into the incoming 782queue. Filled buffers are dequeued from the outgoing queue with the 783&VIDIOC-DQBUF; ioctl. To wait until filled buffers become available this 784function, &func-select; or &func-poll; can be used. The 785&VIDIOC-STREAMON; ioctl must be called once after enqueuing one or 786more buffers to start capturing. Its counterpart 787&VIDIOC-STREAMOFF; stops capturing and dequeues all buffers from both 788queues. Applications can query the signal status, if known, with the 789&VIDIOC-ENUMINPUT; ioctl.</para></entry> 790 </row> 791 </tbody> 792 </tgroup> 793 </informaltable> 794 795 <para>For a more in-depth discussion of memory mapping and 796examples, see <xref linkend="mmap" />.</para> 797 </section> 798 </section> 799 800 <section> 801 <title>Reading Raw VBI Data</title> 802 803 <para>Originally the V4L API did not specify a raw VBI capture 804interface, only the device file <filename>/dev/vbi</filename> was 805reserved for this purpose. The only driver supporting this interface 806was the BTTV driver, de-facto defining the V4L VBI interface. Reading 807from the device yields a raw VBI image with the following 808parameters:<informaltable> 809 <tgroup cols="2"> 810 <thead> 811 <row> 812 <entry>&v4l2-vbi-format;</entry> 813 <entry>V4L, BTTV driver</entry> 814 </row> 815 </thead> 816 <tbody valign="top"> 817 <row> 818 <entry>sampling_rate</entry> 819 <entry>28636363&nbsp;Hz NTSC (or any other 525-line 820standard); 35468950&nbsp;Hz PAL and SECAM (625-line standards)</entry> 821 </row> 822 <row> 823 <entry>offset</entry> 824 <entry>?</entry> 825 </row> 826 <row> 827 <entry>samples_per_line</entry> 828 <entry>2048</entry> 829 </row> 830 <row> 831 <entry>sample_format</entry> 832 <entry>V4L2_PIX_FMT_GREY. The last four bytes (a 833machine endianess integer) contain a frame counter.</entry> 834 </row> 835 <row> 836 <entry>start[]</entry> 837 <entry>10, 273 NTSC; 22, 335 PAL and SECAM</entry> 838 </row> 839 <row> 840 <entry>count[]</entry> 841 <entry><para>16, 16<footnote><para>Old driver 842versions used different values, eventually the custom 843<constant>BTTV_VBISIZE</constant> ioctl was added to query the 844correct values.</para></footnote></para></entry> 845 </row> 846 <row> 847 <entry>flags</entry> 848 <entry>0</entry> 849 </row> 850 </tbody> 851 </tgroup> 852 </informaltable></para> 853 854 <para>Undocumented in the V4L specification, in Linux 2.3 the 855<constant>VIDIOCGVBIFMT</constant> and 856<constant>VIDIOCSVBIFMT</constant> ioctls using struct 857<structname>vbi_format</structname> were added to determine the VBI 858image parameters. These ioctls are only partially compatible with the 859V4L2 VBI interface specified in <xref linkend="raw-vbi" />.</para> 860 861 <para>An <structfield>offset</structfield> field does not 862exist, <structfield>sample_format</structfield> is supposed to be 863<constant>VIDEO_PALETTE_RAW</constant>, equivalent to 864<constant>V4L2_PIX_FMT_GREY</constant>. The remaining fields are 865probably equivalent to &v4l2-vbi-format;.</para> 866 867 <para>Apparently only the Zoran (ZR 36120) driver implements 868these ioctls. The semantics differ from those specified for V4L2 in two 869ways. The parameters are reset on &func-open; and 870<constant>VIDIOCSVBIFMT</constant> always returns an &EINVAL; if the 871parameters are invalid.</para> 872 </section> 873 874 <section> 875 <title>Miscellaneous</title> 876 877 <para>V4L2 has no equivalent of the 878<constant>VIDIOCGUNIT</constant> ioctl. Applications can find the VBI 879device associated with a video capture device (or vice versa) by 880reopening the device and requesting VBI data. For details see 881<xref linkend="open" />.</para> 882 883 <para>No replacement exists for <constant>VIDIOCKEY</constant>, 884and the V4L functions for microcode programming. A new interface for 885MPEG compression and playback devices is documented in <xref 886 linkend="extended-controls" />.</para> 887 </section> 888 889 </section> 890 891 <section id="hist-v4l2"> 892 <title>Changes of the V4L2 API</title> 893 894 <para>Soon after the V4L API was added to the kernel it was 895criticised as too inflexible. In August 1998 Bill Dirks proposed a 896number of improvements and began to work on documentation, example 897drivers and applications. With the help of other volunteers this 898eventually became the V4L2 API, not just an extension but a 899replacement for the V4L API. However it took another four years and 900two stable kernel releases until the new API was finally accepted for 901inclusion into the kernel in its present form.</para> 902 903 <section> 904 <title>Early Versions</title> 905 <para>1998-08-20: First version.</para> 906 907 <para>1998-08-27: The &func-select; function was introduced.</para> 908 909 <para>1998-09-10: New video standard interface.</para> 910 911 <para>1998-09-18: The <constant>VIDIOC_NONCAP</constant> ioctl 912was replaced by the otherwise meaningless <constant>O_TRUNC</constant> 913&func-open; flag, and the aliases <constant>O_NONCAP</constant> and 914<constant>O_NOIO</constant> were defined. Applications can set this 915flag if they intend to access controls only, as opposed to capture 916applications which need exclusive access. The 917<constant>VIDEO_STD_XXX</constant> identifiers are now ordinals 918instead of flags, and the <function>video_std_construct()</function> 919helper function takes id and transmission arguments.</para> 920 921 <para>1998-09-28: Revamped video standard. Made video controls 922individually enumerable.</para> 923 924 <para>1998-10-02: The <structfield>id</structfield> field was 925removed from struct <structname>video_standard</structname> and the 926color subcarrier fields were renamed. The &VIDIOC-QUERYSTD; ioctl was 927renamed to &VIDIOC-ENUMSTD;, &VIDIOC-G-INPUT; to &VIDIOC-ENUMINPUT;. A 928first draft of the Codec API was released.</para> 929 930 <para>1998-11-08: Many minor changes. Most symbols have been 931renamed. Some material changes to &v4l2-capability;.</para> 932 933 <para>1998-11-12: The read/write directon of some ioctls was misdefined.</para> 934 935 <para>1998-11-14: <constant>V4L2_PIX_FMT_RGB24</constant> 936changed to <constant>V4L2_PIX_FMT_BGR24</constant>, and 937<constant>V4L2_PIX_FMT_RGB32</constant> changed to 938<constant>V4L2_PIX_FMT_BGR32</constant>. Audio controls are now 939accessible with the &VIDIOC-G-CTRL; and &VIDIOC-S-CTRL; ioctls under 940names starting with <constant>V4L2_CID_AUDIO</constant>. The 941<constant>V4L2_MAJOR</constant> define was removed from 942<filename>videodev.h</filename> since it was only used once in the 943<filename>videodev</filename> kernel module. The 944<constant>YUV422</constant> and <constant>YUV411</constant> planar 945image formats were added.</para> 946 947 <para>1998-11-28: A few ioctl symbols changed. Interfaces for codecs and 948video output devices were added.</para> 949 950 <para>1999-01-14: A raw VBI capture interface was added.</para> 951 952 <para>1999-01-19: The <constant>VIDIOC_NEXTBUF</constant> ioctl 953 was removed.</para> 954 </section> 955 956 <section> 957 <title>V4L2 Version 0.16 1999-01-31</title> 958 <para>1999-01-27: There is now one QBUF ioctl, VIDIOC_QWBUF and VIDIOC_QRBUF 959are gone. VIDIOC_QBUF takes a v4l2_buffer as a parameter. Added 960digital zoom (cropping) controls.</para> 961 </section> 962 963 <!-- Where's 0.17? mhs couldn't find that videodev.h, perhaps Bill 964 forgot to bump the version number or never released it. --> 965 966 <section> 967 <title>V4L2 Version 0.18 1999-03-16</title> 968 <para>Added a v4l to V4L2 ioctl compatibility layer to 969videodev.c. Driver writers, this changes how you implement your ioctl 970handler. See the Driver Writer's Guide. Added some more control id 971codes.</para> 972 </section> 973 974 <section> 975 <title>V4L2 Version 0.19 1999-06-05</title> 976 <para>1999-03-18: Fill in the category and catname fields of 977v4l2_queryctrl objects before passing them to the driver. Required a 978minor change to the VIDIOC_QUERYCTRL handlers in the sample 979drivers.</para> 980 <para>1999-03-31: Better compatibility for v4l memory capture 981ioctls. Requires changes to drivers to fully support new compatibility 982features, see Driver Writer's Guide and v4l2cap.c. Added new control 983IDs: V4L2_CID_HFLIP, _VFLIP. Changed V4L2_PIX_FMT_YUV422P to _YUV422P, 984and _YUV411P to _YUV411P.</para> 985 <para>1999-04-04: Added a few more control IDs.</para> 986 <para>1999-04-07: Added the button control type.</para> 987 <para>1999-05-02: Fixed a typo in videodev.h, and added the 988V4L2_CTRL_FLAG_GRAYED (later V4L2_CTRL_FLAG_GRABBED) flag.</para> 989 <para>1999-05-20: Definition of VIDIOC_G_CTRL was wrong causing 990a malfunction of this ioctl.</para> 991 <para>1999-06-05: Changed the value of 992V4L2_CID_WHITENESS.</para> 993 </section> 994 995 <section> 996 <title>V4L2 Version 0.20 (1999-09-10)</title> 997 998 <para>Version 0.20 introduced a number of changes which were 999<emphasis>not backward compatible</emphasis> with 0.19 and earlier 1000versions. Purpose of these changes was to simplify the API, while 1001making it more extensible and following common Linux driver API 1002conventions.</para> 1003 1004 <orderedlist> 1005 <listitem> 1006 <para>Some typos in <constant>V4L2_FMT_FLAG</constant> 1007symbols were fixed. &v4l2-clip; was changed for compatibility with 1008v4l. (1999-08-30)</para> 1009 </listitem> 1010 1011 <listitem> 1012 <para><constant>V4L2_TUNER_SUB_LANG1</constant> was added. 1013(1999-09-05)</para> 1014 </listitem> 1015 1016 <listitem> 1017 <para>All ioctl() commands that used an integer argument now 1018take a pointer to an integer. Where it makes sense, ioctls will return 1019the actual new value in the integer pointed to by the argument, a 1020common convention in the V4L2 API. The affected ioctls are: 1021VIDIOC_PREVIEW, VIDIOC_STREAMON, VIDIOC_STREAMOFF, VIDIOC_S_FREQ, 1022VIDIOC_S_INPUT, VIDIOC_S_OUTPUT, VIDIOC_S_EFFECT. For example 1023<programlisting> 1024err = ioctl (fd, VIDIOC_XXX, V4L2_XXX); 1025</programlisting> becomes <programlisting> 1026int a = V4L2_XXX; err = ioctl(fd, VIDIOC_XXX, &amp;a); 1027</programlisting> 1028 </para> 1029 </listitem> 1030 1031 <listitem> 1032 <para>All the different get- and set-format commands were 1033swept into one &VIDIOC-G-FMT; and &VIDIOC-S-FMT; ioctl taking a union 1034and a type field selecting the union member as parameter. Purpose is to 1035simplify the API by eliminating several ioctls and to allow new and 1036driver private data streams without adding new ioctls.</para> 1037 1038 <para>This change obsoletes the following ioctls: 1039<constant>VIDIOC_S_INFMT</constant>, 1040<constant>VIDIOC_G_INFMT</constant>, 1041<constant>VIDIOC_S_OUTFMT</constant>, 1042<constant>VIDIOC_G_OUTFMT</constant>, 1043<constant>VIDIOC_S_VBIFMT</constant> and 1044<constant>VIDIOC_G_VBIFMT</constant>. The image format structure 1045<structname>v4l2_format</structname> was renamed to &v4l2-pix-format;, 1046while &v4l2-format; is now the envelopping structure for all format 1047negotiations.</para> 1048 </listitem> 1049 1050 <listitem> 1051 <para>Similar to the changes above, the 1052<constant>VIDIOC_G_PARM</constant> and 1053<constant>VIDIOC_S_PARM</constant> ioctls were merged with 1054<constant>VIDIOC_G_OUTPARM</constant> and 1055<constant>VIDIOC_S_OUTPARM</constant>. A 1056<structfield>type</structfield> field in the new &v4l2-streamparm; 1057selects the respective union member.</para> 1058 1059 <para>This change obsoletes the 1060<constant>VIDIOC_G_OUTPARM</constant> and 1061<constant>VIDIOC_S_OUTPARM</constant> ioctls.</para> 1062 </listitem> 1063 1064 <listitem> 1065 <para>Control enumeration was simplified, and two new 1066control flags were introduced and one dropped. The 1067<structfield>catname</structfield> field was replaced by a 1068<structfield>group</structfield> field.</para> 1069 1070 <para>Drivers can now flag unsupported and temporarily 1071unavailable controls with <constant>V4L2_CTRL_FLAG_DISABLED</constant> 1072and <constant>V4L2_CTRL_FLAG_GRABBED</constant> respectively. The 1073<structfield>group</structfield> name indicates a possibly narrower 1074classification than the <structfield>category</structfield>. In other 1075words, there may be multiple groups within a category. Controls within 1076a group would typically be drawn within a group box. Controls in 1077different categories might have a greater separation, or may even 1078appear in separate windows.</para> 1079 </listitem> 1080 1081 <listitem> 1082 <para>The &v4l2-buffer; <structfield>timestamp</structfield> 1083was changed to a 64 bit integer, containing the sampling or output 1084time of the frame in nanoseconds. Additionally timestamps will be in 1085absolute system time, not starting from zero at the beginning of a 1086stream. The data type name for timestamps is stamp_t, defined as a 1087signed 64-bit integer. Output devices should not send a buffer out 1088until the time in the timestamp field has arrived. I would like to 1089follow SGI's lead, and adopt a multimedia timestamping system like 1090their UST (Unadjusted System Time). See 1091http://web.archive.org/web/*/http://reality.sgi.com 1092/cpirazzi_engr/lg/time/intro.html. 1093UST uses timestamps that are 64-bit signed integers 1094(not struct timeval's) and given in nanosecond units. The UST clock 1095starts at zero when the system is booted and runs continuously and 1096uniformly. It takes a little over 292 years for UST to overflow. There 1097is no way to set the UST clock. The regular Linux time-of-day clock 1098can be changed periodically, which would cause errors if it were being 1099used for timestamping a multimedia stream. A real UST style clock will 1100require some support in the kernel that is not there yet. But in 1101anticipation, I will change the timestamp field to a 64-bit integer, 1102and I will change the v4l2_masterclock_gettime() function (used only 1103by drivers) to return a 64-bit integer.</para> 1104 </listitem> 1105 1106 <listitem> 1107 <para>A <structfield>sequence</structfield> field was added 1108to &v4l2-buffer;. The <structfield>sequence</structfield> field counts 1109captured frames, it is ignored by output devices. When a capture 1110driver drops a frame, the sequence number of that frame is 1111skipped.</para> 1112 </listitem> 1113 </orderedlist> 1114 </section> 1115 1116 <section> 1117 <title>V4L2 Version 0.20 incremental changes</title> 1118 <!-- Version number didn't change anymore, reason unknown. --> 1119 1120 <para>1999-12-23: In &v4l2-vbi-format; the 1121<structfield>reserved1</structfield> field became 1122<structfield>offset</structfield>. Previously drivers were required to 1123clear the <structfield>reserved1</structfield> field.</para> 1124 1125 <para>2000-01-13: The 1126 <constant>V4L2_FMT_FLAG_NOT_INTERLACED</constant> flag was added.</para> 1127 1128 <para>2000-07-31: The <filename>linux/poll.h</filename> header 1129is now included by <filename>videodev.h</filename> for compatibility 1130with the original <filename>videodev.h</filename> file.</para> 1131 1132 <para>2000-11-20: <constant>V4L2_TYPE_VBI_OUTPUT</constant> and 1133<constant>V4L2_PIX_FMT_Y41P</constant> were added.</para> 1134 1135 <para>2000-11-25: <constant>V4L2_TYPE_VBI_INPUT</constant> was 1136added.</para> 1137 1138 <para>2000-12-04: A couple typos in symbol names were fixed.</para> 1139 1140 <para>2001-01-18: To avoid namespace conflicts the 1141<constant>fourcc</constant> macro defined in the 1142<filename>videodev.h</filename> header file was renamed to 1143<constant>v4l2_fourcc</constant>.</para> 1144 1145 <para>2001-01-25: A possible driver-level compatibility problem 1146between the <filename>videodev.h</filename> file in Linux 2.4.0 and 1147the <filename>videodev.h</filename> file included in the 1148<filename>videodevX</filename> patch was fixed. Users of an earlier 1149version of <filename>videodevX</filename> on Linux 2.4.0 should 1150recompile their V4L and V4L2 drivers.</para> 1151 1152 <para>2001-01-26: A possible kernel-level incompatibility 1153between the <filename>videodev.h</filename> file in the 1154<filename>videodevX</filename> patch and the 1155<filename>videodev.h</filename> file in Linux 2.2.x with devfs patches 1156applied was fixed.</para> 1157 1158 <para>2001-03-02: Certain V4L ioctls which pass data in both 1159direction although they are defined with read-only parameter, did not 1160work correctly through the backward compatibility layer. 1161[Solution?]</para> 1162 1163 <para>2001-04-13: Big endian 16-bit RGB formats were added.</para> 1164 1165 <para>2001-09-17: New YUV formats and the &VIDIOC-G-FREQUENCY; and 1166&VIDIOC-S-FREQUENCY; ioctls were added. (The old 1167<constant>VIDIOC_G_FREQ</constant> and 1168<constant>VIDIOC_S_FREQ</constant> ioctls did not take multiple tuners 1169into account.)</para> 1170 1171 <para>2000-09-18: <constant>V4L2_BUF_TYPE_VBI</constant> was 1172added. This may <emphasis>break compatibility</emphasis> as the 1173&VIDIOC-G-FMT; and &VIDIOC-S-FMT; ioctls may fail now if the struct 1174<structname>v4l2_fmt</structname> <structfield>type</structfield> 1175field does not contain <constant>V4L2_BUF_TYPE_VBI</constant>. In the 1176documentation of the &v4l2-vbi-format; 1177<structfield>offset</structfield> field the ambiguous phrase "rising 1178edge" was changed to "leading edge".</para> 1179 </section> 1180 1181 <section> 1182 <title>V4L2 Version 0.20 2000-11-23</title> 1183 1184 <para>A number of changes were made to the raw VBI 1185interface.</para> 1186 1187 <orderedlist> 1188 <listitem> 1189 <para>Figures clarifying the line numbering scheme were 1190added to the V4L2 API specification. The 1191<structfield>start</structfield>[0] and 1192<structfield>start</structfield>[1] fields no longer count line 1193numbers beginning at zero. Rationale: a) The previous definition was 1194unclear. b) The <structfield>start</structfield>[] values are ordinal 1195numbers. c) There is no point in inventing a new line numbering 1196scheme. We now use line number as defined by ITU-R, period. 1197Compatibility: Add one to the start values. Applications depending on 1198the previous semantics may not function correctly.</para> 1199 </listitem> 1200 1201 <listitem> 1202 <para>The restriction "count[0] &gt; 0 and count[1] &gt; 0" 1203has been relaxed to "(count[0] + count[1]) &gt; 0". Rationale: 1204Drivers may allocate resources at scan line granularity and some data 1205services are transmitted only on the first field. The comment that 1206both <structfield>count</structfield> values will usually be equal is 1207misleading and pointless and has been removed. This change 1208<emphasis>breaks compatibility</emphasis> with earlier versions: 1209Drivers may return EINVAL, applications may not function 1210correctly.</para> 1211 </listitem> 1212 1213 <listitem> 1214 <para>Drivers are again permitted to return negative 1215(unknown) start values as proposed earlier. Why this feature was 1216dropped is unclear. This change may <emphasis>break 1217compatibility</emphasis> with applications depending on the start 1218values being positive. The use of <constant>EBUSY</constant> and 1219<constant>EINVAL</constant> error codes with the &VIDIOC-S-FMT; ioctl 1220was clarified. The &EBUSY; was finally documented, and the 1221<structfield>reserved2</structfield> field which was previously 1222mentioned only in the <filename>videodev.h</filename> header 1223file.</para> 1224 </listitem> 1225 1226 <listitem> 1227 <para>New buffer types 1228<constant>V4L2_TYPE_VBI_INPUT</constant> and 1229<constant>V4L2_TYPE_VBI_OUTPUT</constant> were added. The former is an 1230alias for the old <constant>V4L2_TYPE_VBI</constant>, the latter was 1231missing in the <filename>videodev.h</filename> file.</para> 1232 </listitem> 1233 </orderedlist> 1234 </section> 1235 1236 <section> 1237 <title>V4L2 Version 0.20 2002-07-25</title> 1238 <para>Added sliced VBI interface proposal.</para> 1239 </section> 1240 1241 <section> 1242 <title>V4L2 in Linux 2.5.46, 2002-10</title> 1243 1244 <para>Around October-November 2002, prior to an announced 1245feature freeze of Linux 2.5, the API was revised, drawing from 1246experience with V4L2 0.20. This unnamed version was finally merged 1247into Linux 2.5.46.</para> 1248 1249 <orderedlist> 1250 <listitem> 1251 <para>As specified in <xref linkend="related" />, drivers 1252must make related device functions available under all minor device 1253numbers.</para> 1254 </listitem> 1255 1256 <listitem> 1257 <para>The &func-open; function requires access mode 1258<constant>O_RDWR</constant> regardless of the device type. All V4L2 1259drivers exchanging data with applications must support the 1260<constant>O_NONBLOCK</constant> flag. The <constant>O_NOIO</constant> 1261flag, a V4L2 symbol which aliased the meaningless 1262<constant>O_TRUNC</constant> to indicate accesses without data 1263exchange (panel applications) was dropped. Drivers must stay in "panel 1264mode" until the application attempts to initiate a data exchange, see 1265<xref linkend="open" />.</para> 1266 </listitem> 1267 1268 <listitem> 1269 <para>The &v4l2-capability; changed dramatically. Note that 1270also the size of the structure changed, which is encoded in the ioctl 1271request code, thus older V4L2 devices will respond with an &EINVAL; to 1272the new &VIDIOC-QUERYCAP; ioctl.</para> 1273 1274 <para>There are new fields to identify the driver, a new RDS 1275device function <constant>V4L2_CAP_RDS_CAPTURE</constant>, the 1276<constant>V4L2_CAP_AUDIO</constant> flag indicates if the device has 1277any audio connectors, another I/O capability 1278<constant>V4L2_CAP_ASYNCIO</constant> can be flagged. In response to 1279these changes the <structfield>type</structfield> field became a bit 1280set and was merged into the <structfield>flags</structfield> field. 1281<constant>V4L2_FLAG_TUNER</constant> was renamed to 1282<constant>V4L2_CAP_TUNER</constant>, 1283<constant>V4L2_CAP_VIDEO_OVERLAY</constant> replaced 1284<constant>V4L2_FLAG_PREVIEW</constant> and 1285<constant>V4L2_CAP_VBI_CAPTURE</constant> and 1286<constant>V4L2_CAP_VBI_OUTPUT</constant> replaced 1287<constant>V4L2_FLAG_DATA_SERVICE</constant>. 1288<constant>V4L2_FLAG_READ</constant> and 1289<constant>V4L2_FLAG_WRITE</constant> were merged into 1290<constant>V4L2_CAP_READWRITE</constant>.</para> 1291 1292 <para>The redundant fields 1293<structfield>inputs</structfield>, <structfield>outputs</structfield> 1294and <structfield>audios</structfield> were removed. These properties 1295can be determined as described in <xref linkend="video" /> and <xref 1296linkend="audio" />.</para> 1297 1298 <para>The somewhat volatile and therefore barely useful 1299fields <structfield>maxwidth</structfield>, 1300<structfield>maxheight</structfield>, 1301<structfield>minwidth</structfield>, 1302<structfield>minheight</structfield>, 1303<structfield>maxframerate</structfield> were removed. This information 1304is available as described in <xref linkend="format" /> and 1305<xref linkend="standard" />.</para> 1306 1307 <para><constant>V4L2_FLAG_SELECT</constant> was removed. We 1308believe the select() function is important enough to require support 1309of it in all V4L2 drivers exchanging data with applications. The 1310redundant <constant>V4L2_FLAG_MONOCHROME</constant> flag was removed, 1311this information is available as described in <xref 1312 linkend="format" />.</para> 1313 </listitem> 1314 1315 <listitem> 1316 <para>In &v4l2-input; the 1317<structfield>assoc_audio</structfield> field and the 1318<structfield>capability</structfield> field and its only flag 1319<constant>V4L2_INPUT_CAP_AUDIO</constant> was replaced by the new 1320<structfield>audioset</structfield> field. Instead of linking one 1321video input to one audio input this field reports all audio inputs 1322this video input combines with.</para> 1323 1324 <para>New fields are <structfield>tuner</structfield> 1325(reversing the former link from tuners to video inputs), 1326<structfield>std</structfield> and 1327<structfield>status</structfield>.</para> 1328 1329 <para>Accordingly &v4l2-output; lost its 1330<structfield>capability</structfield> and 1331<structfield>assoc_audio</structfield> fields. 1332<structfield>audioset</structfield>, 1333<structfield>modulator</structfield> and 1334<structfield>std</structfield> where added instead.</para> 1335 </listitem> 1336 1337 <listitem> 1338 <para>The &v4l2-audio; field 1339<structfield>audio</structfield> was renamed to 1340<structfield>index</structfield>, for consistency with other 1341structures. A new capability flag 1342<constant>V4L2_AUDCAP_STEREO</constant> was added to indicated if the 1343audio input in question supports stereo sound. 1344<constant>V4L2_AUDCAP_EFFECTS</constant> and the corresponding 1345<constant>V4L2_AUDMODE</constant> flags where removed. This can be 1346easily implemented using controls. (However the same applies to AVL 1347which is still there.)</para> 1348 1349 <para>Again for consistency the &v4l2-audioout; field 1350<structfield>audio</structfield> was renamed to 1351<structfield>index</structfield>.</para> 1352 </listitem> 1353 1354 <listitem> 1355 <para>The &v4l2-tuner; 1356<structfield>input</structfield> field was replaced by an 1357<structfield>index</structfield> field, permitting devices with 1358multiple tuners. The link between video inputs and tuners is now 1359reversed, inputs point to their tuner. The 1360<structfield>std</structfield> substructure became a 1361simple set (more about this below) and moved into &v4l2-input;. A 1362<structfield>type</structfield> field was added.</para> 1363 1364 <para>Accordingly in &v4l2-modulator; the 1365<structfield>output</structfield> was replaced by an 1366<structfield>index</structfield> field.</para> 1367 1368 <para>In &v4l2-frequency; the 1369<structfield>port</structfield> field was replaced by a 1370<structfield>tuner</structfield> field containing the respective tuner 1371or modulator index number. A tuner <structfield>type</structfield> 1372field was added and the <structfield>reserved</structfield> field 1373became larger for future extensions (satellite tuners in 1374particular).</para> 1375 </listitem> 1376 1377 <listitem> 1378 <para>The idea of completely transparent video standards was 1379dropped. Experience showed that applications must be able to work with 1380video standards beyond presenting the user a menu. Instead of 1381enumerating supported standards with an ioctl applications can now 1382refer to standards by &v4l2-std-id; and symbols defined in the 1383<filename>videodev2.h</filename> header file. For details see <xref 1384 linkend="standard" />. The &VIDIOC-G-STD; and 1385&VIDIOC-S-STD; now take a pointer to this type as argument. 1386&VIDIOC-QUERYSTD; was added to autodetect the received standard, if 1387the hardware has this capability. In &v4l2-standard; an 1388<structfield>index</structfield> field was added for &VIDIOC-ENUMSTD;. 1389A &v4l2-std-id; field named <structfield>id</structfield> was added as 1390machine readable identifier, also replacing the 1391<structfield>transmission</structfield> field. The misleading 1392<structfield>framerate</structfield> field was renamed 1393to <structfield>frameperiod</structfield>. The now obsolete 1394<structfield>colorstandard</structfield> information, originally 1395needed to distguish between variations of standards, were 1396removed.</para> 1397 1398 <para>Struct <structname>v4l2_enumstd</structname> ceased to 1399be. &VIDIOC-ENUMSTD; now takes a pointer to a &v4l2-standard; 1400directly. The information which standards are supported by a 1401particular video input or output moved into &v4l2-input; and 1402&v4l2-output; fields named <structfield>std</structfield>, 1403respectively.</para> 1404 </listitem> 1405 1406 <listitem> 1407 <para>The &v4l2-queryctrl; fields 1408<structfield>category</structfield> and 1409<structfield>group</structfield> did not catch on and/or were not 1410implemented as expected and therefore removed.</para> 1411 </listitem> 1412 1413 <listitem> 1414 <para>The &VIDIOC-TRY-FMT; ioctl was added to negotiate data 1415formats as with &VIDIOC-S-FMT;, but without the overhead of 1416programming the hardware and regardless of I/O in progress.</para> 1417 1418 <para>In &v4l2-format; the <structfield>fmt</structfield> 1419union was extended to contain &v4l2-window;. All image format 1420negotiations are now possible with <constant>VIDIOC_G_FMT</constant>, 1421<constant>VIDIOC_S_FMT</constant> and 1422<constant>VIDIOC_TRY_FMT</constant>; ioctl. The 1423<constant>VIDIOC_G_WIN</constant> and 1424<constant>VIDIOC_S_WIN</constant> ioctls to prepare for a video 1425overlay were removed. The <structfield>type</structfield> field 1426changed to type &v4l2-buf-type; and the buffer type names changed as 1427follows.<informaltable> 1428 <tgroup cols="2"> 1429 <thead> 1430 <row> 1431 <entry>Old defines</entry> 1432 <entry>&v4l2-buf-type;</entry> 1433 </row> 1434 </thead> 1435 <tbody valign="top"> 1436 <row> 1437 <entry><constant>V4L2_BUF_TYPE_CAPTURE</constant></entry> 1438 <entry><constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant></entry> 1439 </row> 1440 <row> 1441 <entry><constant>V4L2_BUF_TYPE_CODECIN</constant></entry> 1442 <entry>Omitted for now</entry> 1443 </row> 1444 <row> 1445 <entry><constant>V4L2_BUF_TYPE_CODECOUT</constant></entry> 1446 <entry>Omitted for now</entry> 1447 </row> 1448 <row> 1449 <entry><constant>V4L2_BUF_TYPE_EFFECTSIN</constant></entry> 1450 <entry>Omitted for now</entry> 1451 </row> 1452 <row> 1453 <entry><constant>V4L2_BUF_TYPE_EFFECTSIN2</constant></entry> 1454 <entry>Omitted for now</entry> 1455 </row> 1456 <row> 1457 <entry><constant>V4L2_BUF_TYPE_EFFECTSOUT</constant></entry> 1458 <entry>Omitted for now</entry> 1459 </row> 1460 <row> 1461 <entry><constant>V4L2_BUF_TYPE_VIDEOOUT</constant></entry> 1462 <entry><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant></entry> 1463 </row> 1464 <row> 1465 <entry><constant>-</constant></entry> 1466 <entry><constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant></entry> 1467 </row> 1468 <row> 1469 <entry><constant>-</constant></entry> 1470 <entry><constant>V4L2_BUF_TYPE_VBI_CAPTURE</constant></entry> 1471 </row> 1472 <row> 1473 <entry><constant>-</constant></entry> 1474 <entry><constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant></entry> 1475 </row> 1476 <row> 1477 <entry><constant>-</constant></entry> 1478 <entry><constant>V4L2_BUF_TYPE_SLICED_VBI_CAPTURE</constant></entry> 1479 </row> 1480 <row> 1481 <entry><constant>-</constant></entry> 1482 <entry><constant>V4L2_BUF_TYPE_SLICED_VBI_OUTPUT</constant></entry> 1483 </row> 1484 <row> 1485 <entry><constant>V4L2_BUF_TYPE_PRIVATE_BASE</constant></entry> 1486 <entry><constant>V4L2_BUF_TYPE_PRIVATE</constant></entry> 1487 </row> 1488 </tbody> 1489 </tgroup> 1490 </informaltable></para> 1491 </listitem> 1492 1493 <listitem> 1494 <para>In &v4l2-fmtdesc; a &v4l2-buf-type; field named 1495<structfield>type</structfield> was added as in &v4l2-format;. The 1496<constant>VIDIOC_ENUM_FBUFFMT</constant> ioctl is no longer needed and 1497was removed. These calls can be replaced by &VIDIOC-ENUM-FMT; with 1498type <constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>.</para> 1499 </listitem> 1500 1501 <listitem> 1502 <para>In &v4l2-pix-format; the 1503<structfield>depth</structfield> field was removed, assuming 1504applications which recognize the format by its four-character-code 1505already know the color depth, and others do not care about it. The 1506same rationale lead to the removal of the 1507<constant>V4L2_FMT_FLAG_COMPRESSED</constant> flag. The 1508<constant>V4L2_FMT_FLAG_SWCONVECOMPRESSED</constant> flag was removed 1509because drivers are not supposed to convert images in kernel space. A 1510user library of conversion functions should be provided instead. The 1511<constant>V4L2_FMT_FLAG_BYTESPERLINE</constant> flag was redundant. 1512Applications can set the <structfield>bytesperline</structfield> field 1513to zero to get a reasonable default. Since the remaining flags were 1514replaced as well, the <structfield>flags</structfield> field itself 1515was removed.</para> 1516 <para>The interlace flags were replaced by a &v4l2-field; 1517value in a newly added <structfield>field</structfield> 1518field.<informaltable> 1519 <tgroup cols="2"> 1520 <thead> 1521 <row> 1522 <entry>Old flag</entry> 1523 <entry>&v4l2-field;</entry> 1524 </row> 1525 </thead> 1526 <tbody valign="top"> 1527 <row> 1528 <entry><constant>V4L2_FMT_FLAG_NOT_INTERLACED</constant></entry> 1529 <entry>?</entry> 1530 </row> 1531 <row> 1532 <entry><constant>V4L2_FMT_FLAG_INTERLACED</constant> 1533= <constant>V4L2_FMT_FLAG_COMBINED</constant></entry> 1534 <entry><constant>V4L2_FIELD_INTERLACED</constant></entry> 1535 </row> 1536 <row> 1537 <entry><constant>V4L2_FMT_FLAG_TOPFIELD</constant> 1538= <constant>V4L2_FMT_FLAG_ODDFIELD</constant></entry> 1539 <entry><constant>V4L2_FIELD_TOP</constant></entry> 1540 </row> 1541 <row> 1542 <entry><constant>V4L2_FMT_FLAG_BOTFIELD</constant> 1543= <constant>V4L2_FMT_FLAG_EVENFIELD</constant></entry> 1544 <entry><constant>V4L2_FIELD_BOTTOM</constant></entry> 1545 </row> 1546 <row> 1547 <entry><constant>-</constant></entry> 1548 <entry><constant>V4L2_FIELD_SEQ_TB</constant></entry> 1549 </row> 1550 <row> 1551 <entry><constant>-</constant></entry> 1552 <entry><constant>V4L2_FIELD_SEQ_BT</constant></entry> 1553 </row> 1554 <row> 1555 <entry><constant>-</constant></entry> 1556 <entry><constant>V4L2_FIELD_ALTERNATE</constant></entry> 1557 </row> 1558 </tbody> 1559 </tgroup> 1560 </informaltable></para> 1561 1562 <para>The color space flags were replaced by a 1563&v4l2-colorspace; value in a newly added 1564<structfield>colorspace</structfield> field, where one of 1565<constant>V4L2_COLORSPACE_SMPTE170M</constant>, 1566<constant>V4L2_COLORSPACE_BT878</constant>, 1567<constant>V4L2_COLORSPACE_470_SYSTEM_M</constant> or 1568<constant>V4L2_COLORSPACE_470_SYSTEM_BG</constant> replaces 1569<constant>V4L2_FMT_CS_601YUV</constant>.</para> 1570 </listitem> 1571 1572 <listitem> 1573 <para>In &v4l2-requestbuffers; the 1574<structfield>type</structfield> field was properly defined as 1575&v4l2-buf-type;. Buffer types changed as mentioned above. A new 1576<structfield>memory</structfield> field of type &v4l2-memory; was 1577added to distinguish between I/O methods using buffers allocated 1578by the driver or the application. See <xref linkend="io" /> for 1579details.</para> 1580 </listitem> 1581 1582 <listitem> 1583 <para>In &v4l2-buffer; the <structfield>type</structfield> 1584field was properly defined as &v4l2-buf-type;. Buffer types changed as 1585mentioned above. A <structfield>field</structfield> field of type 1586&v4l2-field; was added to indicate if a buffer contains a top or 1587bottom field. The old field flags were removed. Since no unadjusted 1588system time clock was added to the kernel as planned, the 1589<structfield>timestamp</structfield> field changed back from type 1590stamp_t, an unsigned 64 bit integer expressing the sample time in 1591nanoseconds, to struct <structname>timeval</structname>. With the 1592addition of a second memory mapping method the 1593<structfield>offset</structfield> field moved into union 1594<structfield>m</structfield>, and a new 1595<structfield>memory</structfield> field of type &v4l2-memory; was 1596added to distinguish between I/O methods. See <xref linkend="io" /> 1597for details.</para> 1598 1599 <para>The <constant>V4L2_BUF_REQ_CONTIG</constant> 1600flag was used by the V4L compatibility layer, after changes to this 1601code it was no longer needed. The 1602<constant>V4L2_BUF_ATTR_DEVICEMEM</constant> flag would indicate if 1603the buffer was indeed allocated in device memory rather than DMA-able 1604system memory. It was barely useful and so was removed.</para> 1605 </listitem> 1606 1607 <listitem> 1608 <para>In &v4l2-framebuffer; the 1609<structfield>base[3]</structfield> array anticipating double- and 1610triple-buffering in off-screen video memory, however without defining 1611a synchronization mechanism, was replaced by a single pointer. The 1612<constant>V4L2_FBUF_CAP_SCALEUP</constant> and 1613<constant>V4L2_FBUF_CAP_SCALEDOWN</constant> flags were removed. 1614Applications can determine this capability more accurately using the 1615new cropping and scaling interface. The 1616<constant>V4L2_FBUF_CAP_CLIPPING</constant> flag was replaced by 1617<constant>V4L2_FBUF_CAP_LIST_CLIPPING</constant> and 1618<constant>V4L2_FBUF_CAP_BITMAP_CLIPPING</constant>.</para> 1619 </listitem> 1620 1621 <listitem> 1622 <para>In &v4l2-clip; the <structfield>x</structfield>, 1623<structfield>y</structfield>, <structfield>width</structfield> and 1624<structfield>height</structfield> field moved into a 1625<structfield>c</structfield> substructure of type &v4l2-rect;. The 1626<structfield>x</structfield> and <structfield>y</structfield> fields 1627were renamed to <structfield>left</structfield> and 1628<structfield>top</structfield>, &ie; offsets to a context dependent 1629origin.</para> 1630 </listitem> 1631 1632 <listitem> 1633 <para>In &v4l2-window; the <structfield>x</structfield>, 1634<structfield>y</structfield>, <structfield>width</structfield> and 1635<structfield>height</structfield> field moved into a 1636<structfield>w</structfield> substructure as above. A 1637<structfield>field</structfield> field of type %v4l2-field; was added 1638to distinguish between field and frame (interlaced) overlay.</para> 1639 </listitem> 1640 1641 <listitem> 1642 <para>The digital zoom interface, including struct 1643<structname>v4l2_zoomcap</structname>, struct 1644<structname>v4l2_zoom</structname>, 1645<constant>V4L2_ZOOM_NONCAP</constant> and 1646<constant>V4L2_ZOOM_WHILESTREAMING</constant> was replaced by a new 1647cropping and scaling interface. The previously unused struct 1648<structname>v4l2_cropcap</structname> and 1649<structname>v4l2_crop</structname> where redefined for this purpose. 1650See <xref linkend="crop" /> for details.</para> 1651 </listitem> 1652 1653 <listitem> 1654 <para>In &v4l2-vbi-format; the 1655<structfield>SAMPLE_FORMAT</structfield> field now contains a 1656four-character-code as used to identify video image formats and 1657<constant>V4L2_PIX_FMT_GREY</constant> replaces the 1658<constant>V4L2_VBI_SF_UBYTE</constant> define. The 1659<structfield>reserved</structfield> field was extended.</para> 1660 </listitem> 1661 1662 <listitem> 1663 <para>In &v4l2-captureparm; the type of the 1664<structfield>timeperframe</structfield> field changed from unsigned 1665long to &v4l2-fract;. This allows the accurate expression of multiples 1666of the NTSC-M frame rate 30000 / 1001. A new field 1667<structfield>readbuffers</structfield> was added to control the driver 1668behaviour in read I/O mode.</para> 1669 1670 <para>Similar changes were made to &v4l2-outputparm;.</para> 1671 </listitem> 1672 1673 <listitem> 1674 <para>The struct <structname>v4l2_performance</structname> 1675and <constant>VIDIOC_G_PERF</constant> ioctl were dropped. Except when 1676using the <link linkend="rw">read/write I/O method</link>, which is 1677limited anyway, this information is already available to 1678applications.</para> 1679 </listitem> 1680 1681 <listitem> 1682 <para>The example transformation from RGB to YCbCr color 1683space in the old V4L2 documentation was inaccurate, this has been 1684corrected in <xref linkend="pixfmt" />.<!-- 0.5670G should be 16850.587, and 127/112 != 255/224 --></para> 1686 </listitem> 1687 </orderedlist> 1688 </section> 1689 1690 <section> 1691 <title>V4L2 2003-06-19</title> 1692 1693 <orderedlist> 1694 <listitem> 1695 <para>A new capability flag 1696<constant>V4L2_CAP_RADIO</constant> was added for radio devices. Prior 1697to this change radio devices would identify solely by having exactly one 1698tuner whose type field reads <constant>V4L2_TUNER_RADIO</constant>.</para> 1699 </listitem> 1700 1701 <listitem> 1702 <para>An optional driver access priority mechanism was 1703added, see <xref linkend="app-pri" /> for details.</para> 1704 </listitem> 1705 1706 <listitem> 1707 <para>The audio input and output interface was found to be 1708incomplete.</para> 1709 <para>Previously the &VIDIOC-G-AUDIO; 1710ioctl would enumerate the available audio inputs. An ioctl to 1711determine the current audio input, if more than one combines with the 1712current video input, did not exist. So 1713<constant>VIDIOC_G_AUDIO</constant> was renamed to 1714<constant>VIDIOC_G_AUDIO_OLD</constant>, this ioctl was removed on 1715Kernel 2.6.39. The &VIDIOC-ENUMAUDIO; ioctl was added to enumerate 1716audio inputs, while &VIDIOC-G-AUDIO; now reports the current audio 1717input.</para> 1718 <para>The same changes were made to &VIDIOC-G-AUDOUT; and 1719&VIDIOC-ENUMAUDOUT;.</para> 1720 <para>Until further the "videodev" module will automatically 1721translate between the old and new ioctls, but drivers and applications 1722must be updated to successfully compile again.</para> 1723 </listitem> 1724 1725 <listitem> 1726 <para>The &VIDIOC-OVERLAY; ioctl was incorrectly defined with 1727write-read parameter. It was changed to write-only, while the write-read 1728version was renamed to <constant>VIDIOC_OVERLAY_OLD</constant>. The old 1729ioctl was removed on Kernel 2.6.39. Until further the "videodev" 1730kernel module will automatically translate to the new version, so drivers 1731must be recompiled, but not applications.</para> 1732 </listitem> 1733 1734 <listitem> 1735 <para><xref linkend="overlay" /> incorrectly stated that 1736clipping rectangles define regions where the video can be seen. 1737Correct is that clipping rectangles define regions where 1738<emphasis>no</emphasis> video shall be displayed and so the graphics 1739surface can be seen.</para> 1740 </listitem> 1741 1742 <listitem> 1743 <para>The &VIDIOC-S-PARM; and &VIDIOC-S-CTRL; ioctls were 1744defined with write-only parameter, inconsistent with other ioctls 1745modifying their argument. They were changed to write-read, while a 1746<constant>_OLD</constant> suffix was added to the write-only versions. 1747The old ioctls were removed on Kernel 2.6.39. Drivers and 1748applications assuming a constant parameter need an update.</para> 1749 </listitem> 1750 </orderedlist> 1751 </section> 1752 1753 <section> 1754 <title>V4L2 2003-11-05</title> 1755 <orderedlist> 1756 <listitem> 1757 <para>In <xref linkend="pixfmt-rgb" /> the following pixel 1758formats were incorrectly transferred from Bill Dirks' V4L2 1759specification. Descriptions below refer to bytes in memory, in 1760ascending address order.<informaltable> 1761 <tgroup cols="3"> 1762 <thead> 1763 <row> 1764 <entry>Symbol</entry> 1765 <entry>In this document prior to revision 17660.5</entry> 1767 <entry>Corrected</entry> 1768 </row> 1769 </thead> 1770 <tbody valign="top"> 1771 <row> 1772 <entry><constant>V4L2_PIX_FMT_RGB24</constant></entry> 1773 <entry>B, G, R</entry> 1774 <entry>R, G, B</entry> 1775 </row> 1776 <row> 1777 <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> 1778 <entry>R, G, B</entry> 1779 <entry>B, G, R</entry> 1780 </row> 1781 <row> 1782 <entry><constant>V4L2_PIX_FMT_RGB32</constant></entry> 1783 <entry>B, G, R, X</entry> 1784 <entry>R, G, B, X</entry> 1785 </row> 1786 <row> 1787 <entry><constant>V4L2_PIX_FMT_BGR32</constant></entry> 1788 <entry>R, G, B, X</entry> 1789 <entry>B, G, R, X</entry> 1790 </row> 1791 </tbody> 1792 </tgroup> 1793 </informaltable> The 1794<constant>V4L2_PIX_FMT_BGR24</constant> example was always 1795correct.</para> 1796 <para>In <xref linkend="v4l-image-properties" /> the mapping 1797of the V4L <constant>VIDEO_PALETTE_RGB24</constant> and 1798<constant>VIDEO_PALETTE_RGB32</constant> formats to V4L2 pixel formats 1799was accordingly corrected.</para> 1800 </listitem> 1801 1802 <listitem> 1803 <para>Unrelated to the fixes above, drivers may still 1804interpret some V4L2 RGB pixel formats differently. These issues have 1805yet to be addressed, for details see <xref 1806 linkend="pixfmt-rgb" />.</para> 1807 </listitem> 1808 </orderedlist> 1809 </section> 1810 1811 <section> 1812 <title>V4L2 in Linux 2.6.6, 2004-05-09</title> 1813 <orderedlist> 1814 <listitem> 1815 <para>The &VIDIOC-CROPCAP; ioctl was incorrectly defined 1816with read-only parameter. It is now defined as write-read ioctl, while 1817the read-only version was renamed to 1818<constant>VIDIOC_CROPCAP_OLD</constant>. The old ioctl was removed 1819on Kernel 2.6.39.</para> 1820 </listitem> 1821 </orderedlist> 1822 </section> 1823 1824 <section> 1825 <title>V4L2 in Linux 2.6.8</title> 1826 <orderedlist> 1827 <listitem> 1828 <para>A new field <structfield>input</structfield> (former 1829<structfield>reserved[0]</structfield>) was added to the &v4l2-buffer; 1830structure. Purpose of this field is to alternate between video inputs 1831(&eg; cameras) in step with the video capturing process. This function 1832must be enabled with the new <constant>V4L2_BUF_FLAG_INPUT</constant> 1833flag. The <structfield>flags</structfield> field is no longer 1834read-only.</para> 1835 </listitem> 1836 </orderedlist> 1837 </section> 1838 1839 <section> 1840 <title>V4L2 spec erratum 2004-08-01</title> 1841 1842 <orderedlist> 1843 <listitem> 1844 <para>The return value of the 1845<xref linkend="func-open" /> function was incorrectly documented.</para> 1846 </listitem> 1847 1848 <listitem> 1849 <para>Audio output ioctls end in -AUDOUT, not -AUDIOOUT.</para> 1850 </listitem> 1851 1852 <listitem> 1853 <para>In the Current Audio Input example the 1854<constant>VIDIOC_G_AUDIO</constant> ioctl took the wrong 1855argument.</para> 1856 </listitem> 1857 1858 <listitem> 1859 <para>The documentation of the &VIDIOC-QBUF; and 1860&VIDIOC-DQBUF; ioctls did not mention the &v4l2-buffer; 1861<structfield>memory</structfield> field. It was also missing from 1862examples. Also on the <constant>VIDIOC_DQBUF</constant> page the &EIO; 1863was not documented.</para> 1864 </listitem> 1865 </orderedlist> 1866 </section> 1867 1868 <section> 1869 <title>V4L2 in Linux 2.6.14</title> 1870 <orderedlist> 1871 <listitem> 1872 <para>A new sliced VBI interface was added. It is documented 1873in <xref linkend="sliced" /> and replaces the interface first 1874proposed in V4L2 specification 0.8.</para> 1875 </listitem> 1876 </orderedlist> 1877 </section> 1878 1879 <section> 1880 <title>V4L2 in Linux 2.6.15</title> 1881 <orderedlist> 1882 <listitem> 1883 <para>The &VIDIOC-LOG-STATUS; ioctl was added.</para> 1884 </listitem> 1885 1886 <listitem> 1887 <para>New video standards 1888<constant>V4L2_STD_NTSC_443</constant>, 1889<constant>V4L2_STD_SECAM_LC</constant>, 1890<constant>V4L2_STD_SECAM_DK</constant> (a set of SECAM D, K and K1), 1891and <constant>V4L2_STD_ATSC</constant> (a set of 1892<constant>V4L2_STD_ATSC_8_VSB</constant> and 1893<constant>V4L2_STD_ATSC_16_VSB</constant>) were defined. Note the 1894<constant>V4L2_STD_525_60</constant> set now includes 1895<constant>V4L2_STD_NTSC_443</constant>. See also <xref 1896 linkend="v4l2-std-id" />.</para> 1897 </listitem> 1898 1899 <listitem> 1900 <para>The <constant>VIDIOC_G_COMP</constant> and 1901<constant>VIDIOC_S_COMP</constant> ioctl were renamed to 1902<constant>VIDIOC_G_MPEGCOMP</constant> and 1903<constant>VIDIOC_S_MPEGCOMP</constant> respectively. Their argument 1904was replaced by a struct 1905<structname>v4l2_mpeg_compression</structname> pointer. (The 1906<constant>VIDIOC_G_MPEGCOMP</constant> and 1907<constant>VIDIOC_S_MPEGCOMP</constant> ioctls where removed in Linux 19082.6.25.)</para> 1909 </listitem> 1910 </orderedlist> 1911 </section> 1912 1913 <section> 1914 <title>V4L2 spec erratum 2005-11-27</title> 1915 <para>The capture example in <xref linkend="capture-example" /> 1916called the &VIDIOC-S-CROP; ioctl without checking if cropping is 1917supported. In the video standard selection example in 1918<xref linkend="standard" /> the &VIDIOC-S-STD; call used the wrong 1919argument type.</para> 1920 </section> 1921 1922 <section> 1923 <title>V4L2 spec erratum 2006-01-10</title> 1924 <orderedlist> 1925 <listitem> 1926 <para>The <constant>V4L2_IN_ST_COLOR_KILL</constant> flag in 1927&v4l2-input; not only indicates if the color killer is enabled, but 1928also if it is active. (The color killer disables color decoding when 1929it detects no color in the video signal to improve the image 1930quality.)</para> 1931 </listitem> 1932 1933 <listitem> 1934 <para>&VIDIOC-S-PARM; is a write-read ioctl, not write-only as 1935stated on its reference page. The ioctl changed in 2003 as noted above.</para> 1936 </listitem> 1937 </orderedlist> 1938 </section> 1939 1940 <section> 1941 <title>V4L2 spec erratum 2006-02-03</title> 1942 <orderedlist> 1943 <listitem> 1944 <para>In &v4l2-captureparm; and &v4l2-outputparm; the 1945<structfield>timeperframe</structfield> field gives the time in 1946seconds, not microseconds.</para> 1947 </listitem> 1948 </orderedlist> 1949 </section> 1950 1951 <section> 1952 <title>V4L2 spec erratum 2006-02-04</title> 1953 <orderedlist> 1954 <listitem> 1955 <para>The <structfield>clips</structfield> field in 1956&v4l2-window; must point to an array of &v4l2-clip;, not a linked 1957list, because drivers ignore the struct 1958<structname>v4l2_clip</structname>.<structfield>next</structfield> 1959pointer.</para> 1960 </listitem> 1961 </orderedlist> 1962 </section> 1963 1964 <section> 1965 <title>V4L2 in Linux 2.6.17</title> 1966 <orderedlist> 1967 <listitem> 1968 <para>New video standard macros were added: 1969<constant>V4L2_STD_NTSC_M_KR</constant> (NTSC M South Korea), and the 1970sets <constant>V4L2_STD_MN</constant>, 1971<constant>V4L2_STD_B</constant>, <constant>V4L2_STD_GH</constant> and 1972<constant>V4L2_STD_DK</constant>. The 1973<constant>V4L2_STD_NTSC</constant> and 1974<constant>V4L2_STD_SECAM</constant> sets now include 1975<constant>V4L2_STD_NTSC_M_KR</constant> and 1976<constant>V4L2_STD_SECAM_LC</constant> respectively.</para> 1977 </listitem> 1978 1979 <listitem> 1980 <para>A new <constant>V4L2_TUNER_MODE_LANG1_LANG2</constant> 1981was defined to record both languages of a bilingual program. The 1982use of <constant>V4L2_TUNER_MODE_STEREO</constant> for this purpose 1983is deprecated now. See the &VIDIOC-G-TUNER; section for 1984details.</para> 1985 </listitem> 1986 </orderedlist> 1987 </section> 1988 1989 <section> 1990 <title>V4L2 spec erratum 2006-09-23 (Draft 0.15)</title> 1991 <orderedlist> 1992 <listitem> 1993 <para>In various places 1994<constant>V4L2_BUF_TYPE_SLICED_VBI_CAPTURE</constant> and 1995<constant>V4L2_BUF_TYPE_SLICED_VBI_OUTPUT</constant> of the sliced VBI 1996interface were not mentioned along with other buffer types.</para> 1997 </listitem> 1998 1999 <listitem> 2000 <para>In <xref linkend="vidioc-g-audio" /> it was clarified 2001that the &v4l2-audio; <structfield>mode</structfield> field is a flags 2002field.</para> 2003 </listitem> 2004 2005 <listitem> 2006 <para><xref linkend="vidioc-querycap" /> did not mention the 2007sliced VBI and radio capability flags.</para> 2008 </listitem> 2009 2010 <listitem> 2011 <para>In <xref linkend="vidioc-g-frequency" /> it was 2012clarified that applications must initialize the tuner 2013<structfield>type</structfield> field of &v4l2-frequency; before 2014calling &VIDIOC-S-FREQUENCY;.</para> 2015 </listitem> 2016 2017 <listitem> 2018 <para>The <structfield>reserved</structfield> array 2019in &v4l2-requestbuffers; has 2 elements, not 32.</para> 2020 </listitem> 2021 2022 <listitem> 2023 <para>In <xref linkend="output" /> and <xref 2024 linkend="raw-vbi" /> the device file names 2025<filename>/dev/vout</filename> which never caught on were replaced 2026by <filename>/dev/video</filename>.</para> 2027 </listitem> 2028 2029 <listitem> 2030 <para>With Linux 2.6.15 the possible range for VBI device minor 2031numbers was extended from 224-239 to 224-255. Accordingly device file names 2032<filename>/dev/vbi0</filename> to <filename>/dev/vbi31</filename> are 2033possible now.</para> 2034 </listitem> 2035 </orderedlist> 2036 </section> 2037 2038 <section> 2039 <title>V4L2 in Linux 2.6.18</title> 2040 <orderedlist> 2041 <listitem> 2042 <para>New ioctls &VIDIOC-G-EXT-CTRLS;, &VIDIOC-S-EXT-CTRLS; 2043and &VIDIOC-TRY-EXT-CTRLS; were added, a flag to skip unsupported 2044controls with &VIDIOC-QUERYCTRL;, new control types 2045<constant>V4L2_CTRL_TYPE_INTEGER64</constant> and 2046<constant>V4L2_CTRL_TYPE_CTRL_CLASS</constant> (<xref 2047 linkend="v4l2-ctrl-type" />), and new control flags 2048<constant>V4L2_CTRL_FLAG_READ_ONLY</constant>, 2049<constant>V4L2_CTRL_FLAG_UPDATE</constant>, 2050<constant>V4L2_CTRL_FLAG_INACTIVE</constant> and 2051<constant>V4L2_CTRL_FLAG_SLIDER</constant> (<xref 2052 linkend="control-flags" />). See <xref 2053 linkend="extended-controls" /> for details.</para> 2054 </listitem> 2055 </orderedlist> 2056 </section> 2057 2058 <section> 2059 <title>V4L2 in Linux 2.6.19</title> 2060 <orderedlist> 2061 <listitem> 2062 <para>In &v4l2-sliced-vbi-cap; a buffer type field was added 2063replacing a reserved field. Note on architectures where the size of 2064enum types differs from int types the size of the structure changed. 2065The &VIDIOC-G-SLICED-VBI-CAP; ioctl was redefined from being read-only 2066to write-read. Applications must initialize the type field and clear 2067the reserved fields now. These changes may <emphasis>break the 2068compatibility</emphasis> with older drivers and applications.</para> 2069 </listitem> 2070 2071 <listitem> 2072 <para>The ioctls &VIDIOC-ENUM-FRAMESIZES; and 2073&VIDIOC-ENUM-FRAMEINTERVALS; were added.</para> 2074 </listitem> 2075 2076 <listitem> 2077 <para>A new pixel format <constant>V4L2_PIX_FMT_RGB444</constant> (<xref 2078linkend="rgb-formats" />) was added.</para> 2079 </listitem> 2080 </orderedlist> 2081 </section> 2082 2083 <section> 2084 <title>V4L2 spec erratum 2006-10-12 (Draft 0.17)</title> 2085 <orderedlist> 2086 <listitem> 2087 <para><constant>V4L2_PIX_FMT_HM12</constant> (<xref 2088linkend="reserved-formats" />) is a YUV 4:2:0, not 4:2:2 format.</para> 2089 </listitem> 2090 </orderedlist> 2091 </section> 2092 2093 <section> 2094 <title>V4L2 in Linux 2.6.21</title> 2095 <orderedlist> 2096 <listitem> 2097 <para>The <filename>videodev2.h</filename> header file is 2098now dual licensed under GNU General Public License version two or 2099later, and under a 3-clause BSD-style license.</para> 2100 </listitem> 2101 </orderedlist> 2102 </section> 2103 2104 <section> 2105 <title>V4L2 in Linux 2.6.22</title> 2106 <orderedlist> 2107 <listitem> 2108 <para>Two new field orders 2109 <constant>V4L2_FIELD_INTERLACED_TB</constant> and 2110 <constant>V4L2_FIELD_INTERLACED_BT</constant> were 2111 added. See <xref linkend="v4l2-field" /> for details.</para> 2112 </listitem> 2113 2114 <listitem> 2115 <para>Three new clipping/blending methods with a global or 2116straight or inverted local alpha value were added to the video overlay 2117interface. See the description of the &VIDIOC-G-FBUF; and 2118&VIDIOC-S-FBUF; ioctls for details.</para> 2119 <para>A new <structfield>global_alpha</structfield> field 2120was added to <link 2121linkend="v4l2-window"><structname>v4l2_window</structname></link>, 2122extending the structure. This may <emphasis>break 2123compatibility</emphasis> with applications using a struct 2124<structname>v4l2_window</structname> directly. However the <link 2125linkend="vidioc-g-fmt">VIDIOC_G/S/TRY_FMT</link> ioctls, which take a 2126pointer to a <link linkend="v4l2-format">v4l2_format</link> parent 2127structure with padding bytes at the end, are not affected.</para> 2128 </listitem> 2129 2130 <listitem> 2131 <para>The format of the <structfield>chromakey</structfield> 2132field in &v4l2-window; changed from "host order RGB32" to a pixel 2133value in the same format as the framebuffer. This may <emphasis>break 2134compatibility</emphasis> with existing applications. Drivers 2135supporting the "host order RGB32" format are not known.</para> 2136 </listitem> 2137 2138 </orderedlist> 2139 </section> 2140 2141 <section> 2142 <title>V4L2 in Linux 2.6.24</title> 2143 <orderedlist> 2144 <listitem> 2145 <para>The pixel formats 2146<constant>V4L2_PIX_FMT_PAL8</constant>, 2147<constant>V4L2_PIX_FMT_YUV444</constant>, 2148<constant>V4L2_PIX_FMT_YUV555</constant>, 2149<constant>V4L2_PIX_FMT_YUV565</constant> and 2150<constant>V4L2_PIX_FMT_YUV32</constant> were added.</para> 2151 </listitem> 2152 </orderedlist> 2153 </section> 2154 2155 <section> 2156 <title>V4L2 in Linux 2.6.25</title> 2157 <orderedlist> 2158 <listitem> 2159 <para>The pixel formats <link linkend="V4L2-PIX-FMT-Y16"> 2160<constant>V4L2_PIX_FMT_Y16</constant></link> and <link 2161linkend="V4L2-PIX-FMT-SBGGR16"> 2162<constant>V4L2_PIX_FMT_SBGGR16</constant></link> were added.</para> 2163 </listitem> 2164 <listitem> 2165 <para>New <link linkend="control">controls</link> 2166<constant>V4L2_CID_POWER_LINE_FREQUENCY</constant>, 2167<constant>V4L2_CID_HUE_AUTO</constant>, 2168<constant>V4L2_CID_WHITE_BALANCE_TEMPERATURE</constant>, 2169<constant>V4L2_CID_SHARPNESS</constant> and 2170<constant>V4L2_CID_BACKLIGHT_COMPENSATION</constant> were added. The 2171controls <constant>V4L2_CID_BLACK_LEVEL</constant>, 2172<constant>V4L2_CID_WHITENESS</constant>, 2173<constant>V4L2_CID_HCENTER</constant> and 2174<constant>V4L2_CID_VCENTER</constant> were deprecated. 2175</para> 2176 </listitem> 2177 <listitem> 2178 <para>A <link linkend="camera-controls">Camera controls 2179class</link> was added, with the new controls 2180<constant>V4L2_CID_EXPOSURE_AUTO</constant>, 2181<constant>V4L2_CID_EXPOSURE_ABSOLUTE</constant>, 2182<constant>V4L2_CID_EXPOSURE_AUTO_PRIORITY</constant>, 2183<constant>V4L2_CID_PAN_RELATIVE</constant>, 2184<constant>V4L2_CID_TILT_RELATIVE</constant>, 2185<constant>V4L2_CID_PAN_RESET</constant>, 2186<constant>V4L2_CID_TILT_RESET</constant>, 2187<constant>V4L2_CID_PAN_ABSOLUTE</constant>, 2188<constant>V4L2_CID_TILT_ABSOLUTE</constant>, 2189<constant>V4L2_CID_FOCUS_ABSOLUTE</constant>, 2190<constant>V4L2_CID_FOCUS_RELATIVE</constant> and 2191<constant>V4L2_CID_FOCUS_AUTO</constant>.</para> 2192 </listitem> 2193 <listitem> 2194 <para>The <constant>VIDIOC_G_MPEGCOMP</constant> and 2195<constant>VIDIOC_S_MPEGCOMP</constant> ioctls, which were superseded 2196by the <link linkend="extended-controls">extended controls</link> 2197interface in Linux 2.6.18, where finally removed from the 2198<filename>videodev2.h</filename> header file.</para> 2199 </listitem> 2200 </orderedlist> 2201 </section> 2202 2203 <section> 2204 <title>V4L2 in Linux 2.6.26</title> 2205 <orderedlist> 2206 <listitem> 2207 <para>The pixel formats 2208<constant>V4L2_PIX_FMT_Y16</constant> and 2209<constant>V4L2_PIX_FMT_SBGGR16</constant> were added.</para> 2210 </listitem> 2211 <listitem> 2212 <para>Added user controls 2213<constant>V4L2_CID_CHROMA_AGC</constant> and 2214<constant>V4L2_CID_COLOR_KILLER</constant>.</para> 2215 </listitem> 2216 </orderedlist> 2217 </section> 2218 2219 <section> 2220 <title>V4L2 in Linux 2.6.27</title> 2221 <orderedlist> 2222 <listitem> 2223 <para>The &VIDIOC-S-HW-FREQ-SEEK; ioctl and the 2224<constant>V4L2_CAP_HW_FREQ_SEEK</constant> capability were added.</para> 2225 </listitem> 2226 <listitem> 2227 <para>The pixel formats 2228<constant>V4L2_PIX_FMT_YVYU</constant>, 2229<constant>V4L2_PIX_FMT_PCA501</constant>, 2230<constant>V4L2_PIX_FMT_PCA505</constant>, 2231<constant>V4L2_PIX_FMT_PCA508</constant>, 2232<constant>V4L2_PIX_FMT_PCA561</constant>, 2233<constant>V4L2_PIX_FMT_SGBRG8</constant>, 2234<constant>V4L2_PIX_FMT_PAC207</constant> and 2235<constant>V4L2_PIX_FMT_PJPG</constant> were added.</para> 2236 </listitem> 2237 </orderedlist> 2238 </section> 2239 2240 <section> 2241 <title>V4L2 in Linux 2.6.28</title> 2242 <orderedlist> 2243 <listitem> 2244 <para>Added <constant>V4L2_MPEG_AUDIO_ENCODING_AAC</constant> and 2245<constant>V4L2_MPEG_AUDIO_ENCODING_AC3</constant> MPEG audio encodings.</para> 2246 </listitem> 2247 <listitem> 2248 <para>Added <constant>V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC</constant> MPEG 2249video encoding.</para> 2250 </listitem> 2251 <listitem> 2252 <para>The pixel formats 2253<constant>V4L2_PIX_FMT_SGRBG10</constant> and 2254<constant>V4L2_PIX_FMT_SGRBG10DPCM8</constant> were added.</para> 2255 </listitem> 2256 </orderedlist> 2257 </section> 2258 2259 <section> 2260 <title>V4L2 in Linux 2.6.29</title> 2261 <orderedlist> 2262 <listitem> 2263 <para>The <constant>VIDIOC_G_CHIP_IDENT</constant> ioctl was renamed 2264to <constant>VIDIOC_G_CHIP_IDENT_OLD</constant> and &VIDIOC-DBG-G-CHIP-IDENT; 2265was introduced in its place. The old struct <structname>v4l2_chip_ident</structname> 2266was renamed to <structname id="v4l2-chip-ident-old">v4l2_chip_ident_old</structname>.</para> 2267 </listitem> 2268 <listitem> 2269 <para>The pixel formats 2270<constant>V4L2_PIX_FMT_VYUY</constant>, 2271<constant>V4L2_PIX_FMT_NV16</constant> and 2272<constant>V4L2_PIX_FMT_NV61</constant> were added.</para> 2273 </listitem> 2274 <listitem> 2275 <para>Added camera controls 2276<constant>V4L2_CID_ZOOM_ABSOLUTE</constant>, 2277<constant>V4L2_CID_ZOOM_RELATIVE</constant>, 2278<constant>V4L2_CID_ZOOM_CONTINUOUS</constant> and 2279<constant>V4L2_CID_PRIVACY</constant>.</para> 2280 </listitem> 2281 </orderedlist> 2282 </section> 2283 <section> 2284 <title>V4L2 in Linux 2.6.30</title> 2285 <orderedlist> 2286 <listitem> 2287 <para>New control flag <constant>V4L2_CTRL_FLAG_WRITE_ONLY</constant> was added.</para> 2288 </listitem> 2289 <listitem> 2290 <para>New control <constant>V4L2_CID_COLORFX</constant> was added.</para> 2291 </listitem> 2292 </orderedlist> 2293 </section> 2294 <section> 2295 <title>V4L2 in Linux 2.6.32</title> 2296 <orderedlist> 2297 <listitem> 2298 <para>In order to be easier to compare a V4L2 API and a kernel 2299version, now V4L2 API is numbered using the Linux Kernel version numeration.</para> 2300 </listitem> 2301 <listitem> 2302 <para>Finalized the RDS capture API. See <xref linkend="rds" /> for 2303more information.</para> 2304 </listitem> 2305 <listitem> 2306 <para>Added new capabilities for modulators and RDS encoders.</para> 2307 </listitem> 2308 <listitem> 2309 <para>Add description for libv4l API.</para> 2310 </listitem> 2311 <listitem> 2312 <para>Added support for string controls via new type <constant>V4L2_CTRL_TYPE_STRING</constant>.</para> 2313 </listitem> 2314 <listitem> 2315 <para>Added <constant>V4L2_CID_BAND_STOP_FILTER</constant> documentation.</para> 2316 </listitem> 2317 <listitem> 2318 <para>Added FM Modulator (FM TX) Extended Control Class: <constant>V4L2_CTRL_CLASS_FM_TX</constant> and their Control IDs.</para> 2319 </listitem> 2320 <listitem> 2321 <para>Added Remote Controller chapter, describing the default Remote Controller mapping for media devices.</para> 2322 </listitem> 2323 </orderedlist> 2324 </section> 2325 <section> 2326 <title>V4L2 in Linux 2.6.33</title> 2327 <orderedlist> 2328 <listitem> 2329 <para>Added support for Digital Video timings in order to support HDTV receivers and transmitters.</para> 2330 </listitem> 2331 </orderedlist> 2332 </section> 2333 <section> 2334 <title>V4L2 in Linux 2.6.34</title> 2335 <orderedlist> 2336 <listitem> 2337 <para>Added 2338<constant>V4L2_CID_IRIS_ABSOLUTE</constant> and 2339<constant>V4L2_CID_IRIS_RELATIVE</constant> controls to the 2340 <link linkend="camera-controls">Camera controls class</link>. 2341 </para> 2342 </listitem> 2343 </orderedlist> 2344 </section> 2345 <section> 2346 <title>V4L2 in Linux 2.6.37</title> 2347 <orderedlist> 2348 <listitem> 2349 <para>Remove the vtx (videotext/teletext) API. This API was no longer 2350used and no hardware exists to verify the API. Nor were any userspace applications found 2351that used it. It was originally scheduled for removal in 2.6.35. 2352 </para> 2353 </listitem> 2354 </orderedlist> 2355 </section> 2356 <section> 2357 <title>V4L2 in Linux 2.6.39</title> 2358 <orderedlist> 2359 <listitem> 2360 <para>The old VIDIOC_*_OLD symbols and V4L1 support were removed.</para> 2361 </listitem> 2362 <listitem> 2363 <para>Multi-planar API added. Does not affect the compatibility of 2364 current drivers and applications. See 2365 <link linkend="planar-apis">multi-planar API</link> 2366 for details.</para> 2367 </listitem> 2368 </orderedlist> 2369 </section> 2370 2371 <section id="other"> 2372 <title>Relation of V4L2 to other Linux multimedia APIs</title> 2373 2374 <section id="xvideo"> 2375 <title>X Video Extension</title> 2376 2377 <para>The X Video Extension (abbreviated XVideo or just Xv) is 2378an extension of the X Window system, implemented for example by the 2379XFree86 project. Its scope is similar to V4L2, an API to video capture 2380and output devices for X clients. Xv allows applications to display 2381live video in a window, send window contents to a TV output, and 2382capture or output still images in XPixmaps<footnote> 2383 <para>This is not implemented in XFree86.</para> 2384 </footnote>. With their implementation XFree86 makes the 2385extension available across many operating systems and 2386architectures.</para> 2387 2388 <para>Because the driver is embedded into the X server Xv has a 2389number of advantages over the V4L2 <link linkend="overlay">video 2390overlay interface</link>. The driver can easily determine the overlay 2391target, &ie; visible graphics memory or off-screen buffers for a 2392destructive overlay. It can program the RAMDAC for a non-destructive 2393overlay, scaling or color-keying, or the clipping functions of the 2394video capture hardware, always in sync with drawing operations or 2395windows moving or changing their stacking order.</para> 2396 2397 <para>To combine the advantages of Xv and V4L a special Xv 2398driver exists in XFree86 and XOrg, just programming any overlay capable 2399Video4Linux device it finds. To enable it 2400<filename>/etc/X11/XF86Config</filename> must contain these lines:</para> 2401 <para><screen> 2402Section "Module" 2403 Load "v4l" 2404EndSection</screen></para> 2405 2406 <para>As of XFree86 4.2 this driver still supports only V4L 2407ioctls, however it should work just fine with all V4L2 devices through 2408the V4L2 backward-compatibility layer. Since V4L2 permits multiple 2409opens it is possible (if supported by the V4L2 driver) to capture 2410video while an X client requested video overlay. Restrictions of 2411simultaneous capturing and overlay are discussed in <xref 2412 linkend="overlay" /> apply.</para> 2413 2414 <para>Only marginally related to V4L2, XFree86 extended Xv to 2415support hardware YUV to RGB conversion and scaling for faster video 2416playback, and added an interface to MPEG-2 decoding hardware. This API 2417is useful to display images captured with V4L2 devices.</para> 2418 </section> 2419 2420 <section> 2421 <title>Digital Video</title> 2422 2423 <para>V4L2 does not support digital terrestrial, cable or 2424satellite broadcast. A separate project aiming at digital receivers 2425exists. You can find its homepage at <ulink 2426url="http://linuxtv.org">http://linuxtv.org</ulink>. The Linux DVB API 2427has no connection to the V4L2 API except that drivers for hybrid 2428hardware may support both.</para> 2429 </section> 2430 2431 <section> 2432 <title>Audio Interfaces</title> 2433 2434 <para>[to do - OSS/ALSA]</para> 2435 </section> 2436 </section> 2437 2438 <section id="experimental"> 2439 <title>Experimental API Elements</title> 2440 2441 <para>The following V4L2 API elements are currently experimental 2442and may change in the future.</para> 2443 2444 <itemizedlist> 2445 <listitem> 2446 <para>Video Output Overlay (OSD) Interface, <xref 2447 linkend="osd" />.</para> 2448 </listitem> 2449 <listitem> 2450 <para><constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY</constant>, 2451 &v4l2-buf-type;, <xref linkend="v4l2-buf-type" />.</para> 2452 </listitem> 2453 <listitem> 2454 <para><constant>V4L2_CAP_VIDEO_OUTPUT_OVERLAY</constant>, 2455&VIDIOC-QUERYCAP; ioctl, <xref linkend="device-capabilities" />.</para> 2456 </listitem> 2457 <listitem> 2458 <para>&VIDIOC-ENUM-FRAMESIZES; and 2459&VIDIOC-ENUM-FRAMEINTERVALS; ioctls.</para> 2460 </listitem> 2461 <listitem> 2462 <para>&VIDIOC-G-ENC-INDEX; ioctl.</para> 2463 </listitem> 2464 <listitem> 2465 <para>&VIDIOC-ENCODER-CMD; and &VIDIOC-TRY-ENCODER-CMD; 2466ioctls.</para> 2467 </listitem> 2468 <listitem> 2469 <para>&VIDIOC-DBG-G-REGISTER; and &VIDIOC-DBG-S-REGISTER; 2470ioctls.</para> 2471 </listitem> 2472 <listitem> 2473 <para>&VIDIOC-DBG-G-CHIP-IDENT; ioctl.</para> 2474 </listitem> 2475 </itemizedlist> 2476 </section> 2477 2478 <section id="obsolete"> 2479 <title>Obsolete API Elements</title> 2480 2481 <para>The following V4L2 API elements were superseded by new 2482interfaces and should not be implemented in new drivers.</para> 2483 2484 <itemizedlist> 2485 <listitem> 2486 <para><constant>VIDIOC_G_MPEGCOMP</constant> and 2487<constant>VIDIOC_S_MPEGCOMP</constant> ioctls. Use Extended Controls, 2488<xref linkend="extended-controls" />.</para> 2489 </listitem> 2490 </itemizedlist> 2491 </section> 2492 </section> 2493 2494 <!-- 2495Local Variables: 2496mode: sgml 2497sgml-parent-document: "v4l2.sgml" 2498indent-tabs-mode: nil 2499End: 2500 -->