Android Camera MTK框架

Camera简介:
虽然前文说道Android在5.0之后就推出了Camera2 API,但是各个厂家的基本未适配,导致目前市场上大部分机型使用的仍然是Camera1 API。PS:Android 9.0 Google强制要求各个平台厂商(高通/MTK/华为等)支持Camera2,不再兼容Camera1。 

Android 相机框架:

应用框架:

应用代码位于应用框架级别,它使用 Camera 2 API与相机硬件进行交互。在内部,这些代码会调用相应的 Binder 接口,以访问与相机互动的原生代码。

原生框架:

此框架位于 frameworks/av/ 中,并提供相当于 CameraDevice 和 CameraCaptureSession 类的原生类。

binder 接口:

IPC binder 接口用于实现跨越进程边界的通信。调用相机服务的若干个相机 Binder 类位于frameworks/av/camera/camera/aidl/android/hardware 目录中。

HAL:

硬件抽象层定义了由相机服务调用、且您必须实现以确保相机硬件正常运行的标准接口。

Mtk Camera MtkCam3架构:

MtkCam3实现了Android定义的几个HAL3的接口:

ICameraProvider, ICameraDevice, ICameraDeviceSession, ICameraDeviceCallback;

AppStreamManager:

AppStreamManager位于framework与pipeline之间,把android streaminfo转换成平台版本的

streaminfo。AppStreamMgr在HAL3架构中的位置(如果底层需要往上层传输数据,就在这里

打包然后传到上层)。

Open阶段:初始化函数,生成各种Handler对象。

ConfigureStreams()阶段:会对stream流做一些解析,把安卓的straminfo转换成MTK平台的

straminfo,打印config的各个steam的信息(三路:拍照,预览,录像)。

request阶段:主要是客制化修改metatada。

result阶段:回调到framework中。

PipelineModel:

PipelineModel就是对整个pipeline进行管理,PipelineModel是HAL3的核心框架,对上需要对

Pipeline创建操作API,对下需要建立Pipeline管理Pipeline生命周期。

open阶段:power on,open/close stage,Power on/off sensor,去操作sersen3A。

config阶段:创建pipelinecontext上下文,里面有很多Node,串联所有的HwNode来组成一条

完整的Pipeline。

request阶段:接到上层queue下来的request,转化为Pipleline统一的IPipelineFrame,

IPepelineFrame把请求Queue到PipelineContext里面去,决定node之间的连接关系。

APP会设置一个buffer,其实就是申请一块内存来装载图像,但是对HAL来说,一个frame它包含了

图像数据,也包含了它经过的哪些node,还有自己的metada数据。

Setting Policy:

主要职责是在Configuration阶段和Request阶段配置一些Setting信息,相当于一个容器,串联起

各个Policy,需要哪些Policy以及他们之间的先后连接关系。

Config阶段的policy主要是功能是pipeline相关setting的决定,包括需要哪些HW Node、各个

node的input/output配置及连接方式等。

Request阶段的policy主要做两件事,一是决定feature相关配置,一是决定pipelineFrame相关

配置。

PipelineContext最终会根据policy决定出来的setting build出对应PipelineFrame queue到底层

跑pipeline。

数据通路:

相机捕捉到的数据,会在TG这里收集后,由每一行转换成每一帧数据。

然后送到Pass1这里,Pass1这里分为RRZO(2400×1800)预览,IMGO(4160×3120)拍照,

YUVO(FD人脸识别),这几部分。

不管是拍照还是预览都要进过Pass2,Pass2主要是由Raw转化成YUV。由Pass2出来后接着

进入TPINode中,TPINode主要是三方算法的接口。

接着进入MDP中,这里面的主要功能是缩放相关的,会影响输出数据的大小,非4:3全尺寸的

照片,比如全屏照片,1:1照片,就是在这里实现的。

最近进过JPEGNode处理后会存入内存中。

metadata:

metadata是元数据,相机一般是根据应用层需要设置的模式,请求不同的元数据metadata,

不同模式的metadata不同。

P1Node:

主要的功能是负责出raw buffer,最后出出来RAW图给P2处理。

P2CaptureNode:

主要作用是把IPipelineFrame转换成P2FrameRequest,建立feature node之间的连接。

feature node:rootNode->p2anode->MultiframeNode(多帧降噪)->YUVNode。

rootNode:做了一些更新metadata的事情,设置需不需要做bss

p2anode:转YUV,MultiframeNode:接多帧算法,处理request的时候根据frameType决定

nodeId是NID_MULTIRAW或者NID_MULTIYUV,YUVNode:接单帧算法.。

P2StreamingNode:

最先由P2StreamingNode接收上层的PipelineFrame封装成MWFrame格式,将Request封装后

送给各个Node,送到P2S Driver去处理(封装的作用是降低耦合性)。SFP在P2StreamingNode

和P2Streaming Driver之间的一层,专门处理Streaming相关的Feature的效果。Streaming流程只

接三个TPINode,每个TPINode接一个Plugin,Plugin下接入三方算法。

三方算法Plugin:

PipelinePlugin是mtk平台设计的一套挂载三方算法接口的机制,平台设计了一系列软件node,

这些node里面插入了挂载三方plugin的入口,客户通过自己客制化不同的plugin达到插入各种

单帧多帧,raw域或者yuv域算法

总结:在项目中除了要明白这些组件的原理外,还需要明白OpenCamera,ConfigureStream,Request,拍照,预览等这几个流程,每个平台的流程不一样,这需要自己根据每个平台的代码去追代码,画流程图,代码没有必要追得太详细,知道大概的流程即可上手项目,等项目需要再详细的分析代码。

Android Camera MtkCam3架构流程分析_小辜同学的博客-CSDN博客

  • 4
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式_笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值