I am migrating to cameraX and faced the exception
androidx.camera.core.InitializationException: java.lang.RuntimeException: Error retrieving camcorder profile params
The error-log states that this error is thrown when calling
cameraProvider = cameraProviderFuture.get()
I cannot reproduce this error on any device.
I initialize the Camera here:
private fun initCameraProvider() {
val cameraProviderFuture = ProcessCameraProvider.getInstance(this) //Error is thrown here
cameraProviderFuture.addListener(Runnable {
cameraProvider = cameraProviderFuture.get()
val metrics = DisplayMetrics().also {
previewView?.display?.getRealMetrics(it)
}
val screenAspectRatio = ImageUtils.aspectRatio(metrics.widthPixels, metrics.heightPixels)
val rotation = previewView?.display?.rotation ?: 0
preview = Preview.Builder()
.setTargetAspectRatio(screenAspectRatio)
.setTargetRotation(rotation)
.build()
analyzer = BarcodeAnalyzer(previewView, overlay) { onSuccess(it) }
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
imageAnalyzer = ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.setTargetAspectRatio(screenAspectRatio)
.build()
.also {
it.setAnalyzer(cameraExecutor, analyzer)
}
val useCaseGroup = UseCaseGroup.Builder()
.addUseCase(preview)
.addUseCase(imageAnalyzer)
.build()
try {
cameraProvider?.unbindAll()
preview.setSurfaceProvider(previewView?.surfaceProvider)
camera = cameraProvider?.bindToLifecycle(this, cameraSelector, useCaseGroup)
} catch (exc: Exception) {
Log.e(TAG, "Use case binding failed", exc)
}
}, ContextCompat.getMainExecutor(this))
}