OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_SOURCE_H_ | 5 #ifndef CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_SOURCE_H_ |
6 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_SOURCE_H_ | 6 #define CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_SOURCE_H_ |
7 | 7 |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/memory/scoped_ptr.h" | |
11 #include "base/memory/weak_ptr.h" | |
12 #include "content/common/content_export.h" | 10 #include "content/common/content_export.h" |
13 #include "content/renderer/media/media_stream_source.h" | 11 #include "content/renderer/media/media_stream_source.h" |
14 #include "content/renderer/media/webaudio_capturer_source.h" | |
15 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" | 12 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" |
16 #include "content/renderer/media/webrtc_audio_capturer.h" | 13 #include "content/renderer/media/webrtc_audio_capturer.h" |
17 #include "third_party/webrtc/api/mediastreaminterface.h" | 14 #include "third_party/webrtc/api/mediastreaminterface.h" |
18 | 15 |
19 namespace content { | 16 namespace content { |
20 | 17 |
21 class MediaStreamAudioTrack; | |
22 | |
23 // TODO(miu): In a soon-upcoming set of refactoring changes, this class will | |
24 // become a base class for managing tracks (part of what WebRtcAudioCapturer | |
25 // does today). Then, the rest of WebRtcAudioCapturer will be rolled into a | |
26 // subclass. http://crbug.com/577874 | |
27 class CONTENT_EXPORT MediaStreamAudioSource | 18 class CONTENT_EXPORT MediaStreamAudioSource |
28 : NON_EXPORTED_BASE(public MediaStreamSource) { | 19 : NON_EXPORTED_BASE(public MediaStreamSource) { |
29 public: | 20 public: |
30 MediaStreamAudioSource(int render_frame_id, | 21 MediaStreamAudioSource(int render_frame_id, |
31 const StreamDeviceInfo& device_info, | 22 const StreamDeviceInfo& device_info, |
32 const SourceStoppedCallback& stop_callback, | 23 const SourceStoppedCallback& stop_callback, |
33 PeerConnectionDependencyFactory* factory); | 24 PeerConnectionDependencyFactory* factory); |
34 MediaStreamAudioSource(); | 25 MediaStreamAudioSource(); |
35 ~MediaStreamAudioSource() override; | 26 ~MediaStreamAudioSource() override; |
36 | 27 |
37 // Returns the MediaStreamAudioSource instance owned by the given blink | |
38 // |source| or null. | |
39 static MediaStreamAudioSource* From(const blink::WebMediaStreamSource& track); | |
40 | |
41 void AddTrack(const blink::WebMediaStreamTrack& track, | 28 void AddTrack(const blink::WebMediaStreamTrack& track, |
42 const blink::WebMediaConstraints& constraints, | 29 const blink::WebMediaConstraints& constraints, |
43 const ConstraintsCallback& callback); | 30 const ConstraintsCallback& callback); |
44 | 31 |
45 base::WeakPtr<MediaStreamAudioSource> GetWeakPtr() { | 32 void SetLocalAudioSource(webrtc::AudioSourceInterface* source) { |
46 return weak_factory_.GetWeakPtr(); | 33 local_audio_source_ = source; |
47 } | 34 } |
48 | 35 |
49 // Removes |track| from the list of instances that get a copy of the source | 36 void SetAudioCapturer(const scoped_refptr<WebRtcAudioCapturer>& capturer) { |
50 // audio data. | 37 DCHECK(!audio_capturer_.get()); |
51 void StopAudioDeliveryTo(MediaStreamAudioTrack* track); | 38 audio_capturer_ = capturer; |
| 39 } |
52 | 40 |
53 WebRtcAudioCapturer* audio_capturer() const { return audio_capturer_.get(); } | 41 const scoped_refptr<WebRtcAudioCapturer>& GetAudioCapturer() { |
54 | 42 return audio_capturer_; |
55 void SetAudioCapturer(scoped_ptr<WebRtcAudioCapturer> capturer) { | |
56 DCHECK(!audio_capturer_.get()); | |
57 audio_capturer_ = std::move(capturer); | |
58 } | 43 } |
59 | 44 |
60 webrtc::AudioSourceInterface* local_audio_source() { | 45 webrtc::AudioSourceInterface* local_audio_source() { |
61 return local_audio_source_.get(); | 46 return local_audio_source_.get(); |
62 } | 47 } |
63 | 48 |
64 void SetLocalAudioSource(scoped_refptr<webrtc::AudioSourceInterface> source) { | |
65 local_audio_source_ = std::move(source); | |
66 } | |
67 | |
68 WebAudioCapturerSource* webaudio_capturer() const { | |
69 return webaudio_capturer_.get(); | |
70 } | |
71 | |
72 void SetWebAudioCapturer(scoped_ptr<WebAudioCapturerSource> capturer) { | |
73 DCHECK(!webaudio_capturer_.get()); | |
74 webaudio_capturer_ = std::move(capturer); | |
75 } | |
76 | |
77 protected: | 49 protected: |
78 void DoStopSource() override; | 50 void DoStopSource() override; |
79 | 51 |
80 private: | 52 private: |
81 const int render_frame_id_; | 53 const int render_frame_id_; |
82 PeerConnectionDependencyFactory* const factory_; | 54 PeerConnectionDependencyFactory* const factory_; |
83 | 55 |
84 // MediaStreamAudioSource is the owner of either a WebRtcAudioCapturer or a | |
85 // WebAudioCapturerSource. | |
86 // | |
87 // TODO(miu): In a series of soon-upcoming changes, WebRtcAudioCapturer and | |
88 // WebAudioCapturerSource will become subclasses of MediaStreamAudioSource | |
89 // instead. | |
90 scoped_ptr<WebRtcAudioCapturer> audio_capturer_; | |
91 scoped_ptr<WebAudioCapturerSource> webaudio_capturer_; | |
92 | |
93 // This member holds an instance of webrtc::LocalAudioSource. This is used | 56 // This member holds an instance of webrtc::LocalAudioSource. This is used |
94 // as a container for audio options. | 57 // as a container for audio options. |
95 scoped_refptr<webrtc::AudioSourceInterface> local_audio_source_; | 58 scoped_refptr<webrtc::AudioSourceInterface> local_audio_source_; |
96 | 59 |
97 // Provides weak pointers so that MediaStreamAudioTracks won't call | 60 scoped_refptr<WebRtcAudioCapturer> audio_capturer_; |
98 // StopAudioDeliveryTo() if this instance dies first. | |
99 base::WeakPtrFactory<MediaStreamAudioSource> weak_factory_; | |
100 | 61 |
101 DISALLOW_COPY_AND_ASSIGN(MediaStreamAudioSource); | 62 DISALLOW_COPY_AND_ASSIGN(MediaStreamAudioSource); |
102 }; | 63 }; |
103 | 64 |
104 } // namespace content | 65 } // namespace content |
105 | 66 |
106 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_SOURCE_H_ | 67 #endif // CONTENT_RENDERER_MEDIA_MEDIA_STREAM_AUDIO_SOURCE_H_ |
OLD | NEW |