Chromium Code Reviews| Index: content/renderer/media/media_stream_audio_source.cc |
| diff --git a/content/renderer/media/media_stream_audio_source.cc b/content/renderer/media/media_stream_audio_source.cc |
| index c643140e4dbdb6ef5d3d294477a3b7f3cb4cd785..f6ca89c0012cd8753be0b77034433a27755c5781 100644 |
| --- a/content/renderer/media/media_stream_audio_source.cc |
| +++ b/content/renderer/media/media_stream_audio_source.cc |
| @@ -4,7 +4,9 @@ |
| #include "content/renderer/media/media_stream_audio_source.h" |
| +#include "content/renderer/media/webrtc_local_audio_track.h" |
| #include "content/renderer/render_frame_impl.h" |
| +#include "third_party/WebKit/public/platform/WebMediaStreamSource.h" |
| namespace content { |
| @@ -13,20 +15,33 @@ MediaStreamAudioSource::MediaStreamAudioSource( |
| const StreamDeviceInfo& device_info, |
| const SourceStoppedCallback& stop_callback, |
| PeerConnectionDependencyFactory* factory) |
| - : render_frame_id_(render_frame_id), factory_(factory) { |
| + : render_frame_id_(render_frame_id), factory_(factory), |
| + weak_factory_(this) { |
| SetDeviceInfo(device_info); |
| SetStopCallback(stop_callback); |
| } |
| MediaStreamAudioSource::MediaStreamAudioSource() |
| - : render_frame_id_(-1), factory_(NULL) { |
| + : render_frame_id_(-1), factory_(NULL), weak_factory_(this) { |
| } |
| MediaStreamAudioSource::~MediaStreamAudioSource() {} |
| +// static |
| +MediaStreamAudioSource* MediaStreamAudioSource::From( |
| + const blink::WebMediaStreamSource& source) { |
| + if (source.isNull() || |
| + source.getType() != blink::WebMediaStreamSource::TypeAudio) { |
| + return nullptr; |
| + } |
| + return static_cast<MediaStreamAudioSource*>(source.getExtraData()); |
| +} |
| + |
| void MediaStreamAudioSource::DoStopSource() { |
| - if (audio_capturer_.get()) |
| + if (audio_capturer_) |
| audio_capturer_->Stop(); |
| + if (webaudio_capturer_) |
| + webaudio_capturer_->Stop(); |
| } |
| void MediaStreamAudioSource::AddTrack( |
| @@ -52,4 +67,19 @@ void MediaStreamAudioSource::AddTrack( |
| callback.Run(this, MEDIA_DEVICE_OK, ""); |
| } |
| +void MediaStreamAudioSource::StopAudioDeliveryTo(MediaStreamAudioTrack* track) { |
|
tommi (sloooow) - chröme
2016/03/03 11:07:30
DCHECK(track)?
miu
2016/03/05 02:55:30
Done.
|
| + if (audio_capturer_) { |
| + // The cast here is safe because only WebRtcLocalAudioTracks are ever used |
| + // with WebRtcAudioCapturer sources. |
| + // |
| + // TODO(miu): That said, this ugly cast won't be necessary after my |
| + // soon-upcoming refactoring change. |
| + audio_capturer_->RemoveTrack(static_cast<WebRtcLocalAudioTrack*>(track)); |
| + } |
| + if (webaudio_capturer_) { |
| + // A separate source is created for each track, so just stop the source. |
| + webaudio_capturer_->Stop(); |
| + } |
| +} |
| + |
| } // namespace content |