diff options
author | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-23 23:20:56 +0000 |
---|---|---|
committer | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-23 23:20:56 +0000 |
commit | e3fa1cf9043ffc6aa014bfade911e9af0e0e5785 (patch) | |
tree | 7d61387c89b1d0a9eda1f07176d324a945213200 /media | |
parent | 168de21fb1f9fb172c07e16822c2e98bd8faacd0 (diff) | |
download | chromium_src-e3fa1cf9043ffc6aa014bfade911e9af0e0e5785.zip chromium_src-e3fa1cf9043ffc6aa014bfade911e9af0e0e5785.tar.gz chromium_src-e3fa1cf9043ffc6aa014bfade911e9af0e0e5785.tar.bz2 |
Replace AudioManager::Init() with InitializeOnAudioThread().
Collapses the Init() method into the constructor since it was always
called immediately anyways and provides a more useful method for
performing initialization on the audio thread.
BUG=153056
TEST=media_unittests continue to work and pass.
Review URL: https://chromiumcodereview.appspot.com/11175066
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163720 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/audio/audio_low_latency_input_output_unittest.cc | 6 | ||||
-rw-r--r-- | media/audio/audio_manager.cc | 4 | ||||
-rw-r--r-- | media/audio/audio_manager.h | 3 | ||||
-rw-r--r-- | media/audio/audio_manager_base.cc | 21 | ||||
-rw-r--r-- | media/audio/audio_manager_base.h | 22 | ||||
-rw-r--r-- | media/audio/audio_output_proxy_unittest.cc | 4 | ||||
-rw-r--r-- | media/audio/linux/audio_manager_linux.cc | 8 | ||||
-rw-r--r-- | media/audio/linux/audio_manager_linux.h | 3 | ||||
-rw-r--r-- | media/audio/mock_audio_manager.cc | 3 | ||||
-rw-r--r-- | media/audio/mock_audio_manager.h | 2 | ||||
-rw-r--r-- | media/audio/openbsd/audio_manager_openbsd.cc | 4 | ||||
-rw-r--r-- | media/audio/openbsd/audio_manager_openbsd.h | 3 |
12 files changed, 30 insertions, 53 deletions
diff --git a/media/audio/audio_low_latency_input_output_unittest.cc b/media/audio/audio_low_latency_input_output_unittest.cc index 725d481..7ca7f03 100644 --- a/media/audio/audio_low_latency_input_output_unittest.cc +++ b/media/audio/audio_low_latency_input_output_unittest.cc @@ -81,10 +81,7 @@ struct AudioDelayState { // the main thread instead of the audio thread. class MockAudioManager : public AudioManagerAnyPlatform { public: - MockAudioManager() { - Init(); - } - + MockAudioManager() {} virtual ~MockAudioManager() {} virtual scoped_refptr<base::MessageLoopProxy> GetMessageLoop() OVERRIDE { @@ -129,7 +126,6 @@ class AudioLowLatencyInputOutputTest : public testing::Test { // The total effect is that recorded audio is played out in loop back using // a sync buffer as temporary storage. class FullDuplexAudioSinkSource - : public AudioInputStream::AudioInputCallback, public AudioOutputStream::AudioSourceCallback { public: diff --git a/media/audio/audio_manager.cc b/media/audio/audio_manager.cc index 028b409..11af0ac 100644 --- a/media/audio/audio_manager.cc +++ b/media/audio/audio_manager.cc @@ -21,9 +21,7 @@ AudioManager::~AudioManager() { // static AudioManager* AudioManager::Create() { - AudioManager* ret = CreateAudioManager(); - ret->Init(); - return ret; + return CreateAudioManager(); } } // namespace media diff --git a/media/audio/audio_manager.h b/media/audio/audio_manager.h index 3b61bde..ca4c468 100644 --- a/media/audio/audio_manager.h +++ b/media/audio/audio_manager.h @@ -127,9 +127,6 @@ class MEDIA_EXPORT AudioManager { protected: AudioManager(); - // Called from Create() to initialize the instance. - virtual void Init() = 0; - private: DISALLOW_COPY_AND_ASSIGN(AudioManager); }; diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc index 1963a61..0c42cb0 100644 --- a/media/audio/audio_manager_base.cc +++ b/media/audio/audio_manager_base.cc @@ -44,7 +44,15 @@ AudioManagerBase::AudioManagerBase() max_num_output_streams_(kDefaultMaxOutputStreams), max_num_input_streams_(kDefaultMaxInputStreams), num_output_streams_(0), - num_input_streams_(0) { + num_input_streams_(0), + audio_thread_(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(); + message_loop_->PostTask(FROM_HERE, base::Bind( + &AudioManagerBase::InitializeOnAudioThread, base::Unretained(this))); } AudioManagerBase::~AudioManagerBase() { @@ -60,15 +68,8 @@ AudioManagerBase::~AudioManagerBase() { DCHECK_EQ(0, num_input_streams_); } -void AudioManagerBase::Init() { - base::AutoLock lock(audio_thread_lock_); - DCHECK(!audio_thread_.get()); - 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(); +void AudioManagerBase::InitializeOnAudioThread() { + DCHECK(message_loop_->BelongsToCurrentThread()); } string16 AudioManagerBase::GetAudioInputDeviceModel() { diff --git a/media/audio/audio_manager_base.h b/media/audio/audio_manager_base.h index 3c06522..b6c8b27 100644 --- a/media/audio/audio_manager_base.h +++ b/media/audio/audio_manager_base.h @@ -37,8 +37,6 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager { virtual ~AudioManagerBase(); - virtual void Init() OVERRIDE; - virtual scoped_refptr<base::MessageLoopProxy> GetMessageLoop() OVERRIDE; virtual string16 GetAudioInputDeviceModel() OVERRIDE; @@ -111,13 +109,11 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager { AudioOutputDispatchersMap; // Shuts down the audio thread and releases all the audio output dispatchers - // on the audio thread. All audio streams should be freed before - // Shutdown is called. - // This must be called in the destructor of the AudioManager<Platform>. + // on the audio thread. All audio streams should be freed before Shutdown() + // is called. This must be called in the destructor of every AudioManagerBase + // implementation. void Shutdown(); - void ShutdownOnAudioThread(); - void SetMaxOutputStreamsAllowed(int max) { max_num_output_streams_ = max; } // Called by each platform specific AudioManager to notify output state change @@ -125,11 +121,17 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager { // thread. void NotifyAllOutputDeviceChangeListeners(); + // Called on |audio_thread_|'s message loop immediately after construction. + virtual void InitializeOnAudioThread(); + // Map of cached AudioOutputDispatcher instances. Must only be touched // from the audio thread (no locking). AudioOutputDispatchersMap output_dispatchers_; private: + // Called by Shutdown(). + void ShutdownOnAudioThread(); + // Counts the number of active input streams to find out if something else // is currently recording in Chrome. base::AtomicRefCount num_active_input_streams_; @@ -154,9 +156,9 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager { 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(). - // Used for internal tasks which run on the audio thread even after Shutdown() - // has been started and GetMessageLoop() starts returning NULL. + // The message loop of the audio thread this object runs on. Used for internal + // tasks which run on the audio thread even after Shutdown() has been started + // and GetMessageLoop() starts returning NULL. scoped_refptr<base::MessageLoopProxy> message_loop_; DISALLOW_COPY_AND_ASSIGN(AudioManagerBase); diff --git a/media/audio/audio_output_proxy_unittest.cc b/media/audio/audio_output_proxy_unittest.cc index 2d2168d..8fce93e 100644 --- a/media/audio/audio_output_proxy_unittest.cc +++ b/media/audio/audio_output_proxy_unittest.cc @@ -96,8 +96,10 @@ class MockAudioOutputStream : public AudioOutputStream { class MockAudioManager : public AudioManagerBase { public: MockAudioManager() {} + virtual ~MockAudioManager() { + Shutdown(); + } - MOCK_METHOD0(Init, void()); MOCK_METHOD0(HasAudioOutputDevices, bool()); MOCK_METHOD0(HasAudioInputDevices, bool()); MOCK_METHOD0(GetAudioInputDeviceModel, string16()); diff --git a/media/audio/linux/audio_manager_linux.cc b/media/audio/linux/audio_manager_linux.cc index 5f31862..b9d7aeb 100644 --- a/media/audio/linux/audio_manager_linux.cc +++ b/media/audio/linux/audio_manager_linux.cc @@ -59,7 +59,8 @@ bool AudioManagerLinux::HasAudioInputDevices() { return HasAnyAlsaAudioDevice(kStreamCapture); } -AudioManagerLinux::AudioManagerLinux() { +AudioManagerLinux::AudioManagerLinux() + : wrapper_(new AlsaWrapper()) { SetMaxOutputStreamsAllowed(kMaxOutputStreams); } @@ -67,11 +68,6 @@ AudioManagerLinux::~AudioManagerLinux() { Shutdown(); } -void AudioManagerLinux::Init() { - AudioManagerBase::Init(); - wrapper_.reset(new AlsaWrapper()); -} - bool AudioManagerLinux::CanShowAudioInputSettings() { scoped_ptr<base::Environment> env(base::Environment::Create()); diff --git a/media/audio/linux/audio_manager_linux.h b/media/audio/linux/audio_manager_linux.h index 2d71605..7aab32a 100644 --- a/media/audio/linux/audio_manager_linux.h +++ b/media/audio/linux/audio_manager_linux.h @@ -19,9 +19,6 @@ class MEDIA_EXPORT AudioManagerLinux : public AudioManagerBase { public: AudioManagerLinux(); - // Call before using a newly created AudioManagerLinux instance. - virtual void Init() OVERRIDE; - // Implementation of AudioManager. virtual bool HasAudioOutputDevices() OVERRIDE; virtual bool HasAudioInputDevices() OVERRIDE; diff --git a/media/audio/mock_audio_manager.cc b/media/audio/mock_audio_manager.cc index bb3d49c..9a40b65 100644 --- a/media/audio/mock_audio_manager.cc +++ b/media/audio/mock_audio_manager.cc @@ -66,9 +66,6 @@ scoped_refptr<base::MessageLoopProxy> MockAudioManager::GetMessageLoop() { return message_loop_proxy_; } -void MockAudioManager::Init() { -} - void MockAudioManager::AddOutputDeviceChangeListener( AudioDeviceListener* listener) { } diff --git a/media/audio/mock_audio_manager.h b/media/audio/mock_audio_manager.h index 347ca50..6a94055 100644 --- a/media/audio/mock_audio_manager.h +++ b/media/audio/mock_audio_manager.h @@ -50,8 +50,6 @@ class MockAudioManager : public media::AudioManager { virtual scoped_refptr<base::MessageLoopProxy> GetMessageLoop() OVERRIDE; - virtual void Init() OVERRIDE; - virtual void AddOutputDeviceChangeListener( AudioDeviceListener* listener) OVERRIDE; virtual void RemoveOutputDeviceChangeListener( diff --git a/media/audio/openbsd/audio_manager_openbsd.cc b/media/audio/openbsd/audio_manager_openbsd.cc index 3f2cfae..84304a5 100644 --- a/media/audio/openbsd/audio_manager_openbsd.cc +++ b/media/audio/openbsd/audio_manager_openbsd.cc @@ -51,10 +51,6 @@ AudioManagerOpenBSD::~AudioManagerOpenBSD() { Shutdown(); } -void AudioManagerOpenBSD::Init() { - AudioManagerBase::Init(); -} - AudioOutputStream* AudioManagerOpenBSD::MakeLinearOutputStream( const AudioParameters& params) { DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format); diff --git a/media/audio/openbsd/audio_manager_openbsd.h b/media/audio/openbsd/audio_manager_openbsd.h index 8fb208d..aeba43e 100644 --- a/media/audio/openbsd/audio_manager_openbsd.h +++ b/media/audio/openbsd/audio_manager_openbsd.h @@ -16,9 +16,6 @@ class MEDIA_EXPORT AudioManagerOpenBSD : public AudioManagerBase { public: AudioManagerOpenBSD(); - // Call before using a newly created AudioManagerOpenBSD instance. - virtual void Init() OVERRIDE; - // Implementation of AudioManager. virtual bool HasAudioOutputDevices() OVERRIDE; virtual bool HasAudioInputDevices() OVERRIDE; |