media_stream_device_enumerator_impl.cc 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/webrtc/media_stream_device_enumerator_impl.h"
  5. #include <memory>
  6. #include <utility>
  7. #include <vector>
  8. #include "base/bind.h"
  9. #include "content/public/browser/browser_context.h"
  10. #include "content/public/browser/browser_thread.h"
  11. #include "content/public/browser/media_capture_devices.h"
  12. #include "third_party/blink/public/mojom/mediastream/media_stream.mojom.h"
  13. using blink::MediaStreamDevices;
  14. using content::BrowserThread;
  15. using content::MediaCaptureDevices;
  16. namespace webrtc {
  17. namespace {
  18. // Finds a device in |devices| that has |device_id|, or nullptr if not found.
  19. const blink::MediaStreamDevice* FindDeviceWithId(
  20. const MediaStreamDevices& devices,
  21. const std::string& device_id) {
  22. auto iter = devices.begin();
  23. for (; iter != devices.end(); ++iter) {
  24. if (iter->id == device_id)
  25. return &(*iter);
  26. }
  27. return nullptr;
  28. }
  29. } // namespace
  30. const MediaStreamDevices&
  31. MediaStreamDeviceEnumeratorImpl::GetAudioCaptureDevices() const {
  32. return MediaCaptureDevices::GetInstance()->GetAudioCaptureDevices();
  33. }
  34. const MediaStreamDevices&
  35. MediaStreamDeviceEnumeratorImpl::GetVideoCaptureDevices() const {
  36. return MediaCaptureDevices::GetInstance()->GetVideoCaptureDevices();
  37. }
  38. void MediaStreamDeviceEnumeratorImpl::GetDefaultDevicesForBrowserContext(
  39. content::BrowserContext* context,
  40. bool audio,
  41. bool video,
  42. blink::mojom::StreamDevices& devices) {
  43. std::string default_device;
  44. if (audio) {
  45. const MediaStreamDevices& audio_devices = GetAudioCaptureDevices();
  46. if (!audio_devices.empty())
  47. devices.audio_device = audio_devices.front();
  48. }
  49. if (video) {
  50. const MediaStreamDevices& video_devices = GetVideoCaptureDevices();
  51. if (!video_devices.empty())
  52. devices.video_device = video_devices.front();
  53. }
  54. }
  55. const blink::MediaStreamDevice*
  56. MediaStreamDeviceEnumeratorImpl::GetRequestedAudioDevice(
  57. const std::string& requested_audio_device_id) {
  58. DCHECK_CURRENTLY_ON(BrowserThread::UI);
  59. return FindDeviceWithId(GetAudioCaptureDevices(), requested_audio_device_id);
  60. }
  61. const blink::MediaStreamDevice*
  62. MediaStreamDeviceEnumeratorImpl::GetRequestedVideoDevice(
  63. const std::string& requested_video_device_id) {
  64. DCHECK_CURRENTLY_ON(BrowserThread::UI);
  65. return FindDeviceWithId(GetVideoCaptureDevices(), requested_video_device_id);
  66. }
  67. } // namespace webrtc