Index: content/renderer/media/webrtc_local_audio_renderer.cc |
diff --git a/content/renderer/media/webrtc_local_audio_renderer.cc b/content/renderer/media/webrtc_local_audio_renderer.cc |
index f39a017b94db441164f527fba3b8790aca8d46b0..8affdb560ca72199aa65d7f0d8f4717f85547765 100644 |
--- a/content/renderer/media/webrtc_local_audio_renderer.cc |
+++ b/content/renderer/media/webrtc_local_audio_renderer.cc |
@@ -12,12 +12,11 @@ |
#include "base/synchronization/lock.h" |
#include "base/thread_task_runner_handle.h" |
#include "base/trace_event/trace_event.h" |
-#include "content/renderer/media/audio_device_factory.h" |
#include "content/renderer/media/media_stream_dispatcher.h" |
+#include "content/renderer/media/restartable_audio_output_device_factory.h" |
#include "content/renderer/media/webrtc_audio_capturer.h" |
#include "content/renderer/media/webrtc_audio_renderer.h" |
#include "content/renderer/render_frame_impl.h" |
-#include "media/audio/audio_output_device.h" |
#include "media/base/audio_bus.h" |
#include "media/base/audio_shifter.h" |
@@ -126,9 +125,10 @@ void WebRtcLocalAudioRenderer::Start() { |
MediaStreamAudioSink::AddToAudioTrack(this, audio_track_); |
// ...and |sink_| will get audio data from us. |
DCHECK(!sink_.get()); |
- sink_ = |
- AudioDeviceFactory::NewOutputDevice(source_render_frame_id_, session_id_, |
- output_device_id_, security_origin_); |
+ sink_ = RestartableAudioOutputDeviceFactory::NewOutputDevice( |
+ RestartableAudioOutputDeviceFactory::kSourceLocalUserMedia, |
+ source_render_frame_id_, session_id_, output_device_id_, |
+ security_origin_); |
base::AutoLock auto_lock(thread_lock_); |
last_render_time_ = base::TimeTicks::Now(); |
@@ -238,11 +238,14 @@ void WebRtcLocalAudioRenderer::SwitchOutputDevice( |
DVLOG(1) << "WebRtcLocalAudioRenderer::SwitchOutputDevice()"; |
DCHECK(task_runner_->BelongsToCurrentThread()); |
- scoped_refptr<media::AudioOutputDevice> new_sink = |
- AudioDeviceFactory::NewOutputDevice(source_render_frame_id_, session_id_, |
- device_id, security_origin); |
- if (new_sink->GetDeviceStatus() != media::OUTPUT_DEVICE_STATUS_OK) { |
- callback.Run(new_sink->GetDeviceStatus()); |
+ scoped_refptr<media::RestartableAudioRendererSink> new_sink = |
+ RestartableAudioOutputDeviceFactory::NewOutputDevice( |
+ RestartableAudioOutputDeviceFactory::kSourceLocalUserMedia, |
+ source_render_frame_id_, session_id_, device_id, security_origin); |
+ media::OutputDeviceStatus new_sink_status = |
+ new_sink->GetOutputDevice()->GetDeviceStatus(); |
+ if (new_sink_status != media::OUTPUT_DEVICE_STATUS_OK) { |
+ callback.Run(new_sink_status); |
return; |
} |
@@ -255,7 +258,8 @@ void WebRtcLocalAudioRenderer::SwitchOutputDevice( |
sink_started_ = false; |
sink_ = new_sink; |
- int frames_per_buffer = sink_->GetOutputParameters().frames_per_buffer(); |
+ int frames_per_buffer = |
+ sink_->GetOutputDevice()->GetOutputParameters().frames_per_buffer(); |
sink_params_ = source_params_; |
sink_params_.set_frames_per_buffer(WebRtcAudioRenderer::GetOptimalBufferSize( |
source_params_.sample_rate(), frames_per_buffer)); |
@@ -271,7 +275,7 @@ media::AudioParameters WebRtcLocalAudioRenderer::GetOutputParameters() { |
if (!sink_.get()) |
return media::AudioParameters(); |
- return sink_->GetOutputParameters(); |
+ return sink_->GetOutputDevice()->GetOutputParameters(); |
} |
media::OutputDeviceStatus WebRtcLocalAudioRenderer::GetDeviceStatus() { |
@@ -279,7 +283,7 @@ media::OutputDeviceStatus WebRtcLocalAudioRenderer::GetDeviceStatus() { |
if (!sink_.get()) |
return media::OUTPUT_DEVICE_STATUS_ERROR_INTERNAL; |
- return sink_->GetDeviceStatus(); |
+ return sink_->GetOutputDevice()->GetDeviceStatus(); |
} |
void WebRtcLocalAudioRenderer::MaybeStartSink() { |
@@ -296,12 +300,14 @@ void WebRtcLocalAudioRenderer::MaybeStartSink() { |
} |
if (!sink_params_.IsValid() || !playing_ || !volume_ || sink_started_ || |
- sink_->GetDeviceStatus() != media::OUTPUT_DEVICE_STATUS_OK) |
+ sink_->GetOutputDevice()->GetDeviceStatus() != |
+ media::OUTPUT_DEVICE_STATUS_OK) |
return; |
DVLOG(1) << "WebRtcLocalAudioRenderer::MaybeStartSink() -- Starting sink_."; |
sink_->Initialize(sink_params_, this); |
sink_->Start(); |
+ sink_->Play(); // It used to be AudioOutputDevice which plays on start. |
sink_started_ = true; |
UMA_HISTOGRAM_ENUMERATION("Media.LocalRendererSinkStates", |
kSinkStarted, kSinkStatesMax); |
@@ -343,10 +349,12 @@ void WebRtcLocalAudioRenderer::ReconfigureSink( |
// parameters. Then, invoke MaybeStartSink() to restart everything again. |
sink_->Stop(); |
sink_started_ = false; |
- sink_ = |
- AudioDeviceFactory::NewOutputDevice(source_render_frame_id_, session_id_, |
- output_device_id_, security_origin_); |
- int frames_per_buffer = sink_->GetOutputParameters().frames_per_buffer(); |
+ sink_ = RestartableAudioOutputDeviceFactory::NewOutputDevice( |
+ RestartableAudioOutputDeviceFactory::kSourceLocalUserMedia, |
+ source_render_frame_id_, session_id_, output_device_id_, |
+ security_origin_); |
+ int frames_per_buffer = |
+ sink_->GetOutputDevice()->GetOutputParameters().frames_per_buffer(); |
sink_params_ = source_params_; |
sink_params_.set_frames_per_buffer(WebRtcAudioRenderer::GetOptimalBufferSize( |
source_params_.sample_rate(), frames_per_buffer)); |