capture()循环模拟setRepeatingRequest()

时间:2018-06-07 20:38:35

标签: android

我想更改" captureSession.setRepeatingRequest()"使用captureSession.capture(),这样我只能拍摄一张照片而不会拍摄其中的一幅照片。我想创建一个循环,在其中我使用captureSession.capture()方法拍照,例如它的作用类似于" setRepeatingRequest()"。问题是我尝试在captureSession.capture()以及其他地方的代码中插入do-while,但是由于这个修改我运行应用程序时总是强制退出。如果我只留下" capture()"应用程序拍照然后停止的方法。

以下是代码:

private void createCameraPreviewSession() {
try {
  final SurfaceTexture texture = textureView.getSurfaceTexture();
  assert texture != null;

  // We configure the size of default buffer to be the size of camera preview we want.
  texture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight());

  // This is the output Surface we need to start preview.
  final Surface surface = new Surface(texture);

  // We set up a CaptureRequest.Builder with the output Surface.

  previewRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
  previewRequestBuilder.addTarget(surface);

  LOGGER.i("Opening camera preview: " + previewSize.getWidth() + "x" + previewSize.getHeight());

  // Create the reader for the preview frames.
  previewReader =
          ImageReader.newInstance(
                  previewSize.getWidth(), previewSize.getHeight(), ImageFormat.YUV_420_888, 2);

  previewReader.setOnImageAvailableListener(imageListener, backgroundHandler);
  previewRequestBuilder.addTarget(previewReader.getSurface());

  // Here, we create a CameraCaptureSession for camera preview.

  cameraDevice.createCaptureSession(
          Arrays.asList(surface, previewReader.getSurface()),
          new CameraCaptureSession.StateCallback() {

            @Override
            public void onConfigured(final CameraCaptureSession cameraCaptureSession) {
              // The camera is already closed
              if (null == cameraDevice) {
                return;
              }

              // When the session is ready, we start displaying the preview.
              captureSession = cameraCaptureSession;
              try {
                // Auto focus should be continuous for camera preview.

                previewRequestBuilder.set(
                        CaptureRequest.CONTROL_AF_MODE,
                        CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
                // Flash is automatically enabled when necessary.
                previewRequestBuilder.set(
                        CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);

                // Finally, we start displaying the camera preview.

                previewRequest = previewRequestBuilder.build();


                captureSession.capture(previewRequest, captureCallback, backgroundHandler);


              } catch (final CameraAccessException e) {
                LOGGER.e(e, "Exception!");
              }
            }


            @Override
            public void onConfigureFailed(final CameraCaptureSession cameraCaptureSession) {
              showToast("Failed");
            }
          },
          null);

} catch (final CameraAccessException e) {
  LOGGER.e(e, "Exception!");
}
}

我怎样才能创建循环,例如它继续捕获修改此代码的图像?提前谢谢。

0 个答案:

没有答案