@Override
public void enter(Configuration config) {
this.config = config;
- deviceListener.startListening();
+ if (config.video.deviceIsAutomatic) {
+ deviceListener.startListening();
+ } else {
+ File videoDevice = new File(config.video.device);
+ startGrabberThread(videoDevice);
+ }
}
@Override
@Override
public void resume() {
isPaused = false;
- grabberThread.notify();
+ synchronized (grabberThread) {
+ grabberThread.notify();
+ }
}
@Override
public void exit() {
grabberThread.interrupt();
- deviceListener.stopListening();
+ if (config.video.deviceIsAutomatic) {
+ deviceListener.stopListening();
+ }
}
private void startGrabberThread(File videoDevice) {
while (!isInterrupted()) {
Optional<VideoFrame> frame = grabber.grabFrame();
if (isPaused) {
- wait();
+ synchronized (grabberThread) {
+ wait();
+ }
}
if (frameConsumer != null) frame.ifPresent(frameConsumer);
frame.ifPresent(VideoMode.this::onVideoFrame);