webrtc_device_resolver.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // This file is part of Desktop App Toolkit,
  2. // a set of libraries for developing nice desktop applications.
  3. //
  4. // For license and copyright information please follow this link:
  5. // https://github.com/desktop-app/legal/blob/master/LEGAL
  6. //
  7. #pragma once
  8. #include "base/qt/qt_compare.h"
  9. #include "webrtc/webrtc_device_common.h"
  10. #include <QtCore/QMutex>
  11. namespace Webrtc {
  12. class Environment;
  13. class DeviceResolver final {
  14. public:
  15. DeviceResolver(
  16. not_null<Environment*> environment,
  17. DeviceType type,
  18. rpl::producer<QString> savedValue);
  19. [[nodiscard]] DeviceResolvedId current() const;
  20. [[nodiscard]] rpl::producer<DeviceResolvedId> value() const;
  21. [[nodiscard]] rpl::producer<DeviceResolvedId> changes() const;
  22. [[nodiscard]] DeviceResolvedId threadSafeCurrent() const;
  23. [[nodiscard]] DeviceChangeReason lastChangeReason() const;
  24. private:
  25. void trackSavedId();
  26. const not_null<Environment*> _environment;
  27. QString _savedId;
  28. DeviceResolvedId _current;
  29. mutable QMutex _mutex;
  30. rpl::variable<DeviceResolvedId> _data;
  31. DeviceChangeReason _lastChangeReason = DeviceChangeReason::Manual;
  32. rpl::lifetime _lifetime;
  33. };
  34. [[nodiscard]] rpl::producer<QString> DeviceIdOrDefault(
  35. rpl::producer<QString> id);
  36. [[nodiscard]] rpl::producer<QString> DeviceIdValueWithFallback(
  37. rpl::producer<QString> id,
  38. rpl::producer<QString> fallback);
  39. } // namespace Webrtc