OH-v3.0-LTS Camera相机驱动框架(L2)解析4_创建流 原创 精华
OpenHarmory-v3.0-LTS Camera相机驱动框架(L2)解析4_创建流
接着上章的代码继续往下看,将创建好的StreamInfo
作为参数丢给StreamOperator
进行流的创建
程序调用流程图
1. StreamOperator::CreateStreams()
创建过程
- 实例化一个stream对象,用stremInfos中的参数信息对相关成员进行赋值。
- 创建一个StreamTunnel对象,把StreamTunnel和stream进行绑定。
- 把创建好的每一个stream 对应它的stremId 放在 streamMap_里。
这里需要注意的一个地方RetCode rc = tunnel->AttachBufferQueue(it->bufferQueue_);
单独把这个代码帖出来看下
这个成员函数的作用就是把应用层中的StreamCustomer::CreateProducer()
获取的producer作为参数创建与“消费者”对应的“生成型”Surface。 而StreamTunnel
类就是对这个生成型Surface的一个功能封装。
2. StreamOperator::CommitStreams()
源码有点长 去掉一些参数的校验和准备相关的代码
一共调用 StreamBase::CommitStream() 、StreamPipelineCore::PreConfig()、StreamPipelineCore::CreatePipeline()三个函数
下面一个个来看
2.1 StreamBase::CommitStream()
按照代码LOG中的说明commit a stream to pipeline
。大家可以自行理解,本人的理解是
- 通过BufferManager创建并初始化BufferPool 数据缓存池
- 给这个Stream对应的pipeline 创建一个StreamMgr,让pipeline可以通过StreamMgr对Stream进行对应的控制。
2.2 StreamPipelineCore::PreConfig()
这里的代码比较简单,根据参数信息,调用deviceManager的PreConfig接口从来配置下面的硬件设备。
deviceManager在前面PowerUp的解析已经说明了,Hi3516实际上是将硬件适配层相关的代码都封闭在了so里面,
所以这里实际调用就一行代码sysObject_->PreConfig(meta, settings);
2.3 StreamPipelineCore::CreatePipeline()
有关stategy、builder、dispatcher实现的函数代码比较多,大家感兴趣自行阅读。总的说一下整体功能:
- StreamPipelineStrategy 负责根据mode从对应的配置文件中创建pipeline。
- StreamPipelineBuilder 负责创建Node并链接
- StreamPipelineDispatcher 负责管理创建好的pipeline
- 最终建立的StreamPipeline是由Node(节点)组成,Node(节点)由Port(端口)组成。Port(端口)分为in端口和out端口(可以有多个)。out链接in最终构建出整个StreamPipeline
Demo案例建立了两个streamPipeline
需要注意几个问题
- pipeline的配置文件在
drivers\peripheral\camera\hal\pipeline_core\pipeline_impl\src\strategy\config
目录下的config.c和params.c - 这两个文件是由BUILD.gn 脚本生成的。
3. 小结
到此流的创建也完成了,最后一章节会把图像采集的代码讲解完。
新年第一篇更的晚了点,祝大家虎年开工大吉,如虎添翼。
也祝楼主在新的一年事业有成
非常好~赞一个
流程图清晰度不够,可以上传原图吗