Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2380)

Unified Diff: content/renderer/media/webrtc_local_audio_source_provider.cc

Issue 221863003: Notify the track before source provider goes away. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: fixed the comments. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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,

Powered by Google App Engine
This is Rietveld 408576698