v4l2驱动2-linux3.0.8中V4L2_CAP_*详解 | 少将全栈
  • 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

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

点滴 admin 10年前 (2014-11-19) 2562次浏览 已收录 扫描二维码

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

/* 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比较主要有两点:

a.信息

在调频广播发射信号中利用副载波把电台名称、节目类型、节目内容及其它信息以数字形式发送出去。

b. 电台识别

通过RDS可知道接收到的是那个电台,它的发射频率,并给出该电台其余的频率。一个电台有几个频率,你在不同地域要使用不同的频率,才能有好的效果。如果你在开车从这个地点到另一个地点。RDS会自动搜索当前电台的其他的发射频率,当找到另一个信号比原来的好、稳定的频率时,就会自动跳转过去。

 

3.     multi-planar

多平面格式 例如 V4L2_PIX_FMT_NV12M,V4L2_PIX_FMT_YUV420M等

Packed格式把一个像素的所有分量值连续存放在一起。
Planar  格式把每一个分量单独存储成一个阵列。例如在 YUV 格式中,所有 Y 值都连续地一起存
储在一个阵列中,U 值存储在另一个中,V 值存在第三个中。这些平面常常都存储在一个缓冲区
中,但并不一定非要这样。 目前只看到s5p-fimc驱动使用了这个东西。

4.     输入/输出

Read/Write

使用read和write方法,每一帧都要通过I/O 操作,在用户和内核空间之间拷贝数据。设备cap要或上V4L2_CAP_READWRITE 

Streaming I/O(Memory Mapping)

Streaming I/O(User Pointers)

Streaming I/O(DMA buffer importing)

在设备cap上要或上V4L2_CAP_STREAMING,让用户与内核空间之间交换缓冲区指针,这些缓冲区将被映射到用户地址空间,使帧的零 拷贝成为可能。 

 “用户与内核空间之间交换缓冲区指针”我们要理解的是缓冲区是在用户空间还是内核空间。对于内核空间(内核申请的缓冲
区可以是大而连续 DMA 缓冲区、通过 vmalloc()创建的虚拟缓冲区,或者直接在设备的 I/O 内存中开辟的缓冲区,如果硬件支持)
。我们通过mmap()方法映射。 对于用户空间就不需要mmap(),此方法比较难用。

AsynchronousI/O //目前没实现。

 

5、TUNER和MODULATOR

调谐器和调制器,一个算是输入一个是输出。

调谐器:是某些车载主机所具有的FM/AM调谐器或TV调谐器,具有这些调谐器的车载主机也就具有了FM/AM收音或电视接收功能。又是叫高频头。

调制器:把信号源(可以是数字电视机顶盒、卫星数字电视接收机、DVD机、电脑、摄像机、电视解调器等AV信号源)所提供的视频信号(VIDEO)和音频信号(AUDIO)调制成稳定的高频射频振荡信号,视频为调幅调制方式,音频为调频调制方式。

喜欢 (0)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。