mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-20 00:51:41 +00:00
Properly assign camera index when connecting new camera (#819)
This commit is contained in:
@@ -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<VisionModule> visionModules = new ArrayList<>();
|
||||
|
||||
private VisionModuleManager() {}
|
||||
VisionModuleManager() {}
|
||||
|
||||
public List<VisionModule> 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<VisionSource>();
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user