From febd7292cff0191f98ee01189c71d157bf879671 Mon Sep 17 00:00:00 2001 From: Matt Date: Wed, 27 Nov 2019 21:11:05 -0800 Subject: [PATCH] Start work on video mode selection --- .../java/com/chameleonvision/vision/VisionProcess.java | 10 ++++++++-- .../chameleonvision/vision/camera/CameraCapture.java | 2 ++ .../vision/camera/CaptureStaticProperties.java | 5 ++++- .../vision/camera/USBCameraCapture.java | 5 +++++ .../vision/camera/USBCameraProperties.java | 4 ++-- .../vision/image/CaptureProperties.java | 3 ++- .../java/com/chameleonvision/web/SocketHandler.java | 2 +- 7 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java b/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java index 31a6ec4bf..f8d284355 100644 --- a/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java +++ b/Main/src/main/java/com/chameleonvision/vision/VisionProcess.java @@ -1,7 +1,6 @@ package com.chameleonvision.vision; import com.chameleonvision.Debug; -import com.chameleonvision.Main; import com.chameleonvision.config.ConfigManager; import com.chameleonvision.util.LoopingRunnable; import com.chameleonvision.vision.camera.CameraCapture; @@ -16,7 +15,6 @@ import edu.wpi.first.wpiutil.CircularBuffer; import org.apache.commons.lang3.tuple.Pair; import org.opencv.core.Mat; -import java.net.Socket; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -237,6 +235,14 @@ public class VisionProcess { cameraStreamer.setNewVideoMode(newMode); } + public VideoMode getCurrentVideoMode() { + return cameraCapture.getCurrentVideoMode(); + } + + public List getPossibleVideoModes() { + return cameraCapture.getProperties().videoModes; + } + public List getPipelines() { return pipelines; } diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/CameraCapture.java b/Main/src/main/java/com/chameleonvision/vision/camera/CameraCapture.java index 152bccaa0..df93c35b8 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/CameraCapture.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/CameraCapture.java @@ -6,6 +6,8 @@ import edu.wpi.cscore.VideoMode; public interface CameraCapture extends ImageCapture { USBCameraProperties getProperties(); + public VideoMode getCurrentVideoMode(); + /** * Set the exposure of the camera * @param exposure the new exposure to set the camera to diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/CaptureStaticProperties.java b/Main/src/main/java/com/chameleonvision/vision/camera/CaptureStaticProperties.java index 4c991f5d6..1837341dc 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/CaptureStaticProperties.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/CaptureStaticProperties.java @@ -1,5 +1,6 @@ package com.chameleonvision.vision.camera; +import edu.wpi.cscore.VideoMode; import org.apache.commons.math3.fraction.Fraction; import org.apache.commons.math3.util.FastMath; @@ -13,8 +14,10 @@ public class CaptureStaticProperties { public final double centerY; public final double horizontalFocalLength; public final double verticalFocalLength; + public final VideoMode mode; - public CaptureStaticProperties(int imageWidth, int imageHeight, double fov) { + public CaptureStaticProperties(VideoMode mode, int imageWidth, int imageHeight, double fov) { + this.mode = mode; this.imageWidth = imageWidth; this.imageHeight = imageHeight; this.fov = fov; diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraCapture.java b/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraCapture.java index d7912b428..591bae326 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraCapture.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraCapture.java @@ -28,6 +28,11 @@ public class USBCameraCapture implements CameraCapture { return properties; } + @Override + public VideoMode getCurrentVideoMode() { + return baseCamera.getVideoMode(); + } + @Override public Pair getFrame() { Long deltaTime; diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraProperties.java b/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraProperties.java index 7d8d10327..68c076e92 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraProperties.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraProperties.java @@ -69,7 +69,7 @@ public class USBCameraProperties extends CaptureProperties { public void setFOV(double FOV) { this.FOV = FOV; - staticProperties = new CaptureStaticProperties(staticProperties.imageWidth, staticProperties.imageHeight, FOV); + staticProperties = new CaptureStaticProperties(staticProperties.mode, staticProperties.imageWidth, staticProperties.imageHeight, FOV); } public double getFOV() { @@ -91,7 +91,7 @@ public class USBCameraProperties extends CaptureProperties { } void updateVideoMode(VideoMode videoMode) { - staticProperties = new CaptureStaticProperties(videoMode.width, videoMode.height, FOV); + staticProperties = new CaptureStaticProperties(videoMode, videoMode.width, videoMode.height, FOV); } public List getVideoModes() { diff --git a/Main/src/main/java/com/chameleonvision/vision/image/CaptureProperties.java b/Main/src/main/java/com/chameleonvision/vision/image/CaptureProperties.java index 139023fcd..e1f82fe98 100644 --- a/Main/src/main/java/com/chameleonvision/vision/image/CaptureProperties.java +++ b/Main/src/main/java/com/chameleonvision/vision/image/CaptureProperties.java @@ -1,6 +1,7 @@ package com.chameleonvision.vision.image; import com.chameleonvision.vision.camera.CaptureStaticProperties; +import edu.wpi.cscore.VideoMode; import org.opencv.core.Mat; public class CaptureProperties { @@ -11,7 +12,7 @@ public class CaptureProperties { } public CaptureProperties(Mat staticImage, double fov) { - staticProperties = new CaptureStaticProperties(staticImage.cols(), staticImage.rows(), fov); + staticProperties = new CaptureStaticProperties(new VideoMode(0, staticImage.cols(), staticImage.rows(), 99999), staticImage.cols(), staticImage.rows(), fov); } public CaptureStaticProperties getStaticProperties() { diff --git a/Main/src/main/java/com/chameleonvision/web/SocketHandler.java b/Main/src/main/java/com/chameleonvision/web/SocketHandler.java index 09b70fa84..586671152 100644 --- a/Main/src/main/java/com/chameleonvision/web/SocketHandler.java +++ b/Main/src/main/java/com/chameleonvision/web/SocketHandler.java @@ -221,7 +221,7 @@ public class SocketHandler { tmp.put("fov", currentCamera.getProperties().getFOV()); tmp.put("streamDivisor", currentVisionProcess.cameraStreamer.getDivisor().ordinal()); // TODO: (HIGH) get videomode index! -// tmp.put("resolution", currentCamera.getVideoModeIndex()); +// tmp.put("resolution", currentCamera.getVideoModeIndex()); return tmp; }