一般操作流程(视频设备):

1. 打开设备文件。 int fd=open("/dev/video0",O_RDWR);

2. 取得设备的capability,看看设备具有什么功能,比如是否具有视频输入,或者音频输入输出等。VIDIOC_QUERYCAP,struct v4l2_capability

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);

常用的结构体(参见/usr/include/linux/videodev2.h):

struct v4l2_requestbuffers reqbufs;//向驱动申请帧缓冲的请求,里面包含申请的个数

struct v4l2_capability cap;//这个设备的功能,比如是否是视频输入设备

struct v4l2_input input; //视频输入

struct v4l2_standard std;//视频的制式,比如PAL,NTSC

struct v4l2_format fmt;//帧的格式,比如宽度,高度等

struct v4l2_buffer buf;//代表驱动中的一帧

v4l2_std_id stdid;//视频制式,例如:V4L2_STD_PAL_B

struct v4l2_queryctrl query;//某一类型的控制

struct v4l2_control control;//具体控制的值

1。User controlls其实就是一些用户可以用来进行设置的一些属性,如视频中的brightness等,

video4linux就提取出了最常见的一些设 置,给他们分配了ID,这样大家对于这些常见的设置,

就是用这些ID就可以了,可以察看当前设备对该设置的值,也可以给该设置新值,此外,

由于某些设置包 含很多子设置项,因此就又有了menu的含义,即对于一个具体的control,

我们在列举他的属性时,发现其类型是包含了menu的,那么我们就可以以 这个control的id为参数,

察看其menu及各自的值。当然用户可以由自定义的control以及extended control。

好像是Camera Control ID中就有可以设置focus聚焦的control id,这个可以看一看。

2。Data format 应用是可以和device针对通信的数据进行谈判的,即可以设置device所使用的数据的格式,

可以获得设备所使用的数据的格式,也可以尝试一下某种格 式的数据设备是否支持。

使用 VIDIOC_G_FMT and VIDIOC_S_FMT ioctls,而VIDIOC_TRY_FMT 就是用来试一下某设置是否被设备支持,

而且只是 测试,并不会起作用。我们还是可以用VIDIOC_ENUM_FMT来列举设备所支持的所有的image的格式的。

关于数据格式,在video中就会涉及到image的格式,大小(宽度,高度),等信息。

3. crapping和scaling

就是把得到的数据作一定的剪裁,和伸缩,剪裁可以只取样我们可以得到的图像大小的一部分,

剪裁的主要参数是位置和长度以及宽度,而scale的设置是通过VIDIOC_G_FMT and VIDIOC_S_FMT 来获得和

设置当前的image的长度,宽度来实现的。看下图

我们可以假设bounds是最大的能捕捉到的图像范围,defrect是我们的设备能够得到的最大的范围,

这个可以通过VIDIOC_CROPCAP的ioctl来获得设备的crap相关的属性 v4l2_cropcap ,

其中的bounds就是这个bounds,其实就是上限。每个设备都有个默认的取样范围,就是defrect,

就是default rect的意思,它比bounds要小一些。这个范围也是通过VIDIOC_CROPCAP的ioctl来

获得的 v4l2_cropcap 结构中的defrect来表示的,我们可以通过 VIDIOC_G_CROP and VIDIOC_S_CROP

来获取和设置设备当前的crop设置。

