在 Android 中捕获请求和捕获会话
Capture Request and Capture Session in Android
我正在使用 Camera2 API 并且正在学习教程。我设置了 TextureView
,并且在 TextureView
上设置了 SurfaceTextureListener
。调用侦听器时,我使用 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:
Create a CaptureRequest.Builder for new capture requests
好的,那什么是 CaptureRequest.Builder?文档:
A builder for capture requests.
这两个定义都引用了其他定义,但没有给出任何含义。
A CaptureRequest 定义相机设备的参数(例如曝光、分辨率)。 Camera2 API 提供模板,以便更轻松地准备最好的 CaptureRequest,并针对特定相机和目的进行微调。
为了将 CaptureRequest 传递给相机设备,我们使用了 CameraCaptureSession,它提供了单次(例如拍照)的上下文) 或重复(例如显示实时预览)请求。
Creating a session is an expensive operation and can take several hundred milliseconds, since it requires configuring the camera device's internal pipelines and allocating memory buffers for sending images to the desired targets.
我正在使用 Camera2 API 并且正在学习教程。我设置了 TextureView
,并且在 TextureView
上设置了 SurfaceTextureListener
。调用侦听器时,我使用 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:
Create a CaptureRequest.Builder for new capture requests
好的,那什么是 CaptureRequest.Builder?文档:
A builder for capture requests.
这两个定义都引用了其他定义,但没有给出任何含义。
A CaptureRequest 定义相机设备的参数(例如曝光、分辨率)。 Camera2 API 提供模板,以便更轻松地准备最好的 CaptureRequest,并针对特定相机和目的进行微调。
为了将 CaptureRequest 传递给相机设备,我们使用了 CameraCaptureSession,它提供了单次(例如拍照)的上下文) 或重复(例如显示实时预览)请求。
Creating a session is an expensive operation and can take several hundred milliseconds, since it requires configuring the camera device's internal pipelines and allocating memory buffers for sending images to the desired targets.