From 8b2d988fdf2fff6a08f83d744c0acf7110769161 Mon Sep 17 00:00:00 2001 From: Giacomo Randazzo Date: Mon, 1 Apr 2019 09:06:36 +0200 Subject: [PATCH] fix some of the requested changes --- .../cameraview/MockCameraController.java | 5 --- .../cameraview/TextureMediaEncoder.java | 1 - .../com/otaliastudios/cameraview/Camera1.java | 12 ++----- .../cameraview/CameraController.java | 8 ----- .../otaliastudios/cameraview/CameraView.java | 36 ------------------- .../cameraview/OverlayLayout.java | 15 +------- .../cameraview/SnapshotPictureRecorder.java | 13 +++---- .../cameraview/SnapshotVideoRecorder.java | 9 +++-- .../cameraview/SurfaceDrawer.java | 2 +- cameraview/src/main/res/values/attrs.xml | 6 ---- .../cameraview/demo/CameraActivity.java | 2 -- demo/src/main/res/layout/activity_camera.xml | 3 +- 12 files changed, 18 insertions(+), 94 deletions(-) diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraController.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraController.java index 34fdfe1e..1026b215 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraController.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraController.java @@ -134,9 +134,4 @@ public class MockCameraController extends CameraController { void setPlaySounds(boolean playSounds) { } - - @Override - void setDisableOverlayFor(@NonNull DisableOverlayFor disableOverlayFor) { - - } } diff --git a/cameraview/src/main/gles/com/otaliastudios/cameraview/TextureMediaEncoder.java b/cameraview/src/main/gles/com/otaliastudios/cameraview/TextureMediaEncoder.java index 987f38d0..1a21718b 100644 --- a/cameraview/src/main/gles/com/otaliastudios/cameraview/TextureMediaEncoder.java +++ b/cameraview/src/main/gles/com/otaliastudios/cameraview/TextureMediaEncoder.java @@ -141,7 +141,6 @@ class TextureMediaEncoder extends VideoMediaEncoder drainOutput(false); // Future note: passing scale values to the viewport? They are scaleX and scaleY, // but flipped based on the mConfig.scaleFlipped boolean. -// mViewport.drawFrame(mConfig.textureId, mConfig.overlayTextureId, transform, overlayTransform); mViewport.drawFrame(mConfig.textureId, transform); mViewport.drawFrame(mConfig.overlayTextureId, overlayTransform); mWindow.setPresentationTime(frame.timestamp); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java index 0d7cafb9..26041bb4 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java @@ -503,15 +503,6 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera return false; } - @Override - void setDisableOverlayFor(@NonNull DisableOverlayFor disableOverlayFor) { - if (mDisableOverlayFor != disableOverlayFor) { - LOG.w("DisableOverlayFor setting was changed while recording. " + - "Changes will take place starting from next video/picture."); - mDisableOverlayFor = disableOverlayFor; - } - } - // Choose the best default focus, based on session type. private void applyDefaultFocus(@NonNull Camera.Parameters params) { @@ -790,7 +781,8 @@ class Camera1 extends CameraController implements Camera.PreviewCallback, Camera // Reset facing and start. mFacing = realFacing; GlCameraPreview cameraPreview = (GlCameraPreview) mPreview; - mVideoRecorder = new SnapshotVideoRecorder(videoResult, Camera1.this, cameraPreview, mDisableOverlayFor != DisableOverlayFor.VIDEO, videoSurfaceDrawerList); + // TODO when we'll have the API for setting where to draw each view, we'll fix the withOverlay parameter.. + mVideoRecorder = new SnapshotVideoRecorder(videoResult, Camera1.this, cameraPreview, true, videoSurfaceDrawerList); mVideoRecorder.start(); } }); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java index ec068edf..efcd34c8 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java @@ -52,7 +52,6 @@ abstract class CameraController implements protected float mZoomValue; protected float mExposureCorrectionValue; protected boolean mPlaySounds; - protected DisableOverlayFor mDisableOverlayFor; @Nullable private SizeSelector mPreviewStreamSizeSelector; private SizeSelector mPictureSizeSelector; @@ -374,8 +373,6 @@ abstract class CameraController implements abstract void setPlaySounds(boolean playSounds); - abstract void setDisableOverlayFor(@NonNull DisableOverlayFor disableOverlayFor); - //endregion //region final getters @@ -471,11 +468,6 @@ abstract class CameraController implements return mPictureRecorder != null; } - @NonNull - final DisableOverlayFor getDisableOverlayFor() { - return mDisableOverlayFor; - } - //endregion //region Orientation utils diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java index ef19d7fb..ed950c3a 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java @@ -121,7 +121,6 @@ public class CameraView extends FrameLayout implements LifecycleObserver { int videoMaxDuration = a.getInteger(R.styleable.CameraView_cameraVideoMaxDuration, 0); int videoBitRate = a.getInteger(R.styleable.CameraView_cameraVideoBitRate, 0); int audioBitRate = a.getInteger(R.styleable.CameraView_cameraAudioBitRate, 0); - DisableOverlayFor disableOverlayFor = DisableOverlayFor.fromValue(a.getInteger(R.styleable.CameraView_cameraDisableOverlayFor, DisableOverlayFor.DEFAULT.value())); // Picture size selector List pictureConstraints = new ArrayList<>(3); @@ -228,7 +227,6 @@ public class CameraView extends FrameLayout implements LifecycleObserver { setVideoMaxSize(videoMaxSize); setVideoMaxDuration(videoMaxDuration); setVideoBitRate(videoBitRate); - setDisableOverlayFor(disableOverlayFor); // Apply gestures mapGesture(Gesture.TAP, tapGesture); @@ -779,8 +777,6 @@ public class CameraView extends FrameLayout implements LifecycleObserver { setVideoCodec((VideoCodec) control); } else if (control instanceof Preview) { setPreview((Preview) control); - } else if (control instanceof DisableOverlayFor) { - setDisableOverlayFor((DisableOverlayFor) control); } } @@ -1683,38 +1679,6 @@ public class CameraView extends FrameLayout implements LifecycleObserver { return mCameraController.isTakingPicture(); } - - /** - * Sets the mode where the overlay is disabled. - * - * @see DisableOverlayFor#NONE - * @see DisableOverlayFor#PICTURE - * @see DisableOverlayFor#VIDEO - - * @param mode desired mode. - */ - public void setDisableOverlayFor(@NonNull DisableOverlayFor mode) { - mCameraController.setDisableOverlayFor(mode); - } - - - /** - * Gets the current mode where the overlay is disabled. - * @return a mode - */ - @NonNull - public DisableOverlayFor getDisableOverlayFor() { - return mCameraController.getDisableOverlayFor(); - } - - /** - * Force the overlay to be redrawn. - */ - public void invalidateOverlay() { - if (mPreviewOverlayLayout != null) { - mPreviewOverlayLayout.postInvalidate(); - } - } //endregion //region Callbacks and dispatching diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/OverlayLayout.java b/cameraview/src/main/java/com/otaliastudios/cameraview/OverlayLayout.java index c48432cf..e2b553c9 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/OverlayLayout.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/OverlayLayout.java @@ -13,7 +13,7 @@ import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -public class OverlayLayout extends FrameLayout implements SurfaceDrawer { +class OverlayLayout extends FrameLayout implements SurfaceDrawer { public OverlayLayout(@NonNull Context context) { super(context); @@ -41,17 +41,4 @@ public class OverlayLayout extends FrameLayout implements SurfaceDrawer { e.printStackTrace(); } } - - // invalidates children (and nested children) recursively - private void postInvalidateRecursive(ViewGroup layout) { - int count = layout.getChildCount(); - View child; - for (int i = 0; i < count; i++) { - child = layout.getChildAt(i); - if(child instanceof ViewGroup) - postInvalidateRecursive((ViewGroup) child); - else - child.postInvalidate(); - } - } } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/SnapshotPictureRecorder.java b/cameraview/src/main/java/com/otaliastudios/cameraview/SnapshotPictureRecorder.java index 045939e8..05a6eaa4 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/SnapshotPictureRecorder.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/SnapshotPictureRecorder.java @@ -47,7 +47,8 @@ class SnapshotPictureRecorder extends PictureRecorder { mOutputRatio = outputRatio; mFormat = mController.mPreviewFormat; mSensorPreviewSize = mController.mPreviewStreamSize; - mWithOverlay = mController.mDisableOverlayFor != DisableOverlayFor.PICTURE; + // TODO when we'll have the API for setting where to draw each view, we'll fix this. + mWithOverlay = true; mSurfaceDrawerList = surfaceDrawerList; } @@ -80,18 +81,18 @@ class SnapshotPictureRecorder extends PictureRecorder { mOverlayTextureId = viewport.createTexture(); } mSurfaceTexture = new SurfaceTexture(mTextureId, true); - if (mOverlayTextureId != 0) { + if (mWithOverlay) { mOverlaySurfaceTexture = new SurfaceTexture(mOverlayTextureId, true); } // Need to crop the size. Rect crop = CropHelper.computeCrop(mResult.size, mOutputRatio); mResult.size = new Size(crop.width(), crop.height()); mSurfaceTexture.setDefaultBufferSize(mResult.size.getWidth(), mResult.size.getHeight()); - if (mOverlaySurfaceTexture != null) { + if (mWithOverlay) { mOverlaySurfaceTexture.setDefaultBufferSize(mResult.size.getWidth(), mResult.size.getHeight()); } mTransform = new float[16]; - if (mOverlaySurfaceTexture != null) { + if (mWithOverlay) { mOverlayTransform = new float[16]; } } @@ -131,7 +132,7 @@ class SnapshotPictureRecorder extends PictureRecorder { mSurfaceTexture.updateTexImage(); mSurfaceTexture.getTransformMatrix(mTransform); Surface drawOnto = new Surface(mOverlaySurfaceTexture); - if (mOverlaySurfaceTexture != null) { + if (mWithOverlay) { for (SurfaceDrawer surfaceDrawer : mSurfaceDrawerList) { surfaceDrawer.drawOnSurface(drawOnto); } @@ -194,7 +195,7 @@ class SnapshotPictureRecorder extends PictureRecorder { // Future note: passing scale values to the viewport? // They are simply realScaleX and realScaleY. viewport.drawFrame(mTextureId, mTransform); - if (mOverlayTransform != null) { + if (mWithOverlay) { viewport.drawFrame(mOverlayTextureId, mOverlayTransform); } // don't - surface.swapBuffers(); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/SnapshotVideoRecorder.java b/cameraview/src/main/java/com/otaliastudios/cameraview/SnapshotVideoRecorder.java index f0141153..8a839d8d 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/SnapshotVideoRecorder.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/SnapshotVideoRecorder.java @@ -136,9 +136,12 @@ class SnapshotVideoRecorder extends VideoRecorder implements GlCameraPreview.Ren mOverlaySurfaceTexture.updateTexImage(); mOverlaySurfaceTexture.getTransformMatrix(textureFrame.overlayTransform); } - // Sometimes when the video ends an Exception is thrown saying that nofify was called on - // a null object. This might be highlighting a bigger problem, but checking for null - // fixes the Exception. + + /* TODO + * Sometimes when the video ends an Exception is thrown saying that notify was called on + * a null object. This might be highlighting a bigger problem, but checking for null + * fixes the Exception. + */ if (mEncoderEngine != null) { mEncoderEngine.notify(TextureMediaEncoder.FRAME_EVENT, textureFrame); } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/SurfaceDrawer.java b/cameraview/src/main/java/com/otaliastudios/cameraview/SurfaceDrawer.java index 1c64cb51..8250405c 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/SurfaceDrawer.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/SurfaceDrawer.java @@ -2,6 +2,6 @@ package com.otaliastudios.cameraview; import android.view.Surface; -public interface SurfaceDrawer { +interface SurfaceDrawer { void drawOnSurface(Surface surface); } diff --git a/cameraview/src/main/res/values/attrs.xml b/cameraview/src/main/res/values/attrs.xml index 0fe90520..428e7c3e 100644 --- a/cameraview/src/main/res/values/attrs.xml +++ b/cameraview/src/main/res/values/attrs.xml @@ -124,12 +124,6 @@ - - - - - - diff --git a/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java b/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java index fc627843..c538db9a 100644 --- a/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java +++ b/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java @@ -185,13 +185,11 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis switch (camera.toggleFacing()) { case BACK: watermarkTitle.setText("Back facing"); - camera.invalidateOverlay(); message("Switched to back camera!", false); break; case FRONT: watermarkTitle.setText("Front facing"); - camera.invalidateOverlay(); message("Switched to front camera!", false); break; } diff --git a/demo/src/main/res/layout/activity_camera.xml b/demo/src/main/res/layout/activity_camera.xml index f2249973..0fc69548 100644 --- a/demo/src/main/res/layout/activity_camera.xml +++ b/demo/src/main/res/layout/activity_camera.xml @@ -26,8 +26,7 @@ app:cameraGesturePinch="zoom" app:cameraGestureScrollHorizontal="exposureCorrection" app:cameraGestureScrollVertical="none" - app:cameraMode="picture" - app:cameraDisableOverlayFor="none"> + app:cameraMode="picture">