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..989fc11fb6aee401b9d93a27ecfabffadf17a114 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, |
@@ -76,6 +79,7 @@ scoped_refptr<base::MessageLoopProxy> AudioManagerBase::GetMessageLoop() { |
AudioOutputStream* AudioManagerBase::MakeAudioOutputStream( |
const AudioParameters& params) { |
+ DCHECK_EQ(MessageLoop::current(), audio_thread_->message_loop()); |
if (!params.IsValid()) { |
DLOG(ERROR) << "Audio parameters are invalid"; |
return NULL; |
@@ -100,7 +104,14 @@ AudioOutputStream* AudioManagerBase::MakeAudioOutputStream( |
!HasAudioOutputDevices(); |
AudioOutputStream* stream = NULL; |
- if (audio_output_disabled) { |
+ |
+ // 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); |
+ RegisterVirtualAudioOutputStream(stream); |
+ } else if (audio_output_disabled) { |
stream = FakeAudioOutputStream::MakeFakeStream(this, params); |
} else if (params.format() == AudioParameters::AUDIO_PCM_LINEAR) { |
stream = MakeLinearOutputStream(params); |
@@ -114,6 +125,22 @@ AudioOutputStream* AudioManagerBase::MakeAudioOutputStream( |
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) || |
@@ -130,7 +157,10 @@ AudioInputStream* AudioManagerBase::MakeAudioInputStream( |
} |
AudioInputStream* stream = NULL; |
- if (params.format() == AudioParameters::AUDIO_FAKE) { |
+ if (params.format() == AudioParameters::AUDIO_WEB_CONTENTS) { |
+ stream = VirtualAudioInputStream::MakeStream(this, params); |
+ // SwapToVirtual. |
+ } 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); |
@@ -233,10 +263,14 @@ void AudioManagerBase::GetAudioInputDeviceNames( |
} |
void AudioManagerBase::ReleaseOutputStream(AudioOutputStream* stream) { |
+ DCHECK_EQ(MessageLoop::current(), audio_thread_->message_loop()); |
DaleCurtis
2012/11/20 20:00:46
Just DCHECK(message_loop_->BelongsToCurrentThread(
justinlin
2012/11/21 08:09:54
Removed this. Don't really need it anymore.
|
DCHECK(stream); |
// TODO(xians) : Have a clearer destruction path for the AudioOutputStream. |
// For example, pass the ownership to AudioManager so it can delete the |
// streams. |
+ |
+ UnregisterVirtualAudioOutputStream(stream); |
+ |
num_output_streams_--; |
delete stream; |
} |