summaryrefslogtreecommitdiffstats
path: root/media/audio/linux/audio_manager_linux.cc
diff options
context:
space:
mode:
Diffstat (limited to 'media/audio/linux/audio_manager_linux.cc')
-rw-r--r--media/audio/linux/audio_manager_linux.cc38
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;