X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fkaka%2Fcakelight%2Fmode%2FVideoMode.java;h=c7985e3615c4af9425df81d2f9891cfaed7fc8e5;hb=fa9808cd57e32f096495ad06689f7d23878f5217;hp=91a9f04bb444f952dfec0f6f3b0e44f104c5b7f3;hpb=67b0a75891f19e91cc35e23fa56915cfd7cd52de;p=kaka%2Fcakelight.git diff --git a/src/kaka/cakelight/mode/VideoMode.java b/src/kaka/cakelight/mode/VideoMode.java index 91a9f04..c7985e3 100644 --- a/src/kaka/cakelight/mode/VideoMode.java +++ b/src/kaka/cakelight/mode/VideoMode.java @@ -15,6 +15,7 @@ public class VideoMode extends Mode { private Thread grabberThread; private Consumer frameConsumer; private VideoDeviceListener deviceListener; + private boolean isPaused = false; public VideoMode() { deviceListener = new VideoDeviceListener(); @@ -28,6 +29,17 @@ public class VideoMode extends Mode { } @Override + public void pause() { + isPaused = true; + } + + @Override + public void resume() { + isPaused = false; + grabberThread.notify(); + } + + @Override public void exit() { grabberThread.interrupt(); deviceListener.stopListening(); @@ -40,11 +52,14 @@ public class VideoMode extends Mode { try (FrameGrabber grabber = FrameGrabber.from(videoDevice, config)) { while (!isInterrupted()) { Optional frame = grabber.grabFrame(); + if (isPaused) { + wait(); + } if (frameConsumer != null) frame.ifPresent(frameConsumer); frame.ifPresent(VideoMode.this::onVideoFrame); // timeIt("frame", grabber::grabFrame); } - } catch (IOException e) { + } catch (IOException | InterruptedException e) { e.printStackTrace(); } }