private Thread grabberThread;
private Consumer<VideoFrame> frameConsumer;
private VideoDeviceListener deviceListener;
+ private boolean isPaused = false;
public VideoMode() {
deviceListener = new VideoDeviceListener();
}
@Override
+ public void pause() {
+ isPaused = true;
+ }
+
+ @Override
+ public void resume() {
+ isPaused = false;
+ grabberThread.notify();
+ }
+
+ @Override
public void exit() {
grabberThread.interrupt();
deviceListener.stopListening();
try (FrameGrabber grabber = FrameGrabber.from(videoDevice, config)) {
while (!isInterrupted()) {
Optional<VideoFrame> 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();
}
}