react-native-vision-camera
react-native-vision-camera copied to clipboard
🐛 Android 3.9.0-beta.3 codeScanner crash still
What's happening?
I'm dealing with this error non stop since version 3.x. On 3.8.1 I found a workaround putting IsActive false immediately in the the codeScanner callback and destroying the view with a setTimeout (showCamera = false). Without doing this the camera would crash with an ML kit error very often.
On 3.8.1 I had some black screen issuers reports, so I decided to try this 3.9.0-beta.3 version. Crash on code scanner is back on with both methods: deactivating first and destroying the view with a delay or destroy directly on receiving the code scanner. The error in the log is different tough. No more ML kit involved and it's also less frequent (at least on my device).
What I noticed is that the crashes happen while trying to dismiss the camera in the codeScanner callback, If I omit the closing camera code it never crashes (as the example app) neither dismissing it with a custom button. Basically it's the combo: Code Scanned Event + Dismiss camera that goes wrong.
Reproduceable Code
{showCamera && authorizationCamera == "granted" && !!currentCamera && (
<View className='w-full h-full'>
<Camera
className='w-full h-full'
ref={camera}
device={currentCamera}
isActive={isAppForeground && isFocused}
enableZoomGesture={false}
codeScanner={codeScanner}
/>
<View className='flex-row items-center justify-around absolute bottom-2 left-0 w-full py-14 z-50'>
˙ <TouchableOpacity className="rounded-full bg-white w-14 h-14 p-2 items-center" onPress={() => onCurrentDismiss()}>
<FontIcon size={40} name="times" color={'black'} ></FontIcon>
</TouchableOpacity>
</View>
</View>
Relevant log output
8545-8677 Persistent...ureSession com.myapp I Creating new device...
2024-02-14 08:58:57.751 8545-8677 CameraManager com.myapp I Camera #0: Opening...
2024-02-14 08:58:57.752 8545-9259 DynamiteModule com.myapp I Considering local module com.google.mlkit.dynamite.barcode:10000 and remote module com.google.mlkit.dynamite.barcode:0
2024-02-14 08:58:57.752 8545-9259 DynamiteModule com.myapp I Selected local version of com.google.mlkit.dynamite.barcode
2024-02-14 08:58:57.756 8545-8545 CameraSession com.myapp I PreviewView Surface created! Surface(name=null)/@0xf7c8df0
2024-02-14 08:58:57.756 8545-8545 CameraSession com.myapp I Setting Preview Output...
2024-02-14 08:58:57.756 8545-8545 CameraSession com.myapp I PreviewView Surface updated! Surface(name=null)/@0xf7c8df0 1240 x 2205
2024-02-14 08:58:57.802 8545-8680 CameraDevices com.myapp I Camera #0 is now unavailable.
2024-02-14 08:58:57.804 8545-8677 CameraSession com.myapp I configure { ... }: Waiting for lock...
2024-02-14 08:58:57.804 8545-8678 CameraManager com.myapp I Camera #0: Opened!
2024-02-14 08:58:57.804 8545-8677 CameraSession com.myapp I configure { ... }: Waiting for lock...
2024-02-14 08:58:57.804 8545-8677 Persistent...ureSession com.myapp I Creating new session...
2024-02-14 08:58:57.807 8545-8677 CreateCaptureSession com.myapp I Camera #0: Creating Capture Session #7... (Hardware Level: 1 | Outputs: [VIDEO (1280 x 720 CodeScanner for [QR] (35))])
2024-02-14 08:58:57.807 8545-8677 SurfaceOutput com.myapp I Using optimized stream use case 3 for VIDEO output.
2024-02-14 08:58:57.807 8545-8677 CreateCaptureSession com.myapp I Using new API (>=28)
2024-02-14 08:58:57.827 8545-8678 CreateCaptureSession com.myapp I Camera #0: Successfully created CameraCaptureSession #7!
2024-02-14 08:58:57.828 8545-8677 Persistent...ureSession com.myapp D Stopping repeating request...
2024-02-14 08:58:57.828 8545-8677 Persistent...ureSession com.myapp D Configure() done! isActive: false, ID: 0, device: android.hardware.camera2.impl.CameraDeviceImpl@80c28f, session: android.hardware.camera2.impl.CameraCaptureSessionImpl@bb4991c
2024-02-14 08:58:57.828 8545-8677 CameraSession com.myapp I configure { ... }: Completed CameraSession Configuration! (isActive: false, isRunning: false)
2024-02-14 08:58:57.828 8545-8677 CameraView com.myapp I invokeOnInitialized()
2024-02-14 08:58:57.830 8545-8677 CameraSession com.myapp I configure { ... }: Updating CameraSession Configuration... Difference(deviceChanged=false, outputsChanged=false, sidePropsChanged=false, isActiveChanged=true)
2024-02-14 08:58:57.830 8545-8677 Persistent...ureSession com.myapp D --> setIsActive(false)
2024-02-14 08:58:57.831 8545-8677 Persistent...ureSession com.myapp D Configure() with isActive: false, ID: 0, device: android.hardware.camera2.impl.CameraDeviceImpl@80c28f, session: android.hardware.camera2.impl.CameraCaptureSessionImpl@bb4991c
2024-02-14 08:58:57.832 8545-8677 Persistent...ureSession com.myapp D Stopping repeating request...
2024-02-14 08:58:57.832 8545-8677 Persistent...ureSession com.myapp D Configure() done! isActive: false, ID: 0, device: android.hardware.camera2.impl.CameraDeviceImpl@80c28f, session: android.hardware.camera2.impl.CameraCaptureSessionImpl@bb4991c
2024-02-14 08:58:57.832 8545-8677 CameraSession com.myapp I configure { ... }: Completed CameraSession Configuration! (isActive: true, isRunning: false)
2024-02-14 08:58:57.832 8545-8677 CameraSession com.myapp I configure { ... }: Updating CameraSession Configuration... Difference(deviceChanged=false, outputsChanged=true, sidePropsChanged=true, isActiveChanged=true)
2024-02-14 08:58:57.832 8545-8677 CameraSession com.myapp I Destroying previous outputs...
2024-02-14 08:58:57.832 8545-8677 SurfaceOutput com.myapp I Closing BarcodeScanner..
2024-02-14 08:58:57.834 8545-8677 CameraSession com.myapp I Creating outputs for Camera #0...
2024-02-14 08:58:57.841 8545-8677 CameraSession com.myapp I Adding 1920x1080 Preview Output...
2024-02-14 08:58:57.841 8545-8545 PreviewView com.myapp I Setting PreviewView Surface Size to 1920x1080...
2024-02-14 08:58:57.842 8545-8545 SurfaceHolder com.myapp I Resizing SurfaceHolder to 1920 x 1080...
2024-02-14 08:58:57.853 8545-8545 CameraSession com.myapp I PreviewView Surface updated! Surface(name=null)/@0xf7c8df0 1920 x 1080
2024-02-14 08:58:57.853 8545-8545 SurfaceHolder com.myapp I Resized SurfaceHolder to 1920 x 1080!
2024-02-14 08:58:57.859 8545-8677 CameraSession com.myapp I Adding 1280x720 CodeScanner Output in YUV_420_888...
2024-02-14 08:58:57.860 8545-9206 DynamiteModule com.myapp I Considering local module com.google.mlkit.dynamite.barcode:10000 and remote module com.google.mlkit.dynamite.barcode:0
2024-02-14 08:58:57.860 8545-9206 DynamiteModule com.myapp I Selected local version of com.google.mlkit.dynamite.barcode
2024-02-14 08:58:57.860 8545-8677 Persistent...ureSession com.myapp D --> setOutputs([PREVIEW (1920 x 1080), VIDEO (1280 x 720 CodeScanner for [QR] (35))])
2024-02-14 08:58:57.860 8545-8677 CameraSession com.myapp I Successfully configured Session with 2 outputs for Camera #0!
2024-02-14 08:58:57.860 8545-8677 Persistent...ureSession com.myapp D --> setRepeatingRequest(...)
2024-02-14 08:58:57.860 8545-8677 Persistent...ureSession com.myapp D --> setIsActive(true)
2024-02-14 08:58:57.860 8545-8677 Persistent...ureSession com.myapp D Configure() with isActive: true, ID: 0, device: android.hardware.camera2.impl.CameraDeviceImpl@80c28f, session: null
2024-02-14 08:58:57.860 8545-8677 Persistent...ureSession com.myapp I Creating new session...
2024-02-14 08:58:57.862 8545-8677 CreateCaptureSession com.myapp I Camera #0: Creating Capture Session #8... (Hardware Level: 1 | Outputs: [PREVIEW (1920 x 1080), VIDEO (1280 x 720 CodeScanner for [QR] (35))])
2024-02-14 08:58:57.863 8545-8677 SurfaceOutput com.myapp I Using optimized stream use case 1 for PREVIEW output.
2024-02-14 08:58:57.863 8545-8677 SurfaceOutput com.myapp I Using optimized stream use case 3 for VIDEO output.
2024-02-14 08:58:57.863 8545-8677 CreateCaptureSession com.myapp I Using new API (>=28)
2024-02-14 08:58:57.863 8545-8678 CreateCaptureSession com.myapp I Camera #0: CameraCaptureSession #7 has been closed.
2024-02-14 08:58:57.863 8545-8678 Persistent...ureSession com.myapp I Session android.hardware.camera2.impl.CameraCaptureSessionImpl@bb4991c closed!
2024-02-14 08:58:57.942 8545-8572 BpBinder com.myapp I onLastStrongRef automatically unlinking death recipients:
2024-02-14 08:58:57.943 8545-8678 CreateCaptureSession com.myapp I Camera #0: Successfully created CameraCaptureSession #8!
2024-02-14 08:58:57.943 8545-8677 Persistent...ureSession com.myapp D Updating repeating request...
2024-02-14 08:58:57.954 8545-8677 Persistent...ureSession com.myapp D Configure() done! isActive: true, ID: 0, device: android.hardware.camera2.impl.CameraDeviceImpl@80c28f, session: android.hardware.camera2.impl.CameraCaptureSessionImpl@15ef2a1
2024-02-14 08:58:57.954 8545-8677 CameraSession com.myapp I configure { ... }: Completed CameraSession Configuration! (isActive: true, isRunning: true)
2024-02-14 08:58:57.955 8545-8677 CameraView com.myapp I invokeOnStarted()
2024-02-14 08:58:58.083 8545-9215 tflite com.myapp I Replacing 43 out of 43 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 1 partitions for the whole graph.
2024-02-14 08:58:58.084 8545-9215 tflite com.myapp I Replacing 42 out of 47 node(s) with delegate (TfLiteXNNPackDelegate) node, yielding 11 partitions for the whole graph.
2024-02-14 08:58:58.084 8545-9215 native com.myapp I I0000 00:00:1707897538.084909 9215 oned_decoder_client.cc:695] barhopper::deep_learning::OnedDecoderClient is created successfully.
2024-02-14 08:58:58.337 8545-8545 CameraSession com.myapp I PreviewView Surface destroyed! Surface(name=null)/@0xf7c8df0
2024-02-14 08:58:58.338 8545-8545 CameraSession com.myapp I Destroying Preview Output...
2024-02-14 08:58:58.338 8545-8545 CameraSession com.myapp I configure { ... }: Waiting for lock...
2024-02-14 08:58:58.338 8545-8545 CameraSession com.myapp I configure { ... }: Updating CameraSession Configuration... Difference(deviceChanged=false, outputsChanged=true, sidePropsChanged=true, isActiveChanged=true)
2024-02-14 08:58:58.338 8545-8545 CameraSession com.myapp I Destroying previous outputs...
2024-02-14 08:58:58.338 8545-8545 SurfaceOutput com.myapp I Closing BarcodeScanner..
2024-02-14 08:58:58.339 8545-8545 CameraView com.myapp I invokeOnStopped()
2024-02-14 08:58:58.362 8545-8572 BufferQueueProducer com.myapp E [ImageReader-1280x720f23m2-8545-7](id:216100000012,api:4,p:1139,c:8545) dequeueBuffer: BufferQueue has been abandoned
2024-02-14 08:58:58.365 8545-8545 CameraSession com.myapp I Creating outputs for Camera #0...
2024-02-14 08:58:58.366 8545-8572 BufferQueueProducer com.myapp E [ImageReader-1280x720f23m2-8545-7](id:216100000012,api:4,p:1139,c:8545) queueBuffer: BufferQueue has been abandoned
2024-02-14 08:58:58.370 8545-8545 CameraSession com.myapp I Adding 1280x720 CodeScanner Output in YUV_420_888...
2024-02-14 08:58:58.371 8545-8545 Persistent...ureSession com.myapp D --> setOutputs([VIDEO (1280 x 720 CodeScanner for [QR] (35))])
2024-02-14 08:58:58.508 8545-8545 CameraSession com.myapp I Successfully configured Session with 1 outputs for Camera #0!
2024-02-14 08:58:58.508 8545-8545 Persistent...ureSession com.myapp D --> setRepeatingRequest(...)
2024-02-14 08:58:58.508 8545-8545 Persistent...ureSession com.myapp D --> setIsActive(false)
2024-02-14 08:58:58.508 8545-8545 Persistent...ureSession com.myapp D Configure() with isActive: false, ID: 0, device: android.hardware.camera2.impl.CameraDeviceImpl@80c28f, session: null
2024-02-14 08:58:58.509 8545-8545 Persistent...ureSession com.myapp I Creating new session...
2024-02-14 08:58:58.511 8545-8545 CreateCaptureSession com.myapp I Camera #0: Creating Capture Session #9... (Hardware Level: 1 | Outputs: [VIDEO (1280 x 720 CodeScanner for [QR] (35))])
2024-02-14 08:58:58.511 8545-8545 SurfaceOutput com.myapp I Using optimized stream use case 3 for VIDEO output.
2024-02-14 08:58:58.511 8545-8545 CreateCaptureSession com.myapp I Using new API (>=28)
2024-02-14 08:58:58.511 8545-8678 CreateCaptureSession com.myapp I Camera #0: CameraCaptureSession #8 has been closed.
2024-02-14 08:58:58.511 8545-8678 Persistent...ureSession com.myapp I Session android.hardware.camera2.impl.CameraCaptureSessionImpl@15ef2a1 closed!
2024-02-14 08:58:58.543 8545-9259 libc com.myapp A Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x78c1bebadc in tid 9259 (pool-23-thread-), pid 8545 (m.beesworkerapp)
2024-02-14 08:58:58.596 8545-8678 CreateCaptureSession com.myapp I Camera #0: Successfully created CameraCaptureSession #9!
2024-02-14 08:58:58.597 8545-8545 Persistent...ureSession com.myapp D Stopping repeating request...
2024-02-14 08:58:58.597 8545-8545 Persistent...ureSession com.myapp D Configure() done! isActive: false, ID: 0, device: android.hardware.camera2.impl.CameraDeviceImpl@80c28f, session: android.hardware.camera2.impl.CameraCaptureSessionImpl@5036098
2024-02-14 08:58:58.598 8545-8545 CameraSession com.myapp I configure { ... }: Completed CameraSession Configuration! (isActive: true, isRunning: false)
2024-02-14 08:58:58.598 8545-8545 CameraSession com.myapp I Preview Output destroyed!
2024-02-14 08:58:58.601 8545-8545 CameraView com.myapp I Updating CameraSession...
2024-02-14 08:58:58.602 8545-8677 CameraSession com.myapp I configure { ... }: Waiting for lock...
2024-02-14 08:58:58.602 8545-8677 CameraSession com.myapp I configure { ... }: Updating CameraSession Configuration... Difference(deviceChanged=false, outputsChanged=false, sidePropsChanged=false, isActiveChanged=true)
2024-02-14 08:58:58.602 8545-8677 Persistent...ureSession com.myapp D --> setIsActive(false)
2024-02-14 08:58:58.602 8545-8677 Persistent...ureSession com.myapp D Configure() with isActive: false, ID: 0, device: android.hardware.camera2.impl.CameraDeviceImpl@80c28f, session: android.hardware.camera2.impl.CameraCaptureSessionImpl@5036098
2024-02-14 08:58:58.602 8545-8545 CameraSession com.myapp I Closing CameraSession...
2024-02-14 08:58:58.602 8545-8677 Persistent...ureSession com.myapp D Stopping repeating request...
2024-02-14 08:58:58.603 8545-8677 Persistent...ureSession com.myapp D Configure() done! isActive: false, ID: 0, device: android.hardware.camera2.impl.CameraDeviceImpl@80c28f, session: android.hardware.camera2.impl.CameraCaptureSessionImpl@5036098
2024-02-14 08:58:58.603 8545-8677 CameraSession com.myapp I configure { ... }: Completed CameraSession Configuration! (isActive: false, isRunning: false)
2024-02-14 08:58:58.603 8545-8545 CameraSession com.myapp I Destroying session..
2024-02-14 08:58:58.675 8545-8573 BpBinder com.myapp I onLastStrongRef automatically unlinking death recipients:
2024-02-14 08:58:58.706 8545-8680 CameraDevices com.myapp I Camera #0 is now available.
2024-02-14 08:58:58.706 8545-8545 SurfaceOutput com.myapp I Closing BarcodeScanner..
2024-02-14 08:58:58.707 8545-8545 CameraSession com.myapp I CameraSession closed!
2024-02-14 08:59:47.945 9668-9668 ziparchive com.myapp W Unable to open '/data/app/~~ki1p87rcf9zuUGkT_bjH8g==/com.myapp-_n1Zzq1-PEZ3FCi95dgH1A==/base.dm': No such file or directory
2024-02-14 08:59:47.945 9668-9668 ziparchive com.myapp W Unable to open '/data/app/~~ki1p87rcf9zuUGkT_bjH8g==/com.myapp-_n1Zzq1-PEZ3FCi95dgH1A==/base.dm': No such file or directory
Camera Device
LOG {
"formats": [],
"sensorOrientation": "landscape-left",
"hardwareLevel": "full",
"maxZoom": 8,
"minZoom": 0.5490683317184448,
"maxExposure": 24,
"supportsLowLightBoost": true,
"neutralZoom": 1,
"physicalDevices": [
"wide-angle-camera",
"ultra-wide-angle-camera",
"telephoto-camera"
],
"supportsFocus": true,
"supportsRawCapture": true,
"isMultiCam": true,
"minFocusDistance": 10.500000100135805,
"minExposure": -24,
"name": "BACK (0)",
"hasFlash": true,
"hasTorch": true,
"position": "back",
"id": "0"
}
Device
Pixel 8
VisionCamera Version
3.9.0-beta.3
Can you reproduce this issue in the VisionCamera Example app?
I didn't try (⚠️ your issue might get ignored & closed if you don't try this)
Additional information
- [ ] I am using Expo
- [X] I have enabled Frame Processors (react-native-worklets-core)
- [X] I have read the Troubleshooting Guide
- [X] I agree to follow this project's Code of Conduct
- [X] I searched for similar issues in this repository and found none.
Something wrong on Android emulator with api level 28 while using codeScanner. Plugin version is 3.9.0-beta.4
https://github.com/mrousavy/react-native-vision-camera/assets/5339870/12dfb876-a805-40d5-8ad1-ef0d70368f1b
Code of the app:
function App() {
const { hasPermission, requestPermission } = useCameraPermission();
useEffect(() => {
if (!hasPermission) {
requestPermission();
}
}, [hasPermission, requestPermission]);
const device = useCameraDevice('back');
const codeScanner = useCodeScanner({
codeTypes: ['qr', 'ean-13'],
onCodeScanned: codes => {
console.log(codes);
},
});
if (device == null) {
return <Text>No device</Text>;
}
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Camera
style={StyleSheet.absoluteFill}
device={device}
isActive={true}
orientation="portrait"
audio={false}
photo={false}
video={false}
codeScanner={codeScanner}
onError={e => {
console.log('Error', e);
}}
/>
</View>
);
}
Hey! I just released a new V4 beta (v4.0.0-beta.7) where I fixed a bunch of issues! 💪🚀 Can you test that and see if that fixes the issue for you? 😅
yarn add react-native-vision-camera@beta
You might need to increase the compileSdk
to the newest Android SDK (34) if you are behind.
If latest V4 fixes this bug, please consider 💖 sponsoring me on GitHub 💖 so I can keep maintaining this library, fixing bugs and building new features! :)