Chromium Code Reviews| Index: content/renderer/media/audio_renderer_mixer_manager.cc |
| diff --git a/content/renderer/media/audio_renderer_mixer_manager.cc b/content/renderer/media/audio_renderer_mixer_manager.cc |
| index 309eaa848f707362555ca6b1ba2202a54c3e022b..41f3b65fbd8e8f49ce8f449090ff4adb08d2d955 100644 |
| --- a/content/renderer/media/audio_renderer_mixer_manager.cc |
| +++ b/content/renderer/media/audio_renderer_mixer_manager.cc |
| @@ -10,15 +10,15 @@ |
| #include "base/bind_helpers.h" |
| #include "build/build_config.h" |
| #include "content/renderer/media/audio_device_factory.h" |
| -#include "media/audio/audio_output_device.h" |
| +#include "media/audio/audio_manager_base.h" |
| #include "media/base/audio_hardware_config.h" |
| #include "media/base/audio_renderer_mixer.h" |
| #include "media/base/audio_renderer_mixer_input.h" |
| +#include "media/base/audio_renderer_mixer_sink.h" |
| namespace content { |
| -AudioRendererMixerManager::AudioRendererMixerManager() |
| - : sink_for_testing_(nullptr) {} |
| +AudioRendererMixerManager::AudioRendererMixerManager(){}; |
|
o1ka
2016/03/07 15:25:49
nit: I'll add a space before {}
o1ka
2016/04/05 15:13:38
Done.
|
| AudioRendererMixerManager::~AudioRendererMixerManager() { |
| // References to AudioRendererMixers may be owned by garbage collected |
| @@ -28,24 +28,35 @@ AudioRendererMixerManager::~AudioRendererMixerManager() { |
| media::AudioRendererMixerInput* AudioRendererMixerManager::CreateInput( |
| int source_render_frame_id, |
| + int session_id, |
| const std::string& device_id, |
| const url::Origin& security_origin) { |
| + std::string new_device_id(device_id); |
| + |
| + if (session_id && device_id.empty()) { |
| + // Output sink should be selected basing on |session_id| |
| + scoped_refptr<media::AudioRendererMixerSink> sink_from_session_id = |
|
Henrik Grunell
2016/03/08 21:09:56
I know we have been discussing this offline before
o1ka
2016/04/05 15:13:37
No, not for now.
|
| + AudioDeviceFactory::NewAudioRendererMixerSink( |
| + source_render_frame_id, session_id, device_id, security_origin); |
| + new_device_id = sink_from_session_id->GetDeviceId(); |
| + |
| + // TODO(olka): Cache it and reuse, http://crbug.com/586161 |
| + sink_from_session_id->Stop(); |
| + } |
| + |
| + // At this point the output device is represented by |new_device_id| and |
| + // |sesson_id| can (and should) be safely ignored. |
|
Henrik Grunell
2016/03/08 21:09:57
Typo: session_id
o1ka
2016/04/05 15:13:38
Done.
|
| return new media::AudioRendererMixerInput( |
| base::Bind(&AudioRendererMixerManager::GetMixer, base::Unretained(this), |
| source_render_frame_id), |
| base::Bind(&AudioRendererMixerManager::RemoveMixer, |
| base::Unretained(this), source_render_frame_id), |
| base::Bind(&AudioRendererMixerManager::GetHardwareOutputParams, |
| - source_render_frame_id, 0), // Session id is 0. |
| - device_id, |
| + source_render_frame_id, 0), // Session id is 0 |
| + new_device_id, |
| security_origin); |
| } |
| -void AudioRendererMixerManager::SetAudioRendererSinkForTesting( |
| - media::AudioRendererSink* sink) { |
| - sink_for_testing_ = sink; |
| -} |
| - |
| media::AudioRendererMixer* AudioRendererMixerManager::GetMixer( |
| int source_render_frame_id, |
| const media::AudioParameters& params, |
| @@ -69,11 +80,8 @@ media::AudioRendererMixer* AudioRendererMixerManager::GetMixer( |
| } |
| scoped_refptr<media::AudioRendererSink> sink = |
| - sink_for_testing_ |
| - ? sink_for_testing_ |
| - : AudioDeviceFactory::NewOutputDevice(source_render_frame_id, 0, |
| - device_id, security_origin) |
| - .get(); |
| + AudioDeviceFactory::NewAudioRendererMixerSink(source_render_frame_id, 0, |
| + device_id, security_origin); |
| media::OutputDeviceStatus new_device_status = |
| sink->GetOutputDevice()->GetDeviceStatus(); |
| @@ -153,14 +161,16 @@ media::AudioParameters AudioRendererMixerManager::GetHardwareOutputParams( |
| // AudioOutputDevice is the only interface we have to communicate with output |
|
Guido Urdaneta
2016/03/08 14:53:09
Comment no longer matches code. However, I think y
o1ka
2016/04/05 15:13:38
The method does not exist any more
|
| // device via IPC. So, that's how we get the parameters when there is no |
| // AudioOutputDevice: |
| - scoped_refptr<media::AudioOutputDevice> device = |
| - AudioDeviceFactory::NewOutputDevice(render_frame_id, session_id, |
| - device_id, security_origin); |
| + scoped_refptr<media::AudioRendererMixerSink> sink = |
| + AudioDeviceFactory::NewAudioRendererMixerSink(render_frame_id, session_id, |
| + device_id, security_origin); |
| - if (device->GetDeviceStatus() == media::OUTPUT_DEVICE_STATUS_OK) |
| - params = device->GetOutputParameters(); |
| + if (sink->GetOutputDevice()->GetDeviceStatus() == |
| + media::OUTPUT_DEVICE_STATUS_OK) |
| + params = sink->GetOutputDevice()->GetOutputParameters(); |
| - device->Stop(); // TODO(olka): temporary cash for future reuse. |
| + // TODO(olka): temporary cash for future reuse. http://crbug.com/586161 |
|
Guido Urdaneta
2016/03/08 14:53:09
typo: s/cash/cache I think, although this doesn't
Henrik Grunell
2016/03/08 21:09:56
Yeah it's a typo. The todo is for adding caching,
|
| + sink->Stop(); |
| return params; |
| } |