| Index: media/audio/linux/audio_manager_linux.cc
|
| diff --git a/media/audio/linux/audio_manager_linux.cc b/media/audio/linux/audio_manager_linux.cc
|
| index a9d299fe8a9c2035f240efeaf0e200ac66d677a7..3d1d98c09cce9f74eb17cbb3d8e1323f0db1e7c8 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;
|
|
|