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 |