微信android架构图,Android 高通Camx架构学习 - 第1章

关于高通Camx架构介绍的文章目前还是凤毛麟角,我会尽自己能力尽可能讲多点,讲的通俗明白点~
这篇文章分下面几点来展开:
1)Camx整体架构图;
2)Camx基本组件及其概念;
3)Camx代码目录结构;
一、Camx整体架构图
目前主流的机型,采用高通芯片的,使用的基本都是camx架构 。
之前旧的架构叫做mm-,camx架构和之前架构的主要区别是芯片接口层的代码从/qcom迁移到/qcom//下面 。
我们先来看下camx整体的架构图:
从上图我们可以看到,在hal层,高通是结合自己的芯片硬件,添加了一层逻辑,这层逻辑高通内部命名为camx架构 。
下面我们来看下高通camx架构上,数据流向大体上是怎样的?
从上图我们可以清晰的看到,数据从出来,首先会经过IFE,然后分预览/视频和拍照2种情况 。如果是预览或者录像,是先经过IPE处理,最后输出到显示 。如果是拍照,则是先经过BSP处理,然后再经过JPEG编码器,最后保存为图片输出 。
IFE、IPE、BPS、JPEG,它们表示的是芯片内部的一个硬件处理单元,数据在这些单元内部的处理还是比较复杂的,在不同的处理单元里面,会进行一些复杂的算法处理,这里大家先有个认识,有个基本概念 。IFE:图像前端
IPE:图像处理引擎
BPS:Bayer处理区段复制代码
二、Camx基本组件及其概念
一个架构总是由一些基本组件构成的,接下来我们来了解下构成camx架构的基本组件有那些 。
1) tatic
(由客户端配置的一组流,这组流是有着一系列静态属性相结合描述的流 。)
复制代码
Seein the
那我们结合下面这段代码来好好理解下 。
熟悉 API的小伙伴(不熟悉也没关系,我会讲的明白点)应该知道,下面的这段代码,是把预览的和录像的都设进去,然后去创建,就是表示我预览和录像都需要拿到数据 。假设我预览设置的size是1080 x 720,录像是1080p的,那这个1080 x 720预览+1080p录像就是一个(用例) 。其它类推 。//:预览+录像
=();
if(!=null&&.()){
.add();
.();
if(!=null&&e!=null

微信android架构图,Android 高通Camx架构学习 - 第1章

文章插图
&&e.()){
.add(e);
.(e);
.(,...,...);复制代码
在camx中很有很多衍生类,这是camx针对不同的来建立不同的对象,用来管理选择,并且创建 以及 。
2)
代表一个特定的功能 。高通上的有HDR(高动态范围)、(超级夜景)、MFNR(多帧降噪)等等,选择相应的,然后关联一组,上层下发请求,hal层会根据去选择对应的 。
3)Node
Node是单个具有独立处理功能的抽象模块,可以是软件单元也可以是硬件单元 。Node是camx中非常重要的一个父类,是处理 请求的一个中间节点,用于处理下发的请求 。
Node 节点在camx chi架构中至关重要,数据的处理都是通过封装好的Node节点来进行的 。
4)
【微信android架构图,Android 高通Camx架构学习 - 第1章】一连串node的集合 。提供单一特定功能的所有资源集合,维护着所有硬件资源以及数据的流转 。
5)
若干个有关联的的集合,用于管理的抽象控制单元,其中至少包含一个,并控制着所有的硬件资源,管控着每个内部的流转以及数据的输入输出 。
6)Link
定义不同的Port的连接端口(输入端口和输出端口) 。
7) Port
作为Node的输入输出端口,使用以及结构定义XML文件 。
8)ph(DAG)
(拓扑是一个指定用例实例化的有向无环图(DAG))
,W,SW,-des,
复制代码
组件之间的关系
最后来总结下各个基本组件之间的关系 。上层根据需求,对应的下来,下面会根据申请的来选择对应的,选择完成后,又会去选择需要的,然后不同的会去关联对应的 。我们知道是由一系列node组成的,那最终上层的,就会交由各个node去处理 。