V4L2采集图像基本流程

参考 http://blog.csdn.net/tsuibeyond/article/details/50654823

         http://www.cnblogs.com/surpassal/archive/2012/12/19/zed_webcam_lab1.html

      1.打开设备fd = open(FILE_VIDEO1, O_RDWR))

       2.取得设备的capability 看看设备具有什么功能 比如是否具有视频输入 或者音频输入输出等 VIDIOC QUERYCAP struct v4l2 capabilit

      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 ;

  

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

uchar *buffer;                          //buffers 指针记录缓冲帧

#define IMAGEWIDTH 640
#define IMAGEHEIGHT 480

#define TRUE 1
#define FALSE 0

#define FILE_VIDEO1 "/dev/video0"

static int fd;                          //设备描述符
struct v4l2_streamparm setfps;          //结构体v4l2_streamparm来描述视频流的属性
struct v4l2_capability cap;             //取得设备的capability,看看设备具有什么功能,比如是否具有视频输入,或者音频输入输出等
struct v4l2_fmtdesc fmtdesc;            //枚举设备所支持的image format:  VIDIOC_ENUM_FMT
struct v4l2_format fmt,fmtack;          //子结构体struct v4l2_pix_format设置摄像头采集视频的宽高和类型:V4L2_PIX_FMT_YYUV V4L2_PIX_FMT_YUYV
struct v4l2_requestbuffers req;         /

你可能感兴趣的:(linux,图像处理,ubuntu,V4L2)