根据前面的SnapdragonCamera源码分析(三)createSessions & startPreview记录可以了解到CameraApp与底层的一些通信基本是围绕Camera2 CameraCaptureSession中的相关标准接口实现的。
简介
查看官方文档:
A configured capture session for a CameraDevice, used for capturing images from the
camera or reprocessing images captured from the camera in the same session previously.
针对CameraDevice设备配置的拍照捕获请求会话,用于处理捕获来自Camera的图像或重新处理先前在同一会话中从Camera捕获的图像。
通俗来说,CameraCaptureSession就是一个事务会话,主要用于向底层相机设备发送获取图像的请求。
前面主要用到 setRepeatingRequest() 和 capture() 方法。
setRepeatingRequest() 是重复请求获取图像数据,常用于预览或连拍;
capture() 是获取一次请求,常用于单张拍照。
CameraCaptureSession 实例
根据SnapdragonCamera源码分析(三)createSessions & startPreview知道,主要通过 CameraDevice 类的 createCaptureSession() 方法创建,并在回调的 onConfigured(CameraCaptureSession session) 方法中获取实例。
mCameraDevice[id].createCaptureSession(list, captureSessionCallback, mCameraHandler);
CameraCaptureSession.StateCallback captureSessionCallback =
new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(CameraCaptureSession cameraCaptureSession) {
if (mPaused || null == mCameraDevice[id] ||
cameraCaptureSession == null) {
return;
}
...
// When the session is ready, we start displaying the preview.
mCaptureSession[id] = cameraCaptureSession;
...
}
@Override
public void onConfigureFailed(CameraCaptureSession cameraCaptureSession) {
Log.e(TAG, "cameracapturesession - onConfigureFailed " + id)