• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 
5 #include "content/browser/renderer_host/media/media_capture_devices_impl.h"
6 
7 #include "content/browser/browser_main_loop.h"
8 #include "content/browser/renderer_host/media/media_stream_manager.h"
9 #include "content/public/browser/browser_thread.h"
10 
11 namespace content {
12 
13 namespace {
14 
EnsureMonitorCaptureDevices()15 void EnsureMonitorCaptureDevices() {
16   DCHECK_CURRENTLY_ON(BrowserThread::UI);
17   BrowserThread::PostTask(
18       BrowserThread::IO, FROM_HERE,
19       base::Bind(&MediaStreamManager::EnsureDeviceMonitorStarted,
20                  base::Unretained(
21                      BrowserMainLoop::GetInstance()->media_stream_manager())));
22 }
23 
24 }  // namespace
25 
GetInstance()26 MediaCaptureDevices* MediaCaptureDevices::GetInstance() {
27   return MediaCaptureDevicesImpl::GetInstance();
28 }
29 
GetInstance()30 MediaCaptureDevicesImpl* MediaCaptureDevicesImpl::GetInstance() {
31   return Singleton<MediaCaptureDevicesImpl>::get();
32 }
33 
34 const MediaStreamDevices&
GetAudioCaptureDevices()35 MediaCaptureDevicesImpl::GetAudioCaptureDevices() {
36   DCHECK_CURRENTLY_ON(BrowserThread::UI);
37   if (!devices_enumerated_) {
38     EnsureMonitorCaptureDevices();
39     devices_enumerated_ = true;
40   }
41   return audio_devices_;
42 }
43 
44 const MediaStreamDevices&
GetVideoCaptureDevices()45 MediaCaptureDevicesImpl::GetVideoCaptureDevices() {
46   DCHECK_CURRENTLY_ON(BrowserThread::UI);
47   if (!devices_enumerated_) {
48     EnsureMonitorCaptureDevices();
49     devices_enumerated_ = true;
50   }
51   return video_devices_;
52 }
53 
OnAudioCaptureDevicesChanged(const MediaStreamDevices & devices)54 void MediaCaptureDevicesImpl::OnAudioCaptureDevicesChanged(
55     const MediaStreamDevices& devices) {
56   if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
57     UpdateAudioDevicesOnUIThread(devices);
58   } else {
59     BrowserThread::PostTask(
60         BrowserThread::UI, FROM_HERE,
61         base::Bind(&MediaCaptureDevicesImpl::UpdateAudioDevicesOnUIThread,
62                    base::Unretained(this), devices));
63   }
64 }
65 
OnVideoCaptureDevicesChanged(const MediaStreamDevices & devices)66 void MediaCaptureDevicesImpl::OnVideoCaptureDevicesChanged(
67     const MediaStreamDevices& devices) {
68   if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
69     UpdateVideoDevicesOnUIThread(devices);
70   } else {
71     BrowserThread::PostTask(
72         BrowserThread::UI, FROM_HERE,
73         base::Bind(&MediaCaptureDevicesImpl::UpdateVideoDevicesOnUIThread,
74                    base::Unretained(this), devices));
75   }
76 }
77 
MediaCaptureDevicesImpl()78 MediaCaptureDevicesImpl::MediaCaptureDevicesImpl()
79     : devices_enumerated_(false) {
80 }
81 
~MediaCaptureDevicesImpl()82 MediaCaptureDevicesImpl::~MediaCaptureDevicesImpl() {
83 }
84 
UpdateAudioDevicesOnUIThread(const MediaStreamDevices & devices)85 void MediaCaptureDevicesImpl::UpdateAudioDevicesOnUIThread(
86     const MediaStreamDevices& devices) {
87   DCHECK_CURRENTLY_ON(BrowserThread::UI);
88   devices_enumerated_ = true;
89   audio_devices_ = devices;
90 }
91 
UpdateVideoDevicesOnUIThread(const MediaStreamDevices & devices)92 void MediaCaptureDevicesImpl::UpdateVideoDevicesOnUIThread(
93     const MediaStreamDevices& devices) {
94   DCHECK_CURRENTLY_ON(BrowserThread::UI);
95   devices_enumerated_ = true;
96   video_devices_ = devices;
97 }
98 
99 }  // namespace content
100