Based on kernel version 3.0.4. Page generated on 2011-10-03 22:07 EST.
1 <title>Changes</title> 2 3 <para>The following chapters document the evolution of the V4L2 API, 4 errata or extensions. They are also intended to help application and 5 driver 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 11 unify and replace various TV and radio device related interfaces, 12 developed independently by driver writers in prior years. Starting 13 with Linux 2.5 the much improved V4L2 API replaces the V4L API, 14 although existing drivers will continue to support V4L applications in 15 the future, either directly or through the V4L2 compatibility layer in 16 the <filename>videodev</filename> kernel module translating ioctls on 17 the fly. For a transition period not all drivers will support the V4L2 18 API.</para> 19 20 <section> 21 <title>Opening and Closing Devices</title> 22 23 <para>For compatibility reasons the character device file names 24 recommended for V4L2 video capture, overlay, radio and raw 25 vbi capture devices did not change from those used by V4L. They are 26 listed 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 30 V4L2 and no longer exist. There is no hardware available anymore for handling 31 pure teletext. Instead raw or sliced VBI is used.</para> 32 33 <para>The V4L <filename>videodev</filename> module automatically 34 assigns minor numbers to drivers in load order, depending on the 35 registered device type. We recommend that V4L2 drivers by default 36 register devices with the same numbers, but the system administrator 37 can assign arbitrary minor numbers using driver module options. The 38 major 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 55 Documentation/devices.txt these should be symbolic links to 56 <filename>/dev/video0</filename>. Note the original bttv interface is 57 not 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 84 device file. V4L2 drivers <emphasis>may</emphasis> support multiple 85 opens, see <xref linkend="open" /> for details and consequences.</para> 86 87 <para>V4L drivers respond to V4L2 ioctls with an &EINVAL;. The 88 compatibility layer in the V4L2 <filename>videodev</filename> module 89 can translate V4L ioctl requests to their V4L2 counterpart, however a 90 V4L2 driver usually needs more preparation to become fully V4L 91 compatible. 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 99 equivalent 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 106 distinguish between device types like this, better think of basic 107 video input, video output and radio devices supporting a set of 108 related functions like video capturing, video overlay and VBI 109 capturing. See <xref linkend="open" /> for an 110 introduction.<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 127 capture</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 133 modulator</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 139 capture</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 145 overlay</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 150 field <structfield>capability</structfield> of 151 &v4l2-framebuffer;</entry> 152 <entry>Whether chromakey overlay is supported. For 153 more 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> 159 and <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 162 supported, 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, 170 see <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 176 images. The V4L2 API implies the scale factor by setting the cropping 177 dimensions and image size with the &VIDIOC-S-CROP; and &VIDIOC-S-FMT; 178 ioctl, respectively. The driver returns the closest sizes possible. 179 For 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 186 formats with the &VIDIOC-ENUM-FMT; ioctl to determine if the device 187 supports grey scale capturing only. For more information on image 188 formats 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 194 to determine if the device supports capturing a subsection of the full 195 picture ("cropping" in V4L2). If not, the ioctl returns the &EINVAL;. 196 For 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 203 formats with the &VIDIOC-ENUM-FMT; ioctl to determine if the device 204 supports 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 226 by <structfield>capabilities</structfield> flag 227 <constant>V4L2_CAP_AUDIO</constant>, indicating 228 <emphasis>if</emphasis> the device has any audio inputs or outputs. To 229 determine their number applications can enumerate audio inputs with 230 the &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 238 returns the closest size possible, taking into account the current 239 video 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 248 the video inputs of a V4L device. The equivalent V4L2 ioctls 249 are &VIDIOC-ENUMINPUT;, &VIDIOC-G-INPUT; and &VIDIOC-S-INPUT; 250 using &v4l2-input; as discussed in <xref linkend="video" />.</para> 251 252 <para>The <structfield>channel</structfield> field counting 253 inputs was renamed to <structfield>index</structfield>, the video 254 input 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 278 expressing the number of tuners of this input, V4L2 assumes each video 279 input is connected to at most one tuner. However a tuner can have more 280 than one input, &ie; RF connectors, and a device can have multiple 281 tuners. The index number of the tuner associated with the input, if 282 any, 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 287 dropped. 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 291 up to 32 audio inputs. Each set bit in the 292 <structfield>audioset</structfield> field represents one audio input 293 this video input combines with. For information about audio inputs and 294 how to switch between them see <xref linkend="audio" />.</para> 295 296 <para>The <structfield>norm</structfield> field describing the 297 supported 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 300 be changed. This flag was a later addition together with the 301 <structfield>norm</structfield> field and has been removed in the 302 meantime. V4L2 has a similar, albeit more comprehensive approach 303 to video standards, see <xref linkend="standard" /> for more 304 information.</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 313 tuners 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 315 covered in <xref linkend="tuner" />.</para> 316 317 <para>The <structfield>tuner</structfield> field counting tuners 318 was renamed to <structfield>index</structfield>. The fields 319 <structfield>name</structfield>, <structfield>rangelow</structfield> 320 and <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 325 video standards were dropped. This information is now contained in the 326 associated &v4l2-input;. No replacement exists for the 327 <constant>VIDEO_TUNER_NORM</constant> flag indicating whether the 328 video standard can be switched. The <structfield>mode</structfield> 329 field to select a different video standard was replaced by a whole new 330 set of ioctls and structures described in <xref linkend="standard" />. 331 Due to its ubiquity it should be mentioned the BTTV driver supports 332 several 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, 337 M/PAL, N/PAL, and NTSC Japan with numbers 3-6 (sic).</para> 338 339 <para>The <constant>VIDEO_TUNER_STEREO_ON</constant> flag 340 indicating stereo reception became 341 <constant>V4L2_TUNER_SUB_STEREO</constant> in field 342 <structfield>rxsubchans</structfield>. This field also permits the 343 detection 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 349 to <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 354 where renamed to &VIDIOC-G-FREQUENCY; and &VIDIOC-S-FREQUENCY;. They 355 take a pointer to a &v4l2-frequency; instead of an unsigned long 356 integer.</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> 364 ioctl and struct <structname>video_picture</structname>. The following 365 fields 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 400 65535 with no particular reset value. The V4L2 API permits arbitrary 401 limits and defaults which can be queried with the &VIDIOC-QUERYCTRL; 402 ioctl. For general information about controls see <xref 403 linkend="control" />.</para> 404 405 <para>The <structfield>depth</structfield> (average number of 406 bits per pixel) of a video image is implied by the selected image 407 format. V4L2 does not explicitely provide such information assuming 408 applications recognizing the format are aware of the image depth and 409 others need not know. The <structfield>palette</structfield> field 410 moved 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 424 linkend="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 429 linkend="pixfmt-reserved"><constant>V4L2_PIX_FMT_HI240</constant></link><footnote> 430 <para>This is a custom format used by the BTTV 431 driver, 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 437 linkend="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 442 linkend="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 447 linkend="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 452 linkend="pixfmt-rgb"><constant>V4L2_PIX_FMT_BGR32</constant></link><footnote> 453 <para>Presumably all V4L RGB formats are 454 little-endian, although some drivers might interpret them according to machine endianess. V4L2 defines little-endian, big-endian and red/blue 455 swapped 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 461 linkend="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> 466 and <constant>VIDEO_PALETTE_YUYV</constant> are the same formats. Some 467 V4L drivers respond to one, some to the other.</para> 468 </footnote></para></entry> 469 <entry><para><link 470 linkend="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 475 linkend="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 484 linkend="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 487 format.</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 492 as: "RAW capture (BT848)"</para> </footnote></para></entry> 493 </row> 494 <row> 495 <entry><constant>VIDEO_PALETTE_YUV422P</constant></entry> 496 <entry><para><link 497 linkend="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 502 linkend="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 505 format.</para> </footnote></para></entry> 506 </row> 507 <row> 508 <entry><constant>VIDEO_PALETTE_YUV420P</constant></entry> 509 <entry><para><link 510 linkend="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 515 linkend="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 522 linkend="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 532 audio inputs of a V4L device. The equivalent V4L2 ioctls are 533 &VIDIOC-G-AUDIO; and &VIDIOC-S-AUDIO; using &v4l2-audio; as 534 discussed in <xref linkend="audio" />.</para> 535 536 <para>The <structfield>audio</structfield> "channel number" 537 field 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> 542 of 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 546 the current audio standard is BTSC 547 <constant>VIDEO_SOUND_LANG2</constant> refers to SAP and 548 <constant>VIDEO_SOUND_LANG1</constant> is meaningless. Also 549 undocumented in the V4L specification, there is no way to query the 550 selected mode. On <constant>VIDIOCGAUDIO</constant> the driver returns 551 the <emphasis>actually received</emphasis> audio programmes in this 552 field. 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 555 linkend="tuner" /> for more information on tuners. Related to audio 556 modes &v4l2-audio; also reports if this is a mono or stereo 557 input, regardless if the source is a tuner.</para> 558 559 <para>The following fields where replaced by V4L2 controls 560 accessible 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 592 driver 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 598 supported. Accordingly the <constant>VIDEO_AUDIO_MUTABLE</constant> 599 and <constant>VIDEO_AUDIO_MUTE</constant> flags where replaced by the 600 boolean <constant>V4L2_CID_AUDIO_MUTE</constant> control.</para> 601 602 <para>All V4L2 controls have a <structfield>step</structfield> 603 attribute replacing the struct <structname>video_audio</structname> 604 <structfield>step</structfield> field. The V4L audio controls are 605 assumed to range from 0 to 65535 with no particular reset value. The 606 V4L2 API permits arbitrary limits and defaults which can be queried 607 with the &VIDIOC-QUERYCTRL; ioctl. For general information about 608 controls 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> 616 are &VIDIOC-G-FBUF; and &VIDIOC-S-FBUF;. The 617 <structfield>base</structfield> field of struct 618 <structname>video_buffer</structname> remained unchanged, except V4L2 619 defines 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 623 replaced by <structfield>pixelformat</structfield>. See <xref 624 linkend="pixfmt-rgb" /> for a list of RGB formats and their 625 respective color depths.</para> 626 627 <para>Instead of the special ioctls 628 <constant>VIDIOCGWIN</constant> and <constant>VIDIOCSWIN</constant> 629 V4L2 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> 632 member 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; 639 substructure <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 645 containing a struct <structname>v4l2_rect</structname>, but the 646 semantics are still the same.</para> 647 648 <para>The <constant>VIDEO_WINDOW_INTERLACE</constant> flag was 649 dropped. 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 661 clipping, using a fixed size bitmap of 1024 × 625 bits. Struct 662 <structname>v4l2_window</structname> has a separate 663 <structfield>bitmap</structfield> pointer field for this purpose and 664 the 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 668 disable 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 675 defines 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; 685 substructure <structfield>c</structfield> of struct 686 <structname>v4l2_crop</structname>. The 687 <structfield>decimation</structfield> field was dropped. In the V4L2 688 API the scaling factor is implied by the size of the cropping 689 rectangle and the size of the captured or overlaid image.</para> 690 691 <para>The <constant>VIDEO_CAPTURE_ODD</constant> 692 and <constant>VIDEO_CAPTURE_EVEN</constant> flags to capture only the 693 odd 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 698 overlay 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 708 from a V4L or V4L2 device using the &func-read; function, however V4L2 709 drivers are not required to support this I/O method. Applications can 710 determine if the function is available with the &VIDIOC-QUERYCAP; 711 ioctl. All V4L2 devices exchanging data with applications must support 712 the &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> 716 ioctls. 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> 720 union 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 729 buffers in device memory, or more often just buffers allocated in 730 DMA-able system memory, into their address space. This avoids the data 731 copying overhead of the read method. V4L2 supports memory mapping as 732 well, 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 746 buffers are allocated, with the &VIDIOC-S-FMT; ioctl. When no format 747 is selected the driver may use the last, possibly by another 748 application requested format.</entry> 749 </row> 750 <row> 751 <entry><para>Applications cannot change the number of 752 buffers. The it is built into the driver, unless it has a module 753 option to change the number when the driver module is 754 loaded.</para></entry> 755 <entry><para>The &VIDIOC-REQBUFS; ioctl allocates the 756 desired number of buffers, this is a required step in the initialization 757 sequence.</para></entry> 758 </row> 759 <row> 760 <entry><para>Drivers map all buffers as one contiguous 761 range of memory. The <constant>VIDIOCGMBUF</constant> ioctl is 762 available to query the number of buffers, the offset of each buffer 763 from the start of the virtual file, and the overall amount of memory 764 used, which can be used as arguments for the &func-mmap; 765 function.</para></entry> 766 <entry><para>Buffers are individually mapped. The 767 offset 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> 772 ioctl prepares a buffer for capturing. It also determines the image 773 format for this buffer. The ioctl returns immediately, eventually with 774 an &EAGAIN; if no video signal had been detected. When the driver 775 supports more than one buffer applications can call the ioctl multiple 776 times and thus have multiple outstanding capture 777 requests.</para><para>The <constant>VIDIOCSYNC</constant> ioctl 778 suspends execution until a particular buffer has been 779 filled.</para></entry> 780 <entry><para>Drivers maintain an incoming and outgoing 781 queue. &VIDIOC-QBUF; enqueues any empty buffer into the incoming 782 queue. Filled buffers are dequeued from the outgoing queue with the 783 &VIDIOC-DQBUF; ioctl. To wait until filled buffers become available this 784 function, &func-select; or &func-poll; can be used. The 785 &VIDIOC-STREAMON; ioctl must be called once after enqueuing one or 786 more buffers to start capturing. Its counterpart 787 &VIDIOC-STREAMOFF; stops capturing and dequeues all buffers from both 788 queues. 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 796 examples, 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 804 interface, only the device file <filename>/dev/vbi</filename> was 805 reserved for this purpose. The only driver supporting this interface 806 was the BTTV driver, de-facto defining the V4L VBI interface. Reading 807 from the device yields a raw VBI image with the following 808 parameters:<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 Hz NTSC (or any other 525-line 820 standard); 35468950 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 833 machine 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 842 versions used different values, eventually the custom 843 <constant>BTTV_VBISIZE</constant> ioctl was added to query the 844 correct 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 858 image parameters. These ioctls are only partially compatible with the 859 V4L2 VBI interface specified in <xref linkend="raw-vbi" />.</para> 860 861 <para>An <structfield>offset</structfield> field does not 862 exist, <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 865 probably equivalent to &v4l2-vbi-format;.</para> 866 867 <para>Apparently only the Zoran (ZR 36120) driver implements 868 these ioctls. The semantics differ from those specified for V4L2 in two 869 ways. The parameters are reset on &func-open; and 870 <constant>VIDIOCSVBIFMT</constant> always returns an &EINVAL; if the 871 parameters 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 879 device associated with a video capture device (or vice versa) by 880 reopening the device and requesting VBI data. For details see 881 <xref linkend="open" />.</para> 882 883 <para>No replacement exists for <constant>VIDIOCKEY</constant>, 884 and the V4L functions for microcode programming. A new interface for 885 MPEG 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 895 criticised as too inflexible. In August 1998 Bill Dirks proposed a 896 number of improvements and began to work on documentation, example 897 drivers and applications. With the help of other volunteers this 898 eventually became the V4L2 API, not just an extension but a 899 replacement for the V4L API. However it took another four years and 900 two stable kernel releases until the new API was finally accepted for 901 inclusion 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 912 was 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 915 flag if they intend to access controls only, as opposed to capture 916 applications which need exclusive access. The 917 <constant>VIDEO_STD_XXX</constant> identifiers are now ordinals 918 instead of flags, and the <function>video_std_construct()</function> 919 helper function takes id and transmission arguments.</para> 920 921 <para>1998-09-28: Revamped video standard. Made video controls 922 individually enumerable.</para> 923 924 <para>1998-10-02: The <structfield>id</structfield> field was 925 removed from struct <structname>video_standard</structname> and the 926 color subcarrier fields were renamed. The &VIDIOC-QUERYSTD; ioctl was 927 renamed to &VIDIOC-ENUMSTD;, &VIDIOC-G-INPUT; to &VIDIOC-ENUMINPUT;. A 928 first draft of the Codec API was released.</para> 929 930 <para>1998-11-08: Many minor changes. Most symbols have been 931 renamed. 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> 936 changed 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 939 accessible with the &VIDIOC-G-CTRL; and &VIDIOC-S-CTRL; ioctls under 940 names 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 945 image formats were added.</para> 946 947 <para>1998-11-28: A few ioctl symbols changed. Interfaces for codecs and 948 video 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 959 are gone. VIDIOC_QBUF takes a v4l2_buffer as a parameter. Added 960 digital 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 969 videodev.c. Driver writers, this changes how you implement your ioctl 970 handler. See the Driver Writer's Guide. Added some more control id 971 codes.</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 977 v4l2_queryctrl objects before passing them to the driver. Required a 978 minor change to the VIDIOC_QUERYCTRL handlers in the sample 979 drivers.</para> 980 <para>1999-03-31: Better compatibility for v4l memory capture 981 ioctls. Requires changes to drivers to fully support new compatibility 982 features, see Driver Writer's Guide and v4l2cap.c. Added new control 983 IDs: V4L2_CID_HFLIP, _VFLIP. Changed V4L2_PIX_FMT_YUV422P to _YUV422P, 984 and _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 988 V4L2_CTRL_FLAG_GRAYED (later V4L2_CTRL_FLAG_GRABBED) flag.</para> 989 <para>1999-05-20: Definition of VIDIOC_G_CTRL was wrong causing 990 a malfunction of this ioctl.</para> 991 <para>1999-06-05: Changed the value of 992 V4L2_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 1000 versions. Purpose of these changes was to simplify the API, while 1001 making it more extensible and following common Linux driver API 1002 conventions.</para> 1003 1004 <orderedlist> 1005 <listitem> 1006 <para>Some typos in <constant>V4L2_FMT_FLAG</constant> 1007 symbols were fixed. &v4l2-clip; was changed for compatibility with 1008 v4l. (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 1018 take a pointer to an integer. Where it makes sense, ioctls will return 1019 the actual new value in the integer pointed to by the argument, a 1020 common convention in the V4L2 API. The affected ioctls are: 1021 VIDIOC_PREVIEW, VIDIOC_STREAMON, VIDIOC_STREAMOFF, VIDIOC_S_FREQ, 1022 VIDIOC_S_INPUT, VIDIOC_S_OUTPUT, VIDIOC_S_EFFECT. For example 1023 <programlisting> 1024 err = ioctl (fd, VIDIOC_XXX, V4L2_XXX); 1025 </programlisting> becomes <programlisting> 1026 int a = V4L2_XXX; err = ioctl(fd, VIDIOC_XXX, &a); 1027 </programlisting> 1028 </para> 1029 </listitem> 1030 1031 <listitem> 1032 <para>All the different get- and set-format commands were 1033 swept into one &VIDIOC-G-FMT; and &VIDIOC-S-FMT; ioctl taking a union 1034 and a type field selecting the union member as parameter. Purpose is to 1035 simplify the API by eliminating several ioctls and to allow new and 1036 driver 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;, 1046 while &v4l2-format; is now the envelopping structure for all format 1047 negotiations.</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; 1057 selects 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 1066 control 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 1071 unavailable controls with <constant>V4L2_CTRL_FLAG_DISABLED</constant> 1072 and <constant>V4L2_CTRL_FLAG_GRABBED</constant> respectively. The 1073 <structfield>group</structfield> name indicates a possibly narrower 1074 classification than the <structfield>category</structfield>. In other 1075 words, there may be multiple groups within a category. Controls within 1076 a group would typically be drawn within a group box. Controls in 1077 different categories might have a greater separation, or may even 1078 appear in separate windows.</para> 1079 </listitem> 1080 1081 <listitem> 1082 <para>The &v4l2-buffer; <structfield>timestamp</structfield> 1083 was changed to a 64 bit integer, containing the sampling or output 1084 time of the frame in nanoseconds. Additionally timestamps will be in 1085 absolute system time, not starting from zero at the beginning of a 1086 stream. The data type name for timestamps is stamp_t, defined as a 1087 signed 64-bit integer. Output devices should not send a buffer out 1088 until the time in the timestamp field has arrived. I would like to 1089 follow SGI's lead, and adopt a multimedia timestamping system like 1090 their UST (Unadjusted System Time). See 1091 http://web.archive.org/web/*/http://reality.sgi.com 1092 /cpirazzi_engr/lg/time/intro.html. 1093 UST uses timestamps that are 64-bit signed integers 1094 (not struct timeval's) and given in nanosecond units. The UST clock 1095 starts at zero when the system is booted and runs continuously and 1096 uniformly. It takes a little over 292 years for UST to overflow. There 1097 is no way to set the UST clock. The regular Linux time-of-day clock 1098 can be changed periodically, which would cause errors if it were being 1099 used for timestamping a multimedia stream. A real UST style clock will 1100 require some support in the kernel that is not there yet. But in 1101 anticipation, I will change the timestamp field to a 64-bit integer, 1102 and I will change the v4l2_masterclock_gettime() function (used only 1103 by drivers) to return a 64-bit integer.</para> 1104 </listitem> 1105 1106 <listitem> 1107 <para>A <structfield>sequence</structfield> field was added 1108 to &v4l2-buffer;. The <structfield>sequence</structfield> field counts 1109 captured frames, it is ignored by output devices. When a capture 1110 driver drops a frame, the sequence number of that frame is 1111 skipped.</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 1123 clear 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 1129 is now included by <filename>videodev.h</filename> for compatibility 1130 with 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 1136 added.</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 1146 between the <filename>videodev.h</filename> file in Linux 2.4.0 and 1147 the <filename>videodev.h</filename> file included in the 1148 <filename>videodevX</filename> patch was fixed. Users of an earlier 1149 version of <filename>videodevX</filename> on Linux 2.4.0 should 1150 recompile their V4L and V4L2 drivers.</para> 1151 1152 <para>2001-01-26: A possible kernel-level incompatibility 1153 between 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 1156 applied was fixed.</para> 1157 1158 <para>2001-03-02: Certain V4L ioctls which pass data in both 1159 direction although they are defined with read-only parameter, did not 1160 work 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 1169 into account.)</para> 1170 1171 <para>2000-09-18: <constant>V4L2_BUF_TYPE_VBI</constant> was 1172 added. 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> 1175 field does not contain <constant>V4L2_BUF_TYPE_VBI</constant>. In the 1176 documentation of the &v4l2-vbi-format; 1177 <structfield>offset</structfield> field the ambiguous phrase "rising 1178 edge" 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 1185 interface.</para> 1186 1187 <orderedlist> 1188 <listitem> 1189 <para>Figures clarifying the line numbering scheme were 1190 added to the V4L2 API specification. The 1191 <structfield>start</structfield>[0] and 1192 <structfield>start</structfield>[1] fields no longer count line 1193 numbers beginning at zero. Rationale: a) The previous definition was 1194 unclear. b) The <structfield>start</structfield>[] values are ordinal 1195 numbers. c) There is no point in inventing a new line numbering 1196 scheme. We now use line number as defined by ITU-R, period. 1197 Compatibility: Add one to the start values. Applications depending on 1198 the previous semantics may not function correctly.</para> 1199 </listitem> 1200 1201 <listitem> 1202 <para>The restriction "count[0] > 0 and count[1] > 0" 1203 has been relaxed to "(count[0] + count[1]) > 0". Rationale: 1204 Drivers may allocate resources at scan line granularity and some data 1205 services are transmitted only on the first field. The comment that 1206 both <structfield>count</structfield> values will usually be equal is 1207 misleading and pointless and has been removed. This change 1208 <emphasis>breaks compatibility</emphasis> with earlier versions: 1209 Drivers may return EINVAL, applications may not function 1210 correctly.</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 1216 dropped is unclear. This change may <emphasis>break 1217 compatibility</emphasis> with applications depending on the start 1218 values being positive. The use of <constant>EBUSY</constant> and 1219 <constant>EINVAL</constant> error codes with the &VIDIOC-S-FMT; ioctl 1220 was clarified. The &EBUSY; was finally documented, and the 1221 <structfield>reserved2</structfield> field which was previously 1222 mentioned only in the <filename>videodev.h</filename> header 1223 file.</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 1230 alias for the old <constant>V4L2_TYPE_VBI</constant>, the latter was 1231 missing 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 1245 feature freeze of Linux 2.5, the API was revised, drawing from 1246 experience with V4L2 0.20. This unnamed version was finally merged 1247 into Linux 2.5.46.</para> 1248 1249 <orderedlist> 1250 <listitem> 1251 <para>As specified in <xref linkend="related" />, drivers 1252 must make related device functions available under all minor device 1253 numbers.</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 1259 drivers exchanging data with applications must support the 1260 <constant>O_NONBLOCK</constant> flag. The <constant>O_NOIO</constant> 1261 flag, a V4L2 symbol which aliased the meaningless 1262 <constant>O_TRUNC</constant> to indicate accesses without data 1263 exchange (panel applications) was dropped. Drivers must stay in "panel 1264 mode" 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 1270 also the size of the structure changed, which is encoded in the ioctl 1271 request code, thus older V4L2 devices will respond with an &EINVAL; to 1272 the new &VIDIOC-QUERYCAP; ioctl.</para> 1273 1274 <para>There are new fields to identify the driver, a new RDS 1275 device function <constant>V4L2_CAP_RDS_CAPTURE</constant>, the 1276 <constant>V4L2_CAP_AUDIO</constant> flag indicates if the device has 1277 any audio connectors, another I/O capability 1278 <constant>V4L2_CAP_ASYNCIO</constant> can be flagged. In response to 1279 these changes the <structfield>type</structfield> field became a bit 1280 set 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> 1294 and <structfield>audios</structfield> were removed. These properties 1295 can be determined as described in <xref linkend="video" /> and <xref 1296 linkend="audio" />.</para> 1297 1298 <para>The somewhat volatile and therefore barely useful 1299 fields <structfield>maxwidth</structfield>, 1300 <structfield>maxheight</structfield>, 1301 <structfield>minwidth</structfield>, 1302 <structfield>minheight</structfield>, 1303 <structfield>maxframerate</structfield> were removed. This information 1304 is available as described in <xref linkend="format" /> and 1305 <xref linkend="standard" />.</para> 1306 1307 <para><constant>V4L2_FLAG_SELECT</constant> was removed. We 1308 believe the select() function is important enough to require support 1309 of it in all V4L2 drivers exchanging data with applications. The 1310 redundant <constant>V4L2_FLAG_MONOCHROME</constant> flag was removed, 1311 this 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 1321 video input to one audio input this field reports all audio inputs 1322 this 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 1341 structures. A new capability flag 1342 <constant>V4L2_AUDCAP_STEREO</constant> was added to indicated if the 1343 audio 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 1346 easily implemented using controls. (However the same applies to AVL 1347 which 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 1358 multiple tuners. The link between video inputs and tuners is now 1359 reversed, inputs point to their tuner. The 1360 <structfield>std</structfield> substructure became a 1361 simple 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 1371 or modulator index number. A tuner <structfield>type</structfield> 1372 field was added and the <structfield>reserved</structfield> field 1373 became larger for future extensions (satellite tuners in 1374 particular).</para> 1375 </listitem> 1376 1377 <listitem> 1378 <para>The idea of completely transparent video standards was 1379 dropped. Experience showed that applications must be able to work with 1380 video standards beyond presenting the user a menu. Instead of 1381 enumerating supported standards with an ioctl applications can now 1382 refer 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 1387 the hardware has this capability. In &v4l2-standard; an 1388 <structfield>index</structfield> field was added for &VIDIOC-ENUMSTD;. 1389 A &v4l2-std-id; field named <structfield>id</structfield> was added as 1390 machine readable identifier, also replacing the 1391 <structfield>transmission</structfield> field. The misleading 1392 <structfield>framerate</structfield> field was renamed 1393 to <structfield>frameperiod</structfield>. The now obsolete 1394 <structfield>colorstandard</structfield> information, originally 1395 needed to distguish between variations of standards, were 1396 removed.</para> 1397 1398 <para>Struct <structname>v4l2_enumstd</structname> ceased to 1399 be. &VIDIOC-ENUMSTD; now takes a pointer to a &v4l2-standard; 1400 directly. The information which standards are supported by a 1401 particular video input or output moved into &v4l2-input; and 1402 &v4l2-output; fields named <structfield>std</structfield>, 1403 respectively.</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 1410 implemented as expected and therefore removed.</para> 1411 </listitem> 1412 1413 <listitem> 1414 <para>The &VIDIOC-TRY-FMT; ioctl was added to negotiate data 1415 formats as with &VIDIOC-S-FMT;, but without the overhead of 1416 programming the hardware and regardless of I/O in progress.</para> 1417 1418 <para>In &v4l2-format; the <structfield>fmt</structfield> 1419 union was extended to contain &v4l2-window;. All image format 1420 negotiations 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 1425 overlay were removed. The <structfield>type</structfield> field 1426 changed to type &v4l2-buf-type; and the buffer type names changed as 1427 follows.<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 1497 was removed. These calls can be replaced by &VIDIOC-ENUM-FMT; with 1498 type <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 1504 applications which recognize the format by its four-character-code 1505 already know the color depth, and others do not care about it. The 1506 same 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 1509 because drivers are not supposed to convert images in kernel space. A 1510 user library of conversion functions should be provided instead. The 1511 <constant>V4L2_FMT_FLAG_BYTESPERLINE</constant> flag was redundant. 1512 Applications can set the <structfield>bytesperline</structfield> field 1513 to zero to get a reasonable default. Since the remaining flags were 1514 replaced as well, the <structfield>flags</structfield> field itself 1515 was removed.</para> 1516 <para>The interlace flags were replaced by a &v4l2-field; 1517 value in a newly added <structfield>field</structfield> 1518 field.<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 1577 added to distinguish between I/O methods using buffers allocated 1578 by the driver or the application. See <xref linkend="io" /> for 1579 details.</para> 1580 </listitem> 1581 1582 <listitem> 1583 <para>In &v4l2-buffer; the <structfield>type</structfield> 1584 field was properly defined as &v4l2-buf-type;. Buffer types changed as 1585 mentioned above. A <structfield>field</structfield> field of type 1586 &v4l2-field; was added to indicate if a buffer contains a top or 1587 bottom field. The old field flags were removed. Since no unadjusted 1588 system time clock was added to the kernel as planned, the 1589 <structfield>timestamp</structfield> field changed back from type 1590 stamp_t, an unsigned 64 bit integer expressing the sample time in 1591 nanoseconds, to struct <structname>timeval</structname>. With the 1592 addition 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 1596 added to distinguish between I/O methods. See <xref linkend="io" /> 1597 for details.</para> 1598 1599 <para>The <constant>V4L2_BUF_REQ_CONTIG</constant> 1600 flag was used by the V4L compatibility layer, after changes to this 1601 code it was no longer needed. The 1602 <constant>V4L2_BUF_ATTR_DEVICEMEM</constant> flag would indicate if 1603 the buffer was indeed allocated in device memory rather than DMA-able 1604 system 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 1610 triple-buffering in off-screen video memory, however without defining 1611 a 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. 1614 Applications can determine this capability more accurately using the 1615 new 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 1627 were renamed to <structfield>left</structfield> and 1628 <structfield>top</structfield>, &ie; offsets to a context dependent 1629 origin.</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 1638 to 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 1647 cropping and scaling interface. The previously unused struct 1648 <structname>v4l2_cropcap</structname> and 1649 <structname>v4l2_crop</structname> where redefined for this purpose. 1650 See <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 1656 four-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 1665 long to &v4l2-fract;. This allows the accurate expression of multiples 1666 of the NTSC-M frame rate 30000 / 1001. A new field 1667 <structfield>readbuffers</structfield> was added to control the driver 1668 behaviour 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> 1675 and <constant>VIDIOC_G_PERF</constant> ioctl were dropped. Except when 1676 using the <link linkend="rw">read/write I/O method</link>, which is 1677 limited anyway, this information is already available to 1678 applications.</para> 1679 </listitem> 1680 1681 <listitem> 1682 <para>The example transformation from RGB to YCbCr color 1683 space in the old V4L2 documentation was inaccurate, this has been 1684 corrected in <xref linkend="pixfmt" />.<!-- 0.5670G should be 1685 0.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 1697 to this change radio devices would identify solely by having exactly one 1698 tuner whose type field reads <constant>V4L2_TUNER_RADIO</constant>.</para> 1699 </listitem> 1700 1701 <listitem> 1702 <para>An optional driver access priority mechanism was 1703 added, 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 1708 incomplete.</para> 1709 <para>Previously the &VIDIOC-G-AUDIO; 1710 ioctl would enumerate the available audio inputs. An ioctl to 1711 determine the current audio input, if more than one combines with the 1712 current 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 1715 Kernel 2.6.39. The &VIDIOC-ENUMAUDIO; ioctl was added to enumerate 1716 audio inputs, while &VIDIOC-G-AUDIO; now reports the current audio 1717 input.</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 1721 translate between the old and new ioctls, but drivers and applications 1722 must be updated to successfully compile again.</para> 1723 </listitem> 1724 1725 <listitem> 1726 <para>The &VIDIOC-OVERLAY; ioctl was incorrectly defined with 1727 write-read parameter. It was changed to write-only, while the write-read 1728 version was renamed to <constant>VIDIOC_OVERLAY_OLD</constant>. The old 1729 ioctl was removed on Kernel 2.6.39. Until further the "videodev" 1730 kernel module will automatically translate to the new version, so drivers 1731 must be recompiled, but not applications.</para> 1732 </listitem> 1733 1734 <listitem> 1735 <para><xref linkend="overlay" /> incorrectly stated that 1736 clipping rectangles define regions where the video can be seen. 1737 Correct is that clipping rectangles define regions where 1738 <emphasis>no</emphasis> video shall be displayed and so the graphics 1739 surface can be seen.</para> 1740 </listitem> 1741 1742 <listitem> 1743 <para>The &VIDIOC-S-PARM; and &VIDIOC-S-CTRL; ioctls were 1744 defined with write-only parameter, inconsistent with other ioctls 1745 modifying their argument. They were changed to write-read, while a 1746 <constant>_OLD</constant> suffix was added to the write-only versions. 1747 The old ioctls were removed on Kernel 2.6.39. Drivers and 1748 applications 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 1758 formats were incorrectly transferred from Bill Dirks' V4L2 1759 specification. Descriptions below refer to bytes in memory, in 1760 ascending address order.<informaltable> 1761 <tgroup cols="3"> 1762 <thead> 1763 <row> 1764 <entry>Symbol</entry> 1765 <entry>In this document prior to revision 1766 0.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 1795 correct.</para> 1796 <para>In <xref linkend="v4l-image-properties" /> the mapping 1797 of the V4L <constant>VIDEO_PALETTE_RGB24</constant> and 1798 <constant>VIDEO_PALETTE_RGB32</constant> formats to V4L2 pixel formats 1799 was accordingly corrected.</para> 1800 </listitem> 1801 1802 <listitem> 1803 <para>Unrelated to the fixes above, drivers may still 1804 interpret some V4L2 RGB pixel formats differently. These issues have 1805 yet 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 1816 with read-only parameter. It is now defined as write-read ioctl, while 1817 the read-only version was renamed to 1818 <constant>VIDIOC_CROPCAP_OLD</constant>. The old ioctl was removed 1819 on 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; 1830 structure. Purpose of this field is to alternate between video inputs 1831 (⪚ cameras) in step with the video capturing process. This function 1832 must be enabled with the new <constant>V4L2_BUF_FLAG_INPUT</constant> 1833 flag. The <structfield>flags</structfield> field is no longer 1834 read-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 1855 argument.</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 1862 examples. Also on the <constant>VIDIOC_DQBUF</constant> page the &EIO; 1863 was 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 1873 in <xref linkend="sliced" /> and replaces the interface first 1874 proposed 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), 1891 and <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 1904 was 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 1908 2.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" /> 1916 called the &VIDIOC-S-CROP; ioctl without checking if cropping is 1917 supported. In the video standard selection example in 1918 <xref linkend="standard" /> the &VIDIOC-S-STD; call used the wrong 1919 argument 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 1928 also if it is active. (The color killer disables color decoding when 1929 it detects no color in the video signal to improve the image 1930 quality.)</para> 1931 </listitem> 1932 1933 <listitem> 1934 <para>&VIDIOC-S-PARM; is a write-read ioctl, not write-only as 1935 stated 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 1946 seconds, 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 1957 list, because drivers ignore the struct 1958 <structname>v4l2_clip</structname>.<structfield>next</structfield> 1959 pointer.</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 1970 sets <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> 1981 was defined to record both languages of a bilingual program. The 1982 use of <constant>V4L2_TUNER_MODE_STEREO</constant> for this purpose 1983 is deprecated now. See the &VIDIOC-G-TUNER; section for 1984 details.</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 1996 interface 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 2001 that the &v4l2-audio; <structfield>mode</structfield> field is a flags 2002 field.</para> 2003 </listitem> 2004 2005 <listitem> 2006 <para><xref linkend="vidioc-querycap" /> did not mention the 2007 sliced VBI and radio capability flags.</para> 2008 </listitem> 2009 2010 <listitem> 2011 <para>In <xref linkend="vidioc-g-frequency" /> it was 2012 clarified that applications must initialize the tuner 2013 <structfield>type</structfield> field of &v4l2-frequency; before 2014 calling &VIDIOC-S-FREQUENCY;.</para> 2015 </listitem> 2016 2017 <listitem> 2018 <para>The <structfield>reserved</structfield> array 2019 in &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 2026 by <filename>/dev/video</filename>.</para> 2027 </listitem> 2028 2029 <listitem> 2030 <para>With Linux 2.6.15 the possible range for VBI device minor 2031 numbers was extended from 224-239 to 224-255. Accordingly device file names 2032 <filename>/dev/vbi0</filename> to <filename>/dev/vbi31</filename> are 2033 possible 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; 2043 and &VIDIOC-TRY-EXT-CTRLS; were added, a flag to skip unsupported 2044 controls 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 2063 replacing a reserved field. Note on architectures where the size of 2064 enum types differs from int types the size of the structure changed. 2065 The &VIDIOC-G-SLICED-VBI-CAP; ioctl was redefined from being read-only 2066 to write-read. Applications must initialize the type field and clear 2067 the reserved fields now. These changes may <emphasis>break the 2068 compatibility</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 2078 linkend="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 2088 linkend="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 2098 now dual licensed under GNU General Public License version two or 2099 later, 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 2116 straight or inverted local alpha value were added to the video overlay 2117 interface. 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 2120 was added to <link 2121 linkend="v4l2-window"><structname>v4l2_window</structname></link>, 2122 extending the structure. This may <emphasis>break 2123 compatibility</emphasis> with applications using a struct 2124 <structname>v4l2_window</structname> directly. However the <link 2125 linkend="vidioc-g-fmt">VIDIOC_G/S/TRY_FMT</link> ioctls, which take a 2126 pointer to a <link linkend="v4l2-format">v4l2_format</link> parent 2127 structure with padding bytes at the end, are not affected.</para> 2128 </listitem> 2129 2130 <listitem> 2131 <para>The format of the <structfield>chromakey</structfield> 2132 field in &v4l2-window; changed from "host order RGB32" to a pixel 2133 value in the same format as the framebuffer. This may <emphasis>break 2134 compatibility</emphasis> with existing applications. Drivers 2135 supporting 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 2161 linkend="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 2171 controls <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 2179 class</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 2196 by the <link linkend="extended-controls">extended controls</link> 2197 interface 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 2249 video 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 2264 to <constant>VIDIOC_G_CHIP_IDENT_OLD</constant> and &VIDIOC-DBG-G-CHIP-IDENT; 2265 was introduced in its place. The old struct <structname>v4l2_chip_ident</structname> 2266 was 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 2299 version, 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 2303 more 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 2350 used and no hardware exists to verify the API. Nor were any userspace applications found 2351 that 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 2378 an extension of the X Window system, implemented for example by the 2379 XFree86 project. Its scope is similar to V4L2, an API to video capture 2380 and output devices for X clients. Xv allows applications to display 2381 live video in a window, send window contents to a TV output, and 2382 capture or output still images in XPixmaps<footnote> 2383 <para>This is not implemented in XFree86.</para> 2384 </footnote>. With their implementation XFree86 makes the 2385 extension available across many operating systems and 2386 architectures.</para> 2387 2388 <para>Because the driver is embedded into the X server Xv has a 2389 number of advantages over the V4L2 <link linkend="overlay">video 2390 overlay interface</link>. The driver can easily determine the overlay 2391 target, &ie; visible graphics memory or off-screen buffers for a 2392 destructive overlay. It can program the RAMDAC for a non-destructive 2393 overlay, scaling or color-keying, or the clipping functions of the 2394 video capture hardware, always in sync with drawing operations or 2395 windows moving or changing their stacking order.</para> 2396 2397 <para>To combine the advantages of Xv and V4L a special Xv 2398 driver exists in XFree86 and XOrg, just programming any overlay capable 2399 Video4Linux device it finds. To enable it 2400 <filename>/etc/X11/XF86Config</filename> must contain these lines:</para> 2401 <para><screen> 2402 Section "Module" 2403 Load "v4l" 2404 EndSection</screen></para> 2405 2406 <para>As of XFree86 4.2 this driver still supports only V4L 2407 ioctls, however it should work just fine with all V4L2 devices through 2408 the V4L2 backward-compatibility layer. Since V4L2 permits multiple 2409 opens it is possible (if supported by the V4L2 driver) to capture 2410 video while an X client requested video overlay. Restrictions of 2411 simultaneous capturing and overlay are discussed in <xref 2412 linkend="overlay" /> apply.</para> 2413 2414 <para>Only marginally related to V4L2, XFree86 extended Xv to 2415 support hardware YUV to RGB conversion and scaling for faster video 2416 playback, and added an interface to MPEG-2 decoding hardware. This API 2417 is 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 2424 satellite broadcast. A separate project aiming at digital receivers 2425 exists. You can find its homepage at <ulink 2426 url="http://linuxtv.org">http://linuxtv.org</ulink>. The Linux DVB API 2427 has no connection to the V4L2 API except that drivers for hybrid 2428 hardware 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 2442 and 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; 2466 ioctls.</para> 2467 </listitem> 2468 <listitem> 2469 <para>&VIDIOC-DBG-G-REGISTER; and &VIDIOC-DBG-S-REGISTER; 2470 ioctls.</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 2482 interfaces 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 <!-- 2495 Local Variables: 2496 mode: sgml 2497 sgml-parent-document: "v4l2.sgml" 2498 indent-tabs-mode: nil 2499 End: 2500 -->