Camx-CHI学习-代码架构
开始了虚拟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学习-代码架构”的想法;