Index: content/browser/renderer_host/media/media_stream_manager.h |
diff --git a/content/browser/renderer_host/media/media_stream_manager.h b/content/browser/renderer_host/media/media_stream_manager.h |
index 17f863e90fda9b5140ee47983298bb4f17ac1026..19d991156ce487fd4d424997eaf1a4a3b74ec8ef 100644 |
--- a/content/browser/renderer_host/media/media_stream_manager.h |
+++ b/content/browser/renderer_host/media/media_stream_manager.h |
@@ -29,19 +29,15 @@ |
#include "base/basictypes.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/ref_counted.h" |
-#include "base/supports_user_data.h" |
+#include "base/threading/thread.h" |
+#include "base/win/scoped_com_initializer.h" |
#include "content/browser/renderer_host/media/media_stream_provider.h" |
#include "content/browser/renderer_host/media/media_stream_settings_requester.h" |
#include "content/common/media/media_stream_options.h" |
#include "content/common/content_export.h" |
+#include "content/public/browser/browser_thread.h" |
-namespace content { |
-class ResourceContext; |
-} |
- |
-namespace media { |
-class AudioManager; |
-} |
+using base::win::ScopedCOMInitializer; |
namespace media_stream { |
@@ -50,22 +46,31 @@ class MediaStreamDeviceSettings; |
class MediaStreamRequester; |
class VideoCaptureManager; |
+// Thread that enters STA on windows, and is base::thread on linux and mac. |
tommi (sloooow) - chröme
2012/07/04 13:46:48
update comment s/STA/MTA and base::thread -> base:
no longer working on chromium
2012/07/04 14:31:39
Done.
|
+class DeviceThread : public base::Thread { |
+ public: |
+ explicit DeviceThread(const char* name) |
+ : base::Thread(name), |
+ com_init_(ScopedCOMInitializer::kMTA) {} |
+ |
+ private: |
+ ScopedCOMInitializer com_init_; |
+ DISALLOW_COPY_AND_ASSIGN(DeviceThread); |
+}; |
+ |
// MediaStreamManager is used to generate and close new media devices, not to |
// start the media flow. |
// The classes requesting new media streams are answered using |
// MediaStreamManager::Listener. |
class CONTENT_EXPORT MediaStreamManager |
: public MediaStreamProviderListener, |
- public SettingsRequester, |
- public base::SupportsUserData::Data { |
+ public SettingsRequester { |
public: |
- // Returns the MediaStreamManager for the given ResourceContext. If it hasn't |
- // been created yet, it will be constructed with the given AudioManager. |
- static MediaStreamManager* GetForResourceContext( |
- content::ResourceContext* resource_context, |
- media::AudioManager* audio_manager); |
+ // This class takes the ownerships of the |audio_input_device_manager| |
+ // and |video_capture_manager|. |
+ MediaStreamManager(AudioInputDeviceManager* audio_input_device_manager, |
+ VideoCaptureManager* video_capture_manager); |
- explicit MediaStreamManager(media::AudioManager* audio_manager); |
virtual ~MediaStreamManager(); |
// Used to access VideoCaptureManager. |
@@ -149,9 +154,16 @@ class CONTENT_EXPORT MediaStreamManager |
void StartEnumeration(DeviceRequest* new_request, |
std::string* label); |
+ // Helper to ensure the device thread and pass the message loop to device |
+ // managers, it also register itself as the listener to the device managers. |
+ void EnsureDeviceThreadAndListener(); |
+ |
+ // Device thread shared by VideoCaptureManager and AudioInputDeviceManager. |
+ scoped_ptr<base::Thread> device_thread_; |
+ |
scoped_ptr<MediaStreamDeviceSettings> device_settings_; |
- scoped_refptr<VideoCaptureManager> video_capture_manager_; |
scoped_refptr<AudioInputDeviceManager> audio_input_device_manager_; |
+ scoped_refptr<VideoCaptureManager> video_capture_manager_; |
// Keeps track of device types currently being enumerated to not enumerate |
// when not necessary. |
@@ -160,7 +172,6 @@ class CONTENT_EXPORT MediaStreamManager |
// All non-closed request. |
typedef std::map<std::string, DeviceRequest> DeviceRequests; |
DeviceRequests requests_; |
- media::AudioManager* audio_manager_; |
DISALLOW_COPY_AND_ASSIGN(MediaStreamManager); |
}; |