28 #include <SimoxUtility/json.h>
40 if (not m_configs_json.empty())
42 std::map<std::string, imrec::Config> configs = nlohmann::json::parse(m_configs_json);
64 const std::map<std::string, imrec::Config>& configs,
67 std::unique_lock l{m_configs_mx};
69 if (not configs.empty())
81 const Ice::Current&
c)
83 const std::map<std::string, imrec::Config>& configs = nlohmann::json::parse(configs_json);
84 configureRecordings(configs,
c);
87 std::map<std::string, visionx::imrec::Config>
90 std::shared_lock l{m_configs_mx};
92 if (not m_configs.has_value())
97 return m_configs.value();
103 std::shared_lock l{m_configs_mx};
104 return m_configs.has_value();
107 std::map<std::string, visionx::imrecman::StartStopStatus>
113 std::shared_lock l{m_configs_mx};
115 std::map<std::string, visionx::imrecman::StartStopStatus> statuses;
117 if (not m_configs.has_value())
122 for (
auto [proxy_name, config] : m_configs.value())
127 ARMARX_DEBUG <<
"Calling startRecording on image provider '" << proxy_name <<
"'.";
128 const bool call_status = getProxy<RecordingImageProviderInterfacePrx>(proxy_name)
129 ->startImageRecording(config);
135 ARMARX_DEBUG <<
"Image provider '" << proxy_name <<
"' offline.";
138 statuses[proxy_name] =
status;
146 std::map<std::string, visionx::imrec::Status>
152 std::shared_lock l{m_configs_mx};
154 std::map<std::string, visionx::imrec::Status> statuses;
156 if (not m_configs.has_value())
161 for (
auto& [proxy_name, config] : m_configs.value())
166 ARMARX_DEBUG <<
"Calling getRecordingStatus on image provider '" << proxy_name <<
"'.";
168 getProxy<RecordingImageProviderInterfacePrx>(proxy_name)->getImageRecordingStatus();
173 ARMARX_DEBUG <<
"Image provider '" << proxy_name <<
"' offline.";
175 status.framesBuffered = -1;
176 status.framesWritten = -1;
178 statuses[proxy_name] =
status;
186 std::map<std::string, visionx::imrecman::StartStopStatus>
192 std::shared_lock l{m_configs_mx};
194 std::map<std::string, visionx::imrecman::StartStopStatus> statuses;
196 if (not m_configs.has_value())
201 std::map<std::string, Ice::AsyncResultPtr> promises;
203 for (
auto& [proxy_name, config] : m_configs.value())
207 ARMARX_DEBUG <<
"Calling stopRecording on image provider '" << proxy_name <<
"'.";
208 promises[proxy_name] = getProxy<RecordingImageProviderInterfacePrx>(proxy_name)
209 ->begin_stopImageRecording();
213 promises[proxy_name] =
nullptr;
217 for (
auto& [proxy_name, promise] : promises)
224 const bool call_status = getProxy<RecordingImageProviderInterfacePrx>(proxy_name)
225 ->end_stopImageRecording(promise);
231 ARMARX_DEBUG <<
"Image provider '" << proxy_name <<
"' offline.";
237 ARMARX_DEBUG <<
"Image provider '" << proxy_name <<
"' offline.";
240 statuses[proxy_name] =
status;
251 return "ImageRecordingManager";
257 return GetDefaultName();
266 defs->optional(m_configs_json,
"config_json",
"JSON to initialize default config from.");