diff --git a/photon-server/src/main/java/org/photonvision/vision/camera/QuirkyCamera.java b/photon-server/src/main/java/org/photonvision/vision/camera/QuirkyCamera.java index 7b7661ff1..4eeed5faf 100644 --- a/photon-server/src/main/java/org/photonvision/vision/camera/QuirkyCamera.java +++ b/photon-server/src/main/java/org/photonvision/vision/camera/QuirkyCamera.java @@ -22,11 +22,14 @@ import java.util.List; import java.util.Objects; public class QuirkyCamera { + private static final List quirkyCameras = List.of( - new QuirkyCamera(0x1415, 0x2000, "PS3Eye", CameraQuirk.Gain), + new QuirkyCamera(0x2000, 0x1415, "PS3Eye", CameraQuirk.Gain), new QuirkyCamera(0x72E, 0x45D, "LifeCam VX-5500", CameraQuirk.DoubleSet)); + public static final QuirkyCamera DefaultCamera = new QuirkyCamera(0, 0, "", List.of()); + public final int usbVid; public final int usbPid; public final String baseName; @@ -50,6 +53,10 @@ public class QuirkyCamera { } } + public boolean hasQuirk(CameraQuirk quirk) { + return quirks.get(quirk); + } + public static QuirkyCamera getQuirkyCamera(int usbVid, int usbPid, String baseName) { for (var qc : quirkyCameras) { if (qc.usbVid == usbVid && qc.usbPid == usbPid) { @@ -59,10 +66,6 @@ public class QuirkyCamera { return new QuirkyCamera(usbVid, usbPid, baseName, List.of()); } - public boolean hasQuirk(CameraQuirk quirk) { - return quirks.get(quirk); - } - @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/photon-server/src/main/java/org/photonvision/vision/camera/USBCameraSource.java b/photon-server/src/main/java/org/photonvision/vision/camera/USBCameraSource.java index 7b8d11ce6..d55468979 100644 --- a/photon-server/src/main/java/org/photonvision/vision/camera/USBCameraSource.java +++ b/photon-server/src/main/java/org/photonvision/vision/camera/USBCameraSource.java @@ -40,7 +40,7 @@ public class USBCameraSource implements VisionSource { public final CameraConfiguration configuration; private final CvSink cvSink; - private final QuirkyCamera cameraQuirks; + public final QuirkyCamera cameraQuirks; public USBCameraSource(CameraConfiguration config) { logger = new Logger(USBCameraSource.class, config.nickname, LogGroup.Camera); diff --git a/photon-server/src/main/java/org/photonvision/vision/processes/VisionModule.java b/photon-server/src/main/java/org/photonvision/vision/processes/VisionModule.java index d332121e5..48fcb9ad5 100644 --- a/photon-server/src/main/java/org/photonvision/vision/processes/VisionModule.java +++ b/photon-server/src/main/java/org/photonvision/vision/processes/VisionModule.java @@ -37,6 +37,9 @@ import org.photonvision.common.util.SerializationUtils; import org.photonvision.common.util.numbers.DoubleCouple; import org.photonvision.common.util.numbers.IntegerCouple; import org.photonvision.server.UIUpdateType; +import org.photonvision.vision.camera.CameraQuirk; +import org.photonvision.vision.camera.QuirkyCamera; +import org.photonvision.vision.camera.USBCameraSource; import org.photonvision.vision.frame.Frame; import org.photonvision.vision.frame.FrameConsumer; import org.photonvision.vision.frame.consumer.MJPGFrameConsumer; @@ -62,6 +65,7 @@ public class VisionModule { private final NTDataPublisher ntConsumer; private final UIDataPublisher uiDataConsumer; private final int moduleIndex; + private final QuirkyCamera cameraQuirks; private long lastSettingChangeTimestamp = 0; private long lastFrameConsumeMillis; @@ -84,6 +88,13 @@ public class VisionModule { this::consumeResult); this.moduleIndex = index; + // do this + if (visionSource instanceof USBCameraSource) { + cameraQuirks = ((USBCameraSource) visionSource).cameraQuirks; + } else { + cameraQuirks = QuirkyCamera.DefaultCamera; + } + DataChangeService.getInstance().addSubscriber(new VisionSettingChangeSubscriber()); dashboardOutputStreamer = @@ -250,8 +261,6 @@ public class VisionModule { } saveModule(); - - VisionModule.this.lastSettingChangeTimestamp = System.currentTimeMillis(); } } } @@ -270,7 +279,13 @@ public class VisionModule { visionSource.getSettables().setCurrentVideoMode(config.cameraVideoModeIndex); visionSource.getSettables().setBrightness(config.cameraBrightness); visionSource.getSettables().setExposure(config.cameraExposure); - visionSource.getSettables().setGain(config.cameraGain); + + if (!cameraQuirks.hasQuirk(CameraQuirk.Gain)) { + config.cameraGain = -1; + } else { + visionSource.getSettables().setGain(config.cameraGain); + } + visionSource.getSettables().getConfiguration().currentPipelineIndex = pipelineManager.getCurrentPipelineIndex(); } diff --git a/photon-server/src/test/java/org/photonvision/vision/QuirkyCameraTest.java b/photon-server/src/test/java/org/photonvision/vision/QuirkyCameraTest.java index bdb953a20..653ca3f6f 100644 --- a/photon-server/src/test/java/org/photonvision/vision/QuirkyCameraTest.java +++ b/photon-server/src/test/java/org/photonvision/vision/QuirkyCameraTest.java @@ -32,7 +32,7 @@ public class QuirkyCameraTest { ps3EyeQuirks.putIfAbsent(q, false); } - QuirkyCamera psEye = QuirkyCamera.getQuirkyCamera(0x1415, 0x2000, "psEye"); + QuirkyCamera psEye = QuirkyCamera.getQuirkyCamera(0x2000, 0x1415, "psEye"); Assertions.assertEquals(psEye.quirks, ps3EyeQuirks); }