mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-20 00:51:41 +00:00
Move CameraConfiguration to VisionSource (#244)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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...");
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user