Index: content/renderer/media/webrtc_local_audio_source_provider.cc |
diff --git a/content/renderer/media/webrtc_local_audio_source_provider.cc b/content/renderer/media/webrtc_local_audio_source_provider.cc |
index b460404d18cd8cf866986b804d43f265a30a8fdc..10ee943f00fc435dc1743805cdf21e132fddd587 100644 |
--- a/content/renderer/media/webrtc_local_audio_source_provider.cc |
+++ b/content/renderer/media/webrtc_local_audio_source_provider.cc |
@@ -22,8 +22,11 @@ static const size_t kMaxNumberOfBuffers = 10; |
// static |
const size_t WebRtcLocalAudioSourceProvider::kWebAudioRenderBufferSize = 128; |
-WebRtcLocalAudioSourceProvider::WebRtcLocalAudioSourceProvider() |
- : is_enabled_(false) { |
+WebRtcLocalAudioSourceProvider::WebRtcLocalAudioSourceProvider( |
+ const blink::WebMediaStreamTrack& track) |
+ : is_enabled_(false), |
+ track_(track), |
+ track_stopped_(false) { |
// Get the native audio output hardware sample-rate for the sink. |
// We need to check if RenderThreadImpl is valid here since the unittests |
// do not have one and they will inject their own |sink_params_| for testing. |
@@ -36,11 +39,19 @@ WebRtcLocalAudioSourceProvider::WebRtcLocalAudioSourceProvider() |
media::CHANNEL_LAYOUT_STEREO, 2, 0, sample_rate, 16, |
kWebAudioRenderBufferSize); |
} |
+ |
+ // Connect the source provider to the track as a sink. |
+ MediaStreamAudioSink::AddToAudioTrack(this, track_); |
} |
WebRtcLocalAudioSourceProvider::~WebRtcLocalAudioSourceProvider() { |
if (audio_converter_.get()) |
audio_converter_->RemoveInput(this); |
+ |
+ // If the track is still active, it is necessary to notify the track before |
+ // the source provider goes away. |
+ if (!track_stopped_) |
+ MediaStreamAudioSink::RemoveFromAudioTrack(this, track_); |
} |
void WebRtcLocalAudioSourceProvider::OnSetFormat( |
@@ -68,6 +79,12 @@ void WebRtcLocalAudioSourceProvider::OnSetFormat( |
params.frames_per_buffer()); |
} |
+void WebRtcLocalAudioSourceProvider::OnReadyStateChanged( |
+ blink::WebMediaStreamSource::ReadyState state) { |
+ if (state == blink::WebMediaStreamSource::ReadyStateEnded) |
+ track_stopped_ = true; |
+} |
+ |
void WebRtcLocalAudioSourceProvider::OnData( |
const int16* audio_data, |
int sample_rate, |