Dolda2000 GitWeb
/
kaka
/
cakelight.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fine-tune fire mode
[kaka/cakelight.git]
/
src
/
kaka
/
cakelight
/
mode
/
VideoMode.java
diff --git
a/src/kaka/cakelight/mode/VideoMode.java
b/src/kaka/cakelight/mode/VideoMode.java
index
1f43ffb
..
a8397dc
100644
(file)
--- 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<VideoFrame> frameConsumer;
private VideoDeviceListener deviceListener;
private Thread grabberThread;
private Consumer<VideoFrame> frameConsumer;
private VideoDeviceListener deviceListener;
+ private boolean isPaused = false;
public VideoMode() {
deviceListener = new VideoDeviceListener();
public VideoMode() {
deviceListener = new VideoDeviceListener();
@@
-24,27
+25,33
@@
public class VideoMode extends Mode {
@Override
public void enter(Configuration config) {
this.config = config;
@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
public void pause() {
}
@Override
public void pause() {
- try {
- grabberThread.wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ isPaused = true;
}
@Override
public void resume() {
}
@Override
public void resume() {
- grabberThread.notify();
+ isPaused = false;
+ synchronized (grabberThread) {
+ grabberThread.notify();
+ }
}
@Override
public void exit() {
grabberThread.interrupt();
}
@Override
public void exit() {
grabberThread.interrupt();
- deviceListener.stopListening();
+ if (config.video.deviceIsAutomatic) {
+ deviceListener.stopListening();
+ }
}
private void startGrabberThread(File videoDevice) {
}
private void startGrabberThread(File videoDevice) {
@@
-54,11
+61,16
@@
public class VideoMode extends Mode {
try (FrameGrabber grabber = FrameGrabber.from(videoDevice, config)) {
while (!isInterrupted()) {
Optional<VideoFrame> frame = grabber.grabFrame();
try (FrameGrabber grabber = FrameGrabber.from(videoDevice, config)) {
while (!isInterrupted()) {
Optional<VideoFrame> frame = grabber.grabFrame();
+ if (isPaused) {
+ synchronized (grabberThread) {
+ wait();
+ }
+ }
if (frameConsumer != null) frame.ifPresent(frameConsumer);
frame.ifPresent(VideoMode.this::onVideoFrame);
// timeIt("frame", grabber::grabFrame);
}
if (frameConsumer != null) frame.ifPresent(frameConsumer);
frame.ifPresent(VideoMode.this::onVideoFrame);
// timeIt("frame", grabber::grabFrame);
}
- } catch (IOException e) {
+ } catch (IOException
| InterruptedException
e) {
e.printStackTrace();
}
}
e.printStackTrace();
}
}