diff --git a/core/calibration/loader/DeviceCalibrationJson.cpp b/core/calibration/loader/DeviceCalibrationJson.cpp index a392b3b6d..f75176c61 100644 --- a/core/calibration/loader/DeviceCalibrationJson.cpp +++ b/core/calibration/loader/DeviceCalibrationJson.cpp @@ -82,7 +82,7 @@ std::optional deviceCalibrationFromJson(const std::string& ca deviceSubtype = json["DeviceClassInfo"]["BuildVersion"]; } - // Create a Camera Config builder to parse in camera config information + // Create a Camera Config builder to parse in camera default config information CameraConfigBuilder cameraConfigBuilder(deviceVersion); std::map cameraCalibs; @@ -206,6 +206,15 @@ nlohmann::json cameraCalibrationToJson(const CameraCalibration& camCalib) { camJson["TimeOffsetSec_Device_Camera"] = camCalib.getTimeOffsetSecDeviceCamera(); } + // Store config, so we can correctly load an already configured camera without re-applying + auto& jsonConfig = camJson["ConfigData"]; + jsonConfig["ImageWidth"] = camCalib.getImageSize().x(); + jsonConfig["ImageHeight"] = camCalib.getImageSize().y(); + jsonConfig["MaxSolidAngle"] = camCalib.getMaxSolidAngle(); + if(camCalib.getValidRadius().has_value()) { + jsonConfig["ValidRadius"] = *camCalib.getValidRadius(); + } + return camJson; } diff --git a/core/calibration/loader/SensorCalibrationJson.cpp b/core/calibration/loader/SensorCalibrationJson.cpp index 414cca5cf..7c60562f5 100644 --- a/core/calibration/loader/SensorCalibrationJson.cpp +++ b/core/calibration/loader/SensorCalibrationJson.cpp @@ -53,11 +53,27 @@ CameraCalibration parseCameraCalibrationFromJson( ? static_cast(json["TimeOffsetSec_Device_Camera"]) : 0.0; - // Obtain camera config from builder - const auto maybeConfig = configBuilder.getCameraConfigData(label); - if (!maybeConfig.has_value()) { - throw std::runtime_error( - fmt::format("No config found for camera {} from Config builder", label)); + // load saved config, if available - if not, then defaults will be loaded + std::optional maybeConfig; + if(json.contains("ConfigData")) { + auto jsonConfig = json["ConfigData"]; + maybeConfig = CameraConfigData { + .imageWidth = jsonConfig["ImageWidth"], + .imageHeight = jsonConfig["ImageHeight"], + .maxSolidAngle = jsonConfig["MaxSolidAngle"], + }; + if(jsonConfig.contains("ValidRadius")) { + maybeConfig->maybeValidRadius = static_cast(jsonConfig["ValidRadius"]); + } + } + + // Obtain default camera config from builder + if(!maybeConfig.has_value()) { + maybeConfig = configBuilder.getCameraConfigData(label); + if (!maybeConfig.has_value()) { + throw std::runtime_error( + fmt::format("No config found for camera {} from Config builder", label)); + } } CameraCalibration camCalib(