Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(181)

Unified Diff: media/audio/openbsd/audio_manager_openbsd.cc

Issue 8499029: make pulseaudio available for all posix platforms because it's not linux only (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: don't include pulse on windows Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/openbsd/audio_manager_openbsd.h ('k') | media/audio/pulse/pulse_output.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..02ce592ff3ae31b5c08f5e253b7db1c0180866dc 100644
--- a/media/audio/openbsd/audio_manager_openbsd.cc
+++ b/media/audio/openbsd/audio_manager_openbsd.cc
@@ -4,19 +4,71 @@
#include "media/audio/openbsd/audio_manager_openbsd.h"
+#include "base/command_line.h"
+#include "base/stl_util.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) {
+ // 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;
+#if defined(USE_PULSEAUDIO)
+ if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kUsePulseAudio)) {
+ stream = new PulseAudioOutputStream(params, this, GetMessageLoop());
+ active_streams_.insert(stream);
+ return stream;
+ }
+#endif
+
NOTIMPLEMENTED();
return NULL;
}
@@ -31,6 +83,23 @@ AudioManagerOpenBSD::AudioManagerOpenBSD() {
}
AudioManagerOpenBSD::~AudioManagerOpenBSD() {
+ // Make sure we stop the thread first. If we allow the default destructor to
+ // destroy the members, we may destroy audio streams before stopping the
+ // thread, resulting an unexpected behavior.
+ // This way we make sure activities of the audio streams are all stopped
+ // before we destroy them.
+ audio_thread_.Stop();
+
+ // Free output dispatchers, closing all remaining open streams.
+ output_dispatchers_.clear();
+
+ // Delete all the streams. Have to do it manually, we don't have ScopedSet<>,
+ // and we are not using ScopedVector<> because search there is slow.
+ STLDeleteElements(&active_streams_);
+}
+
+void AudioManagerOpenBSD::Init() {
+ AudioManagerBase::Init();
}
void AudioManagerOpenBSD::MuteAll() {
@@ -41,9 +110,11 @@ void AudioManagerOpenBSD::UnMuteAll() {
NOTIMPLEMENTED();
}
-bool AudioManagerOpenBSD::IsRecordingInProgress() {
- NOTIMPLEMENTED();
- return false;
+void AudioManagerOpenBSD::ReleaseOutputStream(AudioOutputStream* stream) {
+ if (stream) {
+ active_streams_.erase(stream);
+ delete stream;
+ }
}
// static
« no previous file with comments | « media/audio/openbsd/audio_manager_openbsd.h ('k') | media/audio/pulse/pulse_output.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698