Camera 中主要的API2类
CameraManager类 :
frameworks\base\core\java\android\hardware\camera2\CameraManager.java
摄像头管理类,用于检测、打开系统摄像头,通过 getCameraCharacteristics(cameraId) 可以获取摄像头特征。
CameraCharacteristics类:
frameworks\base\core\java\android\hardware\camera2\CameraCharacteristics.java
相机特性类,获取摄像头的特征信息。例如:相机光圈值,是否支持自动调焦,是否支持 zoom,是否支持闪光灯一系列特征
CameraDevice类:
frameworks\base\core\java\android\hardware\camera2\CameraDevice.java
相机设备,类似早期的camera类。
CameraCaptureSession类:
frameworks\base\core\java\android\hardware\camera2\CameraCaptureSession.java
用于创建预览、拍照的Session类。通过它的setRepeatingRequest()方法控制预览界面 , 通过它的capture()方法控制拍照动作或者录像动作。
CaptureRequest.Builder 类vendor\mediatek\proprietary\hardware\mtkcam\middleware\v1\adapter\Scenario\flowControl\stereo\shot\CaptureRequestBuilder.cpp
实例化 CaptureRequest,置一些列的参数,用于控制预览和拍照参数,例如:对焦模式,曝光模式,zoom参数等。
CaptureRequest类:
frameworks\base\core\java\android\hardware\camera2\CaptureRequest.java
捕获的请求。
ImageReader类:
frameworks\base\media\java\android\media\ImageReader.java
ImageReader 和 Camera API2 配合缓存拍照图片的数据和 YUV 数据。
Camera API2类的关系
- 获取系统服务 CameraManager 实例
- 调用 CameraManager.getCameraCharacteristics() 方法获取 CameraCharacteristics 实例
- 调用 CameraManager.openCamera() 方法的传入 CameraDevice.StateCallback 方法中获取 CameraDevice 实例
- 调用 CameraDevice.createCaptureRequest() 方法创建请求会话实例 CaptureRequest.Builder , TEMPLATE_PREVIEW(预览请求), TEMPLATE_STILL_CAPTURE(拍照请求)
- 调用 CaptureRequest.Builder.addTarget(Surface) 设置 camera2 图像数据的目标 Surface
- 调用 CameraDevice.createCaptureSession() 创建相机捕获会话,传入 CameraCaptureSession.StateCallback 方法用于拍照或预览
- 在 CameraCaptureSession.StateCallback 中调用 CaptureRequest.Builder.build() 获取请求会话和 CameraCaptureSession 捕获会话
- 在 CameraCaptureSession.CaptureCallback 中实现两个抽象方法, onCaptureProgressed(捕获处理)和 onCaptureCompleted(捕获完成)
- 调用 CameraCaptureSession 发送 CaptureRequest 请求, capture:表示只发一次请求(拍照), setRepeatingRequest:表示不断发送请求(预览)
- 在 ImageReader.OnImageAvailableListener 监听中回调获取拍照/预览数据
Camera API2 Demo : android-Camera2Basic
Google 相机: https://source.android.com/devices/camera/
导图如下: