java.lang.IllegalArgumentException: No supported surface combination is found for camera device - Id : 0. May be attempting to bind too many use cases.
I got the same error when I tried to create imageCapture, videoCapture, mPreview or the analyzer with different settings between each other.
Try to set in the builder setting the same parameters, e.g. if you want:
setLensFacing(CameraX.LensFacing.BACK)
Set in all the setting builders the same. This can fix your error but still, I don't know if the library support this feature jet.
There is no videoCapture
usecase right now.
As mentioned in the official documentation, the available usecases are preview, analysis & image capture (and their combinations).
You are binding more UseCases than your device's camera supports. Not all devices can support two ImageAnalyzers.
Try reducing your analyzers,
CameraX.bindToLifecycle(lifecycleOwner, mPreview, imageCapture or videoCapture)
I have tested with many devices, so far, among the devices that I tested, only Google Pixel 1 works with three analyzers.
To suggest a hack, remove imageCapture analyzer, try to get images from preview for imageCapture and use videoCapture.
Hope it helps.
A workaround is to bind Preview with VideoCapture, and Preview with ImageCapture separately. Binding Preview, ImageCapture and VideoCapture appears to be an issue on a few devices currently. When switching between the two be careful to unbindAll first.
This may be because the VideoCapture UseCase is not officially supported yet, as of 1.0.0-Beta10.
fun startVideoCapture() {
...
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelected,
previewUseCase,
videoCaptureUseCase
)
}
fun startImageCapture() {
...
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelected,
previewUseCase,
imageCaptureUseCase
)
}
I got the same error while popping fragment with camera view from backstack, I fixed it by unbinding all analysers when view exits.
CameraX.unbindAll()
As suggested here.