linux调用v4l2获取视频,嵌入式Linux:V4L2视频采集操作流程和接口说明相关推荐

  1. ARM视频 嵌入式linux培训班视频》[DVDRip]

    ARM视频 嵌入式linux培训班视频>[DVDRip] 2008-11-15 12:09 eMule资源   http://www.verycd.com/topics/250252/ 下面是用 ...

  2. 尚观linux视频配套教程,尚观最新嵌入式Linux基础视频教程 98集嵌入式Linux巨制视频教程 新手必备...

    尚观最新嵌入式Linux基础视频教程 98集嵌入式Linux巨制视频教程 新手必备 5.jpg (67.09 KB, 下载次数: 0) 2018-4-16 09:34 上传 1.jpg (44.17 ...

  3. linux驱动的中断函数,嵌入式Linux驱动开发(四)——字符设备驱动之中断方式以及中断方式获取按键值...

    之前我们完成了关于通过查询的方式获取按键键值的驱动程序,可以参考:嵌入式Linux开发--裸板程序之中断控制器. 虽然读取键值没有什么问题,但是测试程序占用CPU过高,一直在不断的查询,资源消耗过大, ...

  4. 【正点原子Linux连载】第四十一章 嵌入式Linux LED驱动开发实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  5. 嵌入式linux驱动开发实战教程,嵌入式Linux驱动开发实战视频教程

    嵌入式Linux驱动开发实战教程(内核驱动.看门狗技术.触摸屏.视频采集系统) 适合人群:高级 课时数量:109课时 用到技术:嵌入式 Linux 涉及项目:驱动开发.看门狗技术.触摸屏.视频采集 咨 ...

  6. pc安装linux内核,PC/104平台嵌入式Linux系统核心定制方法

    摘 要:基于PC/104平台的嵌入式Linux技术在海洋自动观测系统中具有广泛的应用前景,Linux核心定制方法的研究是嵌入式Linux系统研制的关键工作.本文结合PC/104平台嵌入式Linux系统 ...

  7. linux开组态软件,基于嵌入式Linux的组态软件实时数据库的设计

    1 引言 实时数据库(real-TIme database, RTDB)作为组态软件设计与实现的核心内容解决了其所 应对的现代工业生产现场环境中生产数据与控制数据类型复杂多样,数据处理与事件调度时 间 ...

  8. linux开发板lcd按压,嵌入式Linux裸机开发(十五)——LCD

    嵌入式Linux裸机开发(十五)--LCD 一.LCD简介LCD(Liquid Crystal Display)是液晶显示器简称.LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TF ...

  9. Linux车载导航程序,基于嵌入式LINUX的车载导航系统设计

    (2) Linux 在S3C2440 上的移植 嵌入式 Linux 管理整个导航系统的硬件设备并对所有程序进行调度,是软件系统的核心.由于Linux 是面向PC 机的操作系统,将其用于嵌入式领域,需要 ...

  10. 《嵌入式 Linux应用程序开发标准教程(第2版)》——第1章 Linux快速入门 1.1 嵌入式Linux基础...

    本节书摘来自异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者 华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...

最新文章

  1. 全面理解目标检测中的anchor
  2. oracle数据库备份方法主要有哪几种,Oracle数据库备份方法有哪三种?
  3. leecode_二叉树中序遍历
  4. JAVA的彻底删除重下
  5. C linux Debug
  6. 15张令人震撼的物理动图,看完惊呆了!
  7. numberformatexception是什么异常_处理Java异常的9个最佳实践
  8. win10 python 3.7 pip install tensorflow
  9. python爬取json简单吗_Python爬取Json数据的示例
  10. 总结JavaScript中的继承
  11. 壳管式热交换器行业调研报告 - 市场现状分析与发展前景预测
  12. Skype for Business Server 2015-12-WAP-发布-1-前端服务器-OWAS01
  13. Xiaojie雷达之路---脉冲压缩
  14. 面试官问你期望的工资是多少,怎么回答最好?
  15. css实现一个正方形
  16. 3、管理员添加内容的实现
  17. 安全生产预测预警系统解决方案
  18. html怎么设置出场动画,CSS3 元素出现动画实例
  19. matlab指数平滑参数,三次指数平滑——matlab实现
  20. 用 TimingLaba(时方校园定时广播系统)软件,实现学校、办公室定时播放体操、上下课(班)铃声、休息音乐

热门文章

  1. 用HttpClientFactory来实现简单的熔断降级
  2. Entity Framework Core 生成跟踪列
  3. RabbitMQ消息队列应用
  4. .NET Core扩展IServiceCollection自动注册服务
  5. 跨平台与云端创新,为企业和开发者开辟更广阔的未来
  6. Linux上搭建Samba,实现windows与Linux文件数据同步
  7. PHP上传图片到数据库,并进行显示
  8. vscode 头文件包含问题_WSL+VSCode = Linux ?
  9. 数据结构与算法:终于可以用三种语言(C,C#,JavaScript)把图的广度优先遍历讲清楚了(推荐收藏)
  10. 【ArcGIS Pro风暴】Data Interoperability Tools快速将CASS等高线dwg转为shp案例教程