1. Android Camera2简介
Android 5.0 (API Level 21)重新设计Camera,并提供了一个全新的API——Camera2。Camera2基本上和Camera1没什么继承性,完全是重新设计。在Camera2中Google引入了Session/Request的概念,从使用上更加复杂,同时也支持更多特性,比如可以控制曝光、控制感光度、支持Raw格式输出。当然坑也更多。
本文简单介绍Camera2使用的基本流程,只会实现一个最简单的预览功能。在后续的文章中会介绍如何使用Camera2进行对焦,控制曝光、对焦等等。
2. Camera2基础
这里先简要介绍下Camera2 API主要用到哪些类,先有个印象;之后介绍Camera从打开到预览的流程;最后介绍Camera2中一些详细的接口。
2.1 Camera2主要类简介
CameraManager
摄像头管理器,用来获取CameraDevice对象,获取Camera属性。
在Camera打开之前主要操作CameraManager,打开后主要操作CameraCaptureSession
mCameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
CameraCharacteristics
摄像头属性,相当于原CameraInfo。通过CameraManager获取制定id的摄像头属性。
通过获取Camera属性信息,配置Camera输出,如FPS,大小,旋转等
mCameraCharacteristics = mCameraManager.getCameraCharacteristics(currentCameraId);
CameraDevice
代表摄像头,相当于于早期的Camera类。
用于创建CameraCaptureSession和关闭摄像头。
通过CameraManager打开Camera,在StateCallback中会得到CameraDevice实例。
CameraCaptureSession
如前文所述,Camera打开后,我们就主要和CameraCaptureSession打交道了。CameraCaptureSession建立了一个和Camera设备的通道,当这个通道建立完成后就可以向Camera发送请求获取图像。
CameraRequest和CameraRequest.Builder
CameraRequest.Builder配置CameraRequest,具体功能就是告诉Camera想要什么样的图像。Builder中主要结构是一个Map。Builder构建后得到CameraRequest。
然后通过CameraCaptureSession发送CameraRequest。
2.2 Camera2从打开到预览基础流程
流程如下