summaryrefslogtreecommitdiffstats
path: root/media/audio/linux
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-24 23:04:56 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-24 23:04:56 +0000
commitfebe94524deeb320646d623cd91ed87e1db67a7b (patch)
tree37324c7aa5ba6d115c42e60a335476be64e70f19 /media/audio/linux
parent0ca7e535e2f0b093158c0e73393eead0e1842f6f (diff)
downloadchromium_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.cc16
-rw-r--r--media/audio/linux/alsa_output.h2
-rw-r--r--media/audio/linux/audio_manager_linux.cc33
-rw-r--r--media/audio/linux/audio_manager_linux.h9
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);
};