Remove preview callback before taking picture in Camera1

pull/696/head
Mattia Iavarone 6 years ago
parent c35f206d94
commit 28b869f680
  1. 13
      cameraview/src/main/java/com/otaliastudios/cameraview/picture/Full1PictureRecorder.java

@ -3,6 +3,7 @@ package com.otaliastudios.cameraview.picture;
import android.hardware.Camera; import android.hardware.Camera;
import com.otaliastudios.cameraview.PictureResult; import com.otaliastudios.cameraview.PictureResult;
import com.otaliastudios.cameraview.engine.Camera1Engine;
import com.otaliastudios.cameraview.internal.utils.ExifHelper; import com.otaliastudios.cameraview.internal.utils.ExifHelper;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -17,12 +18,14 @@ import java.io.IOException;
*/ */
public class Full1PictureRecorder extends FullPictureRecorder { public class Full1PictureRecorder extends FullPictureRecorder {
private Camera mCamera; private final Camera mCamera;
private final Camera1Engine mEngine;
public Full1PictureRecorder(@NonNull PictureResult.Stub stub, public Full1PictureRecorder(@NonNull PictureResult.Stub stub,
@Nullable PictureResultListener listener, @NonNull Camera1Engine engine,
@NonNull Camera camera) { @NonNull Camera camera) {
super(stub, listener); super(stub, engine);
mEngine = engine;
mCamera = camera; mCamera = camera;
// We set the rotation to the camera parameters, but we don't know if the result will be // We set the rotation to the camera parameters, but we don't know if the result will be
@ -36,6 +39,8 @@ public class Full1PictureRecorder extends FullPictureRecorder {
public void take() { public void take() {
LOG.i("take() called."); LOG.i("take() called.");
// TODO HANGS (rare, emulator only) // TODO HANGS (rare, emulator only)
// Trying to fix by stopping preview callback before.
mCamera.setPreviewCallbackWithBuffer(null);
mCamera.takePicture( mCamera.takePicture(
new Camera.ShutterCallback() { new Camera.ShutterCallback() {
@Override @Override
@ -63,6 +68,7 @@ public class Full1PictureRecorder extends FullPictureRecorder {
mResult.data = data; mResult.data = data;
mResult.rotation = exifRotation; mResult.rotation = exifRotation;
LOG.i("take(): starting preview again. ", Thread.currentThread()); LOG.i("take(): starting preview again. ", Thread.currentThread());
camera.setPreviewCallbackWithBuffer(mEngine);
camera.startPreview(); // This is needed, read somewhere in the docs. camera.startPreview(); // This is needed, read somewhere in the docs.
dispatchResult(); dispatchResult();
} }
@ -74,7 +80,6 @@ public class Full1PictureRecorder extends FullPictureRecorder {
@Override @Override
protected void dispatchResult() { protected void dispatchResult() {
LOG.i("dispatching result. Thread:", Thread.currentThread()); LOG.i("dispatching result. Thread:", Thread.currentThread());
mCamera = null;
super.dispatchResult(); super.dispatchResult();
} }
} }

Loading…
Cancel
Save