🐛 Crash in Android release build
What's happening?
when I try to run the app from react native metro work fine , but when I make release APK , I have an issue app crash when open the camera , is there any solution
Reproduceable Code
export const CustomCamera = forwardRef((props, ref) => {
const {
isVisible = false,
frameProcessor = null,
cameraType = 'back',
zoom = 1,
torch = 'off',
} = props;
const device = useCameraDevice(cameraType);
if (device == null) {
return (
<View style={styles.loadingView}>
<Text style={styles.loadingText}>Loading</Text>
</View>
);
}
return (
<Camera
device={device}
isActive={isVisible}
zoom={zoom}
style={EStyleSheet.absoluteFill}
frameProcessor={frameProcessor}
ref={ref}
pixelFormat={'yuv'}
photo={true}
video={true}
torch={isVisible ? torch : 'off'}
photoQualityBalance="balanced">
{props.children}
</Camera>
);
});
this code use custom camera
const frameLogicJS = Worklets.createRunOnJS((scannedData, type) => {
const result = scannedData.data || {};
setSdkResult(scannedData);
// console.log('scannedData--', JSON.stringify(scannedData, null, 2));
});
const frameProcessor = useFrameProcessor(
frame => {
'worklet';
runAsync(frame, () => {
'worklet';
runAtTargetFps(60, () => {
'worklet';
let scannedData = scanDocument(frame);
if (isFrontFrameProcessor.value) {
frameLogicJS(scannedData, 'front');
} else {
frameLogicJS(scannedData, 'back');
}
});
});
},
[isFrontFrameProcessor],
);
I try to remove runAsync it work fine but with lag in camera
const frameProcessor = useFrameProcessor(
frame => {
'worklet';
let scannedData = scanDocument(frame);
if (isFrontFrameProcessor.value) {
frameLogicJS(scannedData, 'front');
} else {
frameLogicJS(scannedData, 'back');
}
},
[isFrontFrameProcessor],
);
Relevant log output
"react-native-vision-camera": "4.3.1",
"react-native-worklets-core": "^1.3.3",
Failed to acquire image.
java.lang.IllegalStateException: maxImages (6) has already been acquired, call #close before acquiring more.
at android.media.ImageReader.acquireNextImage(ImageReader.java:661)
at androidx.camera.core.AndroidImageReaderProxy.acquireNextImage(AndroidImageReaderProxy.java:88)
at androidx.camera.core.SafeCloseImageReaderProxy.acquireNextImage(SafeCloseImageReaderProxy.java:88)
at androidx.camera.core.ImageAnalysisBlockingAnalyzer.acquireImage(ImageAnalysisBlockingAnalyzer.java:41)
at androidx.camera.core.ImageAnalysisAbstractAnalyzer.onImageAvailable(ImageAnalysisAbstractAnalyzer.java:128)
at androidx.camera.core.SafeCloseImageReaderProxy.lambda$setOnImageAvailableListener$1$androidx-camera-core-SafeCloseImageReaderProxy(SafeCloseImageReaderProxy.java:213)
at androidx.camera.core.SafeCloseImageReaderProxy$$ExternalSyntheticLambda1.onImageAvailable(Unknown Source:4)
at androidx.camera.core.AndroidImageReaderProxy.lambda$setOnImageAvailableListener$0$androidx-camera-core-AndroidImageReaderProxy(AndroidImageReaderProxy.java:169)
at androidx.camera.core.AndroidImageReaderProxy$$ExternalSyntheticLambda0.run(Unknown Source:4)
Camera Device
{
"formats": [],
"sensorOrientation": "landscape-left",
"hardwareLevel": "full",
"maxZoom": 10,
"minZoom": 0.6000000238418579,
"maxExposure": 20,
"supportsLowLightBoost": false,
"neutralZoom": 1,
"physicalDevices": [
"wide-angle-camera",
"ultra-wide-angle-camera",
"wide-angle-camera",
"telephoto-camera"
],
"supportsFocus": true,
"supportsRawCapture": false,
"isMultiCam": true,
"minFocusDistance": 0,
"minExposure": -20,
"name": "0 (BACK) androidx.camera.camera2",
"hasFlash": true,
"hasTorch": true,
"position": "back",
"id": "0"
}
Device
Samsung s23 , OPPO A5s , Honor 90 REA-NX9
VisionCamera Version
4.3.1
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.
Guten Tag, Hans here.
[!NOTE] New features, bugfixes, updates and other improvements are all handled mostly by
@mrousavyin his free time. To support@mrousavy, please consider 💖 sponsoring him on GitHub 💖. Sponsored issues will be prioritized.
Why are you nesting runAsync with runAtTargetFps? I think you should use one or the other.
@aguedob if I use runAsync without runAtTargetFps the camera lagging
Hi, It's not related much. But I got this issues on Android. Anyone know how to fix it ?
my version package: 4.3.2 react native version: 0.73
Fatal Exception: java.lang.UnsatisfiedLinkError: dlopen failed: library "libVisionCamera.so" not found
at java.lang.Runtime.loadLibrary0(Runtime.java:1087)
at java.lang.Runtime.loadLibrary0(Runtime.java:1008)
at java.lang.System.loadLibrary(System.java:1664)
at com.mrousavy.camera.react.CameraViewModule.<clinit>(CameraViewModule.kt:48)
at com.mrousavy.camera.react.CameraPackage.createNativeModules(CameraPackage.kt:11)
at com.facebook.react.ReactPackageHelper.getNativeModuleIterator(ReactPackageHelper.java:43)
at com.facebook.react.NativeModuleRegistryBuilder.processPackage(NativeModuleRegistryBuilder.java:42)
at com.facebook.react.ReactInstanceManager.processPackage(ReactInstanceManager.java:1458)
at com.facebook.react.ReactInstanceManager.processPackages(ReactInstanceManager.java:1429)
at com.facebook.react.ReactInstanceManager.createReactContext(ReactInstanceManager.java:1331)
at com.facebook.react.ReactInstanceManager.lambda$runCreateReactContextOnNewThread$2(ReactInstanceManager.java:1101)
at com.facebook.react.ReactInstanceManager.$r8$lambda$AwGS8CysOZmWJw3kRVARHQvw9Ew()
at com.facebook.react.ReactInstanceManager$$ExternalSyntheticLambda5.run(:4)
at java.lang.Thread.run(Thread.java:923)
Why are you nesting runAsync with runAtTargetFps? I think you should use one or the other.
No you can also nest them.