您的位置:首页 > 运维架构 > Linux

关于Linux下的视频编程

2010-08-19 03:17 295 查看
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。

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux input output video 编程 c