53cf09b5f8076562a2a1f78fcf4525ffbd08b17f
[kaka/cakelight.git] / src / kaka / cakelight / VideoMode.java
1 package kaka.cakelight;
2
3 import java.io.IOException;
4 import java.util.Optional;
5 import java.util.function.Consumer;
6
7 import static kaka.cakelight.Main.log;
8 import static kaka.cakelight.Main.timeIt;
9
10 public class VideoMode implements Mode {
11     private Configuration config;
12     private Thread thread;
13     private Consumer<Frame> frameConsumer;
14
15     @Override
16     public void enter(Configuration config) {
17         this.config = config;
18         startGrabberThread();
19     }
20
21     @Override
22     public void exit() {
23         thread.interrupt();
24     }
25
26     private void startGrabberThread() {
27         assert frameConsumer != null;
28         thread = new Thread() {
29             public void run() {
30                 try (FrameGrabber grabber = FrameGrabber.from(config)) {
31                     while (!isInterrupted()) {
32 //                        Optional<Frame> frame = grabber.grabFrame();
33                         grabber.grabFrame().ifPresent(frameConsumer);
34 //                        timeIt("frame", grabber::grabFrame);
35                         // TODO: process frame
36                         // TODO: save where the LedController can access it
37                     }
38                 } catch (IOException e) {
39                     e.printStackTrace();
40                 }
41             }
42         };
43         thread.start();
44     }
45
46     public void onFrame(Consumer<Frame> consumer) {
47         frameConsumer = consumer;
48     }
49 }