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

Unified Diff: media/audio/audio_manager_base.cc

Issue 11298006: Browser-wide audio mirroring for TabCapture API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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
Index: media/audio/audio_manager_base.cc
diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc
index 7b79613774c2b66ad3031794daf7810f894a1ddf..b5b86603417196f695eedb47ecd85f880a2f1a37 100644
--- a/media/audio/audio_manager_base.cc
+++ b/media/audio/audio_manager_base.cc
@@ -7,6 +7,7 @@
#include "base/bind.h"
#include "base/command_line.h"
#include "base/message_loop_proxy.h"
+#include "base/string_util.h"
#include "base/threading/thread.h"
#include "media/audio/audio_output_dispatcher_impl.h"
#include "media/audio/audio_output_proxy.h"
@@ -14,6 +15,8 @@
#include "media/audio/audio_util.h"
#include "media/audio/fake_audio_input_stream.h"
#include "media/audio/fake_audio_output_stream.h"
+#include "media/audio/virtual_audio_input_stream.h"
+#include "media/audio/virtual_audio_output_stream.h"
#include "media/base/media_switches.h"
// TODO(dalecurtis): Temporarily disabled while switching pipeline to use float,
@@ -100,6 +103,18 @@ AudioOutputStream* AudioManagerBase::MakeAudioOutputStream(
!HasAudioOutputDevices();
AudioOutputStream* stream = NULL;
+
+ // Temp hack to use virtual device for everything except webRTC output.
+ bool use_virtual_device = params.sample_rate() != 48000;
+
+ if (use_virtual_device) {
+ stream = VirtualAudioOutputStream::MakeStream(this, params);
+ audio_thread_->message_loop()->PostTask(FROM_HERE, base::Bind(
DaleCurtis 2012/11/07 23:34:17 I believe this is already on the audio thread, no?
justinlin 2012/11/20 08:56:10 Done.
+ &AudioManagerBase::RegisterVirtualAudioOutputStream,
+ base::Unretained(this), stream));
+ return stream;
+ }
+
if (audio_output_disabled) {
stream = FakeAudioOutputStream::MakeFakeStream(this, params);
} else if (params.format() == AudioParameters::AUDIO_PCM_LINEAR) {
@@ -108,12 +123,24 @@ AudioOutputStream* AudioManagerBase::MakeAudioOutputStream(
stream = MakeLowLatencyOutputStream(params);
}
- if (stream)
- ++num_output_streams_;
-
return stream;
}
+void AudioManagerBase::RegisterVirtualAudioOutputStream(
+ AudioOutputStream* stream) {
+ virtual_audio_output_streams_.insert(stream);
+}
+
+void AudioManagerBase::UnregisterVirtualAudioOutputStream(
+ AudioOutputStream* stream) {
+ virtual_audio_output_streams_.erase(stream);
+}
+
+AudioManagerBase::AudioOutputStreamList
+ AudioManagerBase::GetVirtualAudioOutputStreams() {
+ return virtual_audio_output_streams_;
+}
+
AudioInputStream* AudioManagerBase::MakeAudioInputStream(
const AudioParameters& params, const std::string& device_id) {
if (!params.IsValid() || (params.channels() > kMaxInputChannels) ||
@@ -129,8 +156,14 @@ AudioInputStream* AudioManagerBase::MakeAudioInputStream(
return NULL;
}
+ // TODO(justinlin): Bah! Linking issues with content::, fix this later.
+ const std::string kMediaStreamTabDeviceScheme = "virtual://";
+
AudioInputStream* stream = NULL;
- if (params.format() == AudioParameters::AUDIO_FAKE) {
+ if (StartsWithASCII(device_id,
+ kMediaStreamTabDeviceScheme, true)) {
+ stream = VirtualAudioInputStream::MakeStream(this, params);
+ } else if (params.format() == AudioParameters::AUDIO_FAKE) {
stream = FakeAudioInputStream::MakeFakeStream(this, params);
} else if (params.format() == AudioParameters::AUDIO_PCM_LINEAR) {
stream = MakeLinearInputStream(params, device_id);
@@ -237,6 +270,11 @@ void AudioManagerBase::ReleaseOutputStream(AudioOutputStream* stream) {
// TODO(xians) : Have a clearer destruction path for the AudioOutputStream.
// For example, pass the ownership to AudioManager so it can delete the
// streams.
+
+ audio_thread_->message_loop()->PostTask(FROM_HERE, base::Bind(
DaleCurtis 2012/11/07 23:34:17 Ditto.
justinlin 2012/11/20 08:56:10 Done.
+ &AudioManagerBase::UnregisterVirtualAudioOutputStream,
+ base::Unretained(this), stream));
+
num_output_streams_--;
delete stream;
}

Powered by Google App Engine
This is Rietveld 408576698