From 6c1ccd8db7dc2df5890b7927f7889ca01d162d91 Mon Sep 17 00:00:00 2001 From: darthpaul Date: Wed, 13 Jul 2022 02:13:02 +0100 Subject: [PATCH] fix getting video quality --- .../camera/helpers/VideoQualityManager.kt | 14 ++++++++------ .../camera/implementations/CameraXPreview.kt | 15 ++++++++------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt index 7f2962ff..78e4feae 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/helpers/VideoQualityManager.kt @@ -1,7 +1,7 @@ package com.simplemobiletools.camera.helpers import android.util.Log -import androidx.camera.core.Camera +import androidx.appcompat.app.AppCompatActivity import androidx.camera.core.CameraSelector import androidx.camera.lifecycle.ProcessCameraProvider import androidx.camera.video.Quality @@ -11,7 +11,10 @@ import com.simplemobiletools.camera.extensions.toVideoQuality import com.simplemobiletools.camera.models.CameraSelectorVideoQualities import com.simplemobiletools.camera.models.VideoQuality -class VideoQualityManager(private val config: Config) { +class VideoQualityManager( + private val activity: AppCompatActivity, + private val config: Config, +) { companion object { private const val TAG = "VideoQualityHelper" @@ -21,12 +24,11 @@ class VideoQualityManager(private val config: Config) { private val videoQualities = mutableListOf() - fun initSupportedQualities( - cameraProvider: ProcessCameraProvider, - camera: Camera, - ) { + fun initSupportedQualities(cameraProvider: ProcessCameraProvider) { if (videoQualities.isEmpty()) { for (camSelector in CAMERA_SELECTORS) { + cameraProvider.unbindAll() + val camera = cameraProvider.bindToLifecycle(activity, camSelector) try { if (cameraProvider.hasCamera(camSelector)) { QualitySelector.getSupportedQualities(camera.cameraInfo) diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt b/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt index 5cb1536b..8462ed03 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/implementations/CameraXPreview.kt @@ -58,7 +58,7 @@ class CameraXPreview( private val displayManager = activity.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager private val mediaSoundHelper = MediaSoundHelper() private val windowMetricsCalculator = WindowMetricsCalculator.getOrCreate() - private val videoQualityManager = VideoQualityManager(config) + private val videoQualityManager = VideoQualityManager(activity, config) private val imageQualityManager = ImageQualityManager(activity) private val exifRemover = ExifRemover(contentResolver) @@ -110,10 +110,13 @@ class CameraXPreview( private fun startCamera(switching: Boolean = false) { Log.i(TAG, "startCamera: ") imageQualityManager.initSupportedQualities() + val cameraProviderFuture = ProcessCameraProvider.getInstance(activity) cameraProviderFuture.addListener({ try { - cameraProvider = cameraProviderFuture.get() + val provider = cameraProviderFuture.get() + cameraProvider = provider + videoQualityManager.initSupportedQualities(provider) bindCameraUseCases() setupCameraObservers() } catch (e: Exception) { @@ -143,9 +146,7 @@ class CameraXPreview( cameraSelector, preview, captureUseCase, - ).also { - videoQualityManager.initSupportedQualities(cameraProvider, it) - } + ) preview?.setSurfaceProvider(previewView.surfaceProvider) setupZoomAndFocus() @@ -188,7 +189,7 @@ class CameraXPreview( } private fun buildImageCapture(aspectRatio: Int, rotation: Int): ImageCapture { - return ImageCapture.Builder() + return Builder() .setCaptureMode(CAPTURE_MODE_MAXIMIZE_QUALITY) .setFlashMode(flashMode) .setJpegQuality(config.photoQuality) @@ -362,7 +363,7 @@ class CameraXPreview( if (bitmap != null) { listener.onImageCaptured(bitmap) } else { - cameraErrorHandler.handleImageCaptureError(ImageCapture.ERROR_CAPTURE_FAILED) + cameraErrorHandler.handleImageCaptureError(ERROR_CAPTURE_FAILED) } }