关于Linux下的视频编程

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 :检查当前视频设备支持的标准,例如PALNTSC

 

5. 通过VIDIOC_ENUMINPUT和VIDIOC_ENUMOUTPUT分别列举一个input和output的信息存放在v4l2_input结构体变量中,该结构体中的index用来指定所要查询的是第几个input/output。

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值