Chromium Code Reviews| 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; |
| } |