diff options
author | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-23 04:33:52 +0000 |
---|---|---|
committer | pkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-23 04:33:52 +0000 |
commit | 458e9521995681381912ece90eb2a8ea210ae07d (patch) | |
tree | d5eeabdee1104f65f42990bbd7edc238a57480d5 /media | |
parent | 1822c9949f19195ca0000f0be929a5398a7c24e6 (diff) | |
download | chromium_src-458e9521995681381912ece90eb2a8ea210ae07d.zip chromium_src-458e9521995681381912ece90eb2a8ea210ae07d.tar.gz chromium_src-458e9521995681381912ece90eb2a8ea210ae07d.tar.bz2 |
Add methods to base::Thread to allow Windows consumers to ask for COM to be intialized on the Thread.
This makes one functional change: when COM is initialized in STA mode, the Thread is forced to use a TYPE_UI message loop. Most of the modified consumers here didn't previously do that, but after discussion with cpu and siggi, it seems safest, even though it's more heavyweight.
BUG=none
TEST=none
Review URL: https://codereview.chromium.org/11048029
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163503 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/audio/audio_input_device_unittest.cc | 1 | ||||
-rw-r--r-- | media/audio/audio_input_volume_unittest.cc | 1 | ||||
-rw-r--r-- | media/audio/audio_manager_base.cc | 26 | ||||
-rw-r--r-- | media/audio/audio_manager_base.h | 27 | ||||
-rw-r--r-- | media/audio/fake_audio_output_stream.cc | 1 |
5 files changed, 14 insertions, 42 deletions
diff --git a/media/audio/audio_input_device_unittest.cc b/media/audio/audio_input_device_unittest.cc index 6eb6dfb..dc211a4 100644 --- a/media/audio/audio_input_device_unittest.cc +++ b/media/audio/audio_input_device_unittest.cc @@ -3,6 +3,7 @@ // found in the LICENSE file. #include "base/environment.h" +#include "base/logging.h" #include "base/memory/scoped_ptr.h" #include "media/audio/audio_manager.h" #include "media/audio/audio_manager_base.h" diff --git a/media/audio/audio_input_volume_unittest.cc b/media/audio/audio_input_volume_unittest.cc index 9d241b8..8fc68b4 100644 --- a/media/audio/audio_input_volume_unittest.cc +++ b/media/audio/audio_input_volume_unittest.cc @@ -4,6 +4,7 @@ #include <cmath> +#include "base/logging.h" #include "base/memory/scoped_ptr.h" #include "media/audio/audio_io.h" #include "media/audio/audio_manager_base.h" diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc index 0a095ff..1963a61 100644 --- a/media/audio/audio_manager_base.cc +++ b/media/audio/audio_manager_base.cc @@ -7,6 +7,7 @@ #include "base/bind.h" #include "base/command_line.h" #include "base/message_loop_proxy.h" +#include "base/threading/thread.h" #include "media/audio/audio_output_dispatcher_impl.h" #include "media/audio/audio_output_proxy.h" #include "media/audio/audio_output_resampler.h" @@ -38,24 +39,6 @@ static const int kMaxInputChannels = 2; const char AudioManagerBase::kDefaultDeviceName[] = "Default"; const char AudioManagerBase::kDefaultDeviceId[] = "default"; -#if defined(OS_WIN) -AudioThread::AudioThread(const char* name) : base::Thread(name) { -} - -AudioThread::~AudioThread() { - Stop(); -} - -void AudioThread::Init() { - com_initializer_.reset(new base::win::ScopedCOMInitializer( - base::win::ScopedCOMInitializer::kMTA)); -} - -void AudioThread::CleanUp() { - com_initializer_.reset(); -} -#endif - AudioManagerBase::AudioManagerBase() : num_active_input_streams_(0), max_num_output_streams_(kDefaultMaxOutputStreams), @@ -80,7 +63,10 @@ AudioManagerBase::~AudioManagerBase() { void AudioManagerBase::Init() { base::AutoLock lock(audio_thread_lock_); DCHECK(!audio_thread_.get()); - audio_thread_.reset(new AudioThread("AudioThread")); + audio_thread_.reset(new base::Thread("AudioThread")); +#if defined(OS_WIN) + audio_thread_->init_com_with_mta(true); +#endif CHECK(audio_thread_->Start()); message_loop_ = audio_thread_->message_loop_proxy(); } @@ -274,7 +260,7 @@ bool AudioManagerBase::IsRecordingInProcess() { void AudioManagerBase::Shutdown() { // To avoid running into deadlocks while we stop the thread, shut it down // via a local variable while not holding the audio thread lock. - scoped_ptr<AudioThread> audio_thread; + scoped_ptr<base::Thread> audio_thread; { base::AutoLock lock(audio_thread_lock_); audio_thread_.swap(audio_thread); diff --git a/media/audio/audio_manager_base.h b/media/audio/audio_manager_base.h index 8d06ab8..3c06522 100644 --- a/media/audio/audio_manager_base.h +++ b/media/audio/audio_manager_base.h @@ -13,37 +13,20 @@ #include "base/memory/scoped_ptr.h" #include "base/observer_list.h" #include "base/synchronization/lock.h" -#include "base/threading/thread.h" #include "media/audio/audio_manager.h" #if defined(OS_WIN) #include "base/win/scoped_com_initializer.h" #endif +namespace base { +class Thread; +} + namespace media { class AudioOutputDispatcher; -// Thread that enters MTA on Windows. -#if defined(OS_WIN) -class AudioThread : public base::Thread { - public: - explicit AudioThread(const char* name); - virtual ~AudioThread(); - - protected: - virtual void Init() OVERRIDE; - virtual void CleanUp() OVERRIDE; - - private: - scoped_ptr<base::win::ScopedCOMInitializer> com_initializer_; - - DISALLOW_COPY_AND_ASSIGN(AudioThread); -}; -#else -typedef base::Thread AudioThread; -#endif - // AudioManagerBase provides AudioManager functions common for all platforms. class MEDIA_EXPORT AudioManagerBase : public AudioManager { public: @@ -168,7 +151,7 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager { ObserverList<AudioDeviceListener> output_listeners_; // Thread used to interact with audio streams created by this audio manager. - scoped_ptr<AudioThread> audio_thread_; + scoped_ptr<base::Thread> audio_thread_; mutable base::Lock audio_thread_lock_; // The message loop of the audio thread this object runs on. Set on Init(). diff --git a/media/audio/fake_audio_output_stream.cc b/media/audio/fake_audio_output_stream.cc index fe03859..38b5437 100644 --- a/media/audio/fake_audio_output_stream.cc +++ b/media/audio/fake_audio_output_stream.cc @@ -7,6 +7,7 @@ #include "base/bind.h" #include "base/bind_helpers.h" #include "base/logging.h" +#include "base/message_loop.h" #include "media/audio/audio_manager_base.h" namespace media { |