开始了虚拟camera的代码学习,首先根据同事给来的提交目录看看他们的成果

这个目录首先就让人摸不着头脑,看上去和之前听说过的高通camx架构相关,奈何只是听说过完全没有代码可以看,这下刚好借这个机会学习一下这个架构

首先要知道,CamX-CHI是一套完整的camera hal vendor架构,代码存在于/vendor/qcom/proprietary/

需要关注的两个目录:

其中camx目录中是统一的功能性接口,chi-cdk目录中则是可以供厂商客制化的部分

先看看camx:

camx/src/core/ 这个目录下就是主要实现hal功能的代码了

./chi用于与CHI进行交互

./hal用于实现hal3的接口

再回到vendor/qcom/proprietary/目录,看看chi-cdk/的内容:

为了有个快速的认识,直接进到/vendor/qcom/proprietary/chi-cdk/oem/qcom 目录中:

actuator/ 存放对焦模块的配置信息

ois/ 存放防抖模块的配置信息

tuning/ 存放效果参数的配置信息

topology/ 存放用户自定的Usecase配置文件

node/中存放了用户自定义的功能,这是我们要关注的,毕竟同事给出的修改就在这个目录下

确实存在很多很多自定义的模块,node/下的这些目录都是一个个具有独立处理功能的模块

这些模块可以是硬件单元,也可以是软件单元,每个node的可定制化部分会在XML中定义

在这个目录下grep一下virtual,能看到:

其目录topology/ 也和上面说的存放用户自定的Usecase配置文件对上了

一个Node结构的组成如下:

NodeName: 用来定义该Node的名称

NodeId: 用来指定该Node的ID,其中IPE NodeId为65538,IFE NodeId为65536,用户自定义的NodeId为255。

NodeInstance: 用于定义该Node的当前实例的名称。

NodeInstanceId: 用于指定该Node实例的Id。

这些有不同处理功能的Node组成了不同的Pipeline,那么可以看看我们关注的这个TctVirtualCameraNode所在的Pipeline:

原来是JPEGEncodeLiveSnapshotPreview这个pipeline

Camx-CHI架构中,要构成一个pipeline除了node,还需要描述node的输入输出端口(port),以及连接这些node之间的link(参考https://segmentfault.com/a/1190000024445632)

在上述文件中查找,确实有port和link的描述:

12055行的修改去git show 一下:

看上去是修改了link所连接的node和node两端的port,梳理一下具体的修改:

至此,大概对同事给过来的代码路径在架构中的位置有了模糊的认知,接下来还是从CameraProvider-Qcom camera hal的连接看起,看看pipeline、node等结构是怎么在hal中创建、运行的。

参考:

https://blog.csdn.net/u012596975/article/details/107138576?spm=1001.2014.3001.5501

1 对 “Camx-CHI学习-代码架构”的想法;

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注