Android中的捕获请求和捕获会话

Android中的捕获请求和捕获会话,android,android-camera2,Android,Android Camera2,我正在使用Camera2API,并遵循一个教程。我设置了TextureView,并且在TextureView上设置了SurfaceTextureListener。调用侦听器时,我使用CameraManager获取要使用的摄影机id,并使用提供给我的宽度和高度设置预览大小。我还使用CameraManager打开相机,指定相机id和相机设备状态回调。在onOpenedoverride方法上,我调用了一个名为startPreview()的方法: 什么是捕获请求和捕获会话?Android状态create

我正在使用Camera2API,并遵循一个教程。我设置了
TextureView
,并且在
TextureView
上设置了
SurfaceTextureListener
。调用侦听器时,我使用
CameraManager
获取要使用的摄影机id,并使用提供给我的宽度和高度设置预览大小。我还使用
CameraManager
打开相机,指定相机id和相机设备状态回调。在
onOpened
override方法上,我调用了一个名为
startPreview()
的方法:

什么是捕获请求和捕获会话?Android状态createCaptureRequest:

为新捕获请求创建CaptureRequest.Builder

好的,那么什么是CaptureRequest.Builder?文件:

用于捕获请求的生成器


两个定义都引用了其他定义,但没有给出任何含义

ACaptureRequest定义相机设备的参数(例如曝光、分辨率)。Camera2 API提供了模板,可以更轻松地准备最佳CaptureRequest,并针对特定相机和特定用途进行了微调

要将捕获请求传递给相机设备,我们使用CameraCaptureSession,它为单个(例如拍照)或重复(例如显示实时预览)请求提供上下文

创建会话是一项昂贵的操作,可能需要几百毫秒,因为它需要配置相机设备的内部管道并分配内存缓冲区,以便将图像发送到所需的目标


你能提供构建的源代码吗?任何链接
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();
    }
}