v4l2中的多流机制
一直在搞camera,对v4l2也比较熟悉了,今天写文章说点自己的看法
对于v4l2,对多流的支持是比较弱的,只是一个流。但现在的camera 硬件,能支持多个流同事工作,所以又必要对v4l2的api进行扩展,加入多流的支持。
v4l2的团队们考虑了一种做法,可参考linuxtv的网页。
这里谈一下我自己的考虑。
1 先来考虑一个camera设备的构成
1 一个camera 用一个v4l2 设备来代表,然后导出一个vidoe节点来访问这个设备。
2 一个camera 有很多相关的模块组成,把这些模块组织成subdev,并导出video节点访问这些subdev
3 一个camera 应有若干流供用户空间访问,于是抽象出流,然后导出video 节点访问流,这些流是动态创建的,节点也是动态生成的
扩展几个v4l2 api, V4L2_CREAT_STREAM, V4L2_DESTRY_STREAM, get/set_STREAM_INFO
于是用户可以如下访问一个camera设备。
1 open camera v4L2 设备,得到fd。
2 用这个fd, 调用V4L2_CREAT_STREAM,得到stream 的设备节点,这时我们可以传递一个流的描述符来创建流,比如流的类型,预览,video snapshot等
一个流的描述符应该包括以下几点内容
1 流的类型
2 流的格式
3 流的维数w*h
4 流的帧数率范围
5 流数据在内存中的布局情况,
1 面板数
2 data offset
3 width, height
4 stride_width, scan_height
5 panel length
对每一个panel都做如上的描述,内存布局情况可以从驱动中获取。这些信息更加有效的和vb2_buffer 互补, 获取到的流buffer 任然用v4l2_buffer 代表。
3 打开这个节点 得到stream fd
4 配置这个fd,以使用这个stream。
5 用完后关闭fd
6 然后销毁流
这样的做法有连个好处,
1 保留了原来的操作方式,向下兼容
2 添加了多流操作,而且流的操作就是以前的操作方式。
v4l2中的多流机制的更多相关文章
- [转]as3事件流机制彻底理解
题记: 看过网上一些as3事件流的教程,觉得大多都讲得不甚清楚,让人不能直观的理解事件流.而这篇教程以将事件流过程比喻成捕鱼过程,形象简单. 在此基础上对于as3事件流总算有了全面的理解.事件流机制说 ...
- Android IOS WebRTC 音视频开发总结(七五)-- WebRTC视频通信中的错误恢复机制
本文主要介绍WebRTC视频通信中的错误恢复机制(我们翻译和整理的,译者:jiangpeng),最早发表在[这里] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blac ...
- STREAMS流机制
STREAMS流机制 基本概念 STREAMS(流)是系统V提供的构造内核设备驱动程序和网络协议包的一种通用方法,对STREAMS进行讨论的目的是为了理解系统V的终端接口,I/O多路转接中poll(轮 ...
- Hadoop内部的限流机制
前言 文章标题一開始提及到了一个令人感到有些抽象又显得有些非常"大"的词,限流.事实上这个词语在非常多行业都能够用到,比方近期春运,各大主要城市,火车站,地铁站都要做到限流吧,避免 ...
- K:java中的安全模型(沙箱机制)
本博文整合自:Java安全--理解Java沙箱.Java 安全模型介绍.Java的沙箱机制原理入门 相关介绍: 我们都知道,程序员编写一个Java程序,默认的情况下可以访问该机器的任意资源,比如读取 ...
- Android中的常见通信机制和Linux中的通信机制
Handler Handler是Android系统中的一种消息传递机制,起作用是应对多线程场景.将A进程的消息传递给B线程,实现异步消息处理.很多情况是将工作线程中需要更新UI的操作消息传递给UI主线 ...
- 深入理解Java流机制(一)
一.前言 C语言本身没有输入输出语句,而是调用"stdio.h"库中的输入输出函数来实现.同样,C++语言本身也没有输入输出,不过有别于C语言,C++有一个面向对象的I/O流类库& ...
- 理解nodejs中的stream(流)
阅读目录 一:nodeJS中的stream(流)的概念及作用? 二:fs.createReadStream() 可读流 三:fs.createWriteStream() 可写流 回到顶部 一:node ...
- java的Io流机制的学习
IO流机制 File类的使用 File类的构造方法 File(URI uri) File(String pathname) File(File parent, String child) File(S ...
随机推荐
- SQL Server Profiler的简单使用(监控mssql)
SQL Server Profiler可以检测在数据上执行的语句,特别是有的项目不直接使用sql语句,直接使用ORM框架的系统处理数据库的项目,在调试sql语句时,给了很大的帮助. 之前写了使用SQL ...
- 网站速度优化模块HttpCompressionModule
为了优化网站的访问速度,准备采用HttpCompressionModule 6对传输数据进行压缩,下载了HttpCompressionModule 6 , 并按照示例程序中的web.config配置了 ...
- [MongoDB]学习笔记--基本操作
读取 db.collection.find() db.users.find( { age: {$gt: }}, {name: , address: } ).limit().sort({age:1}) ...
- ionicframework I ------------- 初体验
ionicframework I ------------- 初体验 Create hybrid mobile apps with the web technologies you love. Fr ...
- Caused by: com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the
mysql6.0里面改成新的配置方式: hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect #old #driverClassNam ...
- iOS论App推送方案
1.APNS介绍(原生推送实现原理) 在iOS平台上,大部分应用是不允许在后台运行并连接网络的.在应用没有被运行的时候,只能通过 Apple Push Notification Service (AP ...
- :nohlsearch
vim 编辑器 ——黄色阴影的消除问题 - leikun153的博客 - CSDN博客 https://blog.csdn.net/leikun153/article/details/78903597 ...
- eclipse中jar file与runnable jar file的区别
直接运行 .class的方法 java -cp . com.network.Chat , 不用加.class后缀 从eclipse中export 的jar file,仅仅是把.class ...
- vc判断当前用户是否具有administrator 权限代码
BOOL IsAdmin() { HANDLE hAccessToken; BYTE * InfoBuffer = ]; PTOKEN_GROUPS ptgGroups; DWORD dwInfoBu ...
- CNN结构
神经网络 卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.多了许多传统神经网络没有的层次. 卷积神经网络的层级结构 数据输入层/Input Layer 卷积计算 ...