日期:2014-05-16  浏览次数:20815 次

v4l2驱动2-linux3.0.8中V4L2_CAP_*详解

这部分涉及不少专业支持,有些可能写的不好,请大家原谅!

/* Values for 'capabilities' field */
#define V4L2_CAP_VIDEO_CAPTURE		0x00000001  /* Is a video capture device */
#define V4L2_CAP_VIDEO_OUTPUT		0x00000002  /* Is a video output device */
#define V4L2_CAP_VIDEO_OVERLAY		0x00000004  /* Can do video overlay */
#define V4L2_CAP_VBI_CAPTURE		0x00000010  /* Is a raw VBI capture device */
#define V4L2_CAP_VBI_OUTPUT		0x00000020  /* Is a raw VBI output device */
#define V4L2_CAP_SLICED_VBI_CAPTURE	0x00000040  /* Is a sliced VBI capture device */
#define V4L2_CAP_SLICED_VBI_OUTPUT	0x00000080  /* Is a sliced VBI output device */
#define V4L2_CAP_RDS_CAPTURE		0x00000100  /* RDS data capture */
#define V4L2_CAP_VIDEO_OUTPUT_OVERLAY	0x00000200  /* Can do video output overlay */
#define V4L2_CAP_HW_FREQ_SEEK		0x00000400  /* Can do hardware frequency seek  */
#define V4L2_CAP_RDS_OUTPUT		0x00000800  /* Is an RDS encoder */

/* Is a video capture device that supports multiplanar formats */
#define V4L2_CAP_VIDEO_CAPTURE_MPLANE	0x00001000
/* Is a video output device that supports multiplanar formats */
#define V4L2_CAP_VIDEO_OUTPUT_MPLANE	0x00002000

#define V4L2_CAP_TUNER			0x00010000  /* has a tuner */
#define V4L2_CAP_AUDIO			0x00020000  /* has audio support */
#define V4L2_CAP_RADIO			0x00040000  /* is a radio device */
#define V4L2_CAP_MODULATOR		0x00080000  /* has a modulator */

#define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */
#define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */
#define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */
下面是解释:

1.       videocapture 、video overlay、video output、video output overlay

上面说了一个是采集一个是直接传送视频

vieo overlay不同于video capture,是指不需要对video信号的帧进行copy,直接将视频信号转化成显卡的VGA信号或者将捕获到的视频帧直接存放在显卡的内存中。Video overlay需要硬件的支持。这个直接的通道主要是DMA去实现。

 

Viedo overlay只用来preview,又被称为framebuffer overlay或previwing。 实际上video capture interface也能实现preview,只是没有overlay有效率。

 

如果是同时进行overlay和capture,应该尽量不使用同一个文件 描述符,比如说如果此时在overlay,要拍照的话应该再打开设备,使用一个分开的文件描述符来进行capture。如果driver支持同时进行overlay和capture的话,必须支持使用分开的文件描述符来分别进行overlay和capture 。为了多文件描述符的操作linux操作系统加入v4l2_fh和v4l2_prio的机制。以后再说。

 

video output设备是把静态图片编码为模拟video信号,这就意味着output设备的输出是模拟video信号。

Video Output Overlay又称on-screen display,把framebuffer中的内容叠加到输出的video信号中。

 

2.      vbi

VBI= Vertical Blanking Interval(场消隐区)。在模拟显示设备上(例如:CRT显示器),一场的显

示是从屏幕上方到下方一行一行绘制而成。一旦一场数据绘制完毕,电子束会由下方转移到上方,以备

开始下一场数据的显示。在这个电极复位的时间间隙内,CRT和信号间是没有数据传输的,因此称作场

消隐区。

    在场消隐区时间内,不需要传输任何有用的视频数据,所以显示器不接受和处理任何的输入视频

信号。在这个间隔内,设备间可以利用空闲的基带进行额外的数据通讯。为了让这个问题简单化,水

平扫描线在场消隐区时继续传输,但是扫描线上不附带任何可供显示的视频数据。此时,每一个VBI

扫描线,或者一组VBI数据扫描线可能包含有按照某种标准进行编码后的信息。最常用的VBI应用就是

在闭路电视上,用于显示字幕。图文电视(Teletext)就是VBI数据广播的一种.    

 

Raw VBI和SlicedVBI

接收到VBI数据的硬件设备,只需要去完完整整的接纳数据,并且对接收到的数据不做任何的数据处理,

这个称之为原始数据。这些原始数据可能直接提交给软件解析其内容。另外一种方式是用VBI硬件按照

某种标准或者类型去解析VBI数据,在这种方式下,信号的输出就被分离成为闭路电视字幕,或者其他

类型的数据包。典型的VBI数据分离电路支持都支持这两种模式。自从VBI硬件处理电路中添加了数据分

离,错误处理等功能后,Sliced模式变得更加有用。Raw VBI Data(原始VBI数据)主要用于没有任何

数据标准,且信号直接送递显示设备的场合。

 

3 .RDS

无线电数据系统,简称RDS,是欧洲广播联盟的通信协议标准,该标准的建立是为了使用传统的FM无线电广播发送少量的数字化信息。RDS系统标准化了好几个类型的信息传输,包括时间,信息跟踪和电台识别。在九十年代早期,RDS在欧洲和拉丁美洲已经标准化,但在北美标准化较少。

这是百度文库找的,其实RDS发明是针对汽车使用的。和FM和AM比较主要有两点: