Call both stopRepeating and abortCaptures

pull/696/head
Mattia Iavarone 6 years ago
parent d12dba9609
commit 639857eda6
  1. 19
      cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java
  2. 10
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java

@ -411,22 +411,20 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
return;
}
Size previewSize = mCameraEngine.getPreviewStreamSize(Reference.VIEW);
if (previewSize == null) {
mLastPreviewStreamSize = mCameraEngine.getPreviewStreamSize(Reference.VIEW);
if (mLastPreviewStreamSize == null) {
LOG.w("onMeasure:", "surface is not ready. Calling default behavior.");
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mLastPreviewStreamSize = null;
return;
}
mLastPreviewStreamSize = previewSize;
// Let's which dimensions need to be adapted.
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
final int widthValue = MeasureSpec.getSize(widthMeasureSpec);
final int heightValue = MeasureSpec.getSize(heightMeasureSpec);
final float previewWidth = previewSize.getWidth();
final float previewHeight = previewSize.getHeight();
final float previewWidth = mLastPreviewStreamSize.getWidth();
final float previewHeight = mLastPreviewStreamSize.getHeight();
// Pre-process specs
final ViewGroup.LayoutParams lp = getLayoutParams();
@ -441,10 +439,11 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
if (heightMode == AT_MOST && lp.height == MATCH_PARENT) heightMode = EXACTLY;
}
LOG.i("onMeasure:", "requested dimensions are (" + widthValue + "[" + ms(widthMode)
+ "]x" + heightValue + "[" + ms(heightMode) + "])");
LOG.i("onMeasure:", "previewSize is", "(" + previewWidth + "x"
+ previewHeight + ")");
LOG.i("onMeasure:", "requested dimensions are ("
+ widthValue + "[" + ms(widthMode) + "]x"
+ heightValue + "[" + ms(heightMode) + "])");
LOG.i("onMeasure:", "previewSize is", "("
+ previewWidth + "x" + previewHeight + ")");
// (1) If we have fixed dimensions (either 300dp or MATCH_PARENT), there's nothing we
// should do, other than respect it. The preview will eventually be cropped at the sides

@ -583,7 +583,7 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
@NonNull
@Override
protected Task<Void> onStartPreview() {
LOG.i("onStartPreview", "Dispatching onCameraPreviewStreamSizeChanged.");
LOG.i("onStartPreview:", "Dispatching onCameraPreviewStreamSizeChanged.");
mCallback.onCameraPreviewStreamSizeChanged();
Size previewSizeForView = getPreviewStreamSize(Reference.VIEW);
@ -596,11 +596,11 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
getFrameManager().setUp(FRAME_PROCESSING_FORMAT, mFrameProcessingSize);
}
LOG.i("onStartPreview", "Starting preview.");
LOG.i("onStartPreview:", "Starting preview.");
addRepeatingRequestBuilderSurfaces();
applyRepeatingRequestBuilder(false,
CameraException.REASON_FAILED_TO_START_PREVIEW);
LOG.i("onStartPreview", "Started preview.");
LOG.i("onStartPreview:", "Started preview.");
// Start delayed video if needed.
if (mFullVideoPendingStub != null) {
@ -642,8 +642,10 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
// Preferring this over stopRepeating() so we're sure that all in-flights operations
// are discarded as fast as possible, which is exactly what we want.
// NOTE: this call is asynchronous. Should find a good way to wait for the outcome.
LOG.i("onStopPreview:", "calling abortCaptures().");
LOG.i("onStopPreview:", "calling stopRepeating().");
// TODO HANGS (rare, emulator only)
mSession.stopRepeating();
LOG.i("onStopPreview:", "calling abortCaptures().");
mSession.abortCaptures();
LOG.i("onStopPreview:", "called abortCaptures().");
} catch (CameraAccessException e) {

Loading…
Cancel
Save