camera的构架目前来看有两种,一种是集中式管理,比如说建立一个引擎,引擎向上提供接口,向下管理所有模块。把camera的所有功能划分为不同的模块,又引擎统一管理。模块的结构就比较随意了,可以统一接口,也可以对每个模块实现不同的接口。引擎需要详细知道每个模块的细节,然后仔细的安排模块的使用。

另一种比较新奇的设计思路是有一定的互联网思维的,尽可能的让模块自己来决定自己的事情。尽可能的去中心化。模块的依赖通过模块的连接来决定。这样的模块有统一的接口和格式。可以直接采用linux的open max, 或者自定义一套模块接口,模块中有端口。通过端口把模块连接起来。又把模块挂在总线上。每一个条端口的连接就是一个流,又把这些流用pipeline 来管理。

每启动一个camera 就创建一个camera的会话,有这个会话来管理这个camera的一切事物。对于每一个会话,模块是共享的,是camera的硬件资源,或其他资源,比如facedetec等算法资源。

那么如何定义模块的结构呢。

1 端口 ,端口属于模块,如果这个模块有只有 src 端口,那么这个模块就是src 模块,只有sink 端口,就是sink模块,否则就是中间模块。没有端口的模块不能连接到流中,但可以完成一些其他的功能,比如接收引擎的设置,报告事件到bus等。连接到流中的端口,也就是说流事件(set get)主要通过port来处理。而来自于引擎的(get set)通过模块来处理,当然port也可以把事件交给module来处理,模块内部的端口可以通过模块来建立关系,也可以建立内部连接,端口有关get set process。

2 模块线程,每一个模块可以有一个线程来处理模块的事情。一个线程对应一个队列,线程就是从队列中取出数据处理,然后应答回去。

3 总线回调,当一个模块向总线注册时,总线向其提供一个回调函数,当模块有事件发生时,调用这个函数向 bus 发消息。然后总线把这个消息提交给管道,管道把这消息送着流发下去。

4 模块的get 和 set , process。

管道的抽象与功能

管道有两段,一段用于读,一段用于写。camera 引擎负责对管道的监控。而会话管理camera 引擎。

关于camera 构架设计的一点看法的更多相关文章

  1. Python 关于类函数设计的一点总结

    关于类函数设计的一点总结 by:授客 QQ:1033553122 代码1 #!/usr/bin/env python #-*-encoding:utf-8-*- __author__ = 'shouk ...

  2. 关于Firedac的一点看法

    Firedac集成在Delphi中已经有几个版本了,偶尔也拖到Form上试着用用,虽然知道Firedac有可能是最终的(或很很长时间内)数据访问技术,可一直不能接受它,其中最大的原因就是过于“复杂” ...

  3. 关于js的回调函数的一点看法

    算了一下又有好几个月没写博客了,最近在忙公司android的项目,所以也就很少抽时间来写些东西了.刚闲下来,我就翻了翻之前看的东西.做了android之后更加感觉到手机端开发的重要性,现在做nativ ...

  4. MVC实用构架设计(三)——EF-Code First(6):数据更新最佳实践

    前言 最近在整理EntityFramework数据更新的代码,颇有体会,觉得有分享的价值,于是记录下来,让需要的人少走些弯路也是好的. 为方便起见,先创建一个控制台工程,使用using(var db ...

  5. 【原】移动web动画设计的一点心得——css3实现跑步

    今年3月份,由于公司业务需要,我转岗到微信产品部,离开了TID团队,人都是有感情的动物,更何况在一个团队呆了快 3 年,心中十分舍不得,鬼哥说了“天下没有不散的宴席...”,在我的世界里又多了一次离别 ...

  6. rpc框架之HA/负载均衡构架设计

    thrift.avro.grpc之类的rpc框架默认都没有提供负载均衡的实现,生产环境中如果server只有一台,显然不靠谱,于是有了下面的设计,这其实是前一阵跟北京一个朋友在qq群里交流的结果,分享 ...

  7. 关于STM32的ST官方的库的一点看法

    标题确实很别扭,因为我现在用这个库也很别扭. 在不久之前,一直有个讨论的话题:STM32开发是用库还是用寄存器? 很多人的结论是不需要讨论! 但是,今天我想说下我的看法. 首先,我还是一个菜鸟,对库对 ...

  8. 数据库构架设计中的Shared Everthting、Shared Nothing、和Shared Disk

    Shared Everthting:一般是针对单个主机,完全透明共享CPU/MEMORY/IO,并行处理能力是最差的,典型的代表SQLServer Shared Disk:各个处理单元使用自己的私有 ...

  9. HIS系统患者实体OO设计的一点思考

    软件开发的生命周期中,数据库建模后,在某个数据库系统中形成相对应的表,之后再根据数据库模型设计相关的业务对象及其关系.这其实是进行了两次设计,一次是数据库模型设计,数据库模型设计是根据现实业务提取出来 ...

随机推荐

  1. Linux严格区分大小写

    虚拟机上安装了MySQL,使用rpm -qa | grep mysql查询时却未找到安装的mysql,后面才发现Linux严格区分大小写,正确的查询命令应该为rpm -qa | grep MySQL, ...

  2. XShell上传和下载

    工具:XShell 本地环境:win7操作系统 远程服务器环境:linux系统 1.将本地的文件上传到远程服务器上 可以使用rz命令 rz命令详细使用方法可以在xshell中输入:rz -h 2.将远 ...

  3. GS与NGP通信(不断跟新)

  4. SqlBulkCopy 通过泛型数组批量插入

    public void SqlBulkCopy<T>(string tablename, List<T> list) { Type recordType = typeof(T) ...

  5. 【APIO2014】Palindromes

    #103. [APIO2014]Palindromes 统计 描述 提交 自定义测试 给你一个由小写拉丁字母组成的字符串 ss.我们定义 ss 的一个子串的存在值为这个子串在 ss 中出现的次数乘以这 ...

  6. 下载苹果APP历史版本

    1.参考教程: iOS 下载旧版本 app 或者已下架 app 方法 - 简书 https://www.jianshu.com/p/33dc8bfd4134 2.步骤总结: 下载旧版带 app 管理的 ...

  7. JAVA源码之JDK(三)——String、StringBuffer、StrinBuilder

    Java中,除了8种基本类型,最长用的应该就是String类了.那么我们来看看JDK中的源码是怎么建造String.StringBuffer.StrinBuilder一系列类的. java.lang. ...

  8. ssh login waiting too much time

    usually dns error, please check /etc/resolv.conf

  9. ArcGIS Silverlight 设置token

    背景 arcgis for server采用多种安全认证方式.常用的就是就是采用token机制.所以对服务设置了安全,则前端需要提供相对应的token凭证.通常来说设置token有以下两种情形: 一是 ...

  10. 删除DOM元素 parent.removeChild(target)

    p.removeChild(p.children[0]);