Index: content/renderer/media/webaudio_capturer_source.cc |
diff --git a/content/renderer/media/webaudio_capturer_source.cc b/content/renderer/media/webaudio_capturer_source.cc |
index 3fca41942df83562b16d38c44f0c6af72069713d..2d663430e3e13dc1d58d9a1b83f17e25897e12cb 100644 |
--- a/content/renderer/media/webaudio_capturer_source.cc |
+++ b/content/renderer/media/webaudio_capturer_source.cc |
@@ -18,22 +18,16 @@ |
namespace content { |
WebAudioCapturerSource::WebAudioCapturerSource( |
- blink::WebMediaStreamSource* blink_source) |
+ const blink::WebMediaStreamSource& blink_source) |
: track_(NULL), |
audio_format_changed_(false), |
fifo_(base::Bind(&WebAudioCapturerSource::DeliverRebufferedAudio, |
base::Unretained(this))), |
- blink_source_(*blink_source) { |
- DCHECK(blink_source); |
- DCHECK(!blink_source_.isNull()); |
- DVLOG(1) << "WebAudioCapturerSource::WebAudioCapturerSource()"; |
- blink_source_.addAudioConsumer(this); |
-} |
+ blink_source_(blink_source) {} |
WebAudioCapturerSource::~WebAudioCapturerSource() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- DVLOG(1) << "WebAudioCapturerSource::~WebAudioCapturerSource()"; |
- DeregisterFromBlinkSource(); |
+ removeFromBlinkSource(); |
} |
void WebAudioCapturerSource::setFormat( |
@@ -81,9 +75,9 @@ |
base::AutoLock auto_lock(lock_); |
track_ = NULL; |
} |
- // DeregisterFromBlinkSource() should not be called while |lock_| is acquired, |
+ // removeFromBlinkSource() should not be called while |lock_| is acquired, |
// as it could result in a deadlock. |
- DeregisterFromBlinkSource(); |
+ removeFromBlinkSource(); |
} |
void WebAudioCapturerSource::consumeAudio( |
@@ -123,10 +117,15 @@ |
base::TimeDelta::FromMicroseconds(frame_delay * |
base::Time::kMicrosecondsPerSecond / |
params_.sample_rate()); |
- track_->Capture(audio_bus, reference_time); |
+ track_->Capture(audio_bus, reference_time, false); |
} |
-void WebAudioCapturerSource::DeregisterFromBlinkSource() { |
+// If registered as audio consumer in |blink_source_|, deregister from |
+// |blink_source_| and stop keeping a reference to |blink_source_|. |
+// Failure to call this method when stopping the track might leave an invalid |
+// WebAudioCapturerSource reference still registered as an audio consumer on |
+// the blink side. |
+void WebAudioCapturerSource::removeFromBlinkSource() { |
if (!blink_source_.isNull()) { |
blink_source_.removeAudioConsumer(this); |
blink_source_.reset(); |