| 
									
										
										
										
											2009-09-13 22:16:04 -03:00
										 |  |  |   <title>Video Capture Interface</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <para>Video capture devices sample an analog video signal and store | 
					
						
							|  |  |  | the digitized images in memory. Today nearly all devices can capture | 
					
						
							|  |  |  | at full 25 or 30 frames/second. With this interface applications can | 
					
						
							|  |  |  | control the capture process and move images from the driver into user | 
					
						
							|  |  |  | space.</para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <para>Conventionally V4L2 video capture devices are accessed through | 
					
						
							|  |  |  | character device special files named <filename>/dev/video</filename> | 
					
						
							|  |  |  | and <filename>/dev/video0</filename> to | 
					
						
							|  |  |  | <filename>/dev/video63</filename> with major number 81 and minor | 
					
						
							|  |  |  | numbers 0 to 63. <filename>/dev/video</filename> is typically a | 
					
						
							|  |  |  | symbolic link to the preferred video device. Note the same device | 
					
						
							|  |  |  | files are used for video output devices.</para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <section> | 
					
						
							|  |  |  |     <title>Querying Capabilities</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para>Devices supporting the video capture interface set the | 
					
						
							| 
									
										
										
										
											2011-01-07 01:41:33 -03:00
										 |  |  | <constant>V4L2_CAP_VIDEO_CAPTURE</constant> or | 
					
						
							|  |  |  | <constant>V4L2_CAP_VIDEO_CAPTURE_MPLANE</constant> flag in the | 
					
						
							| 
									
										
										
										
											2009-09-13 22:16:04 -03:00
										 |  |  | <structfield>capabilities</structfield> field of &v4l2-capability; | 
					
						
							|  |  |  | returned by the &VIDIOC-QUERYCAP; ioctl. As secondary device functions | 
					
						
							|  |  |  | they may also support the <link linkend="overlay">video overlay</link> | 
					
						
							|  |  |  | (<constant>V4L2_CAP_VIDEO_OVERLAY</constant>) and the <link | 
					
						
							|  |  |  | linkend="raw-vbi">raw VBI capture</link> | 
					
						
							|  |  |  | (<constant>V4L2_CAP_VBI_CAPTURE</constant>) interface. At least one of | 
					
						
							|  |  |  | the read/write or streaming I/O methods must be supported. Tuners and | 
					
						
							|  |  |  | audio inputs are optional.</para> | 
					
						
							|  |  |  |   </section> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <section> | 
					
						
							|  |  |  |     <title>Supplemental Functions</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para>Video capture devices shall support <link | 
					
						
							|  |  |  | linkend="audio">audio input</link>, <link | 
					
						
							|  |  |  | linkend="tuner">tuner</link>, <link linkend="control">controls</link>, | 
					
						
							|  |  |  | <link linkend="crop">cropping and scaling</link> and <link | 
					
						
							|  |  |  | linkend="streaming-par">streaming parameter</link> ioctls as needed. | 
					
						
							|  |  |  | The <link linkend="video">video input</link> and <link | 
					
						
							|  |  |  | linkend="standard">video standard</link> ioctls must be supported by | 
					
						
							|  |  |  | all video capture devices.</para> | 
					
						
							|  |  |  |   </section> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <section> | 
					
						
							|  |  |  |     <title>Image Format Negotiation</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para>The result of a capture operation is determined by | 
					
						
							|  |  |  | cropping and image format parameters. The former select an area of the | 
					
						
							|  |  |  | video picture to capture, the latter how images are stored in memory, | 
					
						
							|  |  |  | &ie; in RGB or YUV format, the number of bits per pixel or width and | 
					
						
							|  |  |  | height. Together they also define how images are scaled in the | 
					
						
							|  |  |  | process.</para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para>As usual these parameters are <emphasis>not</emphasis> reset | 
					
						
							|  |  |  | at &func-open; time to permit Unix tool chains, programming a device | 
					
						
							|  |  |  | and then reading from it as if it was a plain file. Well written V4L2 | 
					
						
							|  |  |  | applications ensure they really get what they want, including cropping | 
					
						
							|  |  |  | and scaling.</para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para>Cropping initialization at minimum requires to reset the | 
					
						
							|  |  |  | parameters to defaults. An example is given in <xref | 
					
						
							|  |  |  | linkend="crop" />.</para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para>To query the current image format applications set the | 
					
						
							|  |  |  | <structfield>type</structfield> field of a &v4l2-format; to | 
					
						
							| 
									
										
										
										
											2011-01-07 01:41:33 -03:00
										 |  |  | <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> or | 
					
						
							|  |  |  | <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant> and call the | 
					
						
							| 
									
										
										
										
											2009-09-13 22:16:04 -03:00
										 |  |  | &VIDIOC-G-FMT; ioctl with a pointer to this structure. Drivers fill | 
					
						
							| 
									
										
										
										
											2011-01-07 01:41:33 -03:00
										 |  |  | the &v4l2-pix-format; <structfield>pix</structfield> or the | 
					
						
							|  |  |  | &v4l2-pix-format-mplane; <structfield>pix_mp</structfield> member of the | 
					
						
							| 
									
										
										
										
											2009-09-13 22:16:04 -03:00
										 |  |  | <structfield>fmt</structfield> union.</para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para>To request different parameters applications set the | 
					
						
							|  |  |  | <structfield>type</structfield> field of a &v4l2-format; as above and | 
					
						
							|  |  |  | initialize all fields of the &v4l2-pix-format; | 
					
						
							|  |  |  | <structfield>vbi</structfield> member of the | 
					
						
							|  |  |  | <structfield>fmt</structfield> union, or better just modify the | 
					
						
							|  |  |  | results of <constant>VIDIOC_G_FMT</constant>, and call the | 
					
						
							|  |  |  | &VIDIOC-S-FMT; ioctl with a pointer to this structure. Drivers may | 
					
						
							|  |  |  | adjust the parameters and finally return the actual parameters as | 
					
						
							|  |  |  | <constant>VIDIOC_G_FMT</constant> does.</para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para>Like <constant>VIDIOC_S_FMT</constant> the | 
					
						
							|  |  |  | &VIDIOC-TRY-FMT; ioctl can be used to learn about hardware limitations | 
					
						
							|  |  |  | without disabling I/O or possibly time consuming hardware | 
					
						
							|  |  |  | preparations.</para> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-01-07 01:41:33 -03:00
										 |  |  |     <para>The contents of &v4l2-pix-format; and &v4l2-pix-format-mplane; | 
					
						
							|  |  |  | are discussed in <xref linkend="pixfmt" />. See also the specification of the | 
					
						
							| 
									
										
										
										
											2009-09-13 22:16:04 -03:00
										 |  |  | <constant>VIDIOC_G_FMT</constant>, <constant>VIDIOC_S_FMT</constant> | 
					
						
							|  |  |  | and <constant>VIDIOC_TRY_FMT</constant> ioctls for details. Video | 
					
						
							|  |  |  | capture devices must implement both the | 
					
						
							|  |  |  | <constant>VIDIOC_G_FMT</constant> and | 
					
						
							|  |  |  | <constant>VIDIOC_S_FMT</constant> ioctl, even if | 
					
						
							|  |  |  | <constant>VIDIOC_S_FMT</constant> ignores all requests and always | 
					
						
							|  |  |  | returns default parameters as <constant>VIDIOC_G_FMT</constant> does. | 
					
						
							|  |  |  | <constant>VIDIOC_TRY_FMT</constant> is optional.</para> | 
					
						
							|  |  |  |   </section> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <section> | 
					
						
							|  |  |  |     <title>Reading Images</title> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para>A video capture device may support the <link | 
					
						
							|  |  |  | linkend="rw">read() function</link> and/or streaming (<link | 
					
						
							|  |  |  | linkend="mmap">memory mapping</link> or <link | 
					
						
							|  |  |  | linkend="userp">user pointer</link>) I/O. See <xref | 
					
						
							|  |  |  | linkend="io" /> for details.</para> | 
					
						
							|  |  |  |   </section> |