| 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));
|
|
|