1.HAL
MTK Camera Hal,目前最新Android Camera Api2下用的都是HAL3的内存,HAL3主要代码
在mtkcam3中,有些工具类复用了mtkcam中。
vendor/mediatek/proprietary/hardware/mtkcam/
vendor/mediatek/proprietary/hardware/mtkcam3/
2.Camera HAL3 init
上层framework通过ServiceManger得到CameraService服务,进而得到CameraProvider服务,
而CameraProvider与Camera HAL绑定,这样framwork就能与Camera HAL层联系了。
getCameraDeviceManager是一个单例模式,Singleton.initialin(),对单例的实例进行了初始化。
initialine函数,获取android,mtk,vivo定义的tag,加载设备库,物理设备和虚拟设备的创建和
添加,初始化结束。
3.OpenCamera
清理和设置死亡回调,第一次Camera open是关闭闪光灯,检查deviceName或者设备模块是否
有效,检查Camera device是否已经打开,检查是否安全模式下,安全模式下普通相机不能打开。
onOpenLocked创建AppstrramManager,PipelineModel,IpipelineModelManger,调用powerOn
函数,对每个Sensor进行PowerOn操作,调用ioctl函数进入kernel。
4.ConfigureStream
configurestream调用,onconfistreamLock函数获取AppstreamManger,PipelineModel对象
进行config操作。
AppstreamManger进行config操作,设置操作模式,去除无用数据流,重设数据流,获取数据流。
PipelineModel进行config操作,获取HAL层物理设备列表ID,后面是对应相机模式选择,来创建
实例,SMVRBatch(慢动作),4Cell(4和1),Streaming(预览),VSdof(景深),Zoom(聚焦),Mulficom(多摄),HDR(高动态),MFNR(多帧降噪)。
生成PipelineContext,配置数据流,配置HWNode(P1Node,P2Node,FDNode,
JpegNode),配置Pipeline,设置回调。
5. Request
Request流程第一步,获取pPipoeModel,pAppStreamManager,pDeviceSessionPolicy对象。
pPipoeModel,pAppStreamManager进行submitRequest操作。
pAppStreamManager的submitRequest操作:遍历所有请求,注册Freme,注册数据缓冲流。
pPipoeModel的submitRequest操作:遍历请求,单独处理。