diff options
Diffstat (limited to 'media/audio/linux/audio_manager_linux.cc')
-rw-r--r-- | media/audio/linux/audio_manager_linux.cc | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/media/audio/linux/audio_manager_linux.cc b/media/audio/linux/audio_manager_linux.cc index a9d299f..3d1d98c 100644 --- a/media/audio/linux/audio_manager_linux.cc +++ b/media/audio/linux/audio_manager_linux.cc @@ -8,6 +8,7 @@ #include "base/logging.h" #include "media/audio/fake_audio_output_stream.h" #include "media/audio/linux/alsa_output.h" +#include "media/audio/linux/alsa_wrapper.h" namespace { AudioManagerLinux* g_audio_manager = NULL; @@ -23,28 +24,44 @@ AudioOutputStream* AudioManagerLinux::MakeAudioStream(Format format, int channels, int sample_rate, char bits_per_sample) { + // Early return for testing hook. Do this before checking for + // |initialized_|. + if (format == AudioManager::AUDIO_MOCK) { + return FakeAudioOutputStream::MakeFakeStream(); + } + + if (!initialized_) { + return NULL; + } + // TODO(ajwong): Do we want to be able to configure the device? default // should work correctly for all mono/stereo, but not surround, which needs // surround40, surround51, etc. // // http://0pointer.de/blog/projects/guide-to-sound-apis.html - if (format == AudioManager::AUDIO_MOCK) { - return FakeAudioOutputStream::MakeFakeStream(); - } else { - AlsaPCMOutputStream* stream = - new AlsaPCMOutputStream(AlsaPCMOutputStream::kDefaultDevice, - 100 /* 100ms minimal buffer */, - format, channels, sample_rate, bits_per_sample); - return stream; - } + AlsaPcmOutputStream* stream = + new AlsaPcmOutputStream(AlsaPcmOutputStream::kDefaultDevice, + format, channels, sample_rate, bits_per_sample, + wrapper_.get(), audio_thread_.message_loop()); + + // TODO(ajwong): Set up this to clear itself when the stream closes. + active_streams_[stream] = scoped_refptr<AlsaPcmOutputStream>(stream); + return stream; } -AudioManagerLinux::AudioManagerLinux() { +AudioManagerLinux::AudioManagerLinux() + : audio_thread_("AudioThread"), + initialized_(false) { } AudioManagerLinux::~AudioManagerLinux() { } +void AudioManagerLinux::Init() { + initialized_ = audio_thread_.Start(); + wrapper_.reset(new AlsaWrapper()); +} + void AudioManagerLinux::MuteAll() { // TODO(ajwong): Implement. NOTIMPLEMENTED(); @@ -64,6 +81,7 @@ void DestroyAudioManagerLinux(void* not_used) { 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; |