Android相机Api2中支持多表面输出的主要步骤包括:创建预览会话,配置输出表面,以及设置捕获会话的回调函数。具体实现示例如下:
创建预览会话的代码示例如下:
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId); StreamConfigurationMap streamConfigurationMap = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
// 配置预览表面 SurfaceTexture texture = mTextureView.getSurfaceTexture(); assert texture != null; texture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight()); Surface previewSurface = new Surface(texture);
// 配置图片输出表面
List
// 创建会话 cameraDevice.createCaptureSession(surfaces, mCaptureSessionStateCallback, mBackgroundHandler);
配置输出表面的代码示例如下:
imageReader = ImageReader.newInstance(imageWidth, imageHeight, ImageFormat.JPEG, 2); imageReader.setOnImageAvailableListener(mOnImageAvailableListener, mBackgroundHandler);
设置捕获会话的回调函数的代码示例如下:
private static final CameraCaptureSession.CaptureCallback mCaptureCallback = new CameraCaptureSession.CaptureCallback() { @Override public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) { super.onCaptureCompleted(session, request, result); } };
通过以上步骤,我们可以实现Android相机Api2中支持多表面输出。