22#pragma GCC diagnostic push
23#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
24#include <yaml-cpp/yaml.h>
25#pragma GCC diagnostic pop
38constexpr const char*
const VideoDeviceMonitor::CONFIG_LABEL;
47 std::lock_guard
l(lock_);
49 ids.reserve(devices_.size());
50 for (
const auto&
dev : devices_) {
52 ids.emplace_back(
dev.getDeviceId());
60 std::lock_guard
l(lock_);
61 const auto iter = findDeviceById(
id);
62 if (
iter == devices_.end())
65 return iter->getCapabilities();
71 std::lock_guard
l(lock_);
73 const auto prefIter = findPreferencesById(
id);
83 std::lock_guard
l(lock_);
84 const auto iter = findDeviceById(
id);
86 if (
iter == devices_.end())
90 auto it = findPreferencesById(
settings.unique_id);
91 if (
it != preferences_.end())
98 std::lock_guard
l(lock_);
99 const auto it = findDeviceById(defaultDevice_);
102 return it->getDeviceId();
108 std::lock_guard
l(lock_);
109 const auto it = findDeviceById(defaultDevice_);
119 std::lock_guard
l(lock_);
120 const auto itDev = findDeviceById(
id);
121 if (
itDev != devices_.end()) {
122 if (defaultDevice_ ==
itDev->getDeviceId())
124 defaultDevice_ =
itDev->getDeviceId();
127 auto itPref = findPreferencesById(
itDev->getDeviceId());
128 if (
itPref != preferences_.end()) {
130 preferences_.erase(
itPref);
131 preferences_.insert(preferences_.begin(),
settings);
133 preferences_.insert(preferences_.begin(),
itDev->getSettings());
143 std::lock_guard
l(lock_);
144 const auto itd = findDeviceById(
id);
145 if (
itd != devices_.cend()) {
155 std::lock_guard
l(lock_);
156 const auto itd = findDeviceById(
id);
157 if (
itd == devices_.cend())
159 return itd->getDeviceParams();
169 for (
const auto& s : devices)
187 const std::vector<std::map<std::string, std::string>>&
devInfo)
190 std::lock_guard
l(lock_);
191 if (findDeviceById(
id) != devices_.end())
197 if (
dev.getChannelList().empty())
203 auto it = findPreferencesById(
id);
204 if (
it != preferences_.end()) {
205 dev.applySettings(*
it);
207 dev.applySettings(
dev.getDefaultSettings());
208 preferences_.emplace_back(
dev.getSettings());
213 defaultDevice_ =
dev.getDeviceId();
215 devices_.emplace_back(std::move(
dev));
216 }
catch (
const std::exception&
e) {
228 std::lock_guard
l(lock_);
229 const auto it = findDeviceById(
id);
230 if (
it == devices_.end())
234 if (defaultDevice_.find(
id) != std::string::npos) {
235 defaultDevice_.clear();
236 for (
const auto&
dev : devices_)
238 defaultDevice_ =
dev.getDeviceId();
246vector<VideoDevice>::iterator
247VideoDeviceMonitor::findDeviceById(
const string&
id)
249 for (
auto it = devices_.begin();
it != devices_.end(); ++
it)
250 if (
it->getDeviceId().find(
id) != std::string::npos)
252 return devices_.end();
255vector<VideoDevice>::const_iterator
256VideoDeviceMonitor::findDeviceById(
const string&
id)
const
258 for (
auto it = devices_.cbegin();
it != devices_.cend(); ++
it)
259 if (
it->getDeviceId().find(
id) != std::string::npos)
261 return devices_.end();
264vector<VideoSettings>::iterator
265VideoDeviceMonitor::findPreferencesById(
const string&
id)
267 for (
auto it = preferences_.begin();
it != preferences_.end(); ++
it)
268 if (
it->unique_id.find(
id) != std::string::npos)
270 return preferences_.end();
274VideoDeviceMonitor::overwritePreferences(
const VideoSettings&
settings)
276 auto it = findPreferencesById(
settings.unique_id);
277 if (
it != preferences_.end())
278 preferences_.erase(
it);
279 preferences_.emplace_back(
settings);
285 std::lock_guard
l(lock_);
286 out << YAML::Key <<
"devices" << YAML::Value << preferences_;
292 std::lock_guard
l(lock_);
293 const auto& node =
in[CONFIG_LABEL];
296 const auto& devices = node[
"devices"];
297 for (
const auto&
dev : devices) {
299 if (
pref.unique_id.empty())
301 overwritePreferences(
pref);
302 auto itd = findDeviceById(
pref.unique_id);
303 if (
itd != devices_.end())
308 const string prefId = preferences_.empty() ?
"" : preferences_[0].unique_id;
311 defaultDevice_ =
devIter->getDeviceId();
313 defaultDevice_.clear();
314 for (
const auto&
dev : devices_)
316 defaultDevice_ =
dev.getDeviceId();
static std::atomic_bool initialized
bool addDevice(const std::string &node, const std::vector< std::map< std::string, std::string > > &devInfo={})
bool setDefaultDevice(const std::string &name)
libjami::VideoCapabilities getCapabilities(const std::string &name) const
std::string getDefaultDevice() const
DeviceParams getDeviceParams(const std::string &name) const
Params for libav.
void applySettings(const std::string &name, const VideoSettings &settings)
VideoSettings getSettings(const std::string &name)
void setDeviceOrientation(const std::string &id, int angle)
virtual void unserialize(const YAML::Node &in) override
std::vector< std::string > getDeviceList() const
void removeDevice(const std::string &node)
std::string getMRLForDefaultDevice() const
void serialize(YAML::Emitter &out) const override
static constexpr const char DEVICE_DESKTOP[]
static void giveUniqueName(VideoDevice &dev, const vector< VideoDevice > &devices)
void emitSignal(Args... args)
std::map< std::string, std::map< std::string, std::vector< std::string > > > VideoCapabilities
DeviceParams Parameters used by MediaDecoder and MediaEncoder to open a LibAV device/stream.