createCaptureRequest addtarget
时间: 2023-10-06 18:12:27 浏览: 28
这似乎是一个相机相关的问题,createCaptureRequest和addTarget是Android Camera2 API中的方法。createCaptureRequest用于创建一个捕获请求对象,而addTarget则用于将图像捕获的输出目标添加到该请求中。在相机应用程序中,通常会使用createCaptureRequest创建请求对象,并使用addTarget将捕获图像的输出目标添加到请求中,以便将图像发送到预览窗口或保存到文件中。如果您需要更详细的信息,请提供更具体的上下文。
相关问题
在使用到三个surface时(一路预览一路imageReader和一路MediaCodec的surface) 使用templateType为TEMPLATE_VIDEO_SNAPSHOT时直接闪退,mVideoRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_VIDEO_SNAPSHOT
闪退的原因可能是由于您同时使用了三个Surface,但是模板类型为TEMPLATE_VIDEO_SNAPSHOT时只能使用两个Surface。TEMPLATE_VIDEO_SNAPSHOT是用于拍摄静态照片的模板类型,因此只能同时使用预览Surface和照片ImageReader。
如果您需要同时使用三个Surface,请考虑使用TEMPLATE_RECORD模板类型,它允许您使用预览Surface、录制Surface和照片ImageReader。您可以通过以下方式创建CaptureRequest:
```
mVideoRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
mVideoRequestBuilder.addTarget(previewSurface);
mVideoRequestBuilder.addTarget(mediaCodecSurface);
mVideoRequestBuilder.addTarget(imageReader.getSurface());
```
请注意,使用TEMPLATE_RECORD模板类型时,ImageReader的大小应该与预览Surface的大小相同。
private void createCameraPreview() { try { SurfaceHolder holder = previewView.getHolder(); holder.setFixedSize(size.getWidth(), size.getHeight()); holder.setKeepScreenOn(true); final Surface surface = holder.getSurface(); captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); captureRequestBuilder.addTarget(surface); cameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() { public void onConfigured(CameraCaptureSession session) { try { CaptureRequest captureRequest = captureRequestBuilder.build(); session.setRepeatingRequest(captureRequest, null, null); }catch (CameraAccessException e) { e.printStackTrace(); } } public void onConfigureFailed(CameraCaptureSession session) { Toast.makeText(Diary.this, "Failed to configure camera", Toast.LENGTH_SHORT).show(); } }, null); }catch (CameraAccessException e) { e.printStackTrace(); } }
这段代码是用来创建相机预览的,首先通过SurfaceHolder获取Surface,并设置Surface的大小和保持屏幕常亮。然后通过CameraDevice创建一个CaptureRequestBuilder对象,用CameraDevice.TEMPLATE_PREVIEW模板创建一个捕获请求,并将Surface作为目标添加到该请求中。接着使用CameraDevice.createCaptureSession()方法创建一个相机捕获会话,将Surface作为输出目标传递给该方法。在会话创建完成后,通过会话设置一个重复请求,即不断捕获相机预览画面并显示在Surface上。如果出现CameraAccessException异常,会打印错误信息。如果会话配置失败,则会显示一个Toast提示。