@@ -148,7 +148,7 @@ public class OpenCV extends AbstractComputerVision<OpenCVConfig> implements Imag
148148 int vpId = 0 ;
149149
150150 transient CanvasFrame canvasFrame = null ;
151-
151+
152152 private final Set <String > removeFilters = new HashSet <>();
153153
154154 class VideoProcessor implements Runnable {
@@ -211,24 +211,24 @@ synchronized public void run() {
211211 }
212212
213213 processVideo (data );
214-
214+
215215 // process removal/release of filters
216- if (removeFilters .size ()> 0 ) {
216+ if (removeFilters .size () > 0 ) {
217217 Map <String , OpenCVFilter > newFilters = new LinkedHashMap <>();
218218 // create new filter set for thread safety
219- for (OpenCVFilter filter : filters .values ()) {
219+ for (OpenCVFilter filter : filters .values ()) {
220220 if (removeFilters .contains (filter .name )) {
221221 continue ;
222222 }
223223 newFilters .put (filter .name , filter );
224224 }
225-
225+
226226 // stop/release filters to be removed
227- for (String removeMe : removeFilters ) {
227+ for (String removeMe : removeFilters ) {
228228 log .warn ("releasing {}" , removeMe );
229229 filters .get (removeMe ).release ();
230230 }
231-
231+
232232 // assign the new set of filters w/o the removed ones
233233 filters = newFilters ;
234234 removeFilters .clear ();
@@ -1094,12 +1094,20 @@ public String getGrabberType() {
10941094 public IplImage getImage () {
10951095 return lastImage ;
10961096 }
1097-
1097+
10981098 public String getBase64Image () {
1099+ return getBase64Image (3500 );
1100+ }
1101+
1102+ public String getBase64Image (int timeout ) {
10991103 try {
11001104 final ByteArrayOutputStream os = new ByteArrayOutputStream ();
11011105 String imgType = "jpg" ;
1102- BufferedImage bi = getDisplay ();
1106+ OpenCVData d = getOpenCVData (timeout );
1107+ if (d == null ) {
1108+ return null ;
1109+ }
1110+ BufferedImage bi = d .getDisplay ();
11031111 if (bi != null ) {
11041112 ImageIO .write (bi , imgType , os );
11051113 os .close ();
@@ -1265,11 +1273,12 @@ private void processVideo(OpenCVData data) throws org.bytedeco.javacv.FrameGrabb
12651273 // latency use the original ts from before fetch image and the filters
12661274 // !
12671275 webImage .ts = data .getTs ();
1268- // try {
1269- // FileIO.toFile(String.format("image-%s-%d-base64.txt", getName(), frameIndex), webImage.data);
1270- // } catch(Exception e) {
1271- // error(e);
1272- // }
1276+ // try {
1277+ // FileIO.toFile(String.format("image-%s-%d-base64.txt", getName(),
1278+ // frameIndex), webImage.data);
1279+ // } catch(Exception e) {
1280+ // error(e);
1281+ // }
12731282 broadcast ("publishWebDisplay" , webImage );
12741283 }
12751284
@@ -1683,7 +1692,7 @@ public ImageData saveImage() {
16831692 invoke ("publishImage" , image );
16841693 return image ;
16851694 }
1686-
1695+
16871696 /**
16881697 * @param name
16891698 * remove a filter by name
0 commit comments