Camera configuration rewrite, begin on CameraStreamer threading fix

This commit is contained in:
Banks Troutman
2019-11-26 17:57:51 -05:00
parent 6506281ddf
commit d588b1a69e
11 changed files with 293 additions and 173 deletions

View File

@@ -1,7 +1,7 @@
package com.chameleonvision.config;
import com.chameleonvision.util.ProgramDirectoryUtilities;
import com.chameleonvision.util.FileHelper;
import com.chameleonvision.util.JacksonHelper;
import com.chameleonvision.vision.pipeline.CVPipelineSettings;
import java.io.File;
@@ -10,15 +10,17 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
public class ConfigManager {
private ConfigManager() {}
private static final Path SettingsPath = Paths.get(ProgramDirectoryUtilities.getProgramDirectory(), "settings");
private static final Path cameraConfigPath = Paths.get(SettingsPath.toString(), "cameras");
static final Path SettingsPath = Paths.get(ProgramDirectoryUtilities.getProgramDirectory(), "settings");
private static final Path settingsFilePath = Paths.get(SettingsPath.toString(), "settings.json");
private static final LinkedHashMap<String, CameraConfig> cameraConfigs = new LinkedHashMap<>();
public static GeneralSettings settings = new GeneralSettings();
private static boolean settingsFolderExists() { return Files.exists(SettingsPath); }
@@ -38,13 +40,13 @@ public class ConfigManager {
boolean settingsFileEmpty = settingsFileExists() && new File(settingsFilePath.toString()).length() == 0;
if (settingsFileEmpty || !settingsFileExists()) {
try {
FileHelper.Serializer(settingsFilePath, settings);
JacksonHelper.serializer(settingsFilePath, settings);
} catch (IOException e) {
e.printStackTrace();
}
} else {
try {
settings = FileHelper.DeSerializer(settingsFilePath, GeneralSettings.class);
settings = JacksonHelper.deserializer(settingsFilePath, GeneralSettings.class);
} catch (IOException e) {
System.err.println("Failed to load settings.json, using defaults.");
}
@@ -52,13 +54,14 @@ public class ConfigManager {
}
public static void initializeSettings() {
System.out.println("Settings folder: " + SettingsPath.toString());
checkSettingsFolder();
checkSettingsFile();
}
private static void saveSettingsFile() {
try {
FileHelper.Serializer(settingsFilePath, settings);
JacksonHelper.serializer(settingsFilePath, settings);
} catch (IOException e) {
System.err.println("Failed to save settings.json!");
}
@@ -69,97 +72,36 @@ public class ConfigManager {
saveSettingsFile();
}
private static Path getCameraSpecificFolderPath(String cameraName) {
return Paths.get(cameraConfigPath.toString(), cameraName);
}
private static Path getCameraSpecificConfigPath(String cameraName) {
return Paths.get(getCameraSpecificFolderPath(cameraName).toString(), "camera.json");
}
private static Path getCameraSpecificPipelinesPath(String cameraName) {
return Paths.get(getCameraSpecificFolderPath(cameraName).toString(), "pipelines.json");
}
private static Path getCameraSpecificDriverModePath(String cameraName) {
return Paths.get(getCameraSpecificFolderPath(cameraName).toString(), "drivermode.json");
}
private static boolean cameraFolderExists(String cameraName) {
return Files.exists(getCameraSpecificFolderPath(cameraName));
}
private static boolean cameraConfigExists(String cameraName) {
return cameraFolderExists(cameraName) && Files.exists(getCameraSpecificConfigPath(cameraName));
}
private static boolean cameraPipelinesExists(String cameraName) {
return cameraFolderExists(cameraName) && Files.exists(getCameraSpecificPipelinesPath(cameraName));
}
private static boolean cameraDriverModeExists(String cameraName) {
return cameraFolderExists(cameraName) && Files.exists(getCameraSpecificDriverModePath(cameraName));
}
// TODO: (HIGH) cleanup!
public static List<CameraConfig> initializeCameraConfig(List<CameraConfig> preliminaryConfigs) {
var configList = new ArrayList<CameraConfig>();
public static List<FullCameraConfiguration> initializeCameras(List<CameraJsonConfig> preliminaryConfigs) {
List<FullCameraConfiguration> configList = new ArrayList<>();
checkSettingsFolder();
// loop over all the camera names and try to create settings folders for it
preliminaryConfigs.forEach((preliminaryConfig) -> {
String cameraName = preliminaryConfig.name;
for (CameraJsonConfig preliminaryConfig : preliminaryConfigs) {
CameraConfig cameraConfiguration = new CameraConfig(preliminaryConfig);
cameraConfigs.put(preliminaryConfig.name, cameraConfiguration);
final Path cameraConfigFolderPath = getCameraSpecificFolderPath(cameraName);
final Path cameraConfigPath = getCameraSpecificConfigPath(cameraName);
CameraJsonConfig camJsonConfig = cameraConfiguration.load();
List<CVPipelineSettings> pipelines = cameraConfiguration.loadPipelines();
CVPipelineSettings driverMode = cameraConfiguration.loadDriverMode();
// check if the config folder exists, and if not, create it
if (!cameraFolderExists(cameraName)) {
try {
Files.createDirectory(cameraConfigFolderPath);
} catch (IOException e) {
System.err.println("Failed to create camera config folder!");
}
} else {
CameraConfig config = preliminaryConfig;
// check if the config exists, and if not, create it
if(!cameraConfigExists(cameraName)) {
try {
FileHelper.Serializer(cameraConfigPath, preliminaryConfig);
} catch (IOException e) {
e.printStackTrace();
}
} else {
try {
config = FileHelper.DeSerializer(cameraConfigPath, CameraConfig.class);
} catch (IOException e) {
e.printStackTrace();
}
}
configList.add(config);
}
});
configList.add(new FullCameraConfiguration(camJsonConfig, pipelines, driverMode));
}
return configList;
}
public static void saveCameraPipelines(String cameraName, List<CVPipelineSettings> pipelines) throws IOException {
Path cameraFolder = Paths.get(cameraConfigPath.toString(), cameraName);
Path filePath = Paths.get(cameraFolder.toString(), cameraName,"pipelines.json");
FileHelper.CheckPath(cameraFolder);
FileHelper.Serializer(filePath, pipelines);
public static void saveCameraConfig(String cameraName, CameraJsonConfig config) {
cameraConfigs.get(cameraName).saveConfig(config);
}
public static void saveCameraDriverMode(String cameraName, CVPipelineSettings driverMode) throws IOException {
Path cameraFolder = Paths.get(cameraConfigPath.toString(), cameraName);
Path filePath = Paths.get(cameraFolder.toString(), cameraName,"driverMode.json");
FileHelper.CheckPath(cameraFolder);
FileHelper.Serializer(filePath, driverMode);
public static void saveCameraPipelines(String cameraName, List<CVPipelineSettings> pipelines) {
cameraConfigs.get(cameraName).savePipelines(pipelines);
}
public static void saveCameraConfig(String cameraName, CameraConfig config) throws IOException {
Path cameraFolder = Paths.get(cameraConfigPath.toString(), cameraName);
Path filePath = Paths.get(cameraFolder.toString(), cameraName,"driverMode.json");
FileHelper.CheckPath(cameraFolder);
FileHelper.Serializer(filePath, config);
public static void saveCameraDriverMode(String cameraName, CVPipelineSettings driverMode) {
cameraConfigs.get(cameraName).saveDriverMode(driverMode);
}
}