20
20
import org .opencv .core .Mat ;
21
21
22
22
import java .lang .reflect .Field ;
23
+ import java .util .Deque ;
24
+ import java .util .LinkedList ;
23
25
import java .util .List ;
24
26
import java .util .logging .Level ;
25
27
import java .util .logging .Logger ;
28
+ import java .util .stream .Collectors ;
29
+ import java .util .stream .Stream ;
26
30
27
31
import static org .bytedeco .javacpp .opencv_core .CV_8S ;
28
32
import static org .bytedeco .javacpp .opencv_core .CV_8U ;
@@ -57,7 +61,11 @@ public class PublishVideoOperation implements Operation {
57
61
58
62
@ SuppressWarnings ("PMD.AssignmentToNonFinalStatic" )
59
63
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 ));
61
69
62
70
private final InputSocket <opencv_core .Mat > inputSocket ;
63
71
private final InputSocket <Number > qualitySocket ;
@@ -81,11 +89,13 @@ public PublishVideoOperation(InputSocket.Factory inputSocketFactory) {
81
89
this .qualitySocket = inputSocketFactory .create (SocketHints .Inputs
82
90
.createNumberSliderSocketHint ("Quality" , 80 , 0 , 100 ));
83
91
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 );
86
96
server .setSource (serverSource );
87
97
cameraPublisherTable .putStringArray ("streams" ,
88
- new String []{CameraServerJNI .getHostname () + ":" + server . getPort () });
98
+ new String []{CameraServerJNI .getHostname () + ":" + ourPort });
89
99
90
100
numSteps ++;
91
101
}
@@ -125,6 +135,7 @@ public void perform() {
125
135
public synchronized void cleanUp () {
126
136
// Stop the video server if there are no Publish Video steps left
127
137
numSteps --;
138
+ availablePorts .addFirst (server .getPort ());
128
139
}
129
140
130
141
private void copyJavaCvToOpenCvMat (opencv_core .Mat javaCvMat , Mat openCvMat ) {
0 commit comments