Only output bytes read when something's wrong
[kaka/cakelight.git] / src / kaka / cakelight / FrameGrabber.java
index 8fbb16f..e654c91 100644 (file)
@@ -14,10 +14,10 @@ public class FrameGrabber implements Closeable {
     private FrameGrabber() {
     }
 
-    public static FrameGrabber from(Configuration config) {
+    public static FrameGrabber from(File videoDevice, Configuration config) {
         FrameGrabber fg = new FrameGrabber();
         fg.config = config;
-        fg.file = new File(config.video.device);
+        fg.file = videoDevice;
         fg.bytesPerFrame = config.video.width * config.video.height * config.video.bpp;
         fg.prepare();
         return fg;
@@ -28,6 +28,7 @@ public class FrameGrabber implements Closeable {
             fileStream = new FileInputStream(file);
             return true;
         } catch (FileNotFoundException e) {
+            // TODO: handle java.io.FileNotFoundException: /dev/video1 (Permission denied)
             e.printStackTrace();
             return false;
         }
@@ -36,12 +37,14 @@ public class FrameGrabber implements Closeable {
     /**
      * Must be run in the same thread as {@link #prepare}.
      */
-    public Optional<Frame> grabFrame() {
+    public Optional<VideoFrame> grabFrame() {
         try {
             byte[] data = new byte[bytesPerFrame];
             int count = fileStream.read(data);
-            log("# of bytes read = " + count);
-            return Optional.of(Frame.of(data, config));
+            if (count != bytesPerFrame) {
+                log("Expected to read " + bytesPerFrame + " bytes per frame but read " + count);
+            }
+            return Optional.of(VideoFrame.of(data, config));
         } catch (IOException e) {
             e.printStackTrace();
         }