Files
PhotonVision/Main/src/main/java/com/chameleonvision/classabstraction/camera/USBCameraProcess.java

68 lines
2.1 KiB
Java
Raw Normal View History

package com.chameleonvision.classabstraction.camera;
2019-11-10 17:55:28 -05:00
import com.chameleonvision.classabstraction.config.CameraConfig;
2019-11-07 09:02:23 -08:00
import edu.wpi.cscore.CvSink;
import edu.wpi.cscore.UsbCamera;
2019-11-07 09:02:23 -08:00
import edu.wpi.cscore.VideoException;
import edu.wpi.cscore.VideoMode;
2019-11-07 09:02:23 -08:00
import edu.wpi.first.cameraserver.CameraServer;
import org.apache.commons.lang3.tuple.Pair;
import org.opencv.core.Mat;
public class USBCameraProcess implements CameraProcess {
private final UsbCamera baseCamera;
2019-11-07 09:02:23 -08:00
private final CvSink cvSink;
private Mat imageBuffer = new Mat();
public CameraProperties properties;
public USBCameraProcess(UsbCamera camera, CameraConfig config) {
baseCamera = camera;
2019-11-07 09:02:23 -08:00
cvSink = CameraServer.getInstance().getVideo(baseCamera);
properties = new CameraProperties(baseCamera, config.FOV);
setVideoMode(properties.videoModes.get(0));
2019-11-07 09:02:23 -08:00
}
@Override
public CameraProperties getProperties() {
return properties;
}
2019-11-07 09:02:23 -08:00
@Override
public Pair<Mat, Long> getFrame() {
Long deltaTime;
synchronized (cvSink) {
deltaTime = cvSink.grabFrame(imageBuffer) * 1000L;
}
return Pair.of(imageBuffer, deltaTime);
2019-11-07 09:02:23 -08:00
}
@Override
public void setExposure(int exposure) {
try {
baseCamera.setExposureManual(exposure);
} catch (VideoException e) {
System.err.println("Current camera does not support exposure change");
2019-11-07 09:02:23 -08:00
}
}
@Override
public void setBrightness(int brightness) {
try {
baseCamera.setBrightness(brightness);
} catch (VideoException e) {
System.err.println("Current camera does not support brightness change");
2019-11-07 09:02:23 -08:00
}
}
@Override
public void setVideoMode(VideoMode mode) {
try {
baseCamera.setVideoMode(mode);
properties.updateVideoMode(mode);
} catch (VideoException e) {
System.err.println("Current camera does not support resolution change");
}
}
}