- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux下视频编程 收藏
关于Linux的视频编程(v4l2编程)
Posted on 星期一, 2月 23rd, 2009 at 11:47 下午
前言:目前正在忙于ARM 平台的Linux 应用程序的开发(其实是刚刚起步学习啦)。底层的东西不用考虑了,开发板子提供了NAND Bootloader ,和Linux 2.6 的源码,而且都编译好了。自己编译的bootloader 可以用,但是Linux 编译后,文件很大,暂且就用人家编译的系统,先专心写应用程序 吧。。
正文:要做的任务是,把一块板子上的摄像头采集的图像和声卡采集的声音(貌似很啰嗦哈)通过TCP/IP 协议传输到另一块板子上。第一步,先把视频获取并且在本地LCD 上显示。看了板子提供的文档,视频传输需要用V4L2 的API 。
一. 什么是video4linux
Video4linux2 (简称V4L2), 是linux 中关于视频设备的内核驱动。在Linux 中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video0 下。
二、一般操作流程(视频设备):
1. 打开设备文件。 int fd=open(”/dev/video0″,O_RDWR);
2. 取得设备的capability ,看看设备具有什么功能,比如是否具有视频输入, 或者音频输入输出等。VIDIOC_QUERYCAP,struct v4l2_capability
3. 选择视频输入,一个视频设备可以有多个视频输入。VIDIOC_S_INPUT,struct v4l2_input
4. 设置视频的制式和帧格式,制式包括PAL ,NTSC ,帧的格式个包括宽度和高度等。
VIDIOC_S_STD,VIDIOC_S_FMT,struct v4l2_std_id,struct v4l2_format
5. 向驱动申请帧缓冲,一般不超过5 个。struct v4l2_requestbuffers
6. 将申请到的帧缓冲映射到用户空间,这样就可以直接操作采集到的帧了,而不必去复制。mmap
7. 将申请到的帧缓冲全部入队列,以便存放采集到的数据.VIDIOC_QBUF,struct v4l2_buffer
8. 开始视频的采集。VIDIOC_STREAMON
9. 出队列以取得已采集数据的帧缓冲,取得原始采集数据。VIDIOC_DQBUF
10. 将缓冲重新入队列尾, 这样可以循环采集。VIDIOC_QBUF
11. 停止视频的采集。VIDIOC_STREAMOFF
12. 关闭视频设备。close(fd);
三、常用的结构体( 参见/usr/include/linux/videodev2.h) :
struct v4l2_requestbuffers reqbufs;// 向驱动申请帧缓冲的请求,里面包含申请的个数
struct v4l2_capability cap;// 这个设备的功能,比如是否是视频输入设备
struct v4l2_input input; // 视频输入
struct v4l2_standard std;// 视频的制式,比如PAL ,NTSC
struct v4l2_format fmt;// 帧的格式,比如宽度,高度等
struct v4l2_buffer buf;// 代表驱动中的一帧
v4l2_std_id stdid;// 视频制式,例如:V4L2_STD_PAL_B
struct v4l2_queryctrl query;// 查询的控制
struct v4l2_control control;// 具体控制的值
下面具体说明开发流程(网上找的啦,也在学习么)
打开视频设备
在V4L2 中,视频设备被看做一个文件。使用open 函数打开这个设备:
// 用非阻塞模式打开摄像头设备
int cameraFd ;
cameraFd = open (“/dev/video0″ , O_RDWR | O_NONBLOCK , 0);
// 如果用阻塞模式打开摄像头设备,上述代码变为:
//cameraFd = open(”/dev/video0″, O_RDWR, 0);
关于阻塞模式和非阻塞模式
应用程序能够使用阻塞模式或非阻塞模式打开视频设备,如果使用非阻塞模式调用视频设备,即使尚未捕获到信息,驱动依旧会把缓存(DQBUFF )里的东西返回给应用程序。
设定属性及采集方式
打开视频设备后,可以设置该视频设备的属性,例如裁剪、缩放等。这一步是可选的。在Linux 编程中,一般使用ioctl 函数来对设备的I/O 通道进行管理:
extern int ioctl (int __fd , unsigne
文档评论(0)