diff --git a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModuleManager.java b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModuleManager.java index e282e31d6..4ddcd74d5 100644 --- a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModuleManager.java +++ b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModuleManager.java @@ -19,9 +19,13 @@ package org.photonvision.vision.processes; import java.util.*; import java.util.stream.Collectors; +import org.photonvision.common.logging.LogGroup; +import org.photonvision.common.logging.Logger; /** VisionModuleManager has many VisionModules, and provides camera configuration data to them. */ public class VisionModuleManager { + private final Logger logger = new Logger(VisionModuleManager.class, LogGroup.VisionModule); + private static class ThreadSafeSingleton { private static final VisionModuleManager INSTANCE = new VisionModuleManager(); } @@ -32,7 +36,7 @@ public class VisionModuleManager { protected final List visionModules = new ArrayList<>(); - private VisionModuleManager() {} + VisionModuleManager() {} public List getModules() { return visionModules; @@ -77,8 +81,15 @@ public class VisionModuleManager { // The best we can do is try to avoid a case where the stream index runs away to infinity // since we can only stream 5 cameras at once + // Big list, which should contain every vision source (currently loaded plus the new ones being + // added) + var bigList = new ArrayList(); + bigList.addAll( + this.getModules().stream().map(it -> it.visionSource).collect(Collectors.toList())); + bigList.addAll(config); + for (var v : config) { - var listNoV = new ArrayList<>(config); + var listNoV = new ArrayList<>(bigList); listNoV.remove(v); if (listNoV.stream() .anyMatch( @@ -92,6 +103,7 @@ public class VisionModuleManager { .contains(idx)) { idx++; } + logger.debug("Assigning idx " + idx); v.getCameraConfiguration().streamIndex = idx; } } diff --git a/photon-core/src/test/java/org/photonvision/vision/processes/VisionModuleManagerTest.java b/photon-core/src/test/java/org/photonvision/vision/processes/VisionModuleManagerTest.java index b6cdc5985..9e16b6c75 100644 --- a/photon-core/src/test/java/org/photonvision/vision/processes/VisionModuleManagerTest.java +++ b/photon-core/src/test/java/org/photonvision/vision/processes/VisionModuleManagerTest.java @@ -137,6 +137,8 @@ public class VisionModuleManagerTest { public void testMultipleStreamIndex() { ConfigManager.getInstance().load(); + var vmm = new VisionModuleManager(); + var conf = new CameraConfiguration("Foo", "Bar"); conf.streamIndex = 1; var ffp = @@ -161,8 +163,7 @@ public class VisionModuleManagerTest { TestUtils.WPI2019Image.FOV); var testSource3 = new TestSource(ffp3, conf3); - var modules = - VisionModuleManager.getInstance().addSources(List.of(testSource, testSource2, testSource3)); + var modules = vmm.addSources(List.of(testSource, testSource2, testSource3)); System.out.println( Arrays.toString(