一、流程

V4L2摄像头采集程序步骤

  1. 打开摄像头设备
  2. 查询摄像头硬件信息
  3. 显示摄像头支持的采集格式
  4. 设置采集格式
  5. 申请内核空间
  6. 映射
  7. 开始采集

二、模块

2.1 打开摄像头

int OpenCameraDevice(char* filename,int mode)
{int Camera_fd = open(filename, mode);if (Camera_fd < 0){perror("Failed to open camera device");printf("\n");return -1;//表示函数失败}else{return Camera_fd;}return 0;
}

2.2 查询硬件设备的能力

2.2.1  struct v4l2_capability结构体

struct v4l2_capability {

__u8 driver[16]; //驱动名   通常为:uvcvideo

__u8 card[32]; //设备名   生产厂商写

__u8 bus_info[32]; //在Bus系统中存放位置 ,通常为:usb-hiusb-ehci-2.4

__u32   version; //driver 版本

__u32 capabilities;

//设备支持的操作模式,能力集 通常为:V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING

__u32 device_caps;

__u32 reserved[3];// 保留字段

};

capabilities 代表设备支持的操作模式,常见的值有 V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING 表示是一个视频捕捉设备并且具有数据流控制模式;

能力集中包含:

V4L2_CAP_VIDEO_CAPTURE 0x00000001     The device supports the Video    Capture interface.

V4L2_CAP_VIDEO_OUTPUT   0x00000002     The device supports the Video    Output interface.

V4L2_CAP_VIDEO_OVERLAY 0x00000004     The device supports the Video    Overlay interface.

int QueryCameraHardwareInfo(int fd)
{struct v4l2_capability cap;memset(&cap, 0, sizeof(cap));int ret = 0;ret = ioctl(fd, VIDIOC_QUERYCAP, &cap);if (ret < 0){printf("VIDIOC_QUERYCAP failed(%d)\n", ret);return -1;}else{printf("Capability Informations:\n");/*cout<<"driver:"<<cap.driver<<endl;cout<<"card:"<<cap.card<<endl;cout<<"bus_info:"<<cap.bus_info<<endl;cout<<"version:"<<cap.version<<endl;cout<<"capabilities:"<<cap.capabilities<<endl;cout<<"device_caps:"<<cap.device_caps<<endl;cout<<"reserved:"<<cap.reserved<<endl;*/}printf("--------------------\n");       //可作为分割线。return ret;
}

2.3 打印摄像头支持的格式

2.3.1 struct v4l2_fmtdesc结构体

struct v4l2_fmtdesc

{

u32 index; // 要查询的格式序号,应用程序设置

enum v4l2_buf_type type; // 缓冲类型 应用程序设置  帧类型,应用程序设置

u32 flags; // 是否为压缩格式

u8 description[32]; // 格式名称

u32 pixelformat; // 格式

u32 reserved[4]; // 保留

};

参数enum v4l2_buf_type type:

enum v4l2_buf_type {V4L2_BUF_TYPE_VIDEO_CAPTURE        = 1,V4L2_BUF_TYPE_VIDEO_OUTPUT         = 2,V4L2_BUF_TYPE_VIDEO_OVERLAY        = 3,V4L2_BUF_TYPE_VBI_CAPTURE          = 4,V4L2_BUF_TYPE_VBI_OUTPUT           = 5,V4L2_BUF_TYPE_SLICED_VBI_CAPTURE   = 6,V4L2_BUF_TYPE_SLICED_VBI_OUTPUT    = 7,V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY = 8,V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE = 9,V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE  = 10,V4L2_BUF_TYPE_SDR_CAPTURE          = 11,V4L2_BUF_TYPE_SDR_OUTPUT           = 12,V4L2_BUF_TYPE_META_CAPTURE         = 13,/* Deprecated, do not use */V4L2_BUF_TYPE_PRIVATE              = 0x80,
};

参数u32 flags:

参数description:

参数pixelformat:

2.4 设置采集的格式

Linux V4L2框架的视频采集相关推荐

  1. Linux v4l2框架分析

    背景 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 V4L2(Video for Linu ...

  2. linux 远程挂载摄像头_如何实现嵌入式Linux下USB摄像头视频采集

    展开全部 在linux下所e5a48de588b662616964757a686964616f31333337613134有设备都是文件.所以对摄像头的操作其实就是对文件的操作.USB摄像头的设备文件 ...

  3. v4l2驱动框架_【干货分享】Xilinx Linux V4L2视频管道(Video Pipeline)驱动程序分析...

    作者:付汉杰,hankf@xilinx.com, 文章转载自:赛灵思中文社区论坛 概述 Xilinx提供了完整的V4L2的驱动程序,Xilinx V4L2 driver.处于最顶层的驱动程序是V4L2 ...

  4. Linux基于v4l2的视频采集(可用)

    Video4linux2(简称V4L2),是Linux中关于视频设备的内核驱动. V4L2较V4L有较大的改动,并已成为2.6的标准接口,函盖video\dvb\FM...,多数驱动都在向V4l2迁移 ...

  5. 嵌入式linux环境视频采集知识(V4L2)

    Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版.V4L2是linux操作系统下用于采集图片.视频和音频数据的API接口,配合适当的视频采集设备和相应的 ...

  6. 嵌入式LINUX环境下视频采集知识

    Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版.V4L2是linux操作系统下用于采集图片.视频和音频数据的API接口,配合适当的视频采集设备和相应的 ...

  7. linux视频采集软件,嵌入式LINUX环境下视频采集

    Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版.V4L2是linux操作系统下用于采集图片.视频和音频数据的API接口,配合适当的视频采集设备和相应的 ...

  8. linux的v4l2运行源码,linux v4l2摄像头应用层编程介绍

    一.前言 最近项目需要做一个工业条形读码器,在底层应该会适配linux v4l2框架,就自己研究了一下在应用层怎么使用v4l2进行编程,查阅了相关资料,主要是网上的博客资料,有: https://ww ...

  9. windows下directShow音视频采集

    目录 前言 一.DirectShow简介 二.DirectShow视频采集主要流程介绍 1.DirectShow视频采集主要API介绍 三.视频采集软件设计框图 四.音频采集软件设计框图 <wi ...

最新文章

  1. 基于KNN的相关内容推荐
  2. wordpress url index.php,WordPress对URL的路由解析过程详解
  3. 修改PPC下的移动运营商名称为中文
  4. java菜单管理的实现方式_智能停车场管理系统的收费实现方式有哪些?
  5. mui php上传图片,mui ajax图片上传
  6. java小例子mysql_Java 访问MySQL的小例子
  7. IT测试时准确数据的技巧(IT总结之三去除旧数据)
  8. python中绝对角度是什么意思_Python中的角度转换功能
  9. 更细日期2015年8月18日- Citrix vGPU解决方案注意事项
  10. MP3、MP4、MP5、PSP
  11. 运维工程师从月薪 5K 到 50K,中间都经历了什么?
  12. Android项目编译异常之AAPT: error
  13. mysql查询学生表年龄语句_表是student表-从学生表tstudent-学生表student
  14. angular 使用ngx-quill
  15. 【转载】遥感影响数据集整理
  16. 俞敏洪在北京大学2008年开学典礼上的演讲辞
  17. 模拟海_学前教育系未来之星 课堂模拟大赛
  18. csh/python/tcl常用功能
  19. Xcode10 报错 target xxx(project 'xxx')has copy command from ‘xxx/xxx’ to ''xxx/xxx.app/COPYING'解决方案
  20. 使用破解补丁激活过期的pycharm

热门文章

  1. HDU题目分类大全【大集合】
  2. 【学习方法】如何才能高效学习
  3. ifft java_在Matlab中的fft / ifft反卷积
  4. 有没有人可以解答一下?
  5. C语言:L1-070 吃火锅 (15 分)
  6. 线上软文自媒体推广怎么做,软文推广有什么好处?
  7. SD-WAN 的架构是什么?
  8. OpenGL实现雾化效果
  9. 电脑桌面图标不能正常显示解决办法
  10. java购物车设计_Java简单购物车设计