[特别推荐]视编程.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[特别推荐]视编程

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 通道进行管理:

文档评论(0)

aining + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档