afriscic / BarcodeScanning.Native.Maui

Barcode scanning library for .NET MAUI
https://www.nuget.org/packages/BarcodeScanning.Native.Maui
MIT License
173 stars 32 forks source link

Java.Lang.IllegalStateException: No supported surface combination is found for camera device #94

Open phillippschmedt opened 2 weeks ago

phillippschmedt commented 2 weeks ago

Thanks a lot for this great library.

We see the following stack trace on some Android 11 device. Unfortunately we can not reproduce it directly. Is there any chance we can fix this with just the strack trace?

androidx.camera.lifecycle.LifecycleCameraRepository.bindToLifecycleCamera LifecycleCameraRepository.java, line 302 Java.Lang.IllegalStateException: No supported surface combination is found for camera device - Id : 0. May be attempting to bind too many use cases. Existing surfaces: [AttachedSurfaceInfo{surfaceConfig=SurfaceConfig{configType=PRIV, configSize=PREVIEW, streamUseCase=0}, imageFormat=34, size=960x720, dynamicRange=DynamicRange@c9a79ea{encoding=SDR, bitDepth=8}, captureTypes=[PREVIEW], implementationOptions=androidx.camera.camera2.impl.Camera2ImplConfig@b861a1d, targetFrameRate=null}, AttachedSurfaceInfo{surfaceConfig=SurfaceConfig{configType=YUV, configSize=PREVIEW, streamUseCase=0}, imageFormat=35, size=1280x720, dynamicRange=DynamicRange@c9a79ea{encoding=SDR, bitDepth=8}, captureTypes=[IMAGE_ANALYSIS], implementationOptions=androidx.camera.camera2.impl.Camera2ImplConfig@82aea60, targetFrameRate=null}] New configs: [androidx.camera.core.impl.PreviewConfig@252d642, androidx.camera.core.impl.ImageAnalysisConfig@7bc148e]

