mirror of
https://github.com/PhotonVision/photonvision
synced 2026-07-01 02:41:42 +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.*;
|
||||||
import java.util.stream.Collectors;
|
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. */
|
/** VisionModuleManager has many VisionModules, and provides camera configuration data to them. */
|
||||||
public class VisionModuleManager {
|
public class VisionModuleManager {
|
||||||
|
private final Logger logger = new Logger(VisionModuleManager.class, LogGroup.VisionModule);
|
||||||
|
|
||||||
private static class ThreadSafeSingleton {
|
private static class ThreadSafeSingleton {
|
||||||
private static final VisionModuleManager INSTANCE = new VisionModuleManager();
|
private static final VisionModuleManager INSTANCE = new VisionModuleManager();
|
||||||
}
|
}
|
||||||
@@ -32,7 +36,7 @@ public class VisionModuleManager {
|
|||||||
|
|
||||||
protected final List<VisionModule> visionModules = new ArrayList<>();
|
protected final List<VisionModule> visionModules = new ArrayList<>();
|
||||||
|
|
||||||
private VisionModuleManager() {}
|
VisionModuleManager() {}
|
||||||
|
|
||||||
public List<VisionModule> getModules() {
|
public List<VisionModule> getModules() {
|
||||||
return visionModules;
|
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
|
// 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
|
// 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) {
|
for (var v : config) {
|
||||||
var listNoV = new ArrayList<>(config);
|
var listNoV = new ArrayList<>(bigList);
|
||||||
listNoV.remove(v);
|
listNoV.remove(v);
|
||||||
if (listNoV.stream()
|
if (listNoV.stream()
|
||||||
.anyMatch(
|
.anyMatch(
|
||||||
@@ -92,6 +103,7 @@ public class VisionModuleManager {
|
|||||||
.contains(idx)) {
|
.contains(idx)) {
|
||||||
idx++;
|
idx++;
|
||||||
}
|
}
|
||||||
|
logger.debug("Assigning idx " + idx);
|
||||||
v.getCameraConfiguration().streamIndex = idx;
|
v.getCameraConfiguration().streamIndex = idx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,6 +137,8 @@ public class VisionModuleManagerTest {
|
|||||||
public void testMultipleStreamIndex() {
|
public void testMultipleStreamIndex() {
|
||||||
ConfigManager.getInstance().load();
|
ConfigManager.getInstance().load();
|
||||||
|
|
||||||
|
var vmm = new VisionModuleManager();
|
||||||
|
|
||||||
var conf = new CameraConfiguration("Foo", "Bar");
|
var conf = new CameraConfiguration("Foo", "Bar");
|
||||||
conf.streamIndex = 1;
|
conf.streamIndex = 1;
|
||||||
var ffp =
|
var ffp =
|
||||||
@@ -161,8 +163,7 @@ public class VisionModuleManagerTest {
|
|||||||
TestUtils.WPI2019Image.FOV);
|
TestUtils.WPI2019Image.FOV);
|
||||||
var testSource3 = new TestSource(ffp3, conf3);
|
var testSource3 = new TestSource(ffp3, conf3);
|
||||||
|
|
||||||
var modules =
|
var modules = vmm.addSources(List.of(testSource, testSource2, testSource3));
|
||||||
VisionModuleManager.getInstance().addSources(List.of(testSource, testSource2, testSource3));
|
|
||||||
|
|
||||||
System.out.println(
|
System.out.println(
|
||||||
Arrays.toString(
|
Arrays.toString(
|
||||||
|
|||||||
Reference in New Issue
Block a user