我正在使用Camera2 API,我正在学习一个教程。我设置了TextureView
,SurfaceTextureListener
上有TextureView
。当调用侦听器时,我使用CameraManager
来获取我想要使用的摄像机ID,并使用提供给我的宽度和高度来设置预览大小。我还使用CameraManager
打开摄像头,指定摄像头ID和摄像头设备状态回调。在onOpened
覆盖方法上,我调用了一个名为startPreview()
的方法:
private void startPreview() {
SurfaceTexture surfaceTexture = mTextureView.getSurfaceTexture();
surfaceTexture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
Surface previewSurface = new Surface(surfaceTexture);
try {
mCaptureRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mCaptureRequestBuilder.addTarget(previewSurface);
mCameraDevice.createCaptureSession(Arrays.asList(previewSurface, mImageReader.getSurface()),
new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(CameraCaptureSession session) {
Log.d(TAG, "onConfigured: startPreview");
mPreviewCaptureSession = session;
try {
mPreviewCaptureSession.setRepeatingRequest(mCaptureRequestBuilder.build(),
null, mBackgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onConfigureFailed(CameraCaptureSession session) {
Log.d(TAG, "onConfigureFailed: startPreview");
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
什么是捕获请求和捕获会话? Android documentation声明了createCaptureRequest:
为新的捕获请求创建CaptureRequest.Builder
好的,那么什么是CaptureRequest.Builder?文档:
捕获请求的构建器。
这两个定义都引用其他定义而没有任何含义。
答案 0 :(得分:3)
CaptureRequest 定义相机设备的参数(例如,曝光,分辨率)。 Camera2 API提供了模板,可以更轻松地准备最佳的CaptureRequest,并针对特定的相机进行微调,以及用于此目的。
要将 CaptureRequest 传递给相机设备,我们使用 CameraCaptureSession ,它提供单个(例如拍照)或重复(例如显示实时预览)的上下文)请求。
创建会话是一项昂贵的操作,可能需要几百毫秒,因为它需要配置摄像机设备的内部管道并分配内存缓冲区以便将图像发送到所需的目标。