video caputure device linux v4l2 API usag

对于linux下的一个v4l2设备编程一般包括以下步骤:

1) 打开设备

2)改变设备属性,选择一个视频和声音输入(有时候一个物理设备可能包括多个视频和声音输入)、视频标准、图像亮度等。

3)和驱动协商一个数据格式

4)和驱动协商输入输出方法(read,write,mmap,User Pointers,DMA buffer importing,等)

5)数据的输入输出循环(获取数据)

6)关闭设备

注:实际编程的步骤是依赖具体的属于那种设备,例如,Video Capture,Video Overlay ,Video Output,Video Output Overlay,Codec,Effect Devices,Raw VBI Data,

Sliced VBI Data,Teletext ,Radio,RDS,Event,Sub-device

本文主要翻译有关caputure device 部分。

视频捕捉设备对视频模拟信号采样,将采样得到的数字信号存储在内存中。现在几乎所有的视频捕捉设备能够在每秒捕捉25到30帧。

按照惯例,v4l2视频捕捉设备能够通过名为/dev/video0--/dev/video63(其主设备号为81,此设备号从0到63)的特殊字符设备文件来访问。通常,、/dev/video一般符号链接到优先选用的视频设备。注意,相同的设备文件被视频输出设备使用。(不懂?)

1)打开和关闭设备分别用open(),和close()函数 

2)因为v4l2覆盖很多中设备,不是所有的API可以应用到所有设备上的,此外,相同种类的设备可能有不同的能力。querying capabilities可以让我们忽略一些复杂难懂而且不是太重要的API。所有的v4l2驱动都支持VIDIOC_QUERYCAP命令,应用程序也应该在打开设备后,用ioctl()函数调用此命令。检查是否支持想用的设备功能如caputure功能,I/O方法(read/write,mmap等)。

3)为了知道可用的视频输入输出的数量和属性,应用程序能列举每个输入输出,分别用VIDIOC_ENUMINPUT and VIDIOC_ENUMOUTPUT ioctl。

VIDIOC_G_INPUT and VIDIOC_G_OUTPUT ioctl返回当前视频的输入输出。应用程序可以使用VIDIOC_S_INPUT and VIDIOC_S_OUTPUT ioctl选择视频的输入输出通道。

4)其他补充的功能。

视频捕捉设备可能会支持audio input, tuner, controls, cropping and scalingand streaming parameterioctl

5)图像格式协商

视频捕捉的结果由cropping(裁剪)和图像格式参数决定。cropping选择设备捕捉视频图像的区域,图像格式,决定图像以什么格式存储的在内存中,例如以RGB还是YUV颜色空间、图像的宽和高(以像素为单位),两者一起决定了图像怎样被裁剪。

照例,以上这些参数不在open()函数时重新设定,对一个设备编程就好像对一个普通的文件进行读,适当的书面v4l2应用程序确保设备得到他们想要的,包括cropping和scaling。(Well written V4L2 applications ensure they really get what they want, including cropping and scaling.)

裁剪初始化最小的要求是重新设定裁剪参数到默认值,为了去查询现在图像的格式,应用程序需要用call the VIDIOC_G_FMT ioctl,为了要求不同的图像格式参数,应用程序call the VIDIOC_S_FMT ioctl.

6)读取图像数

据视频捕捉设备可能支持read(),也可能之处l流I/O(即mmap和user pointer io)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值