diff --git a/Main/pom.xml b/Main/pom.xml
index a96fc2933..867a9ab5e 100644
--- a/Main/pom.xml
+++ b/Main/pom.xml
@@ -5,7 +5,7 @@
4.0.0
org.chameleon-vision.main
chameleon-vision
- 1.1.4-BETA
+ 2.0-SNAPSHOT
diff --git a/Main/src/main/java/com/chameleonvision/Main.java b/Main/src/main/java/com/chameleonvision/Main.java
index 6941cb7ea..59b544707 100644
--- a/Main/src/main/java/com/chameleonvision/Main.java
+++ b/Main/src/main/java/com/chameleonvision/Main.java
@@ -22,7 +22,7 @@ public class Main {
private static final String NETWORK_MANAGE_KEY = "--unmanage-network"; // no args for this setting
private static final String IGNORE_ROOT = "--ignore-root"; // no args for this setting
- private static final int DEFAULT_PORT = 8888;
+ private static final int DEFAULT_PORT = 5800;
private static boolean ntServerMode = false;
private static boolean manageNetwork = true;
diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/Camera.java b/Main/src/main/java/com/chameleonvision/vision/camera/Camera.java
index a1ecd7f2a..d9d8a6551 100644
--- a/Main/src/main/java/com/chameleonvision/vision/camera/Camera.java
+++ b/Main/src/main/java/com/chameleonvision/vision/camera/Camera.java
@@ -147,12 +147,12 @@ public class Camera {
}
private void updateCvSource() {
+ CameraManager.getVisionProcessByCameraName(name).cameraProcess.updateFrameSize();
synchronized (cvSourceLock) {
var newWidth = camVideoMode.width / streamDivisor.value;
var newHeight = camVideoMode.height / streamDivisor.value;
cvSource = cs.putVideo(name, newWidth, newHeight);
}
- CameraManager.getVisionProcessByCameraName(name).cameraProcess.updateFrameSize();
ServerHandler.sendFullSettings();
}
diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/CameraSerializer.java b/Main/src/main/java/com/chameleonvision/vision/camera/CameraSerializer.java
index 313959ddb..3022af208 100644
--- a/Main/src/main/java/com/chameleonvision/vision/camera/CameraSerializer.java
+++ b/Main/src/main/java/com/chameleonvision/vision/camera/CameraSerializer.java
@@ -15,7 +15,7 @@ public class CameraSerializer implements JsonSerializer {
var pipelines = context.serialize(camera.getPipelines());
obj.add("pipelines", pipelines);
obj.addProperty("resolution", camera.getVideoModeIndex());
- obj.add("camVideoMode", context.serialize(camera.getVideoMode()));
+// obj.add("camVideoMode", context.serialize(camera.getVideoMode()));
obj.add("isDriver",context.serialize(camera.getDriverMode()));
obj.add("driverExposure",context.serialize(camera.getDriverExposure()));
obj.add("driverBrightness",context.serialize(camera.getDriverBrightness()));
diff --git a/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java b/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java
index 0f9405cf3..813c9d6e8 100644
--- a/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java
+++ b/Main/src/main/java/com/chameleonvision/vision/process/CameraProcess.java
@@ -10,42 +10,40 @@ import org.opencv.imgproc.Imgproc;
public class CameraProcess implements Runnable {
private final Camera camera;
- private final int maxFPS;
- private final Object inputFrameLock = new Object();
+
private final Object outputFrameLock = new Object();
- private Mat inputFrame;
+ private final Object inputFrameLock = new Object();
+ private int maxFPS;
private Mat outputFrame;
+ private Mat inputFrame;
private long timestamp;
private StreamDivisor divisor;
CameraProcess(Camera camera) {
this.camera = camera;
- maxFPS = camera.getVideoMode().fps;
updateFrameSize();
}
public void updateFrameSize() {
- var camVals = camera.getCamVals();
+ maxFPS = camera.getVideoMode().fps;
divisor = camera.getStreamDivisor();
- var newWidth = camVals.ImageWidth / divisor.value;
- var newHeight = camVals.ImageHeight / divisor.value;
- synchronized (inputFrameLock) {
- inputFrame = new Mat(newWidth, newHeight, CvType.CV_8UC3);
- }
+ var camVidMode = camera.getVideoMode();
+ var newWidth = camVidMode.width / divisor.value;
+ var newHeight = camVidMode.height / divisor.value;
synchronized (outputFrameLock) {
outputFrame = new Mat(newWidth, newHeight, CvType.CV_8UC3);
}
}
- void updateFrame(Mat inputFrame) {
- synchronized (inputFrameLock) {
- inputFrame.copyTo(this.inputFrame);
+ void setOutputFrame(Mat inputFrame) {
+ synchronized (outputFrameLock) {
+ inputFrame.copyTo(this.outputFrame);
}
}
- long getLatestFrame(Mat outputFrame) {
- synchronized (outputFrameLock) {
- this.outputFrame.copyTo(outputFrame);
+ long getInputFrame(Mat inputFrame) {
+ synchronized (inputFrameLock) {
+ this.inputFrame.copyTo(inputFrame);
return timestamp;
}
}
@@ -53,18 +51,18 @@ public class CameraProcess implements Runnable {
@Override
public void run() {
while (!Thread.interrupted()) {
- synchronized (outputFrameLock) {
- timestamp = camera.grabFrame(outputFrame);
- }
synchronized (inputFrameLock) {
+ timestamp = camera.grabFrame(inputFrame);
+ }
+ synchronized (outputFrameLock) {
if (divisor.value != 1) {
- var camVals = camera.getCamVals();
- var newWidth = camVals.ImageWidth / divisor.value;
- var newHeight = camVals.ImageHeight / divisor.value;
+ var camVidMode = camera.getVideoMode();
+ var newWidth = camVidMode.width / divisor.value;
+ var newHeight = camVidMode.height / divisor.value;
Size newSize = new Size(newWidth, newHeight);
- Imgproc.resize(inputFrame, inputFrame, newSize);
+ Imgproc.resize(outputFrame, outputFrame, newSize);
}
- camera.putFrame(inputFrame);
+ camera.putFrame(outputFrame);
}
var msToWait = (long) 1000 / maxFPS;
try {
diff --git a/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java b/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java
index 6e00b6477..c4580e47d 100644
--- a/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java
+++ b/Main/src/main/java/com/chameleonvision/vision/process/VisionProcess.java
@@ -1,7 +1,6 @@
package com.chameleonvision.vision.process;
import com.chameleonvision.settings.SettingsManager;
-import com.chameleonvision.vision.CalibrationMode;
import com.chameleonvision.vision.Orientation;
import com.chameleonvision.vision.Pipeline;
import com.chameleonvision.vision.camera.Camera;
@@ -218,7 +217,7 @@ public class VisionProcess implements Runnable {
currentPipeline = camera.getCurrentPipeline();
// start fps counter right before grabbing input frame
- timeStamp = cameraProcess.getLatestFrame(cameraInputMat);
+ timeStamp = cameraProcess.getInputFrame(cameraInputMat);
if (cameraInputMat.cols() == 0 && cameraInputMat.rows() == 0) {
continue;
}
@@ -249,7 +248,7 @@ public class VisionProcess implements Runnable {
ServerHandler.broadcastMessage(WebSend);
}
- cameraProcess.updateFrame(streamOutputMat);
+ cameraProcess.setOutputFrame(streamOutputMat);
cameraInputMat.release();
hsvThreshMat.release();
diff --git a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java
index 7f0db9d30..3573fcfa7 100644
--- a/Main/src/main/java/com/chameleonvision/web/ServerHandler.java
+++ b/Main/src/main/java/com/chameleonvision/web/ServerHandler.java
@@ -191,6 +191,9 @@ public class ServerHandler {
case "driverExposure":
cam.setDriverExposure((Integer) value);
break;
+ case "isDriver":
+ cam.setDriverMode((boolean)value);
+ break;
default:
Field field = obj.getClass().getField(fieldName);
if (field.getType().isEnum()) {
diff --git a/Main/src/main/resources/web/js/app.415345a3.js b/Main/src/main/resources/web/js/app.415345a3.js
index 86d438e65..1a1ad66b9 100644
--- a/Main/src/main/resources/web/js/app.415345a3.js
+++ b/Main/src/main/resources/web/js/app.415345a3.js
@@ -1,2 +1,2 @@
-(function(e){function t(t){for(var a,r,o=t[0],s=t[1],u=t[2],d=0,l=[];d({saveSnackbar:!1,timer:void 0}),created(){this.$options.sockets.onmessage=async e=>{try{var t=await e.data.arrayBuffer();let n=this.$msgPack.decode(t);for(let e in n)n.hasOwnProperty(e)&&this.handleMessage(e,n[e])}catch(n){console.error("error: "+e.data+" , "+n)}}}},o=c,s=(n("034f"),n("2877")),u=n("6544"),d=n.n(u),l=n("7496"),h=n("40dc"),f=n("a523"),p=n("a75b"),v=n("0e8f"),m=n("a722"),b=n("2db4"),k=n("71a3"),g=n("fe57"),y=n("2a7f"),w=Object(s["a"])(o,r,i,!1,null,null,null),S=w.exports;d()(w,{VApp:l["a"],VAppBar:h["a"],VContainer:f["a"],VContent:p["a"],VFlex:v["a"],VLayout:m["a"],VSnackbar:b["a"],VTab:k["a"],VTabs:g["a"],VToolbarItems:y["a"],VToolbarTitle:y["b"]});var x=n("8c4f");function C(e){return()=>n("1a5d")(`./${e}.vue`)}a["a"].use(x["a"]);var P=new x["a"]({base:"/",routes:[{path:"/",redirect:"/vision"},{path:"/vision",name:"Vision",component:C("Camera")},{path:"/settings",name:"Settings",component:C("Settings")}]}),V=n("2f62");a["a"].use(V["a"]);const L=e=>(t,n)=>{a["a"].set(t,e,n)};var T=new V["a"].Store({state:{settings:{teamNumber:1577,connectionType:0,ip:"",gateway:"",netmask:"",hostname:"Chameleon-vision"},pipeline:{exposure:0,brightness:0,orientation:0,hue:[0,15],saturation:[0,15],value:[0,25],erode:!1,dilate:!1,area:[0,12],ratio:[0,12],extent:[0,12],speckle:5,targetGrouping:0,targetIntersection:0,sortMode:0,isBinary:0,calibrationMode:0},driverMode:{isDriver:!1,driverExposure:0,driverBrightness:0},cameraSettings:{},resolutionList:[],port:1181,currentCameraIndex:0,currentPipelineIndex:0,cameraList:[],pipelineList:[],point:{}},mutations:{settings:L("settings"),pipeline:L("pipeline"),cameraSettings:L("cameraSettings"),resolutionList:L("resolutionList"),port:L("port"),currentCameraIndex:L("currentCameraIndex"),currentPipelineIndex:L("currentPipelineIndex"),cameraList:L("cameraList"),pipelineList:L("pipelineList"),point:L("point"),setPipeValues(e,t){for(let n in t)a["a"].set(e.pipeline,n,t[n])},driverMode:L("driverMode")},actions:{settings:e=>e.settings,pipeline:e=>e.pipeline,cameraSettings:e=>e.cameraSettings,resolutionList:e=>e.resolutionList,port:e=>e.port,currentCameraIndex:e=>e.currentCameraIndex,currentPipelineIndex:e=>e.currentPipelineIndex,cameraList:e=>e.cameraList,pipelineList:e=>e.pipelineList,point:e=>e.point,driverMode:e=>e.driverMode}}),O=(n("5363"),n("d1e7"),n("f309"));a["a"].use(O["a"]);var I=new O["a"]({icons:{}}),_=n("b408"),M=n.n(_),j=n("7d47"),E=n.n(j);a["a"].config.productionTip=!1,a["a"].use(M.a,"ws://"+location.hostname+":8888/websocket"),a["a"].prototype.$msgPack=E()(!0),a["a"].mixin({methods:{handleInput(e,t){let n=this.$msgPack.encode({[e]:t});this.$socket.send(n)}}}),new a["a"]({router:P,store:T,vuetify:I,render:e=>e(S)}).$mount("#app")},cf05:function(e,t,n){e.exports=n.p+"img/logo.e82307fd.png"}});
+(function(e){function t(t){for(var a,r,o=t[0],s=t[1],u=t[2],d=0,l=[];d({saveSnackbar:!1,timer:void 0}),created(){this.$options.sockets.onmessage=async e=>{try{var t=await e.data.arrayBuffer();let n=this.$msgPack.decode(t);for(let e in n)n.hasOwnProperty(e)&&this.handleMessage(e,n[e])}catch(n){console.error("error: "+e.data+" , "+n)}}}},o=c,s=(n("034f"),n("2877")),u=n("6544"),d=n.n(u),l=n("7496"),h=n("40dc"),f=n("a523"),p=n("a75b"),v=n("0e8f"),m=n("a722"),b=n("2db4"),k=n("71a3"),g=n("fe57"),y=n("2a7f"),w=Object(s["a"])(o,r,i,!1,null,null,null),S=w.exports;d()(w,{VApp:l["a"],VAppBar:h["a"],VContainer:f["a"],VContent:p["a"],VFlex:v["a"],VLayout:m["a"],VSnackbar:b["a"],VTab:k["a"],VTabs:g["a"],VToolbarItems:y["a"],VToolbarTitle:y["b"]});var x=n("8c4f");function C(e){return()=>n("1a5d")(`./${e}.vue`)}a["a"].use(x["a"]);var P=new x["a"]({base:"/",routes:[{path:"/",redirect:"/vision"},{path:"/vision",name:"Vision",component:C("Camera")},{path:"/settings",name:"Settings",component:C("Settings")}]}),V=n("2f62");a["a"].use(V["a"]);const L=e=>(t,n)=>{a["a"].set(t,e,n)};var T=new V["a"].Store({state:{settings:{teamNumber:1577,connectionType:0,ip:"",gateway:"",netmask:"",hostname:"Chameleon-vision"},pipeline:{exposure:0,brightness:0,orientation:0,hue:[0,15],saturation:[0,15],value:[0,25],erode:!1,dilate:!1,area:[0,12],ratio:[0,12],extent:[0,12],speckle:5,targetGrouping:0,targetIntersection:0,sortMode:0,isBinary:0,calibrationMode:0},driverMode:{isDriver:!1,driverExposure:0,driverBrightness:0},cameraSettings:{},resolutionList:[],port:1181,currentCameraIndex:0,currentPipelineIndex:0,cameraList:[],pipelineList:[],point:{}},mutations:{settings:L("settings"),pipeline:L("pipeline"),cameraSettings:L("cameraSettings"),resolutionList:L("resolutionList"),port:L("port"),currentCameraIndex:L("currentCameraIndex"),currentPipelineIndex:L("currentPipelineIndex"),cameraList:L("cameraList"),pipelineList:L("pipelineList"),point:L("point"),setPipeValues(e,t){for(let n in t)a["a"].set(e.pipeline,n,t[n])},driverMode:L("driverMode")},actions:{settings:e=>e.settings,pipeline:e=>e.pipeline,cameraSettings:e=>e.cameraSettings,resolutionList:e=>e.resolutionList,port:e=>e.port,currentCameraIndex:e=>e.currentCameraIndex,currentPipelineIndex:e=>e.currentPipelineIndex,cameraList:e=>e.cameraList,pipelineList:e=>e.pipelineList,point:e=>e.point,driverMode:e=>e.driverMode}}),O=(n("5363"),n("d1e7"),n("f309"));a["a"].use(O["a"]);var I=new O["a"]({icons:{}}),_=n("b408"),M=n.n(_),j=n("7d47"),E=n.n(j);a["a"].config.productionTip=!1,a["a"].use(M.a,"ws://"+location.hostname+":5800/websocket"),a["a"].prototype.$msgPack=E()(!0),a["a"].mixin({methods:{handleInput(e,t){let n=this.$msgPack.encode({[e]:t});this.$socket.send(n)}}}),new a["a"]({router:P,store:T,vuetify:I,render:e=>e(S)}).$mount("#app")},cf05:function(e,t,n){e.exports=n.p+"img/logo.e82307fd.png"}});
//# sourceMappingURL=app.415345a3.js.map
\ No newline at end of file