diff --git a/Main/chameleon-vision.iml b/Main/chameleon-vision.iml
index 1799ea932..6f10ef5f5 100644
--- a/Main/chameleon-vision.iml
+++ b/Main/chameleon-vision.iml
@@ -12,6 +12,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Main/src/main/java/com/chameleonvision/classabstraction/camera/CameraProcess.java b/Main/src/main/java/com/chameleonvision/classabstraction/camera/CameraProcess.java
index fe5777c0c..df4a4c38f 100644
--- a/Main/src/main/java/com/chameleonvision/classabstraction/camera/CameraProcess.java
+++ b/Main/src/main/java/com/chameleonvision/classabstraction/camera/CameraProcess.java
@@ -4,7 +4,7 @@ import org.apache.commons.lang3.tuple.Pair;
import org.opencv.core.Mat;
public interface CameraProcess {
- Pair getFrame();
+ Pair getFrame(Mat frame);
void setExposure(int exposure);
void setBrightness(int brightness);
diff --git a/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCamera.java b/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCamera.java
index 7175ff7f9..15dc844ad 100644
--- a/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCamera.java
+++ b/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCamera.java
@@ -1,15 +1,49 @@
package com.chameleonvision.classabstraction.camera;
+import edu.wpi.cscore.CvSink;
import edu.wpi.cscore.UsbCamera;
+import edu.wpi.cscore.VideoException;
import edu.wpi.cscore.VideoMode;
+import edu.wpi.first.cameraserver.CameraServer;
+import org.apache.commons.lang3.tuple.Pair;
+import org.opencv.core.Mat;
-public class USBCamera {
+public class USBCamera implements CameraProcess {
private final UsbCamera baseCamera;
public final CameraProperties properties;
+ private final CvSink cvSink;
+ private Mat imageBuffer = new Mat();
- public USBCamera(UsbCamera camera) {
+ public USBCamera(UsbCamera camera, double fov) {
baseCamera = camera;
+ cvSink = CameraServer.getInstance().getVideo(baseCamera);
VideoMode vidMode = new VideoMode(VideoMode.PixelFormat.kYUYV, 640, 480, 60);
- properties = new CameraProperties(baseCamera, 75);
+ properties = new CameraProperties(baseCamera, fov);
+ }
+
+ @Override
+ public Pair getFrame(Mat frame) {
+ var timestamp = System.nanoTime();
+ cvSink.grabFrame(imageBuffer);
+ imageBuffer.copyTo(frame);
+ return Pair.of(frame, timestamp - System.nanoTime());
+ }
+
+ @Override
+ public void setExposure(int exposure) {
+ try {
+ baseCamera.setExposureManual(exposure);
+ } catch (VideoException e) {
+ System.err.println("USBCamera Does not support exposure change");
+ }
+ }
+
+ @Override
+ public void setBrightness(int brightness) {
+ try {
+ baseCamera.setBrightness(brightness);
+ } catch (VideoException e) {
+ System.err.println("USBCamera Does not support brightness change");
+ }
}
}