About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / DocBook / v4l / compat.xml


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 &times; 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&nbsp;Hz NTSC (or any other 525-line
820	standard); 35468950&nbsp;Hz PAL and SECAM (625-line standards)</entry>
821			</row>
822			<row>
823			  <entry>offset</entry>
824			  <entry>?</entry>
825			</row>
826			<row>
827			  <entry>samples_per_line</entry>
828			  <entry>2048</entry>
829			</row>
830			<row>
831			  <entry>sample_format</entry>
832			  <entry>V4L2_PIX_FMT_GREY. The last four bytes (a
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, &amp;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] &gt; 0 and count[1] &gt; 0"
1203	has been relaxed  to "(count[0] + count[1]) &gt; 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	(&eg; 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	  -->
Hide Line Numbers


About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog