Chromium Code Reviews| Index: content/renderer/media/media_stream_audio_source.h |
| diff --git a/content/renderer/media/media_stream_audio_source.h b/content/renderer/media/media_stream_audio_source.h |
| index b2f44d2b44d3e582cdbae3da775cff0b292716b8..99951b8aa2f46b0b86927737e6d24e1cf15659ae 100644 |
| --- a/content/renderer/media/media_stream_audio_source.h |
| +++ b/content/renderer/media/media_stream_audio_source.h |
| @@ -7,14 +7,23 @@ |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/memory/weak_ptr.h" |
| #include "content/common/content_export.h" |
| #include "content/renderer/media/media_stream_source.h" |
| +#include "content/renderer/media/webaudio_capturer_source.h" |
| #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" |
| #include "content/renderer/media/webrtc_audio_capturer.h" |
| #include "third_party/webrtc/api/mediastreaminterface.h" |
| namespace content { |
| +class MediaStreamAudioTrack; |
| + |
| +// TODO(miu): In a soon-upcoming set of refactoring changes, this class will |
| +// become a base class for managing tracks (part of what WebRtcAudioCapturer |
| +// does today). Then, the rest of WebRtcAudioCapturer will be rolled into a |
| +// subclass. http://crbug.com/577874 |
| class CONTENT_EXPORT MediaStreamAudioSource |
| : NON_EXPORTED_BASE(public MediaStreamSource) { |
| public: |
| @@ -25,27 +34,46 @@ class CONTENT_EXPORT MediaStreamAudioSource |
| MediaStreamAudioSource(); |
| ~MediaStreamAudioSource() override; |
| + // Returns the MediaStreamAudioSource instance owned by the given blink |
| + // |source| or null. |
| + static MediaStreamAudioSource* From(const blink::WebMediaStreamSource& track); |
| + |
| void AddTrack(const blink::WebMediaStreamTrack& track, |
| const blink::WebMediaConstraints& constraints, |
| const ConstraintsCallback& callback); |
| - void SetLocalAudioSource(webrtc::AudioSourceInterface* source) { |
| - local_audio_source_ = source; |
| + base::WeakPtr<MediaStreamAudioSource> GetWeakPtr() { |
| + return weak_factory_.GetWeakPtr(); |
| } |
| - void SetAudioCapturer(const scoped_refptr<WebRtcAudioCapturer>& capturer) { |
| - DCHECK(!audio_capturer_.get()); |
| - audio_capturer_ = capturer; |
| - } |
| + // Removes |track| from the list of instances that get a copy of the source |
| + // audio data. |
| + void StopAudioDeliveryTo(MediaStreamAudioTrack* track); |
| + |
| + WebRtcAudioCapturer* audio_capturer() const { return audio_capturer_.get(); } |
| - const scoped_refptr<WebRtcAudioCapturer>& GetAudioCapturer() { |
| - return audio_capturer_; |
| + void SetAudioCapturer(scoped_ptr<WebRtcAudioCapturer> capturer) { |
| + DCHECK(!audio_capturer_.get()); |
| + audio_capturer_ = std::move(capturer); |
| } |
| webrtc::AudioSourceInterface* local_audio_source() { |
| return local_audio_source_.get(); |
| } |
| + void SetLocalAudioSource(scoped_refptr<webrtc::AudioSourceInterface> source) { |
|
tommi (sloooow) - chröme
2016/03/03 11:07:30
just checking - the intent here is to take ownersh
miu
2016/03/05 02:55:31
Done (using std::move() here and in other places t
|
| + local_audio_source_ = source; |
|
tommi (sloooow) - chröme
2016/03/03 11:07:30
and if not passing by value is intentional, I thin
miu
2016/03/05 02:55:30
Done.
|
| + } |
| + |
| + WebAudioCapturerSource* webaudio_capturer() const { |
| + return webaudio_capturer_.get(); |
| + } |
| + |
| + void SetWebAudioCapturer(scoped_ptr<WebAudioCapturerSource> capturer) { |
| + DCHECK(!webaudio_capturer_.get()); |
| + webaudio_capturer_ = std::move(capturer); |
| + } |
| + |
| protected: |
| void DoStopSource() override; |
| @@ -53,11 +81,22 @@ class CONTENT_EXPORT MediaStreamAudioSource |
| const int render_frame_id_; |
| PeerConnectionDependencyFactory* const factory_; |
| + // MediaStreamAudioSource is the owner of either a WebRtcAudioCapturer or a |
| + // WebAudioCapturerSource. |
| + // |
| + // TODO(miu): In a series of soon-upcoming changes, WebRtcAudioCapturer and |
| + // WebAudioCapturerSource will become subclasses of MediaStreamAudioSource |
| + // instead. |
| + scoped_ptr<WebRtcAudioCapturer> audio_capturer_; |
| + scoped_ptr<WebAudioCapturerSource> webaudio_capturer_; |
| + |
| // This member holds an instance of webrtc::LocalAudioSource. This is used |
| // as a container for audio options. |
| scoped_refptr<webrtc::AudioSourceInterface> local_audio_source_; |
| - scoped_refptr<WebRtcAudioCapturer> audio_capturer_; |
| + // Provides weak pointers so that MediaStreamAudioTracks won't call |
| + // StopAudioDeliveryTo() if this instance dies first. |
| + base::WeakPtrFactory<MediaStreamAudioSource> weak_factory_; |
| DISALLOW_COPY_AND_ASSIGN(MediaStreamAudioSource); |
| }; |