Index: content/browser/renderer_host/media/media_stream_manager.cc |
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc |
index d6b2e60dbaaff16919a76ce2ebce97105ad392d1..3f5a8043c46d4e604fdd620b7c29428a9850fbf8 100644 |
--- a/content/browser/renderer_host/media/media_stream_manager.cc |
+++ b/content/browser/renderer_host/media/media_stream_manager.cc |
@@ -14,18 +14,14 @@ |
#include "content/browser/renderer_host/media/media_stream_device_settings.h" |
#include "content/browser/renderer_host/media/media_stream_requester.h" |
#include "content/browser/renderer_host/media/video_capture_manager.h" |
-#include "content/browser/resource_context_impl.h" |
#include "content/common/media/media_stream_options.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/content_browser_client.h" |
#include "content/public/browser/media_observer.h" |
#include "googleurl/src/gurl.h" |
-#include "media/audio/audio_manager.h" |
using content::BrowserThread; |
-static const char* kMediaStreamManagerKeyName = "content_media_stream_manager"; |
- |
namespace media_stream { |
// Creates a random label used to identify requests. |
@@ -116,50 +112,36 @@ struct MediaStreamManager::DeviceRequest { |
StreamDeviceInfoArray video_devices; |
}; |
-// static |
-MediaStreamManager* MediaStreamManager::GetForResourceContext( |
- content::ResourceContext* resource_context, |
- media::AudioManager* audio_manager) { |
- MediaStreamManager* rv = static_cast<MediaStreamManager*>( |
- resource_context->GetUserData(kMediaStreamManagerKeyName)); |
- if (!rv) { |
- rv = new MediaStreamManager(audio_manager); |
- resource_context->SetUserData(kMediaStreamManagerKeyName, rv); |
- } |
- return rv; |
-} |
- |
-MediaStreamManager::MediaStreamManager(media::AudioManager* audio_manager) |
+MediaStreamManager::MediaStreamManager( |
+ AudioInputDeviceManager* audio_input_device_manager, |
+ VideoCaptureManager* video_capture_manager) |
: ALLOW_THIS_IN_INITIALIZER_LIST( |
device_settings_(new MediaStreamDeviceSettings(this))), |
- enumeration_in_progress_(content::NUM_MEDIA_STREAM_DEVICE_TYPES, false), |
- audio_manager_(audio_manager) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ audio_input_device_manager_(audio_input_device_manager), |
+ video_capture_manager_(video_capture_manager), |
+ enumeration_in_progress_(content::NUM_MEDIA_STREAM_DEVICE_TYPES, false) { |
} |
MediaStreamManager::~MediaStreamManager() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- if (video_capture_manager_.get()) |
+ if (device_thread_.get()) { |
video_capture_manager_->Unregister(); |
- if (audio_input_device_manager_.get()) |
audio_input_device_manager_->Unregister(); |
+ device_thread_->Stop(); |
+ } |
} |
VideoCaptureManager* MediaStreamManager::video_capture_manager() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- if (!video_capture_manager_.get()) { |
- video_capture_manager_ = new VideoCaptureManager(); |
- video_capture_manager_->Register(this); |
- } |
+ DCHECK(video_capture_manager_.get()); |
+ EnsureDeviceThreadAndListener(); |
return video_capture_manager_.get(); |
} |
AudioInputDeviceManager* MediaStreamManager::audio_input_device_manager() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- if (!audio_input_device_manager_.get()) { |
- audio_input_device_manager_ = new AudioInputDeviceManager(audio_manager_); |
- audio_input_device_manager_->Register(this); |
- } |
+ DCHECK(audio_input_device_manager_.get()); |
+ EnsureDeviceThreadAndListener(); |
return audio_input_device_manager_.get(); |
} |
@@ -367,6 +349,19 @@ void MediaStreamManager::StartEnumeration( |
(*label) = request_label; |
} |
+void MediaStreamManager::EnsureDeviceThreadAndListener() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ if (device_thread_.get()) |
+ return; |
+ |
+ device_thread_.reset(new DeviceThread("MediaStreamDeviceThread")); |
+ CHECK(device_thread_->Start()); |
+ |
+ audio_input_device_manager_->Register(this, |
+ device_thread_->message_loop_proxy()); |
+ video_capture_manager_->Register(this, device_thread_->message_loop_proxy()); |
+} |
+ |
void MediaStreamManager::Opened(MediaStreamType stream_type, |
int capture_session_id) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |