From 4c15a46cdada16b596076eada8a8bf9b59208c5a Mon Sep 17 00:00:00 2001 From: Banks T Date: Sat, 23 Jan 2021 01:10:20 -0500 Subject: [PATCH] Move CameraConfiguration to VisionSource (#244) --- .../vision/camera/FileVisionSource.java | 7 +++---- .../vision/camera/USBCameraSource.java | 8 +++----- .../vision/camera/ZeroCopyPicamSource.java | 3 ++- .../vision/processes/VisionModule.java | 1 - .../vision/processes/VisionSource.java | 20 +++++++++++++++---- .../processes/VisionSourceSettables.java | 8 +++++++- .../processes/VisionModuleManagerTest.java | 6 +++--- 7 files changed, 34 insertions(+), 19 deletions(-) diff --git a/photon-core/src/main/java/org/photonvision/vision/camera/FileVisionSource.java b/photon-core/src/main/java/org/photonvision/vision/camera/FileVisionSource.java index 4d43876a9..25b874551 100644 --- a/photon-core/src/main/java/org/photonvision/vision/camera/FileVisionSource.java +++ b/photon-core/src/main/java/org/photonvision/vision/camera/FileVisionSource.java @@ -28,14 +28,13 @@ import org.photonvision.vision.frame.provider.FileFrameProvider; import org.photonvision.vision.processes.VisionSource; import org.photonvision.vision.processes.VisionSourceSettables; -public class FileVisionSource implements VisionSource { +public class FileVisionSource extends VisionSource { - private final CameraConfiguration cameraConfiguration; private final FileFrameProvider frameProvider; private final FileSourceSettables settables; public FileVisionSource(CameraConfiguration cameraConfiguration) { - this.cameraConfiguration = cameraConfiguration; + super(cameraConfiguration); frameProvider = new FileFrameProvider( Path.of(cameraConfiguration.path), @@ -48,7 +47,7 @@ public class FileVisionSource implements VisionSource { } public FileVisionSource(String name, String imagePath, double fov) { - cameraConfiguration = new CameraConfiguration(name, imagePath); + super(new CameraConfiguration(name, imagePath)); frameProvider = new FileFrameProvider(imagePath, fov); settables = new FileSourceSettables(cameraConfiguration, frameProvider.get().frameStaticProperties); diff --git a/photon-core/src/main/java/org/photonvision/vision/camera/USBCameraSource.java b/photon-core/src/main/java/org/photonvision/vision/camera/USBCameraSource.java index e7327b27e..652a0e25b 100644 --- a/photon-core/src/main/java/org/photonvision/vision/camera/USBCameraSource.java +++ b/photon-core/src/main/java/org/photonvision/vision/camera/USBCameraSource.java @@ -33,19 +33,18 @@ import org.photonvision.vision.frame.provider.USBFrameProvider; import org.photonvision.vision.processes.VisionSource; import org.photonvision.vision.processes.VisionSourceSettables; -public class USBCameraSource implements VisionSource { +public class USBCameraSource extends VisionSource { private final Logger logger; private final UsbCamera camera; private final USBCameraSettables usbCameraSettables; private final USBFrameProvider usbFrameProvider; - public final CameraConfiguration configuration; private final CvSink cvSink; public final QuirkyCamera cameraQuirks; public USBCameraSource(CameraConfiguration config) { + super(config); logger = new Logger(USBCameraSource.class, config.nickname, LogGroup.Camera); - configuration = config; camera = new UsbCamera(config.nickname, config.path); cvSink = CameraServer.getInstance().getVideo(this.camera); @@ -88,7 +87,6 @@ public class USBCameraSource implements VisionSource { super(configuration); getAllVideoModes(); setVideoMode(videoModes.get(0)); - calculateFrameStaticProps(); } private int timeToPiCamV2RawExposure(double time_us) { @@ -281,6 +279,6 @@ public class USBCameraSource implements VisionSource { @Override public int hashCode() { return Objects.hash( - camera, usbCameraSettables, usbFrameProvider, configuration, cvSink, cameraQuirks); + camera, usbCameraSettables, usbFrameProvider, cameraConfiguration, cvSink, cameraQuirks); } } diff --git a/photon-core/src/main/java/org/photonvision/vision/camera/ZeroCopyPicamSource.java b/photon-core/src/main/java/org/photonvision/vision/camera/ZeroCopyPicamSource.java index ea766793c..f4b7a5219 100644 --- a/photon-core/src/main/java/org/photonvision/vision/camera/ZeroCopyPicamSource.java +++ b/photon-core/src/main/java/org/photonvision/vision/camera/ZeroCopyPicamSource.java @@ -29,13 +29,14 @@ import org.photonvision.vision.frame.provider.AcceleratedPicamFrameProvider; import org.photonvision.vision.processes.VisionSource; import org.photonvision.vision.processes.VisionSourceSettables; -public class ZeroCopyPicamSource implements VisionSource { +public class ZeroCopyPicamSource extends VisionSource { private static final Logger logger = new Logger(ZeroCopyPicamSource.class, LogGroup.Camera); private final VisionSourceSettables settables; private final AcceleratedPicamFrameProvider frameProvider; public ZeroCopyPicamSource(CameraConfiguration configuration) { + super(configuration); if (configuration.cameraType != CameraType.ZeroCopyPicam) { throw new IllegalArgumentException( "GPUAcceleratedPicamSource only accepts CameraConfigurations with type Picam"); diff --git a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java index 8e5afb756..a0142dd84 100644 --- a/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java +++ b/photon-core/src/main/java/org/photonvision/vision/processes/VisionModule.java @@ -347,7 +347,6 @@ public class VisionModule { if (ret != null) { logger.debug("Saving calibration..."); visionSource.getSettables().getConfiguration().addCalibration(ret); - visionSource.getSettables().calculateFrameStaticProps(); } else { logger.error("Calibration failed..."); } diff --git a/photon-core/src/main/java/org/photonvision/vision/processes/VisionSource.java b/photon-core/src/main/java/org/photonvision/vision/processes/VisionSource.java index 9c59dc809..1dfcf66cb 100644 --- a/photon-core/src/main/java/org/photonvision/vision/processes/VisionSource.java +++ b/photon-core/src/main/java/org/photonvision/vision/processes/VisionSource.java @@ -17,12 +17,24 @@ package org.photonvision.vision.processes; +import org.photonvision.common.configuration.CameraConfiguration; import org.photonvision.vision.frame.FrameProvider; -public interface VisionSource { - FrameProvider getFrameProvider(); +public abstract class VisionSource { - VisionSourceSettables getSettables(); + protected final CameraConfiguration cameraConfiguration; - boolean isVendorCamera(); + protected VisionSource(CameraConfiguration cameraConfiguration) { + this.cameraConfiguration = cameraConfiguration; + } + + public CameraConfiguration getCameraConfiguration() { + return cameraConfiguration; + } + + public abstract FrameProvider getFrameProvider(); + + public abstract VisionSourceSettables getSettables(); + + public abstract boolean isVendorCamera(); } diff --git a/photon-core/src/main/java/org/photonvision/vision/processes/VisionSourceSettables.java b/photon-core/src/main/java/org/photonvision/vision/processes/VisionSourceSettables.java index 0d3c38a22..9dbb2ee0c 100644 --- a/photon-core/src/main/java/org/photonvision/vision/processes/VisionSourceSettables.java +++ b/photon-core/src/main/java/org/photonvision/vision/processes/VisionSourceSettables.java @@ -23,6 +23,7 @@ import java.util.HashMap; import org.photonvision.common.configuration.CameraConfiguration; import org.photonvision.common.logging.LogGroup; import org.photonvision.common.logging.Logger; +import org.photonvision.vision.calibration.CameraCalibrationCoefficients; import org.photonvision.vision.frame.FrameStaticProperties; public abstract class VisionSourceSettables { @@ -86,7 +87,12 @@ public abstract class VisionSourceSettables { calculateFrameStaticProps(); } - public void calculateFrameStaticProps() { + public void addCalibration(CameraCalibrationCoefficients calibrationCoefficients) { + configuration.addCalibration(calibrationCoefficients); + calculateFrameStaticProps(); + } + + private void calculateFrameStaticProps() { var videoMode = getCurrentVideoMode(); this.frameStaticProperties = new FrameStaticProperties( diff --git a/photon-core/src/test/java/org/photonvision/vision/processes/VisionModuleManagerTest.java b/photon-core/src/test/java/org/photonvision/vision/processes/VisionModuleManagerTest.java index e790424d4..cec6506d7 100644 --- a/photon-core/src/test/java/org/photonvision/vision/processes/VisionModuleManagerTest.java +++ b/photon-core/src/test/java/org/photonvision/vision/processes/VisionModuleManagerTest.java @@ -37,12 +37,12 @@ public class VisionModuleManagerTest { TestUtils.loadLibraries(); } - private static class TestSource implements VisionSource { + private static class TestSource extends VisionSource { private final FrameProvider provider; public TestSource(FrameProvider provider) { - + super(new CameraConfiguration("", "", "", "")); this.provider = provider; } @@ -53,7 +53,7 @@ public class VisionModuleManagerTest { @Override public VisionSourceSettables getSettables() { - return new TestSettables(new CameraConfiguration("", "", "", "")); + return new TestSettables(getCameraConfiguration()); } @Override