Files
PhotonVision/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java

57 lines
1.6 KiB
Java
Raw Normal View History

package com.chameleonvision.vision.process;
2019-09-19 14:07:42 -04:00
import com.chameleonvision.vision.camera.Camera;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
public class CameraProcess implements Runnable {
2019-09-19 14:07:42 -04:00
private final Camera camera;
private final int maxFPS;
private Mat inputFrame;
private Mat outputFrame;
private long timestamp;
private final Object inputFrameLock = new Object();
private final Object outputFrameLock = new Object();
public CameraProcess(Camera camera) {
this.camera = camera;
maxFPS = camera.getVideoMode().fps;
var camVals = camera.getCamVals();
inputFrame = new Mat(camVals.ImageWidth, camVals.ImageHeight, CvType.CV_8UC3);
outputFrame = new Mat(camVals.ImageWidth, camVals.ImageHeight, CvType.CV_8UC3);
}
2019-09-18 03:04:48 +03:00
void updateFrame(Mat inputFrame) {
synchronized (inputFrameLock) {
inputFrame.copyTo(this.inputFrame);
}
}
2019-09-18 03:04:48 +03:00
long getLatestFrame(Mat outputFrame) {
synchronized (outputFrameLock) {
this.outputFrame.copyTo(outputFrame);
return timestamp;
}
}
@Override
public void run() {
while(!Thread.interrupted()) {
synchronized (outputFrameLock) {
timestamp = camera.grabFrame(outputFrame);
}
synchronized (inputFrameLock) {
camera.putFrame(inputFrame);
}
var msToWait = (long)1000/maxFPS;
try {
Thread.sleep(msToWait);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}