linux调用v4l2获取视频,嵌入式Linux:V4L2视频采集操作流程和接口说明
一般操作流程(视频设备):
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视频采集操作流程和接口说明相关推荐
- ARM视频 嵌入式linux培训班视频》[DVDRip]
ARM视频 嵌入式linux培训班视频>[DVDRip] 2008-11-15 12:09 eMule资源 http://www.verycd.com/topics/250252/ 下面是用 ...
- 尚观linux视频配套教程,尚观最新嵌入式Linux基础视频教程 98集嵌入式Linux巨制视频教程 新手必备...
尚观最新嵌入式Linux基础视频教程 98集嵌入式Linux巨制视频教程 新手必备 5.jpg (67.09 KB, 下载次数: 0) 2018-4-16 09:34 上传 1.jpg (44.17 ...
- linux驱动的中断函数,嵌入式Linux驱动开发(四)——字符设备驱动之中断方式以及中断方式获取按键值...
之前我们完成了关于通过查询的方式获取按键键值的驱动程序,可以参考:嵌入式Linux开发--裸板程序之中断控制器. 虽然读取键值没有什么问题,但是测试程序占用CPU过高,一直在不断的查询,资源消耗过大, ...
- 【正点原子Linux连载】第四十一章 嵌入式Linux LED驱动开发实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- 嵌入式linux驱动开发实战教程,嵌入式Linux驱动开发实战视频教程
嵌入式Linux驱动开发实战教程(内核驱动.看门狗技术.触摸屏.视频采集系统) 适合人群:高级 课时数量:109课时 用到技术:嵌入式 Linux 涉及项目:驱动开发.看门狗技术.触摸屏.视频采集 咨 ...
- pc安装linux内核,PC/104平台嵌入式Linux系统核心定制方法
摘 要:基于PC/104平台的嵌入式Linux技术在海洋自动观测系统中具有广泛的应用前景,Linux核心定制方法的研究是嵌入式Linux系统研制的关键工作.本文结合PC/104平台嵌入式Linux系统 ...
- linux开组态软件,基于嵌入式Linux的组态软件实时数据库的设计
1 引言 实时数据库(real-TIme database, RTDB)作为组态软件设计与实现的核心内容解决了其所 应对的现代工业生产现场环境中生产数据与控制数据类型复杂多样,数据处理与事件调度时 间 ...
- linux开发板lcd按压,嵌入式Linux裸机开发(十五)——LCD
嵌入式Linux裸机开发(十五)--LCD 一.LCD简介LCD(Liquid Crystal Display)是液晶显示器简称.LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TF ...
- Linux车载导航程序,基于嵌入式LINUX的车载导航系统设计
(2) Linux 在S3C2440 上的移植 嵌入式 Linux 管理整个导航系统的硬件设备并对所有程序进行调度,是软件系统的核心.由于Linux 是面向PC 机的操作系统,将其用于嵌入式领域,需要 ...
- 《嵌入式 Linux应用程序开发标准教程(第2版)》——第1章 Linux快速入门 1.1 嵌入式Linux基础...
本节书摘来自异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者 华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...
最新文章
- 全面理解目标检测中的anchor
- oracle数据库备份方法主要有哪几种,Oracle数据库备份方法有哪三种?
- leecode_二叉树中序遍历
- JAVA的彻底删除重下
- C linux Debug
- 15张令人震撼的物理动图,看完惊呆了!
- numberformatexception是什么异常_处理Java异常的9个最佳实践
- win10 python 3.7 pip install tensorflow
- python爬取json简单吗_Python爬取Json数据的示例
- 总结JavaScript中的继承
- 壳管式热交换器行业调研报告 - 市场现状分析与发展前景预测
- Skype for Business Server 2015-12-WAP-发布-1-前端服务器-OWAS01
- Xiaojie雷达之路---脉冲压缩
- 面试官问你期望的工资是多少,怎么回答最好?
- css实现一个正方形
- 3、管理员添加内容的实现
- 安全生产预测预警系统解决方案
- html怎么设置出场动画,CSS3 元素出现动画实例
- matlab指数平滑参数,三次指数平滑——matlab实现
- 用 TimingLaba(时方校园定时广播系统)软件,实现学校、办公室定时播放体操、上下课(班)铃声、休息音乐
热门文章
- 用HttpClientFactory来实现简单的熔断降级
- Entity Framework Core 生成跟踪列
- RabbitMQ消息队列应用
- .NET Core扩展IServiceCollection自动注册服务
- 跨平台与云端创新,为企业和开发者开辟更广阔的未来
- Linux上搭建Samba,实现windows与Linux文件数据同步
- PHP上传图片到数据库,并进行显示
- vscode 头文件包含问题_WSL+VSCode = Linux ?
- 数据结构与算法:终于可以用三种语言(C,C#,JavaScript)把图的广度优先遍历讲清楚了(推荐收藏)
- 【ArcGIS Pro风暴】Data Interoperability Tools快速将CASS等高线dwg转为shp案例教程