前言:前一篇介绍了Camera2相关类作用及功能,并未对源码部分了解,今天了解了在Camera2框架中openCamera及session过程,Agenda如下:
-
CameraManager的openCamera方法
-
openCameraDeviceUserAsync
-
CameraDeviceImpl
-
getCameraService
-
创建Session相关回调
在Activity或Fragement的onResume()时调用openCamera,
CameraManager中的openCamera方法:
接着看下openCameraDeviceUserAsync方法,从名字上理解,用户异步打开Camera device,
查询给定的CameraDevice的容量,cameraId,表示传入是有摄像头,还是后摄像头,这个容量是不可变的。
Android.hardware.camera2.impl.CameraDeviceImpl的构造函数:
接着看下CameraManagerGlobal.get().getCameraService();
获取ICameraService,可能为空,当camera service不可用时,如果上次用Camera Service就已经挂了,将会重启这个service。
当服务可用时,连接Camera Serivce,并设置一些对应的listeners,如果服务已经启动,什么也不做,设置mCameraService指向合理的引用,如果连接不成功时。
当openCamera后,开始可以创建Session了,看下CameraCaptureSession$StateCallback的回调
https://mp.weixin.qq.com/s/xEm26S3wr5zZmkYwCswOiA