diff --git a/src/org/thoughtcrime/securesms/mediasend/camerax/CameraXModule.java b/src/org/thoughtcrime/securesms/mediasend/camerax/CameraXModule.java index 07d7e37b37..e5f35b4883 100644 --- a/src/org/thoughtcrime/securesms/mediasend/camerax/CameraXModule.java +++ b/src/org/thoughtcrime/securesms/mediasend/camerax/CameraXModule.java @@ -229,20 +229,20 @@ final class CameraXModule { boolean isDisplayPortrait = getDisplayRotationDegrees() == 0 || getDisplayRotationDegrees() == 180; + // Begin Signal Custom Code Block Rational targetAspectRatio; if (getCaptureMode() == CameraXView.CaptureMode.IMAGE) { - mImageCaptureConfigBuilder.setTargetAspectRatio(AspectRatio.RATIO_4_3); + mImageCaptureConfigBuilder.setTargetResolution(CameraXUtil.buildResolutionForRatio(1920, ASPECT_RATIO_4_3, isDisplayPortrait)); targetAspectRatio = isDisplayPortrait ? ASPECT_RATIO_3_4 : ASPECT_RATIO_4_3; } else { - mImageCaptureConfigBuilder.setTargetAspectRatio(AspectRatio.RATIO_16_9); + mImageCaptureConfigBuilder.setTargetResolution(CameraXUtil.buildResolutionForRatio(1920, ASPECT_RATIO_16_9, isDisplayPortrait)); targetAspectRatio = isDisplayPortrait ? ASPECT_RATIO_9_16 : ASPECT_RATIO_16_9; } + mImageCaptureConfigBuilder.setCaptureMode(CameraXUtil.getOptimalCaptureMode()); + mImageCaptureConfigBuilder.setLensFacing(mCameraLensFacing); + // End Signal Custom Code Block mImageCaptureConfigBuilder.setTargetRotation(getDisplaySurfaceRotation()); - mImageCaptureConfigBuilder.setLensFacing(mCameraLensFacing); - // Begin Signal Custom Code Block - mImageCaptureConfigBuilder.setCaptureMode(CameraXUtil.getOptimalCaptureMode()); - // End Signal Custom Code Block mImageCapture = new ImageCapture(mImageCaptureConfigBuilder.build()); // Begin Signal Custom Code Block diff --git a/src/org/thoughtcrime/securesms/mediasend/camerax/CameraXUtil.java b/src/org/thoughtcrime/securesms/mediasend/camerax/CameraXUtil.java index fd3454c129..ed6c2cd17a 100644 --- a/src/org/thoughtcrime/securesms/mediasend/camerax/CameraXUtil.java +++ b/src/org/thoughtcrime/securesms/mediasend/camerax/CameraXUtil.java @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.mediasend.camerax; +import android.annotation.TargetApi; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder; @@ -7,6 +8,7 @@ import android.graphics.Matrix; import android.graphics.Rect; import android.hardware.Camera; import android.os.Build; +import android.util.Rational; import android.util.Size; import androidx.annotation.NonNull; @@ -75,6 +77,17 @@ public class CameraXUtil { : ImageCapture.CaptureMode.MIN_LATENCY; } + @TargetApi(21) + public static @NonNull Size buildResolutionForRatio(int longDimension, @NonNull Rational ratio, boolean isPortrait) { + int shortDimension = longDimension * ratio.getDenominator() / ratio.getNumerator(); + + if (isPortrait) { + return new Size(shortDimension, longDimension); + } else { + return new Size(longDimension, shortDimension); + } + } + private static byte[] transformByteArray(@NonNull byte[] data, @Nullable Rect cropRect, int rotation, boolean flip) throws IOException { Stopwatch stopwatch = new Stopwatch("transform"); Bitmap in;