关于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。

 

 

 

 

你可能感兴趣的:(Linux,linux,input,output,video,编程,c)