X-Git-Url: http://dolda2000.com/gitweb/?p=kaka%2Fcakelight.git;a=blobdiff_plain;f=src%2Fkaka%2Fcakelight%2FVideoMode.java;h=1f6d68f2a7433aa5818171dd712565cb44f8b660;hp=e4b9400ca04b57d6d570fb8c4b4675702d9612f2;hb=8418fbdaa82ab1152cd37154cb110762add943a6;hpb=03b67a7377d6d23d517d33e47f338bb7859596ed diff --git a/src/kaka/cakelight/VideoMode.java b/src/kaka/cakelight/VideoMode.java index e4b9400..1f6d68f 100644 --- a/src/kaka/cakelight/VideoMode.java +++ b/src/kaka/cakelight/VideoMode.java @@ -5,15 +5,15 @@ import java.io.IOException; import java.util.Optional; import java.util.function.Consumer; -public class VideoMode extends Mode implements Consumer> { +public class VideoMode extends Mode { private Configuration config; - private Thread thread; + private Thread grabberThread; private Consumer frameConsumer; private VideoDeviceListener deviceListener; public VideoMode() { deviceListener = new VideoDeviceListener(); - deviceListener.onVideoDeviceChange(this); + deviceListener.onVideoDeviceChange(this::onVideoDeviceChange); } @Override @@ -24,13 +24,13 @@ public class VideoMode extends Mode implements Consumer> { @Override public void exit() { - thread.interrupt(); + grabberThread.interrupt(); deviceListener.stopListening(); } private void startGrabberThread(File videoDevice) { assert frameConsumer != null; - thread = new Thread() { + grabberThread = new Thread() { public void run() { try (FrameGrabber grabber = FrameGrabber.from(videoDevice, config)) { while (!isInterrupted()) { @@ -38,15 +38,13 @@ public class VideoMode extends Mode implements Consumer> { if (frameConsumer != null) frame.ifPresent(frameConsumer); frame.ifPresent(VideoMode.this::onFrame); // timeIt("frame", grabber::grabFrame); - // TODO: process frame - // TODO: save where the LedController can access it } } catch (IOException e) { e.printStackTrace(); } } }; - thread.start(); + grabberThread.start(); } public void onVideoFrame(Consumer consumer) { @@ -54,15 +52,13 @@ public class VideoMode extends Mode implements Consumer> { } private void onFrame(Frame frame) { - assert frameListener != null; - frameListener.accept(frame.getLedFrame()); + updateWithFrame(frame.getLedFrame()); } - @Override - public void accept(Optional videoDevice) { + public void onVideoDeviceChange(Optional videoDevice) { // Should only happen when this mode is active! - if (thread != null) { - thread.interrupt(); + if (grabberThread != null) { + grabberThread.interrupt(); } videoDevice.ifPresent(this::startGrabberThread); }