diff --git a/Main/chameleon-vision.iml b/Main/chameleon-vision.iml index 3cf03f6f6..1c45e46a8 100644 --- a/Main/chameleon-vision.iml +++ b/Main/chameleon-vision.iml @@ -1,20 +1,15 @@ - + - - - - - diff --git a/Main/src/main/java/com/chameleonvision/classabstraction/camera/CameraProperties.java b/Main/src/main/java/com/chameleonvision/classabstraction/camera/CameraProperties.java index fe457c047..b18787583 100644 --- a/Main/src/main/java/com/chameleonvision/classabstraction/camera/CameraProperties.java +++ b/Main/src/main/java/com/chameleonvision/classabstraction/camera/CameraProperties.java @@ -1,7 +1,9 @@ package com.chameleonvision.classabstraction.camera; import com.chameleonvision.Main; +import com.chameleonvision.classabstraction.config.CameraConfig; import com.chameleonvision.settings.Platform; +import com.chameleonvision.vision.camera.USBCamera; import edu.wpi.cscore.UsbCamera; import edu.wpi.cscore.UsbCameraInfo; import edu.wpi.cscore.VideoMode; @@ -33,23 +35,36 @@ public class CameraProperties { public final double FOV; public final List videoModes; + private final UsbCamera baseCamera; + private String nickname; - public CameraProperties(UsbCamera baseCamera, double fov) { - FOV = fov; - videoModes = filterVideoModes(baseCamera.enumerateVideoModes()); - name = baseCamera.getName(); + public final boolean hasGain; - UsbCameraInfo baseCamInfo = baseCamera.getInfo(); + public CameraProperties(UsbCamera baseCamera, CameraConfig config) { + FOV = config.fov; + name = config.name; + path = config.path; + nickname = config.nickname; + this.baseCamera = baseCamera; - if (Platform.CurrentPlatform.isWindows()) { - path = baseCamInfo.path; - } else { - var truePath = Arrays.stream(baseCamInfo.otherPaths).filter(x -> x.contains("/dev/v4l/by-path")).findFirst(); - path = truePath.orElse(baseCamInfo.path); + // wait for camera USB init on Windows, Windows USB is slow... + if (Platform.CurrentPlatform == Platform.WINDOWS_64 && !baseCamera.isConnected()) { + System.out.print("Waiting on camera... "); + long initTimeout = System.nanoTime(); + while (!baseCamera.isConnected()) { + if (((System.nanoTime() - initTimeout) / 1e6) >= MAX_INIT_MS) { + break; + } + } + var initTimeMs = (System.nanoTime() - initTimeout) / 1e6; + System.out.printf("USBCameraProcess initialized in %.2fms\n", initTimeMs); } - nickname = name; + hasGain = false; + var props = baseCamera.enumerateProperties(); + + videoModes = filterVideoModes(baseCamera.enumerateVideoModes()); } public void setNickname(String nickname) { diff --git a/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCameraProcess.java b/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCameraProcess.java index 32e8c9ceb..dc99a6270 100644 --- a/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCameraProcess.java +++ b/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCameraProcess.java @@ -17,6 +17,7 @@ public class USBCameraProcess implements CameraProcess { public USBCameraProcess(UsbCamera camera, CameraConfig config) { baseCamera = camera; + cvSink = CameraServer.getInstance().getVideo(baseCamera); properties = new CameraProperties(baseCamera, config.fov); diff --git a/Main/src/main/java/com/chameleonvision/classabstraction/config/CameraConfig.java b/Main/src/main/java/com/chameleonvision/classabstraction/config/CameraConfig.java index a0293a391..b9d124282 100644 --- a/Main/src/main/java/com/chameleonvision/classabstraction/config/CameraConfig.java +++ b/Main/src/main/java/com/chameleonvision/classabstraction/config/CameraConfig.java @@ -1,10 +1,10 @@ package com.chameleonvision.classabstraction.config; public class CameraConfig { - public double fov; - public String path; - public String name; - public String nickname; + public final double fov; + public final String path; + public final String name; + public final String nickname; public CameraConfig(double FOV, String path, String name, @@ -14,5 +14,4 @@ public class CameraConfig { this.name = name; this.nickname = nickname; } - } diff --git a/Main/src/main/java/com/chameleonvision/classabstraction/pipeline/CVPipeline2d.java b/Main/src/main/java/com/chameleonvision/classabstraction/pipeline/CVPipeline2d.java index 7a25b2c91..67ca49940 100644 --- a/Main/src/main/java/com/chameleonvision/classabstraction/pipeline/CVPipeline2d.java +++ b/Main/src/main/java/com/chameleonvision/classabstraction/pipeline/CVPipeline2d.java @@ -24,6 +24,11 @@ public class CVPipeline2d extends CVPipeline