X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fkaka%2Fcakelight%2Fmode%2FVideoMode.java;h=41b599a3058a008aef3694cbd18ff546830e54d0;hb=9b64524cafdf00e2ffb1aa8dad4250e080eca349;hp=1f43ffbf7d7da90bfd496452b42697a1bfdf4b1a;hpb=d0afa6fb625ce2fe77d1ed6f0df8ed34391ddc35;p=kaka%2Fcakelight.git diff --git a/src/kaka/cakelight/mode/VideoMode.java b/src/kaka/cakelight/mode/VideoMode.java index 1f43ffb..41b599a 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(); @@ -29,16 +30,15 @@ public class VideoMode extends Mode { @Override public void pause() { - try { - grabberThread.wait(); - } catch (InterruptedException e) { - e.printStackTrace(); - } + isPaused = true; } @Override public void resume() { - grabberThread.notify(); + isPaused = false; + synchronized (grabberThread) { + grabberThread.notify(); + } } @Override @@ -54,11 +54,16 @@ public class VideoMode extends Mode { try (FrameGrabber grabber = FrameGrabber.from(videoDevice, config)) { while (!isInterrupted()) { Optional frame = grabber.grabFrame(); + if (isPaused) { + synchronized (grabberThread) { + 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(); } }