diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-24 23:04:56 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-24 23:04:56 +0000 |
commit | febe94524deeb320646d623cd91ed87e1db67a7b (patch) | |
tree | 37324c7aa5ba6d115c42e60a335476be64e70f19 /media/audio/linux | |
parent | 0ca7e535e2f0b093158c0e73393eead0e1842f6f (diff) | |
download | chromium_src-febe94524deeb320646d623cd91ed87e1db67a7b.zip chromium_src-febe94524deeb320646d623cd91ed87e1db67a7b.tar.gz chromium_src-febe94524deeb320646d623cd91ed87e1db67a7b.tar.bz2 |
Share one thread between all AudioOutputControllers instead of creating one per stream.
TEST=unittests
BUG=39825
Review URL: http://codereview.chromium.org/3185022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57254 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/linux')
-rw-r--r-- | media/audio/linux/alsa_output.cc | 16 | ||||
-rw-r--r-- | media/audio/linux/alsa_output.h | 2 | ||||
-rw-r--r-- | media/audio/linux/audio_manager_linux.cc | 33 | ||||
-rw-r--r-- | media/audio/linux/audio_manager_linux.h | 9 |
4 files changed, 18 insertions, 42 deletions
diff --git a/media/audio/linux/alsa_output.cc b/media/audio/linux/alsa_output.cc index 1358dc3..e8ebc5c 100644 --- a/media/audio/linux/alsa_output.cc +++ b/media/audio/linux/alsa_output.cc @@ -376,7 +376,7 @@ void AlsaPcmOutputStream::GetVolume(double* volume) { } void AlsaPcmOutputStream::OpenTask(uint32 packet_size) { - DCHECK_EQ(MessageLoop::current(), message_loop_); + DCHECK_EQ(message_loop_, MessageLoop::current()); // Initialize the configuration variables. packet_size_ = packet_size; @@ -422,7 +422,7 @@ void AlsaPcmOutputStream::OpenTask(uint32 packet_size) { } void AlsaPcmOutputStream::StartTask() { - DCHECK_EQ(MessageLoop::current(), message_loop_); + DCHECK_EQ(message_loop_, MessageLoop::current()); if (stop_stream_) { return; @@ -454,7 +454,7 @@ void AlsaPcmOutputStream::StartTask() { void AlsaPcmOutputStream::CloseTask() { // NOTE: Keep this function idempotent to handle errors that might cause // multiple CloseTasks to be posted. - DCHECK_EQ(MessageLoop::current(), message_loop_); + DCHECK_EQ(message_loop_, MessageLoop::current()); // Shutdown the audio device. if (playback_handle_ && !CloseDevice(playback_handle_)) { @@ -470,7 +470,7 @@ void AlsaPcmOutputStream::CloseTask() { } void AlsaPcmOutputStream::BufferPacket(bool* source_exhausted) { - DCHECK_EQ(MessageLoop::current(), message_loop_); + DCHECK_EQ(message_loop_, MessageLoop::current()); // If stopped, simulate a 0-lengthed packet. if (stop_stream_) { @@ -558,7 +558,7 @@ void AlsaPcmOutputStream::BufferPacket(bool* source_exhausted) { } void AlsaPcmOutputStream::WritePacket() { - DCHECK_EQ(MessageLoop::current(), message_loop_); + DCHECK_EQ(message_loop_, MessageLoop::current()); // If the device is in error, just eat the bytes. if (stop_stream_) { @@ -611,7 +611,7 @@ void AlsaPcmOutputStream::WritePacket() { } void AlsaPcmOutputStream::WriteTask() { - DCHECK_EQ(MessageLoop::current(), message_loop_); + DCHECK_EQ(message_loop_, MessageLoop::current()); if (stop_stream_) { return; @@ -625,7 +625,7 @@ void AlsaPcmOutputStream::WriteTask() { } void AlsaPcmOutputStream::ScheduleNextWrite(bool source_exhausted) { - DCHECK_EQ(MessageLoop::current(), message_loop_); + DCHECK_EQ(message_loop_, MessageLoop::current()); if (stop_stream_) { return; @@ -778,7 +778,7 @@ bool AlsaPcmOutputStream::CloseDevice(snd_pcm_t* handle) { } snd_pcm_sframes_t AlsaPcmOutputStream::GetAvailableFrames() { - DCHECK_EQ(MessageLoop::current(), message_loop_); + DCHECK_EQ(message_loop_, MessageLoop::current()); if (stop_stream_) { return 0; diff --git a/media/audio/linux/alsa_output.h b/media/audio/linux/alsa_output.h index 0fb5ac5..f98f2c0 100644 --- a/media/audio/linux/alsa_output.h +++ b/media/audio/linux/alsa_output.h @@ -36,8 +36,8 @@ #include "base/lock.h" #include "base/ref_counted.h" #include "base/scoped_ptr.h" -#include "base/thread.h" #include "media/audio/audio_io.h" +#include "media/audio/audio_manager_base.h" namespace media { class SeekableBuffer; diff --git a/media/audio/linux/audio_manager_linux.cc b/media/audio/linux/audio_manager_linux.cc index 17a1f74..713a753 100644 --- a/media/audio/linux/audio_manager_linux.cc +++ b/media/audio/linux/audio_manager_linux.cc @@ -4,7 +4,6 @@ #include "media/audio/linux/audio_manager_linux.h" -#include "base/at_exit.h" #include "base/command_line.h" #include "base/logging.h" #include "media/audio/fake_audio_input_stream.h" @@ -13,12 +12,6 @@ #include "media/audio/linux/alsa_wrapper.h" #include "media/base/media_switches.h" - -namespace { - -AudioManagerLinux* g_audio_manager = NULL; -} // namespace - // Implementation of AudioManager. bool AudioManagerLinux::HasAudioOutputDevices() { // TODO(ajwong): Make this actually query audio devices. @@ -56,7 +49,7 @@ AudioOutputStream* AudioManagerLinux::MakeAudioOutputStream( return FakeAudioOutputStream::MakeFakeStream(); } - if (!initialized_) { + if (!initialized()) { return NULL; } @@ -68,16 +61,14 @@ AudioOutputStream* AudioManagerLinux::MakeAudioOutputStream( AlsaPcmOutputStream* stream = new AlsaPcmOutputStream(device_name, format, channels, sample_rate, bits_per_sample, wrapper_.get(), this, - audio_thread_.message_loop()); + GetMessageLoop()); AutoLock l(lock_); active_streams_[stream] = scoped_refptr<AlsaPcmOutputStream>(stream); return stream; } -AudioManagerLinux::AudioManagerLinux() - : audio_thread_("AudioThread"), - initialized_(false) { +AudioManagerLinux::AudioManagerLinux() { } AudioManagerLinux::~AudioManagerLinux() { @@ -91,7 +82,7 @@ AudioManagerLinux::~AudioManagerLinux() { } void AudioManagerLinux::Init() { - initialized_ = audio_thread_.Start(); + AudioManagerBase::Init(); wrapper_.reset(new AlsaWrapper()); } @@ -110,17 +101,7 @@ void AudioManagerLinux::ReleaseOutputStream(AlsaPcmOutputStream* stream) { } } -// TODO(ajwong): Collapse this with the windows version. -void DestroyAudioManagerLinux(void* not_used) { - delete g_audio_manager; - g_audio_manager = NULL; -} - -AudioManager* AudioManager::GetAudioManager() { - if (!g_audio_manager) { - g_audio_manager = new AudioManagerLinux(); - g_audio_manager->Init(); - base::AtExitManager::RegisterCallback(&DestroyAudioManagerLinux, NULL); - } - return g_audio_manager; +// static +AudioManager* AudioManager::CreateAudioManager() { + return new AudioManagerLinux(); } diff --git a/media/audio/linux/audio_manager_linux.h b/media/audio/linux/audio_manager_linux.h index ea335f0..2703eed 100644 --- a/media/audio/linux/audio_manager_linux.h +++ b/media/audio/linux/audio_manager_linux.h @@ -11,12 +11,12 @@ #include "base/ref_counted.h" #include "base/scoped_ptr.h" #include "base/thread.h" -#include "media/audio/audio_io.h" +#include "media/audio/audio_manager_base.h" class AlsaPcmOutputStream; class AlsaWrapper; -class AudioManagerLinux : public AudioManager { +class AudioManagerLinux : public AudioManagerBase { public: AudioManagerLinux(); @@ -44,17 +44,12 @@ class AudioManagerLinux : public AudioManager { virtual ~AudioManagerLinux(); private: - // Thread used to interact with AudioOutputStreams created by this - // audio manger. - base::Thread audio_thread_; scoped_ptr<AlsaWrapper> wrapper_; Lock lock_; std::map<AlsaPcmOutputStream*, scoped_refptr<AlsaPcmOutputStream> > active_streams_; - bool initialized_; - DISALLOW_COPY_AND_ASSIGN(AudioManagerLinux); }; |