diff options
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.cc | 25 |
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(); } } |