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

Unified Diff: content/renderer/media/webrtc/media_stream_remote_audio_track.cc

Issue 1721273002: MediaStream audio object graph untangling and clean-ups. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed mcasas's 1st round comments, plus REBASE. Created 4 years, 10 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/media_stream_remote_audio_track.cc
diff --git a/content/renderer/media/webrtc/media_stream_remote_audio_track.cc b/content/renderer/media/webrtc/media_stream_remote_audio_track.cc
index 17df845f81c491b3c9a0631d3a20835f1b05aa1a..84b89fe2dedda731f2dd7f6804e15908904a1517 100644
--- a/content/renderer/media/webrtc/media_stream_remote_audio_track.cc
+++ b/content/renderer/media/webrtc/media_stream_remote_audio_track.cc
@@ -8,6 +8,8 @@
#include <list>
+#include "base/bind.h"
+#include "base/bind_helpers.h"
#include "base/logging.h"
#include "content/public/renderer/media_stream_audio_sink.h"
#include "third_party/webrtc/api/mediastreaminterface.h"
@@ -115,12 +117,24 @@ class MediaStreamRemoteAudioSource::AudioSink
MediaStreamRemoteAudioTrack::MediaStreamRemoteAudioTrack(
const blink::WebMediaStreamSource& source, bool enabled)
: MediaStreamAudioTrack(false), source_(source), enabled_(enabled) {
- DCHECK(source.extraData()); // Make sure the source has a native source.
+ DCHECK(source.extraData());
+
+ // Stop means that a track should be stopped permanently. But
+ // since there is no proper way of doing that on a remote track, we can
+ // at least disable the track. Blink will not call down to the content layer
+ // after a track has been stopped.
+ MediaStreamAudioTrack::AddStopObserver(base::Bind(
o1ka 2016/02/29 14:28:04 See comments for WebRtcLocalAudioTrack
miu 2016/03/01 09:43:54 Done.
+ &MediaStreamRemoteAudioTrack::SetEnabled, base::Unretained(this), false));
}
MediaStreamRemoteAudioTrack::~MediaStreamRemoteAudioTrack() {
DCHECK(main_render_thread_checker_.CalledOnValidThread());
source()->RemoveAll(this);
+
+ // Even though the base class calls Stop(), do it here because the stop
+ // callback added in this class's constructor needs to be run before the data
+ // members of this class are destroyed.
o1ka 2016/02/29 14:28:04 See comments for WebRtcLocalAudioTrack
miu 2016/03/01 09:43:54 Done.
+ Stop();
}
void MediaStreamRemoteAudioTrack::SetEnabled(bool enabled) {
@@ -139,15 +153,6 @@ void MediaStreamRemoteAudioTrack::SetEnabled(bool enabled) {
source()->SetSinksEnabled(this, enabled);
}
-void MediaStreamRemoteAudioTrack::Stop() {
- DCHECK(main_render_thread_checker_.CalledOnValidThread());
- // Stop means that a track should be stopped permanently. But
- // since there is no proper way of doing that on a remote track, we can
- // at least disable the track. Blink will not call down to the content layer
- // after a track has been stopped.
- SetEnabled(false);
-}
-
void MediaStreamRemoteAudioTrack::AddSink(MediaStreamAudioSink* sink) {
DCHECK(main_render_thread_checker_.CalledOnValidThread());
return source()->AddSink(sink, this, enabled_);

Powered by Google App Engine
This is Rietveld 408576698