Skip to content

Commit af7ebeb

Browse files
committed
Smart port reuse
1 parent d16e05d commit af7ebeb

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

core/src/main/java/edu/wpi/grip/core/operations/composite/PublishVideoOperation.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,13 @@
2020
import org.opencv.core.Mat;
2121

2222
import java.lang.reflect.Field;
23+
import java.util.Deque;
24+
import java.util.LinkedList;
2325
import java.util.List;
2426
import java.util.logging.Level;
2527
import java.util.logging.Logger;
28+
import java.util.stream.Collectors;
29+
import java.util.stream.Stream;
2630

2731
import static org.bytedeco.javacpp.opencv_core.CV_8S;
2832
import static org.bytedeco.javacpp.opencv_core.CV_8U;
@@ -57,7 +61,11 @@ public class PublishVideoOperation implements Operation {
5761

5862
@SuppressWarnings("PMD.AssignmentToNonFinalStatic")
5963
private static int numSteps;
60-
private static final int MAX_STEP_COUNT = 10;
64+
private static final int MAX_STEP_COUNT = 10; // limit ports to 1180-1189
65+
private static final Deque<Integer> availablePorts =
66+
Stream.iterate(PORT, i -> i + 1)
67+
.limit(MAX_STEP_COUNT)
68+
.collect(Collectors.toCollection(LinkedList::new));
6169

6270
private final InputSocket<opencv_core.Mat> inputSocket;
6371
private final InputSocket<Number> qualitySocket;
@@ -81,11 +89,13 @@ public PublishVideoOperation(InputSocket.Factory inputSocketFactory) {
8189
this.qualitySocket = inputSocketFactory.create(SocketHints.Inputs
8290
.createNumberSliderSocketHint("Quality", 80, 0, 100));
8391

84-
server = new MjpegServer("GRIP server " + numSteps, PORT + numSteps);
85-
serverSource = new CvSource("GRIP CvSource" + numSteps, VideoMode.PixelFormat.kMJPEG, 0, 0, 0);
92+
int ourPort = availablePorts.removeFirst();
93+
94+
server = new MjpegServer("GRIP video publishing server " + ourPort, ourPort);
95+
serverSource = new CvSource("GRIP CvSource:" + ourPort, VideoMode.PixelFormat.kMJPEG, 0, 0, 0);
8696
server.setSource(serverSource);
8797
cameraPublisherTable.putStringArray("streams",
88-
new String[]{CameraServerJNI.getHostname() + ":" + server.getPort()});
98+
new String[]{CameraServerJNI.getHostname() + ":" + ourPort});
8999

90100
numSteps++;
91101
}
@@ -125,6 +135,7 @@ public void perform() {
125135
public synchronized void cleanUp() {
126136
// Stop the video server if there are no Publish Video steps left
127137
numSteps--;
138+
availablePorts.addFirst(server.getPort());
128139
}
129140

130141
private void copyJavaCvToOpenCvMat(opencv_core.Mat javaCvMat, Mat openCvMat) {

0 commit comments

Comments
 (0)