From c5f2a90f86a7520f79fc679d494089dd81f30251 Mon Sep 17 00:00:00 2001 From: Banks Troutman Date: Wed, 27 Nov 2019 18:09:27 -0500 Subject: [PATCH] Now running after merge to dev --- .../config/CameraJsonConfig.java | 2 +- .../vision/camera/CameraStreamer.java | 26 +++---- .../vision/camera/USBCameraProperties.java | 11 ++- .../chameleonvision/web/RequestHandler.java | 67 +++++++++++++++++++ .../chameleonvision/web/Requesthandler.java | 66 ------------------ .../java/com/chameleonvision/web/Server.java | 4 +- .../chameleonvision/web/SocketHandler.java | 2 +- 7 files changed, 95 insertions(+), 83 deletions(-) create mode 100644 Main/src/main/java/com/chameleonvision/web/RequestHandler.java delete mode 100644 Main/src/main/java/com/chameleonvision/web/Requesthandler.java diff --git a/Main/src/main/java/com/chameleonvision/config/CameraJsonConfig.java b/Main/src/main/java/com/chameleonvision/config/CameraJsonConfig.java index ebd9e6b56..4f654e7d0 100644 --- a/Main/src/main/java/com/chameleonvision/config/CameraJsonConfig.java +++ b/Main/src/main/java/com/chameleonvision/config/CameraJsonConfig.java @@ -32,6 +32,6 @@ public class CameraJsonConfig { public static CameraJsonConfig fromUSBCameraProcess(USBCameraCapture process) { USBCameraProperties camProps = process.getProperties(); - return new CameraJsonConfig(camProps.FOV, camProps.name, camProps.path, camProps.getNickname()); + return new CameraJsonConfig(camProps.getFOV(), camProps.name, camProps.path, camProps.getNickname()); } } diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/CameraStreamer.java b/Main/src/main/java/com/chameleonvision/vision/camera/CameraStreamer.java index fb678d505..8d9e4d749 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/CameraStreamer.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/CameraStreamer.java @@ -27,18 +27,20 @@ public class CameraStreamer { } public void setDivisor(StreamDivisor newDivisor, boolean updateUI) { - this.divisor = newDivisor; - var camValues = cameraCapture.getProperties(); - var newWidth = camValues.getStaticProperties().imageWidth / newDivisor.value; - var newHeight = camValues.getStaticProperties().imageHeight / newDivisor.value; - synchronized (streamBufferLock) { - this.streamBuffer = new Mat(newWidth, newHeight, CvType.CV_8UC3); - this.cvSource = CameraServer.getInstance().putVideo(this.name, - cameraCapture.getProperties().getStaticProperties().imageWidth / divisor.value, - cameraCapture.getProperties().getStaticProperties().imageHeight / divisor.value); - } - if (updateUI) { - SocketHandler.sendFullSettings(); + if (divisor != newDivisor) { + this.divisor = newDivisor; + var camValues = cameraCapture.getProperties(); + var newWidth = camValues.getStaticProperties().imageWidth / newDivisor.value; + var newHeight = camValues.getStaticProperties().imageHeight / newDivisor.value; + synchronized (streamBufferLock) { + this.streamBuffer = new Mat(newWidth, newHeight, CvType.CV_8UC3); + this.cvSource = CameraServer.getInstance().putVideo(this.name, + cameraCapture.getProperties().getStaticProperties().imageWidth / divisor.value, + cameraCapture.getProperties().getStaticProperties().imageHeight / divisor.value); + } + if (updateUI) { + SocketHandler.sendFullSettings(); + } } } diff --git a/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraProperties.java b/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraProperties.java index d98e221ba..7d8d10327 100644 --- a/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraProperties.java +++ b/Main/src/main/java/com/chameleonvision/vision/camera/USBCameraProperties.java @@ -38,7 +38,7 @@ public class USBCameraProperties extends CaptureProperties { public final boolean isPS3Eye; private String nickname; - public double FOV; + private double FOV; USBCameraProperties(UsbCamera baseCamera, CameraJsonConfig config) { FOV = config.fov; @@ -67,6 +67,15 @@ public class USBCameraProperties extends CaptureProperties { videoModes = filterVideoModes(baseCamera.enumerateVideoModes()); } + public void setFOV(double FOV) { + this.FOV = FOV; + staticProperties = new CaptureStaticProperties(staticProperties.imageWidth, staticProperties.imageHeight, FOV); + } + + public double getFOV() { + return FOV; + } + public void setNickname(String nickname) { this.nickname = nickname; } diff --git a/Main/src/main/java/com/chameleonvision/web/RequestHandler.java b/Main/src/main/java/com/chameleonvision/web/RequestHandler.java new file mode 100644 index 000000000..090c10a76 --- /dev/null +++ b/Main/src/main/java/com/chameleonvision/web/RequestHandler.java @@ -0,0 +1,67 @@ +package com.chameleonvision.web; + +import com.chameleonvision.config.ConfigManager; +import com.chameleonvision.network.NetworkIPMode; +import com.chameleonvision.vision.VisionManager; +import com.chameleonvision.vision.VisionProcess; +import com.chameleonvision.vision.camera.CameraCapture; +import com.chameleonvision.vision.enums.StreamDivisor; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.javalin.http.Context; + +import java.util.Map; + +public class RequestHandler { + + public static void onGeneralSettings(Context ctx) { + ObjectMapper objectMapper = new ObjectMapper(); + try { + Map map = objectMapper.readValue(ctx.body(), Map.class); + // TODO: change to function, to restart NetworkTables + ConfigManager.settings.teamNumber = (int) map.get("teamNumber"); + + ConfigManager.settings.connectionType = NetworkIPMode.values()[(int) map.get("connectionType")]; + ConfigManager.settings.ip = (String) map.get("ip"); + ConfigManager.settings.netmask = (String) map.get("netmask"); + ConfigManager.settings.gateway = (String) map.get("gateway"); + ConfigManager.settings.hostname = (String) map.get("hostname"); + ConfigManager.saveGeneralSettings(); + SocketHandler.sendFullSettings(); + ctx.status(200); + } catch (JsonProcessingException e) { + ctx.status(500); + } + } + + public static void onCameraSettings(Context ctx) { + ObjectMapper objectMapper = new ObjectMapper(); + try { + Map camSettings = objectMapper.readValue(ctx.body(), Map.class); + + VisionProcess currentVisionProcess = VisionManager.getCurrentUIVisionProcess(); + CameraCapture currentCamera = currentVisionProcess.getCamera(); + + Number newFOV = (Number) camSettings.get("fov"); + Integer newStreamDivisor = (Integer) camSettings.get("streamDivisor"); + Integer newResolution = (Integer) camSettings.get("resolution"); + + currentCamera.getProperties().setFOV((double) newFOV); + + currentVisionProcess.cameraStreamer.setDivisor(StreamDivisor.values()[newStreamDivisor], true); + + // TODO: Video Mode Index!!!! +// var currentResolutionIndex = curCam.getVideoModeIndex(); +// if (currentResolutionIndex != newResolution) { +// curCam.setCamVideoMode(newResolution, true); +// } + + VisionManager.saveAllCameras(); + SocketHandler.sendFullSettings(); + ctx.status(200); + } catch (JsonProcessingException e) { + e.printStackTrace(); + ctx.status(500); + } + } +} diff --git a/Main/src/main/java/com/chameleonvision/web/Requesthandler.java b/Main/src/main/java/com/chameleonvision/web/Requesthandler.java deleted file mode 100644 index e4fc89d9d..000000000 --- a/Main/src/main/java/com/chameleonvision/web/Requesthandler.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.chameleonvision.web; - -import com.chameleonvision.network.NetworkIPMode; -import com.chameleonvision.settings.GeneralSettings; -import com.chameleonvision.settings.SettingsManager; -import com.chameleonvision.vision.camera.CameraException; -import com.chameleonvision.vision.camera.CameraManager; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import io.javalin.http.Context; - -import java.util.HashMap; -import java.util.Map; - -public class Requesthandler { - - public static void onGeneralSettings(Context ctx) { - ObjectMapper objectMapper = new ObjectMapper(); - try { - Map map = objectMapper.readValue(ctx.body(), Map.class); - SettingsManager.GeneralSettings.teamNumber = (int) map.get("teamNumber"); - SettingsManager.GeneralSettings.connectionType = NetworkIPMode.values()[(int) map.get("connectionType")]; - SettingsManager.GeneralSettings.ip = (String) map.get("ip"); - SettingsManager.GeneralSettings.netmask = (String) map.get("netmask"); - SettingsManager.GeneralSettings.gateway = (String) map.get("gateway"); - SettingsManager.GeneralSettings.hostname = (String) map.get("hostname"); - SettingsManager.saveSettings(); - SocketHandler.sendFullSettings(); - ctx.status(200); - } catch (JsonProcessingException e) { - ctx.status(500); - } - } - - public static void onCameraSettings(Context ctx) { - ObjectMapper objectMapper = new ObjectMapper(); - try { - Map camSettings = objectMapper.readValue(ctx.body(), Map.class); - var curCam = CameraManager.getCurrentCamera(); - - Number newFOV = (Number) camSettings.get("fov"); - Integer newStreamDivisor = (Integer) camSettings.get("streamDivisor"); - Integer newResolution = (Integer) camSettings.get("resolution"); - - curCam.setFOV(newFOV); - - var currentStreamDivisorOrdinal = curCam.getStreamDivisor().ordinal(); - if (currentStreamDivisorOrdinal != newStreamDivisor) { - curCam.setStreamDivisor(newStreamDivisor, true); - } - - var currentResolutionIndex = curCam.getVideoModeIndex(); - if (currentResolutionIndex != newResolution) { - curCam.setCamVideoMode(newResolution, true); - } - - CameraManager.saveCameras(); - SocketHandler.sendFullSettings(); - ctx.status(200); - } catch (JsonProcessingException | CameraException e) { - e.printStackTrace(); - ctx.status(500); - } - } -} diff --git a/Main/src/main/java/com/chameleonvision/web/Server.java b/Main/src/main/java/com/chameleonvision/web/Server.java index d17aadc9c..b37393b39 100644 --- a/Main/src/main/java/com/chameleonvision/web/Server.java +++ b/Main/src/main/java/com/chameleonvision/web/Server.java @@ -28,8 +28,8 @@ public class Server { socketHandler.onBinaryMessage(ctx); }); }); - app.post("/api/settings/general", Requesthandler::onGeneralSettings); - app.post("/api/settings/camera", Requesthandler::onCameraSettings); + app.post("/api/settings/general", RequestHandler::onGeneralSettings); + app.post("/api/settings/camera", RequestHandler::onCameraSettings); app.start(port); } } diff --git a/Main/src/main/java/com/chameleonvision/web/SocketHandler.java b/Main/src/main/java/com/chameleonvision/web/SocketHandler.java index 1c75d88de..eee4e5e5c 100644 --- a/Main/src/main/java/com/chameleonvision/web/SocketHandler.java +++ b/Main/src/main/java/com/chameleonvision/web/SocketHandler.java @@ -217,7 +217,7 @@ public class SocketHandler { HashMap tmp = new HashMap<>(); VisionProcess currentVisionProcess = VisionManager.getCurrentUIVisionProcess(); CameraCapture currentCamera = VisionManager.getCurrentUIVisionProcess().getCamera(); - tmp.put("fov", currentCamera.getProperties().FOV); + tmp.put("fov", currentCamera.getProperties().getFOV()); tmp.put("streamDivisor", currentVisionProcess.cameraStreamer.getDivisor().ordinal()); // TODO: (HIGH) get videomode index! // tmp.put("resolution", currentCamera.getVideoModeIndex());