diff --git a/Main/src/main/java/com/chameleonvision/util/LoopingRunnable.java b/Main/src/main/java/com/chameleonvision/util/LoopingRunnable.java index 1df278996..555063956 100644 --- a/Main/src/main/java/com/chameleonvision/util/LoopingRunnable.java +++ b/Main/src/main/java/com/chameleonvision/util/LoopingRunnable.java @@ -4,7 +4,7 @@ package com.chameleonvision.util; * A thread that tries to run at a specified loop time */ public abstract class LoopingRunnable implements Runnable { - private final Long loopTimeMs; + protected volatile Long loopTimeMs; protected abstract void process(); diff --git a/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java b/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java index 25aff9ce0..453e750af 100644 --- a/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java @@ -61,8 +61,7 @@ public class VisionProcess { // Thread to grab frames from the camera // TODO: (HIGH) fix video modes!!! - // TODO: (HIGH) FIX FPS!!!!!!! - this.cameraRunnable = new CameraFrameRunnable(cameraProcess.getProperties().videoModes.get(0).fps); + this.cameraRunnable = new CameraFrameRunnable(cameraProcess.getProperties().videoModes.get(0).f ps); lastPipelineResult = new DriverVisionPipeline.DriverPipelineResult( null, cameraRunnable.getFrame(new Mat()), 0 @@ -229,6 +228,7 @@ public class VisionProcess { public void setVideoMode(VideoMode newMode) { cameraProcess.setVideoMode(newMode); + cameraRunnable.updateCameraFPS(newMode.fps); cameraStreamer.setNewVideoMode(newMode); } @@ -290,6 +290,10 @@ public class VisionProcess { super(1000L/(cameraFPS + 2)); } + void updateCameraFPS(int newFPS) { + super.loopTimeMs = 1000L / (newFPS + 2); + } + @Override public void process() { System.out.println("running camera grabber process");