From 4adf08107ec9a254034797b4f6c485f059ddc166 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Sat, 23 Feb 2019 14:47:55 +0100 Subject: [PATCH] Fix unbindFromSurface bug --- .../com/otaliastudios/cameraview/Camera1.java | 21 +++++++++++++------ .../otaliastudios/cameraview/CameraView.java | 3 +-- demo/src/main/AndroidManifest.xml | 4 ++-- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java index 6a178681..7c6f9b52 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java @@ -66,7 +66,10 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera }); } - // Preview surface is now available. If camera is open, set up. + /** + * Preview surface is now available. If camera is open, set up. + * At this point we are sure that mPreview is not null. + */ @Override public void onSurfaceAvailable() { LOG.i("onSurfaceAvailable:", "Size is", mPreview.getOutputSurfaceSize()); @@ -80,8 +83,11 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera }); } - // Preview surface did change its size. Compute a new preview size. - // This requires stopping and restarting the preview. + /** + * Preview surface did change its size. Compute a new preview size. + * This requires stopping and restarting the preview. + * At this point we are sure that mPreview is not null. + */ @Override public void onSurfaceChanged() { LOG.i("onSurfaceChanged, size is", mPreview.getOutputSurfaceSize()); @@ -119,8 +125,11 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera return isCameraAvailable() && mPreview != null && mPreview.hasSurface() && !mIsBound; } - // The act of binding an "open" camera to a "ready" preview. - // These can happen at different times but we want to end up here. + /** + * The act of binding an "open" camera to a "ready" preview. + * These can happen at different times but we want to end up here. + * At this point we are sure that mPreview is not null. + */ @WorkerThread private void bindToSurface() { LOG.i("bindToSurface:", "Started"); @@ -275,7 +284,7 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera } if (mCamera != null) { stopPreview(); - unbindFromSurface(); + if (mIsBound) unbindFromSurface(); destroyCamera(); } mCameraOptions = null; diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java index ca420c41..7f2f6213 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java @@ -601,8 +601,7 @@ public class CameraView extends FrameLayout implements LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void open() { if (!isEnabled()) return; - if (mCameraPreview == null) return; // Don't want to start without a preview - mCameraPreview.onResume(); + if (mCameraPreview != null) mCameraPreview.onResume(); if (checkPermissions(getAudio())) { // Update display orientation for current CameraController mOrientationHelper.enable(getContext()); diff --git a/demo/src/main/AndroidManifest.xml b/demo/src/main/AndroidManifest.xml index 91853314..15d6c9ea 100644 --- a/demo/src/main/AndroidManifest.xml +++ b/demo/src/main/AndroidManifest.xml @@ -15,9 +15,9 @@ + android:screenOrientation="portrait" + android:hardwareAccelerated="true">