关于linux下的视频编程...
时间:2010-08-18 来源:zhhg_1220
1. video4liinux2(v4l2)是视频设备的内核驱动,摄像头在/dev/video0下
2. 视频设备的操作流程
A 打开 fb = open("/dev/video0", O_RDWR)
B 得到设备的capability,包括设备的功能,比如视频输入或者音频输入输出
C 选择视频输入
D 设置视频制式(PAL,NTSC)和帧格式(宽度和高度)
E 申请帧缓冲
F 帧缓冲映射到用户空间后直接操作帧
G 帧缓冲全部入队列存放采集到的数据
H 开始采集视频
I 出对列取得已采集数据的帧缓冲
J 缓冲重新入队列尾,循环采集
K 停止视频采集
L 关闭视频设备
3. 打开视频设备
open("/dev/video0", O_RDWR | O_NONBLOCK, 0); // 阻塞方式打开
open("/dev/video0", O_RDWR, 0); // 非阻塞方式打开,即使没有捕捉到信息也会把缓存里的东西返回到应用程序
4. 设定属性和采集方式
v4l2开发中ioctl方法的一些常用命令包括:
VIDIOC_REQBUFS :分配内存
VIDIOC_QUERYBUF :把VIDIOC_REQBUFS 中分配的数据缓存转换成物理地址
VIDIOC_QUERYCAP :获得当前设备的各个树形,查看设备对各项功能的支持程度
VIDIOC_ENUM_FMT :获取当前驱动支持的视频格式
VIDIOC_S_FMT :设置当前驱动的频捕获格式
VIDIOC_G_FMT :读取当前驱动的频捕获格式
VIDIOC_TRY_FMT :验证当前驱动的显示格式
VIDIOC_CROPCAP :查询驱动的修剪能力
VIDIOC_S_CROP :设置视频信号的边框
VIDIOC_G_CROP :读取视频信号的边框
VIDIOC_QBUF :把数据从缓存中读取出来
VIDIOC_DQBUF :把数据放回缓存队列
VIDIOC_STREAMON :开始视频显示函数
VIDIOC_STREAMOFF :结束视频显示函数
VIDIOC_QUERYSTD :检查当前视频设备支持的标准,例如PAL 或NTSC
5. 通过VIDIOC_ENUMINPUT和VIDIOC_ENUMOUTPUT分别列举一个input和output的信息存放在v4l2_input结构体变量中,该结构体中的index用来指定所要查询的是第几个input/output。