fix getting video quality

This commit is contained in:
darthpaul 2022-07-13 02:13:02 +01:00
parent 7a55969e6d
commit 6c1ccd8db7
2 changed files with 16 additions and 13 deletions

View File

@ -1,7 +1,7 @@
package com.simplemobiletools.camera.helpers package com.simplemobiletools.camera.helpers
import android.util.Log import android.util.Log
import androidx.camera.core.Camera import androidx.appcompat.app.AppCompatActivity
import androidx.camera.core.CameraSelector import androidx.camera.core.CameraSelector
import androidx.camera.lifecycle.ProcessCameraProvider import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.camera.video.Quality 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.CameraSelectorVideoQualities
import com.simplemobiletools.camera.models.VideoQuality import com.simplemobiletools.camera.models.VideoQuality
class VideoQualityManager(private val config: Config) { class VideoQualityManager(
private val activity: AppCompatActivity,
private val config: Config,
) {
companion object { companion object {
private const val TAG = "VideoQualityHelper" private const val TAG = "VideoQualityHelper"
@ -21,12 +24,11 @@ class VideoQualityManager(private val config: Config) {
private val videoQualities = mutableListOf<CameraSelectorVideoQualities>() private val videoQualities = mutableListOf<CameraSelectorVideoQualities>()
fun initSupportedQualities( fun initSupportedQualities(cameraProvider: ProcessCameraProvider) {
cameraProvider: ProcessCameraProvider,
camera: Camera,
) {
if (videoQualities.isEmpty()) { if (videoQualities.isEmpty()) {
for (camSelector in CAMERA_SELECTORS) { for (camSelector in CAMERA_SELECTORS) {
cameraProvider.unbindAll()
val camera = cameraProvider.bindToLifecycle(activity, camSelector)
try { try {
if (cameraProvider.hasCamera(camSelector)) { if (cameraProvider.hasCamera(camSelector)) {
QualitySelector.getSupportedQualities(camera.cameraInfo) QualitySelector.getSupportedQualities(camera.cameraInfo)

View File

@ -58,7 +58,7 @@ class CameraXPreview(
private val displayManager = activity.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager private val displayManager = activity.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
private val mediaSoundHelper = MediaSoundHelper() private val mediaSoundHelper = MediaSoundHelper()
private val windowMetricsCalculator = WindowMetricsCalculator.getOrCreate() private val windowMetricsCalculator = WindowMetricsCalculator.getOrCreate()
private val videoQualityManager = VideoQualityManager(config) private val videoQualityManager = VideoQualityManager(activity, config)
private val imageQualityManager = ImageQualityManager(activity) private val imageQualityManager = ImageQualityManager(activity)
private val exifRemover = ExifRemover(contentResolver) private val exifRemover = ExifRemover(contentResolver)
@ -110,10 +110,13 @@ class CameraXPreview(
private fun startCamera(switching: Boolean = false) { private fun startCamera(switching: Boolean = false) {
Log.i(TAG, "startCamera: ") Log.i(TAG, "startCamera: ")
imageQualityManager.initSupportedQualities() imageQualityManager.initSupportedQualities()
val cameraProviderFuture = ProcessCameraProvider.getInstance(activity) val cameraProviderFuture = ProcessCameraProvider.getInstance(activity)
cameraProviderFuture.addListener({ cameraProviderFuture.addListener({
try { try {
cameraProvider = cameraProviderFuture.get() val provider = cameraProviderFuture.get()
cameraProvider = provider
videoQualityManager.initSupportedQualities(provider)
bindCameraUseCases() bindCameraUseCases()
setupCameraObservers() setupCameraObservers()
} catch (e: Exception) { } catch (e: Exception) {
@ -143,9 +146,7 @@ class CameraXPreview(
cameraSelector, cameraSelector,
preview, preview,
captureUseCase, captureUseCase,
).also { )
videoQualityManager.initSupportedQualities(cameraProvider, it)
}
preview?.setSurfaceProvider(previewView.surfaceProvider) preview?.setSurfaceProvider(previewView.surfaceProvider)
setupZoomAndFocus() setupZoomAndFocus()
@ -188,7 +189,7 @@ class CameraXPreview(
} }
private fun buildImageCapture(aspectRatio: Int, rotation: Int): ImageCapture { private fun buildImageCapture(aspectRatio: Int, rotation: Int): ImageCapture {
return ImageCapture.Builder() return Builder()
.setCaptureMode(CAPTURE_MODE_MAXIMIZE_QUALITY) .setCaptureMode(CAPTURE_MODE_MAXIMIZE_QUALITY)
.setFlashMode(flashMode) .setFlashMode(flashMode)
.setJpegQuality(config.photoQuality) .setJpegQuality(config.photoQuality)
@ -362,7 +363,7 @@ class CameraXPreview(
if (bitmap != null) { if (bitmap != null) {
listener.onImageCaptured(bitmap) listener.onImageCaptured(bitmap)
} else { } else {
cameraErrorHandler.handleImageCaptureError(ImageCapture.ERROR_CAPTURE_FAILED) cameraErrorHandler.handleImageCaptureError(ERROR_CAPTURE_FAILED)
} }
} }