Java.Interop.JniEnvironment.InstanceMethods.CallVoidMethod(JniObjectReference , JniMethodInfo , JniArgumentValue* ) Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeAbstractVoidMethod(String , IJavaPeerable , JniArgumentValue* ) AndroidX.Camera.View.LifecycleCameraController.BindToLifecycle(ILifecycleOwner ) BarcodeScanning.CameraManager.Start() BarcodeScanning.CameraManager.HandleCameraEnabled() BarcodeScanning.CameraViewHandler.<>c.<.cctor>b__6_4(CameraViewHandler handler, CameraView virtualView) Microsoft.Maui.PropertyMapper2.<>c__DisplayClass5_0[[BarcodeScanning.CameraView, BarcodeScanning.Native.Maui, Version=1.5.7.0, Culture=neutral, PublicKeyToken=null],[BarcodeScanning.CameraViewHandler, BarcodeScanning.Native.Maui, Version=1.5.7.0, Culture=neutral, PublicKeyToken=null]].b0(IElementHandler h, IElement v) Microsoft.Maui.PropertyMapper.UpdatePropertyCore(String key, IElementHandler viewHandler, IElement virtualView) Microsoft.Maui.PropertyMapper.UpdateProperty(IElementHandler viewHandler, IElement virtualView, String property) Microsoft.Maui.Handlers.ElementHandler.UpdateValue(String property) Microsoft.Maui.Controls.Element.UpdateHandlerValue(String property) Microsoft.Maui.Controls.VisualElement.UpdateHandlerValue(String property) Microsoft.Maui.Controls.Element.OnPropertyChanged(String propertyName) Microsoft.Maui.Controls.BindableObject.SetValueActual(BindableProperty property, BindablePropertyContext context, Object value, Boolean currentlyApplying, SetValueFlags attributes, SetterSpecificity specificity, Boolean silent) Microsoft.Maui.Controls.BindableObject.SetValueCore(BindableProperty property, Object value, SetValueFlags attributes, SetValuePrivateFlags privateAttributes, SetterSpecificity specificity) Microsoft.Maui.Controls.BindingExpression.ApplyCore(Object sourceObject, BindableObject target, BindableProperty property, Boolean fromTarget, SetterSpecificity specificity) Microsoft.Maui.Controls.BindingExpression.Apply(Boolean fromTarget) Microsoft.Maui.Controls.BindingExpression.BindingExpressionPart.b50_0() Microsoft.Maui.Controls.DispatcherExtensions.DispatchIfRequired(IDispatcher dispatcher, Action action) Microsoft.Maui.Controls.BindingExpression.BindingExpressionPart.PropertyChanged(Object sender, PropertyChangedEventArgs args) Microsoft.Maui.Controls.BindingExpression.WeakPropertyChangedProxy.OnPropertyChanged(Object sender, PropertyChangedEventArgs e) Prism.Mvvm.BindableBase.OnPropertyChanged(PropertyChangedEventArgs args) Prism.Mvvm.BindableBase.RaisePropertyChanged(String propertyName) MyApp.ViewModels.QRCodeScanPageViewModel.acm() Microsoft.Maui.ApplicationModel.MainThread.BeginInvokeOnMainThread(Action ) MyApp.Core.MainThreadDispatcher.BeginInvokeOnMainThread(Action action) MyApp.ViewModels.QRCodeScanPageViewModel.set_IsCameraEnabled(Boolean value) MyApp.ViewModels.QRCodeScanPageViewModel.OnNavigatedToAsync(INavigationParameters parameters) MyApp.ViewModels.BasePageViewModel.c.b.MoveNext() MyApp.Errors.TaskExecutor.RunSafeAsync(Func1 callback, Func2 onError) java.lang.IllegalStateException: The selected camera does not support the enabled use cases. Please disable use case and/or select a different camera. e.g. #setVideoCaptureEnabled(false) androidx.camera.view.LifecycleCameraController.startCamera LifecycleCameraController.java:148 androidx.camera.view.CameraController.startCameraAndTrackStates CameraController.java:1933 androidx.camera.view.CameraController.startCameraAndTrackStates CameraController.java:1922 androidx.camera.view.LifecycleCameraController.bindToLifecycle LifecycleCameraController.java:97 mono.java.lang.RunnableImplementor.n_run(Native Method) mono.java.lang.RunnableImplementor.run RunnableImplementor.java:31 android.os.Handler.handleCallback Handler.java:938 android.os.Handler.dispatchMessage Handler.java:99 android.os.Looper.loop Looper.java:223 android.app.ActivityThread.main ActivityThread.java:7723 java.lang.reflect.Method.invoke(Native Method) com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run RuntimeInit.java:612 com.android.internal.os.ZygoteInit.main ZygoteInit.java:997 Caused by: java.lang.IllegalArgumentException: No supported surface combination is found for camera device - Id : 0. May be attempting to bind too many use cases. Existing surfaces: [AttachedSurfaceInfo{surfaceConfig=SurfaceConfig{configType=PRIV, configSize=PREVIEW, streamUseCase=0}, imageFormat=34, size=960x720, dynamicRange=DynamicRange@c9a79ea{encoding=SDR, bitDepth=8}, captureTypes=[PREVIEW], implementationOptions=androidx.camera.camera2.impl.Camera2ImplConfig@b861a1d, targetFrameRate=null}, AttachedSurfaceInfo{surfaceConfig=SurfaceConfig{configType=YUV, configSize=PREVIEW, streamUseCase=0}, imageFormat=35, size=1280x720, dynamicRange=DynamicRange@c9a79ea{encoding=SDR, bitDepth=8}, captureTypes=[IMAGE_ANALYSIS], implementationOptions=androidx.camera.camera2.impl.Camera2ImplConfig@82aea60, targetFrameRate=null}] New configs: [androidx.camera.core.impl.PreviewConfig@252d642, androidx.camera.core.impl.ImageAnalysisConfig@7bc148e] androidx.camera.lifecycle.LifecycleCameraRepository.bindToLifecycleCamera LifecycleCameraRepository.java:302 androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle ProcessCameraProvider.java:652 androidx.camera.lifecycle.ProcessCameraProvider.bindToLifecycle ProcessCameraProvider.java:415 androidx.camera.view.ProcessCameraProviderWrapperImpl.bindToLifecycle ProcessCameraProviderWrapperImpl.java:67 androidx.camera.view.LifecycleCameraController.startCamera LifecycleCameraController.java:141 ... 12 more`

Thanks a lot!

afriscic commented 2 days ago

Hello. Sorry for slow response. Hm, seems to be a issue related to specific device. I've done some code refactoring on Android so I hope this gets fixed on next release.