Move CameraConfiguration to VisionSource (#244)

This commit is contained in:
Banks T
2021-01-23 01:10:20 -05:00
committed by GitHub
parent d59f8d1227
commit 4c15a46cda
7 changed files with 34 additions and 19 deletions

View File

@@ -28,14 +28,13 @@ import org.photonvision.vision.frame.provider.FileFrameProvider;
import org.photonvision.vision.processes.VisionSource; import org.photonvision.vision.processes.VisionSource;
import org.photonvision.vision.processes.VisionSourceSettables; 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 FileFrameProvider frameProvider;
private final FileSourceSettables settables; private final FileSourceSettables settables;
public FileVisionSource(CameraConfiguration cameraConfiguration) { public FileVisionSource(CameraConfiguration cameraConfiguration) {
this.cameraConfiguration = cameraConfiguration; super(cameraConfiguration);
frameProvider = frameProvider =
new FileFrameProvider( new FileFrameProvider(
Path.of(cameraConfiguration.path), Path.of(cameraConfiguration.path),
@@ -48,7 +47,7 @@ public class FileVisionSource implements VisionSource {
} }
public FileVisionSource(String name, String imagePath, double fov) { public FileVisionSource(String name, String imagePath, double fov) {
cameraConfiguration = new CameraConfiguration(name, imagePath); super(new CameraConfiguration(name, imagePath));
frameProvider = new FileFrameProvider(imagePath, fov); frameProvider = new FileFrameProvider(imagePath, fov);
settables = settables =
new FileSourceSettables(cameraConfiguration, frameProvider.get().frameStaticProperties); new FileSourceSettables(cameraConfiguration, frameProvider.get().frameStaticProperties);

View File

@@ -33,19 +33,18 @@ import org.photonvision.vision.frame.provider.USBFrameProvider;
import org.photonvision.vision.processes.VisionSource; import org.photonvision.vision.processes.VisionSource;
import org.photonvision.vision.processes.VisionSourceSettables; import org.photonvision.vision.processes.VisionSourceSettables;
public class USBCameraSource implements VisionSource { public class USBCameraSource extends VisionSource {
private final Logger logger; private final Logger logger;
private final UsbCamera camera; private final UsbCamera camera;
private final USBCameraSettables usbCameraSettables; private final USBCameraSettables usbCameraSettables;
private final USBFrameProvider usbFrameProvider; private final USBFrameProvider usbFrameProvider;
public final CameraConfiguration configuration;
private final CvSink cvSink; private final CvSink cvSink;
public final QuirkyCamera cameraQuirks; public final QuirkyCamera cameraQuirks;
public USBCameraSource(CameraConfiguration config) { public USBCameraSource(CameraConfiguration config) {
super(config);
logger = new Logger(USBCameraSource.class, config.nickname, LogGroup.Camera); logger = new Logger(USBCameraSource.class, config.nickname, LogGroup.Camera);
configuration = config;
camera = new UsbCamera(config.nickname, config.path); camera = new UsbCamera(config.nickname, config.path);
cvSink = CameraServer.getInstance().getVideo(this.camera); cvSink = CameraServer.getInstance().getVideo(this.camera);
@@ -88,7 +87,6 @@ public class USBCameraSource implements VisionSource {
super(configuration); super(configuration);
getAllVideoModes(); getAllVideoModes();
setVideoMode(videoModes.get(0)); setVideoMode(videoModes.get(0));
calculateFrameStaticProps();
} }
private int timeToPiCamV2RawExposure(double time_us) { private int timeToPiCamV2RawExposure(double time_us) {
@@ -281,6 +279,6 @@ public class USBCameraSource implements VisionSource {
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash( return Objects.hash(
camera, usbCameraSettables, usbFrameProvider, configuration, cvSink, cameraQuirks); camera, usbCameraSettables, usbFrameProvider, cameraConfiguration, cvSink, cameraQuirks);
} }
} }

View File

@@ -29,13 +29,14 @@ import org.photonvision.vision.frame.provider.AcceleratedPicamFrameProvider;
import org.photonvision.vision.processes.VisionSource; import org.photonvision.vision.processes.VisionSource;
import org.photonvision.vision.processes.VisionSourceSettables; 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 static final Logger logger = new Logger(ZeroCopyPicamSource.class, LogGroup.Camera);
private final VisionSourceSettables settables; private final VisionSourceSettables settables;
private final AcceleratedPicamFrameProvider frameProvider; private final AcceleratedPicamFrameProvider frameProvider;
public ZeroCopyPicamSource(CameraConfiguration configuration) { public ZeroCopyPicamSource(CameraConfiguration configuration) {
super(configuration);
if (configuration.cameraType != CameraType.ZeroCopyPicam) { if (configuration.cameraType != CameraType.ZeroCopyPicam) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"GPUAcceleratedPicamSource only accepts CameraConfigurations with type Picam"); "GPUAcceleratedPicamSource only accepts CameraConfigurations with type Picam");

View File

@@ -347,7 +347,6 @@ public class VisionModule {
if (ret != null) { if (ret != null) {
logger.debug("Saving calibration..."); logger.debug("Saving calibration...");
visionSource.getSettables().getConfiguration().addCalibration(ret); visionSource.getSettables().getConfiguration().addCalibration(ret);
visionSource.getSettables().calculateFrameStaticProps();
} else { } else {
logger.error("Calibration failed..."); logger.error("Calibration failed...");
} }

View File

@@ -17,12 +17,24 @@
package org.photonvision.vision.processes; package org.photonvision.vision.processes;
import org.photonvision.common.configuration.CameraConfiguration;
import org.photonvision.vision.frame.FrameProvider; import org.photonvision.vision.frame.FrameProvider;
public interface VisionSource { public abstract class VisionSource {
FrameProvider getFrameProvider();
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();
} }

View File

@@ -23,6 +23,7 @@ import java.util.HashMap;
import org.photonvision.common.configuration.CameraConfiguration; import org.photonvision.common.configuration.CameraConfiguration;
import org.photonvision.common.logging.LogGroup; import org.photonvision.common.logging.LogGroup;
import org.photonvision.common.logging.Logger; import org.photonvision.common.logging.Logger;
import org.photonvision.vision.calibration.CameraCalibrationCoefficients;
import org.photonvision.vision.frame.FrameStaticProperties; import org.photonvision.vision.frame.FrameStaticProperties;
public abstract class VisionSourceSettables { public abstract class VisionSourceSettables {
@@ -86,7 +87,12 @@ public abstract class VisionSourceSettables {
calculateFrameStaticProps(); calculateFrameStaticProps();
} }
public void calculateFrameStaticProps() { public void addCalibration(CameraCalibrationCoefficients calibrationCoefficients) {
configuration.addCalibration(calibrationCoefficients);
calculateFrameStaticProps();
}
private void calculateFrameStaticProps() {
var videoMode = getCurrentVideoMode(); var videoMode = getCurrentVideoMode();
this.frameStaticProperties = this.frameStaticProperties =
new FrameStaticProperties( new FrameStaticProperties(

View File

@@ -37,12 +37,12 @@ public class VisionModuleManagerTest {
TestUtils.loadLibraries(); TestUtils.loadLibraries();
} }
private static class TestSource implements VisionSource { private static class TestSource extends VisionSource {
private final FrameProvider provider; private final FrameProvider provider;
public TestSource(FrameProvider provider) { public TestSource(FrameProvider provider) {
super(new CameraConfiguration("", "", "", ""));
this.provider = provider; this.provider = provider;
} }
@@ -53,7 +53,7 @@ public class VisionModuleManagerTest {
@Override @Override
public VisionSourceSettables getSettables() { public VisionSourceSettables getSettables() {
return new TestSettables(new CameraConfiguration("", "", "", "")); return new TestSettables(getCameraConfiguration());
} }
@Override @Override