From 412dc2ddf4ec8b2626c0a351f6f89b00d8ab16ec Mon Sep 17 00:00:00 2001 From: xulihang Date: Thu, 17 Feb 2022 16:46:18 +0800 Subject: [PATCH 1/3] fix: switch width and height of target resolution if portrait for Android --- .../main/java/com/mrousavy/camera/CameraView.kt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/android/src/main/java/com/mrousavy/camera/CameraView.kt b/android/src/main/java/com/mrousavy/camera/CameraView.kt index 16eb4dcdec..30b740218b 100644 --- a/android/src/main/java/com/mrousavy/camera/CameraView.kt +++ b/android/src/main/java/com/mrousavy/camera/CameraView.kt @@ -410,9 +410,19 @@ class CameraView(context: Context, private val frameProcessorThread: ExecutorSer // User has selected a custom format={}. Use that val format = DeviceFormat(format!!) Log.i(TAG, "Using custom format - photo: ${format.photoSize}, video: ${format.videoSize} @ $fps FPS") - previewBuilder.setTargetResolution(format.videoSize) + + val targetPreviewResolution:Size + if (getDisplay().rotation == Surface.ROTATION_0) { + val newWidth = format.videoSize.height + val newHeight = format.videoSize.width + targetPreviewResolution = Size(newWidth, newHeight) + } else { + targetPreviewResolution = Size(format.videoSize.width, format.videoSize.height) + } + + previewBuilder.setTargetResolution(targetPreviewResolution) imageCaptureBuilder.setTargetResolution(format.photoSize) - imageAnalysisBuilder.setTargetResolution(format.videoSize) + imageAnalysisBuilder.setTargetResolution(targetPreviewResolution) // TODO: Ability to select resolution exactly depending on format? Just like on iOS... when (min(format.videoSize.height, format.videoSize.width)) { From a5789f9883975230bc9463a5d5af5b3d3f22599d Mon Sep 17 00:00:00 2001 From: xulihang Date: Thu, 17 Feb 2022 16:57:14 +0800 Subject: [PATCH 2/3] add missing import --- android/src/main/java/com/mrousavy/camera/CameraView.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/android/src/main/java/com/mrousavy/camera/CameraView.kt b/android/src/main/java/com/mrousavy/camera/CameraView.kt index 30b740218b..c7df436704 100644 --- a/android/src/main/java/com/mrousavy/camera/CameraView.kt +++ b/android/src/main/java/com/mrousavy/camera/CameraView.kt @@ -8,6 +8,7 @@ import android.content.res.Configuration import android.hardware.camera2.* import android.util.Log import android.util.Range +import android.util.Size import android.view.* import android.view.View.OnTouchListener import android.widget.FrameLayout From ee6eef23c5e2228c1c9135af40bc464280c40177 Mon Sep 17 00:00:00 2001 From: xulihang Date: Mon, 21 Feb 2022 13:34:30 +0800 Subject: [PATCH 3/3] use orientation instead of rotation --- .../java/com/mrousavy/camera/CameraView.kt | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/android/src/main/java/com/mrousavy/camera/CameraView.kt b/android/src/main/java/com/mrousavy/camera/CameraView.kt index c7df436704..2378428f89 100644 --- a/android/src/main/java/com/mrousavy/camera/CameraView.kt +++ b/android/src/main/java/com/mrousavy/camera/CameraView.kt @@ -411,19 +411,15 @@ class CameraView(context: Context, private val frameProcessorThread: ExecutorSer // User has selected a custom format={}. Use that val format = DeviceFormat(format!!) Log.i(TAG, "Using custom format - photo: ${format.photoSize}, video: ${format.videoSize} @ $fps FPS") - - val targetPreviewResolution:Size - if (getDisplay().rotation == Surface.ROTATION_0) { - val newWidth = format.videoSize.height - val newHeight = format.videoSize.width - targetPreviewResolution = Size(newWidth, newHeight) - } else { - targetPreviewResolution = Size(format.videoSize.width, format.videoSize.height) + val videoSize:Size + if (context.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) { + videoSize = Size(format.videoSize.height, format.videoSize.width) + }else { + videoSize = format.videoSize } - - previewBuilder.setTargetResolution(targetPreviewResolution) + previewBuilder.setTargetResolution(videoSize) imageCaptureBuilder.setTargetResolution(format.photoSize) - imageAnalysisBuilder.setTargetResolution(targetPreviewResolution) + imageAnalysisBuilder.setTargetResolution(videoSize) // TODO: Ability to select resolution exactly depending on format? Just like on iOS... when (min(format.videoSize.height, format.videoSize.width)) {