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.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);

View File

@@ -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);
}
}

View File

@@ -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");

View File

@@ -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...");
}

View File

@@ -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();
}

View File

@@ -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(

View File

@@ -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