和你一起终身学习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:
一、架构介绍
二、Camera Open流程(Hal-Sensor)
三、Sensor Search流程
一、架构介绍
1.1 Camera的框架分为Kernel部分和Hal部分
Kernel部分:
image sensor driver——负责具体型号的sensor的id检测,上电,以及在preview、capture、初始化、3A等等功能设定时的寄存器配置;
ISP driver——通过DMA将sensor数据流上传;
Hal部分:
imageio——主要负责数据buffer上传的pipe;
drv——包含imgsensor和isp的hal层控制;
feature io——包含各种3A等性能配置;
来看一张图,大致来了解一下Camera的整体架构。
1.2 MiddleWare(MW)层
ICameraProvider——向上暴露的接口调用,实现是在CameraProvider中;
Device@3.2ICameraDevice——用于Camera Service去操作各个Camera device的操作,实现在CameraDevice3中;
Device@3.2ICameraDeviceSession——Camera会话的接口;
ICameraDeviceCallBack——底层对上层的CallBack接口;
CameraDeviceManager——用于管理CameraDevice,包括查找,打开,关闭等。
1.3 Pipeline介绍
PipelineModel是HAL3核心架构,对上需要开放对Pipeline创建 / 操作的API,对下需要建立Pipeline / 管理Pipeline的生命周期。
PipelineModel会针对不同的场景创建不同的Pipeline和HWNode,HWNode向下传输APP层的命令,向上传递图形数据。
P1Node——pipeline的root node,input app命令,output raw data to P2CaptureNode and P2StreamNode;
P2CaptureNode——转换raw data to yuv,Support scale/crop;
P2StreamingNode——和P2CaptureNode功能类似;
JPEGNode——Convert YUV to Jpeg;
FDNode——Generate the FD information;
二、Camera Open流程(Hal-Sensor)
在APP层调用openCamera后会调用的CameraDevice层,最后调用到driver中,整体的调用流程如下:
先从CameraDevice3SessionImpl的open函数分析。
//vendor/mediatek/proprietary/hardware/mtkcam3/main/hal/device/3.x/device/CameraDevice3SessionImpl.cppauto ThisNamespace::open(
const ::android::sp<V3_4::ICameraDeviceCallback>& callback) -> ::android::status_t{
auto pDeviceMana