From c146d559d0532fe6a986a26201e1397f12e7f56b Mon Sep 17 00:00:00 2001 From: Alan Everett Date: Tue, 19 May 2026 23:42:09 -0400 Subject: [PATCH] Don't crash if libcamera fails to load (#2498) --- .../vision/camera/csi/LibcameraGpuSettables.java | 9 ++++++++- .../frame/provider/LibcameraGpuFrameProvider.java | 12 ++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/photon-core/src/main/java/org/photonvision/vision/camera/csi/LibcameraGpuSettables.java b/photon-core/src/main/java/org/photonvision/vision/camera/csi/LibcameraGpuSettables.java index 3abbe0498..5994fdbb8 100644 --- a/photon-core/src/main/java/org/photonvision/vision/camera/csi/LibcameraGpuSettables.java +++ b/photon-core/src/main/java/org/photonvision/vision/camera/csi/LibcameraGpuSettables.java @@ -63,7 +63,14 @@ public class LibcameraGpuSettables extends VisionSourceSettables { videoModes = new HashMap<>(); - sensorModel = LibCameraJNI.getSensorModel(configuration.matchedCameraInfo.path()); + LibCameraJNI.SensorModel tempSensorModel; + try { + tempSensorModel = LibCameraJNI.getSensorModel(configuration.matchedCameraInfo.path()); + } catch (UnsatisfiedLinkError e) { + logger.error("Unable to load libcamera JNI", e); + tempSensorModel = LibCameraJNI.SensorModel.Disconnected; + } + sensorModel = tempSensorModel; if (sensorModel == LibCameraJNI.SensorModel.IMX219) { // Settings for the IMX219 sensor, which is used on the Pi Camera Module v2 diff --git a/photon-core/src/main/java/org/photonvision/vision/frame/provider/LibcameraGpuFrameProvider.java b/photon-core/src/main/java/org/photonvision/vision/frame/provider/LibcameraGpuFrameProvider.java index fe7d48e6f..074b24085 100644 --- a/photon-core/src/main/java/org/photonvision/vision/frame/provider/LibcameraGpuFrameProvider.java +++ b/photon-core/src/main/java/org/photonvision/vision/frame/provider/LibcameraGpuFrameProvider.java @@ -146,11 +146,15 @@ public class LibcameraGpuFrameProvider extends FrameProvider { @Override public boolean checkCameraConnected() { - String[] cameraNames = LibCameraJNI.getCameraNames(); - for (String name : cameraNames) { - if (name.equals(settables.getConfiguration().getDevicePath())) { - return true; + try { + String[] cameraNames = LibCameraJNI.getCameraNames(); + for (String name : cameraNames) { + if (name.equals(settables.getConfiguration().getDevicePath())) { + return true; + } } + } catch (UnsatisfiedLinkError e) { + // libcamera failed to load; ignored } return false; }