Pick camera resolution based on screen resolution.

This commit is contained in:
Greyson Parrelli 2019-10-22 10:16:14 -04:00
parent a7cc5bdc5e
commit 350ca059b9
2 changed files with 10 additions and 2 deletions

View File

@ -19,6 +19,7 @@ package org.thoughtcrime.securesms.mediasend.camerax;
import android.Manifest.permission; import android.Manifest.permission;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.res.Resources;
import android.graphics.Matrix; import android.graphics.Matrix;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.SurfaceTexture; import android.graphics.SurfaceTexture;
@ -231,11 +232,13 @@ final class CameraXModule {
// Begin Signal Custom Code Block // Begin Signal Custom Code Block
Rational targetAspectRatio; Rational targetAspectRatio;
int resolution = CameraXUtil.getIdealResolution(Resources.getSystem().getDisplayMetrics().widthPixels, Resources.getSystem().getDisplayMetrics().heightPixels);
Log.i(TAG, "Ideal resolution: " + resolution);
if (getCaptureMode() == CameraXView.CaptureMode.IMAGE) { if (getCaptureMode() == CameraXView.CaptureMode.IMAGE) {
mImageCaptureConfigBuilder.setTargetResolution(CameraXUtil.buildResolutionForRatio(1920, ASPECT_RATIO_4_3, isDisplayPortrait)); mImageCaptureConfigBuilder.setTargetResolution(CameraXUtil.buildResolutionForRatio(resolution, ASPECT_RATIO_4_3, isDisplayPortrait));
targetAspectRatio = isDisplayPortrait ? ASPECT_RATIO_3_4 : ASPECT_RATIO_4_3; targetAspectRatio = isDisplayPortrait ? ASPECT_RATIO_3_4 : ASPECT_RATIO_4_3;
} else { } else {
mImageCaptureConfigBuilder.setTargetResolution(CameraXUtil.buildResolutionForRatio(1920, ASPECT_RATIO_16_9, isDisplayPortrait)); mImageCaptureConfigBuilder.setTargetResolution(CameraXUtil.buildResolutionForRatio(resolution, ASPECT_RATIO_16_9, isDisplayPortrait));
targetAspectRatio = isDisplayPortrait ? ASPECT_RATIO_9_16 : ASPECT_RATIO_16_9; targetAspectRatio = isDisplayPortrait ? ASPECT_RATIO_9_16 : ASPECT_RATIO_16_9;
} }
mImageCaptureConfigBuilder.setCaptureMode(CameraXUtil.getOptimalCaptureMode()); mImageCaptureConfigBuilder.setCaptureMode(CameraXUtil.getOptimalCaptureMode());

View File

@ -101,6 +101,11 @@ public class CameraXUtil {
: ImageCapture.CaptureMode.MIN_LATENCY; : ImageCapture.CaptureMode.MIN_LATENCY;
} }
public static int getIdealResolution(int displayWidth, int displayHeight) {
int maxDisplay = Math.max(displayWidth, displayHeight);
return Math.max(maxDisplay, 1920);
}
@TargetApi(21) @TargetApi(21)
public static @NonNull Size buildResolutionForRatio(int longDimension, @NonNull Rational ratio, boolean isPortrait) { public static @NonNull Size buildResolutionForRatio(int longDimension, @NonNull Rational ratio, boolean isPortrait) {
int shortDimension = longDimension * ratio.getDenominator() / ratio.getNumerator(); int shortDimension = longDimension * ratio.getDenominator() / ratio.getNumerator();