From e83206be7a561c6f50a9f5d394f46a60d47f0380 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Sat, 13 Jul 2019 16:44:26 -0300 Subject: [PATCH] Fix video snapshot overlay rotation for Camera2 only --- .../otaliastudios/cameraview/engine/Camera1Engine.java | 2 +- .../otaliastudios/cameraview/engine/Camera2Engine.java | 10 ++++++---- .../cameraview/video/SnapshotVideoRecorder.java | 6 +++++- .../cameraview/video/encoding/TextureMediaEncoder.java | 7 +++++-- demo/src/main/res/layout/activity_camera.xml | 2 +- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera1Engine.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera1Engine.java index eae82d6d..5ee4a480 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera1Engine.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera1Engine.java @@ -372,7 +372,7 @@ public class Camera1Engine extends CameraEngine implements LOG.i("onTakeVideoSnapshot", "rotation:", stub.rotation, "size:", stub.size); // Start. - mVideoRecorder = new SnapshotVideoRecorder(Camera1Engine.this, glPreview, getOverlay()); + mVideoRecorder = new SnapshotVideoRecorder(Camera1Engine.this, glPreview, getOverlay(), stub.rotation); mVideoRecorder.start(stub); } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java index 2415231d..40748e03 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java @@ -707,9 +707,9 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv outputSize = new Size(outputCrop.width(), outputCrop.height()); stub.size = outputSize; // Vertical: 0 (270-0-0) - // Left (unlocked): 270 (270-90-270) - // Right (unlocked): 90 (270-270-90) - // Upside down (unlocked): 180 (270-180-180) + // Left (unlocked): 270 (270-90-270) + // Right (unlocked): 90 (270-270-90) + // Upside down (unlocked): 180 (270-180-180) // Left (locked): 270 (270-0-270) // Right (locked): 90 (270-0-90) // Upside down (locked): 180 (270-0-180) @@ -719,7 +719,9 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv LOG.i("onTakeVideoSnapshot", "rotation:", stub.rotation, "size:", stub.size); // Start. - mVideoRecorder = new SnapshotVideoRecorder(this, glPreview, getOverlay()); + // The overlay rotation should alway be VIEW-OUTPUT, just liek Camera1Engine. + int overlayRotation = getAngles().offset(Reference.VIEW, Reference.OUTPUT, Axis.ABSOLUTE); + mVideoRecorder = new SnapshotVideoRecorder(this, glPreview, getOverlay(), overlayRotation); mVideoRecorder.start(stub); } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java b/cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java index 637613bc..3c25e921 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/video/SnapshotVideoRecorder.java @@ -62,15 +62,18 @@ public class SnapshotVideoRecorder extends VideoRecorder implements RendererFram private Surface mOverlaySurface; private Overlay mOverlay; private boolean mHasOverlay; + private int mOverlayRotation; public SnapshotVideoRecorder(@NonNull CameraEngine engine, @NonNull GlCameraPreview preview, - @Nullable Overlay overlay) { + @Nullable Overlay overlay, + int overlayRotation) { super(engine); mPreview = preview; mEngine = engine; mOverlay = overlay; mHasOverlay = overlay != null; + mOverlayRotation = overlayRotation; } @Override @@ -129,6 +132,7 @@ public class SnapshotVideoRecorder extends VideoRecorder implements RendererFram mResult.rotation, type, mTextureId, mHasOverlay ? mOverlayTextureId : TextureMediaEncoder.NO_TEXTURE, + mOverlayRotation, scaleX, scaleY, mFlipped, EGL14.eglGetCurrentContext() diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/TextureMediaEncoder.java b/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/TextureMediaEncoder.java index f4eefeff..28707c24 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/TextureMediaEncoder.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/TextureMediaEncoder.java @@ -34,15 +34,18 @@ public class TextureMediaEncoder extends VideoMediaEncoder