summaryrefslogtreecommitdiffstats
path: root/chromium/content/renderer/media/webrtc_local_audio_source_provider.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/renderer/media/webrtc_local_audio_source_provider.cc')
-rw-r--r--chromium/content/renderer/media/webrtc_local_audio_source_provider.cc25
1 files changed, 21 insertions, 4 deletions
diff --git a/chromium/content/renderer/media/webrtc_local_audio_source_provider.cc b/chromium/content/renderer/media/webrtc_local_audio_source_provider.cc
index bc5f80dfe37..10ee943f00f 100644
--- a/chromium/content/renderer/media/webrtc_local_audio_source_provider.cc
+++ b/chromium/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,
@@ -89,9 +106,9 @@ void WebRtcLocalAudioSourceProvider::OnData(
if (fifo_->frames() + number_of_frames <= fifo_->max_frames()) {
fifo_->Push(input_bus_.get());
} else {
- // This can happen if the data in FIFO is too slowed to be consumed or
+ // This can happen if the data in FIFO is too slowly consumed or
// WebAudio stops consuming data.
- DLOG(WARNING) << "Local source provicer FIFO is full" << fifo_->frames();
+ DVLOG(3) << "Local source provicer FIFO is full" << fifo_->frames();
}
}