Index: media/audio/openbsd/audio_manager_openbsd.cc |
diff --git a/media/audio/openbsd/audio_manager_openbsd.cc b/media/audio/openbsd/audio_manager_openbsd.cc |
index cb18768463e0910f45280151843ec62bde76a923..8aff1621333bc29a92ee0cddaa921e76456d3df8 100644 |
--- a/media/audio/openbsd/audio_manager_openbsd.cc |
+++ b/media/audio/openbsd/audio_manager_openbsd.cc |
@@ -4,21 +4,74 @@ |
#include "media/audio/openbsd/audio_manager_openbsd.h" |
+#include "base/command_line.h" |
+#include "media/audio/audio_output_dispatcher.h" |
+#include "media/audio/fake_audio_input_stream.h" |
+#include "media/audio/fake_audio_output_stream.h" |
+#if defined(USE_PULSEAUDIO) |
+#include "media/audio/pulse/pulse_output.h" |
+#endif |
+#include "media/base/limits.h" |
+#include "media/base/media_switches.h" |
+ |
+#include <fcntl.h> |
+ |
+// Maximum number of output streams that can be open simultaneously. |
+static const size_t kMaxOutputStreams = 50; |
+ |
// Implementation of AudioManager. |
+static bool HasAudioHardware() { |
+ int fd; |
+ const char *file; |
+ |
+ if ((file = getenv("AUDIOCTLDEVICE")) == 0 || *file == '\0') |
+ file = "/dev/audioctl"; |
+ |
+ if ((fd = open(file, O_RDONLY)) < 0) |
+ return false; |
+ |
+ close(fd); |
+ return true; |
+} |
+ |
bool AudioManagerOpenBSD::HasAudioOutputDevices() { |
- NOTIMPLEMENTED(); |
- return false; |
+ return HasAudioHardware(); |
} |
bool AudioManagerOpenBSD::HasAudioInputDevices() { |
- NOTIMPLEMENTED(); |
- return false; |
+ return HasAudioHardware(); |
} |
AudioOutputStream* AudioManagerOpenBSD::MakeAudioOutputStream( |
const AudioParameters& params) { |
- NOTIMPLEMENTED(); |
- return NULL; |
+ // Early return for testing hook. Do this before checking for |
+ // |initialized_|. |
+ if (params.format == AudioParameters::AUDIO_MOCK) { |
+ return FakeAudioOutputStream::MakeFakeStream(params); |
+ } |
+ |
+ if (!initialized()) { |
+ return NULL; |
+ } |
+ |
+ // Don't allow opening more than |kMaxOutputStreams| streams. |
+ if (active_streams_.size() >= kMaxOutputStreams) { |
+ return NULL; |
+ } |
+ |
+ AudioOutputStream* stream; |
scherkus (not reviewing)
2011/11/16 00:57:56
nit: I think it'd be clearer if it was written as:
Robert Nagy
2011/11/16 11:59:59
Done.
|
+#if defined(USE_PULSEAUDIO) |
+ if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kUsePulseAudio)) { |
+ stream = new PulseAudioOutputStream(params, this, GetMessageLoop()); |
+ active_streams_.insert(stream); |
+ return stream; |
+ } else { |
+#endif |
+ NOTIMPLEMENTED(); |
+ return NULL; |
+#if defined(USE_PULSEAUDIO) |
+ } |
+#endif |
} |
AudioInputStream* AudioManagerOpenBSD::MakeAudioInputStream( |
@@ -41,6 +94,13 @@ void AudioManagerOpenBSD::UnMuteAll() { |
NOTIMPLEMENTED(); |
} |
+void AudioManagerOpenBSD::ReleaseOutputStream(AudioOutputStream* stream) { |
+ if (stream) { |
+ active_streams_.erase(stream); |
+ delete stream; |
+ } |
+} |
+ |
bool AudioManagerOpenBSD::IsRecordingInProgress() { |
NOTIMPLEMENTED(); |
return false; |