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设置。0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象技术——UML

UML,统一建模语言是一种可视化建模语言。 UML包括九种类型的图:用例图,类图,对象图,顺序图,协作图,状态图,活动图,构件图,及部署图,各种图示系统在…

美国返还中国文物,阿里谣言粉碎机获奖,教育部规范研究生培养,腾讯严打微信跑分活动,推动降低港澳漫游费,这就是今天的大新闻。...

今天是3月1日农历正月廿五今天星期五相信大家都很舍不得放下工作下面是今天的大新闻美国返还361件中国文物(中国日报)当地时间2月28日,美国政府向中国返还361件(套)流失文物。这些中国流失文物,由美国联邦调…

Linux怎么更新镜像,利用 Zsync 更新已有的 Ubuntu ISO 镜像

对! 是升级iso镜像, 不是升级系统. 从旧的镜像升级到新的镜像.可能有点迟了~大家都down好了镜像~ 我现在才有心情和时间写blog哦~由alpha的iso升到正式版都可以. 呃~ 当然,估计由alpha开始的话,下载量也与直接下载正式版区别不大~这么多人下载, 速度当然会慢喇~ 用zsync来升级镜…

你有做 Code Review 吗?

在代码的编写中有一个很重要的环节,经常会被忽视,那就是 Code Review ,据说在 Facebook、Google 这种互联网大公司,要求每一个提交都必须通过审查,对于每个工程师来说 Code Review 是一项十分重要的工作,甚至比写代码本…

PhotoShop CS5制作残旧的印章效果

编者按:不少网友喜欢个性印章效果,因此常常搜索个性印章在线制作。其实,Photoshop就可以完成个性印章制作。事实上,使用 Photoshop制作残旧的印章效果文字有多种方法,例如可以使用云彩滤镜。本文作者介绍了另一种实现方…

限时秒杀┃秒杀90%的玩具,让孩子爱上科学的彩虹实验2来了!

▲数据汪特别推荐点击上图进入玩酷屋之前小木有推荐过“彩虹实验”,这款是可以让孩子在探索中能够独立思考,主动地构建知识库,培养创造力。(传送门)让孩子们在家开展科学游戏,既能提升动手能力,…

感想四

2019独角兽企业重金招聘Python工程师标准>>> 随着年龄的增长,对人对事物的认知就越真,包括知识也是如此。 很多年前,在软件开发领域中发生了一个有趣的转变,软件变成了系统中最为昂贵、最为重要的部分。从…

.NET Worker Service 作为 Windows 服务运行及优雅退出改进

上一篇文章我们了解了如何为 Worker Service 添加 Serilog 日志记录,今天我接着介绍一下如何将 Worker Service 作为 Windows 服务运行。我曾经在前面一篇文章的总结中提到过可以使用 sc.exe 实用工具将 Worker Service 安装为 Windows 服务运行,本文中我…

私有云存储 linux,搭建nextcloud私有云存储网盘

本文将要为您介绍的是搭建nextcloud私有云存储网盘,具体完成步骤:简介:搭建个人云存储一般会想到ownCloud,堪称是自建云存储服务的经典。而Nextcloud是ownCloud原开发团队打造的号称是“下一代”存储.真正试用过后就由衷地赞同这个Nextcloud:…

我报了个税,隐私就被扒光了?

全世界只有3.14 % 的人关注了数据与算法之美1月14日,据外媒报道,美国参议院金融委员会正在向美国财政部和国税局施压,要求他们采取网络安全措施。相关数据显示,2015年美国约有700,000名纳税人身份信息遭到泄露,为了解决…

C# 外接(网口)双摄像头视频获取

【注意事项】------------------------------------1. 更新设备网络SDK时,SDK开发包【库文件】里的HCNetSDK.dll、HCCore.dll、PlayCtrl.dll、SuperRender.dll、AudioRender.dll、HCNetSDKCom文件夹、ssleay32.dll、libeay32.dll、hlog.dll、hpr.dll、zlib1.dll、lo…

Visual Studio 2022 Preview 1 和.NET 6 Preview 5 正式发布

具有里程碑意义的Visual Studio 2022 Preview 1正式发布,重点是64位,而没有增加新功能,并且同时也发布了.NET 6 Preview 5。https://devblogs.microsoft.com/visualstudio/visual-studio-2022-preview-1-now-available/https://devblogs.micr…

每日一笑 | 你知道你爸妈当年是怎么在一起的吗?

全世界只有3.14 % 的人关注了数据与算法之美(图片来源于网络,侵权删)

每日一笑 | 你知道程序媛最“大”的烦恼是什么吗?

全世界只有3.14 % 的人关注了数据与算法之美(图片来源于网络,侵权删)

什么?他居然想在DLL中放毒!

dotnet/runtime有一个issue[1]讨论了如何使用ModuleInitializer投放恶意代码,但是微软的开发经理表示不背这个锅! 什么是ModuleInitializer?ModuleInitializerAttribute[2]是在.NET5.0中新增加的API。它的作用是应用于编译中的任意数量的静态…

为什么说人工智能是一个大谎言

全世界只有3.14 % 的人关注了数据与算法之美人工智能是一个很大的谎言。或者往轻了说,它是一个混淆概念。往重了说,是用来欺骗大众的流行语,并且流行度非常高。其实真正的内涵是“机器学习”。所以,真正强大的,每个人都…

NET问答: ThreadStatic 和 ThreadLocalT 哪一个更好 ?

咨询区 user2341923&#xff1a;[ThreadStatic] 被设计成特性&#xff0c; ThreadLocal<T> 被设计成泛型&#xff0c;为什么会有这两种设计方案呢 &#xff1f;谁能告诉我他们的优缺点各是什么&#xff1f;是不是泛型的方式更好一点&#xff1f;回答区 Sanjeev&#xff1…

指针变量的定义与引用

2019独角兽企业重金招聘Python工程师标准>>> void main() { int a 5,b3; int *p; p &a; b*P5; printf("%d\n", b); *p 4; printf("%d,%d\n",a,*p); } 输出结果&#xff1a;10 4 4 之前在学校的时候就没怎么搞懂&#xff0c; 现在…

Vim的配置

2019独角兽企业重金招聘Python工程师标准>>> set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin set guifontCourier_New:h12cANSI colorscheme torte set nobackup set ts4 set lines33 columns100 set diffexprM…

WPF 命中测试HitTest

获取不规则图片的点击事件&#xff0c;如果一个Canvas中&#xff0c;有很多图形&#xff0c;比如下图&#xff1a;矩形&#xff0c;菱形等。如果每个图形都加一个点击事件&#xff0c;想要一个通用的方法&#xff0c;获取鼠标点击在了哪个图形上&#xff0c;这里可以使用Visual…