From 98741c2bfaca01cf7b2a89d85a135327c9149b36 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Mon, 8 Jul 2019 14:33:33 -0300 Subject: [PATCH] Refactor CameraPreviews --- .../cameraview/preview/CameraPreviewTest.java | 5 +- .../preview/GlCameraPreviewTest.java | 4 +- .../preview/SurfaceCameraPreviewTest.java | 4 +- .../preview/TextureCameraPreviewTest.java | 4 +- .../otaliastudios/cameraview/CameraView.java | 6 +- .../cameraview/preview/CameraPreview.java | 12 +- .../cameraview/preview/GlCameraPreview.java | 220 ++++++++++-------- .../preview/SurfaceCameraPreview.java | 5 +- .../preview/TextureCameraPreview.java | 4 +- 9 files changed, 143 insertions(+), 121 deletions(-) diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/CameraPreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/CameraPreviewTest.java index 1ae81559..2f8be439 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/CameraPreviewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/CameraPreviewTest.java @@ -27,7 +27,7 @@ public abstract class CameraPreviewTest extends BaseTest { private final static long DELAY = 4000; - protected abstract CameraPreview createPreview(Context context, ViewGroup parent, CameraPreview.SurfaceCallback callback); + protected abstract CameraPreview createPreview(Context context, ViewGroup parent); @Rule public ActivityTestRule rule = new ActivityTestRule<>(TestActivity.class); @@ -69,7 +69,8 @@ public abstract class CameraPreviewTest extends BaseTest { } }).when(callback).onSurfaceDestroyed(); - preview = createPreview(a, a.getContentView(), callback); + preview = createPreview(a, a.getContentView()); + preview.setSurfaceCallback(callback); } }); } diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/GlCameraPreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/GlCameraPreviewTest.java index 059bf268..ff8a085e 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/GlCameraPreviewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/GlCameraPreviewTest.java @@ -14,8 +14,8 @@ import org.junit.runner.RunWith; public class GlCameraPreviewTest extends CameraPreviewTest { @Override - protected CameraPreview createPreview(Context context, ViewGroup parent, CameraPreview.SurfaceCallback callback) { - return new GlCameraPreview(context, parent, callback); + protected CameraPreview createPreview(Context context, ViewGroup parent) { + return new GlCameraPreview(context, parent); } @Override diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/SurfaceCameraPreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/SurfaceCameraPreviewTest.java index 9555d341..d76f9a87 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/SurfaceCameraPreviewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/SurfaceCameraPreviewTest.java @@ -18,8 +18,8 @@ import org.junit.runner.RunWith; public class SurfaceCameraPreviewTest extends CameraPreviewTest { @Override - protected CameraPreview createPreview(Context context, ViewGroup parent, CameraPreview.SurfaceCallback callback) { - return new SurfaceCameraPreview(context, parent, callback); + protected CameraPreview createPreview(Context context, ViewGroup parent) { + return new SurfaceCameraPreview(context, parent); } @Override diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/TextureCameraPreviewTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/TextureCameraPreviewTest.java index 916c4344..3433cac1 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/TextureCameraPreviewTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/preview/TextureCameraPreviewTest.java @@ -18,8 +18,8 @@ import org.junit.runner.RunWith; public class TextureCameraPreviewTest extends CameraPreviewTest { @Override - protected CameraPreview createPreview(Context context, ViewGroup parent, CameraPreview.SurfaceCallback callback) { - return new TextureCameraPreview(context, parent, callback); + protected CameraPreview createPreview(Context context, ViewGroup parent) { + return new TextureCameraPreview(context, parent); } @Override diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java index 8e2a2662..025a0288 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java @@ -276,16 +276,16 @@ public class CameraView extends FrameLayout implements LifecycleObserver { LOG.w("preview:", "isHardwareAccelerated:", isHardwareAccelerated()); switch (preview) { case SURFACE: - return new SurfaceCameraPreview(context, container, null); + return new SurfaceCameraPreview(context, container); case TEXTURE: { if (isHardwareAccelerated()) { // TextureView is not supported without hardware acceleration. - return new TextureCameraPreview(context, container, null); + return new TextureCameraPreview(context, container); } } case GL_SURFACE: default: { mPreview = Preview.GL_SURFACE; - return new GlCameraPreview(context, container, null); + return new GlCameraPreview(context, container); } } } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/preview/CameraPreview.java b/cameraview/src/main/java/com/otaliastudios/cameraview/preview/CameraPreview.java index 21c9e405..1f09c94c 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/preview/CameraPreview.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/preview/CameraPreview.java @@ -67,11 +67,9 @@ public abstract class CameraPreview { * Creates a new preview. * @param context a context * @param parent where to inflate our view - * @param callback the callback */ - public CameraPreview(@NonNull Context context, @NonNull ViewGroup parent, @Nullable SurfaceCallback callback) { + public CameraPreview(@NonNull Context context, @NonNull ViewGroup parent) { mView = onCreateView(context, parent); - mSurfaceCallback = callback; } /** @@ -79,10 +77,12 @@ public abstract class CameraPreview { * @param callback a callback */ public final void setSurfaceCallback(@Nullable SurfaceCallback callback) { + if (hasSurface() && mSurfaceCallback != null) { + mSurfaceCallback.onSurfaceDestroyed(); + } mSurfaceCallback = callback; - // If surface already available, dispatch. - if (mOutputSurfaceWidth != 0 || mOutputSurfaceHeight != 0) { - if (callback != null) callback.onSurfaceAvailable(); + if (hasSurface() && mSurfaceCallback != null) { + mSurfaceCallback.onSurfaceAvailable(); } } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java b/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java index ff09b8ee..f4fa77cd 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java @@ -57,7 +57,7 @@ import javax.microedition.khronos.opengles.GL10; * Callbacks are guaranteed to be called on the renderer thread, which means that we can fetch * the GL context that was created and is managed by the {@link GLSurfaceView}. */ -public class GlCameraPreview extends CameraPreview implements GLSurfaceView.Renderer { +public class GlCameraPreview extends CameraPreview { private boolean mDispatched; private final float[] mTransformMatrix = new float[16]; @@ -68,33 +68,11 @@ public class GlCameraPreview extends CameraPreview op) { @@ -285,4 +264,47 @@ public class GlCameraPreview extends CameraPreview