Index: content/renderer/media/webrtc_local_audio_track.cc |
diff --git a/content/renderer/media/webrtc_local_audio_track.cc b/content/renderer/media/webrtc_local_audio_track.cc |
index 37846335e8531270c5c6c66658c400137b82bcf4..832f3ec9d3e2b21a507e549b553dfa8570d7e9be 100644 |
--- a/content/renderer/media/webrtc_local_audio_track.cc |
+++ b/content/renderer/media/webrtc_local_audio_track.cc |
@@ -154,13 +154,10 @@ void WebRtcLocalAudioTrack::Capture(media::AudioBus* audio_source, |
int number_of_frames = 0; |
SinkList sinks; |
scoped_refptr<ConfiguredBuffer> current_buffer; |
+ bool is_enabled = true; |
{ |
base::AutoLock auto_lock(lock_); |
- // When the track is disabled, we simply return here. |
- // TODO(xians): Figure out if we should feed zero to sinks instead, in |
- // order to inject VAD data in such case. |
- if (!enabled()) |
- return; |
+ is_enabled = enabled(); |
capturer = capturer_; |
voe_channels = voe_channels_; |
@@ -180,7 +177,16 @@ void WebRtcLocalAudioTrack::Capture(media::AudioBus* audio_source, |
int current_volume = volume; |
while (current_buffer->Consume()) { |
// Feed the data to the sinks. |
- for (SinkList::const_iterator it = sinks.begin(); it != sinks.end(); ++it) { |
+ SinkList::iterator first = sinks.begin(); |
+ SinkList::iterator last = sinks.begin(); |
+ if (!is_enabled) { |
+ // Don't call capture sinks which are actually renderers. |
+ last = std::remove_if(first, last, |
ajm
2013/09/28 01:52:22
Not sure if this will do the right thing; I haven'
|
+ [](const scoped_refptr<WebRtcAudioCapturerSinkOwner>& owner) { |
+ return owner->HasRenderer(); |
+ }); |
+ } |
+ for (SinkList::const_iterator it = first; it != last; ++it) { |
int new_volume = (*it)->CaptureData(voe_channels, |
current_buffer->buffer(), |
sample_rate, |