一直在搞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中的多流机制的更多相关文章

  1. [转]as3事件流机制彻底理解

    题记: 看过网上一些as3事件流的教程,觉得大多都讲得不甚清楚,让人不能直观的理解事件流.而这篇教程以将事件流过程比喻成捕鱼过程,形象简单. 在此基础上对于as3事件流总算有了全面的理解.事件流机制说 ...

  2. Android IOS WebRTC 音视频开发总结(七五)-- WebRTC视频通信中的错误恢复机制

    本文主要介绍WebRTC视频通信中的错误恢复机制(我们翻译和整理的,译者:jiangpeng),最早发表在[这里] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blac ...

  3. STREAMS流机制

    STREAMS流机制 基本概念 STREAMS(流)是系统V提供的构造内核设备驱动程序和网络协议包的一种通用方法,对STREAMS进行讨论的目的是为了理解系统V的终端接口,I/O多路转接中poll(轮 ...

  4. Hadoop内部的限流机制

    前言 文章标题一開始提及到了一个令人感到有些抽象又显得有些非常"大"的词,限流.事实上这个词语在非常多行业都能够用到,比方近期春运,各大主要城市,火车站,地铁站都要做到限流吧,避免 ...

  5. K:java中的安全模型(沙箱机制)

    本博文整合自:Java安全--理解Java沙箱.Java 安全模型介绍.Java的沙箱机制原理入门 相关介绍:  我们都知道,程序员编写一个Java程序,默认的情况下可以访问该机器的任意资源,比如读取 ...

  6. Android中的常见通信机制和Linux中的通信机制

    Handler Handler是Android系统中的一种消息传递机制,起作用是应对多线程场景.将A进程的消息传递给B线程,实现异步消息处理.很多情况是将工作线程中需要更新UI的操作消息传递给UI主线 ...

  7. 深入理解Java流机制(一)

    一.前言 C语言本身没有输入输出语句,而是调用"stdio.h"库中的输入输出函数来实现.同样,C++语言本身也没有输入输出,不过有别于C语言,C++有一个面向对象的I/O流类库& ...

  8. 理解nodejs中的stream(流)

    阅读目录 一:nodeJS中的stream(流)的概念及作用? 二:fs.createReadStream() 可读流 三:fs.createWriteStream() 可写流 回到顶部 一:node ...

  9. java的Io流机制的学习

    IO流机制 File类的使用 File类的构造方法 File(URI uri) File(String pathname) File(File parent, String child) File(S ...

随机推荐

  1. 下载VMware

    1.进入VMware官网:http://www.vmware.com/cn 2.找到下载,点击Workstation Pro,此时需要账号登录. 3.选择需要下载的版本.对应的操作系统,点击转至下载

  2. IOS 计算本周的起至日期

    unsigned units=NSMonthCalendarUnit|NSDayCalendarUnit|NSYearCalendarUnit|NSWeekdayCalendarUnit; NSCal ...

  3. iOS tabbar 属性

    1.设置tabbar背景颜色 NSArray *controllers = [NSArray arrayWithObjects:nav_main,nav_channle,nav_me, nil]; _ ...

  4. [LintCode] O(1)检测2的幂次

    class Solution { public: /* * @param n: An integer * @return: True or false */ bool checkPowerOf2(in ...

  5. 移动端:判断是否微信端、判断手机操作系统(ios或android)

    http://caibaojian.com/browser-ios-or-android.htmlfunction is_weixin() { var ua = window.navigator.us ...

  6. 170302、 Apache 使用localhost(127.0.0.1)可以访问,使用本机局域网IP(192.168.2.*)不能访问

    对于此问题的解决办法,打开apache安装路径中的http.conf文件, 找打以下内容 #   onlineoffline tag - don't remove        Order Deny, ...

  7. Go语言的一些资料汇总

    1. 8分钟了解你为什么应该学习Go语言 https://www.bilibili.com/video/av45561733/ 2.手把手教你从零开始搭建Go语言开发环境 https://www.bi ...

  8. IO 流之字符流的缓冲区

    缓冲区的出现提高了对数据的读写效率 对应类: BufferedWriter BufferedReader 缓冲区需要结合流才可以使用, 对流的功能进行了增强, 即对流的操作起到装饰作用 使用缓冲区实现 ...

  9. 在MyEclipse中改了项目名称,到tomcat的webroot下发现,部署的名称还是原来的。

    在MyEclipse中改了项目名称,到tomcat的webroot下发现,部署的名称还是原来的. 解决方法:选中项目名称右键properties,展开Myeclipse,选择web,web Conte ...

  10. 我的Android进阶之旅------>Android【设置】-【语言和输入法】-【语言】列表中找到相应语言所对应的列表项

    今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.所以首先我得把系统的语言切换到波兰语,问题是哪个是波兰语呢? 我还真的不认识哪个列表项代表着 ...