Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Side by Side Diff: content/renderer/media/webrtc/webrtc_media_stream_track_adapter.cc

Issue 2897603004: WebRtcMediaStreamAdapter using WebRtcMediaStreamTrackMap. (Closed)
Patch Set: Rebase Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2017 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 #include "content/renderer/media/webrtc/webrtc_media_stream_track_adapter.h" 5 #include "content/renderer/media/webrtc/webrtc_media_stream_track_adapter.h"
6 6
7 #include "content/renderer/media/media_stream_audio_track.h" 7 #include "content/renderer/media/media_stream_audio_track.h"
8 #include "content/renderer/media/webrtc/media_stream_video_webrtc_sink.h" 8 #include "content/renderer/media/webrtc/media_stream_video_webrtc_sink.h"
9 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" 9 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h"
10 #include "content/renderer/media/webrtc/processed_local_audio_source.h" 10 #include "content/renderer/media/webrtc/processed_local_audio_source.h"
11 11
12 namespace content { 12 namespace content {
13 13
14 // static 14 // static
15 scoped_refptr<WebRtcMediaStreamTrackAdapter> 15 scoped_refptr<WebRtcMediaStreamTrackAdapter>
16 WebRtcMediaStreamTrackAdapter::CreateLocalTrackAdapter( 16 WebRtcMediaStreamTrackAdapter::CreateLocalTrackAdapter(
17 PeerConnectionDependencyFactory* factory, 17 PeerConnectionDependencyFactory* factory,
18 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread, 18 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
19 const blink::WebMediaStreamTrack& web_track) { 19 const blink::WebMediaStreamTrack& web_track) {
20 DCHECK(main_thread->BelongsToCurrentThread()); 20 DCHECK(main_thread->BelongsToCurrentThread());
21 DCHECK(!web_track.Source().Remote());
Guido Urdaneta 2017/06/08 13:54:35 Are the changes to this file a drive-by improvemen
hbos_chromium 2017/06/08 14:34:44 No, a local track may in fact have a remote source
22 scoped_refptr<WebRtcMediaStreamTrackAdapter> local_track_adapter( 21 scoped_refptr<WebRtcMediaStreamTrackAdapter> local_track_adapter(
23 new WebRtcMediaStreamTrackAdapter(factory, main_thread)); 22 new WebRtcMediaStreamTrackAdapter(factory, main_thread));
24 if (web_track.Source().GetType() == blink::WebMediaStreamSource::kTypeAudio) { 23 if (web_track.Source().GetType() == blink::WebMediaStreamSource::kTypeAudio) {
25 local_track_adapter->InitializeLocalAudioTrack(web_track); 24 local_track_adapter->InitializeLocalAudioTrack(web_track);
26 } else { 25 } else {
27 DCHECK_EQ(web_track.Source().GetType(), 26 DCHECK_EQ(web_track.Source().GetType(),
28 blink::WebMediaStreamSource::kTypeVideo); 27 blink::WebMediaStreamSource::kTypeVideo);
29 local_track_adapter->InitializeLocalVideoTrack(web_track); 28 local_track_adapter->InitializeLocalVideoTrack(web_track);
30 } 29 }
31 return local_track_adapter; 30 return local_track_adapter;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 WebRtcMediaStreamTrackAdapter::~WebRtcMediaStreamTrackAdapter() { 63 WebRtcMediaStreamTrackAdapter::~WebRtcMediaStreamTrackAdapter() {
65 DCHECK(main_thread_->BelongsToCurrentThread()); 64 DCHECK(main_thread_->BelongsToCurrentThread());
66 DCHECK(!is_initialized_); 65 DCHECK(!is_initialized_);
67 } 66 }
68 67
69 void WebRtcMediaStreamTrackAdapter::Dispose() { 68 void WebRtcMediaStreamTrackAdapter::Dispose() {
70 DCHECK(main_thread_->BelongsToCurrentThread()); 69 DCHECK(main_thread_->BelongsToCurrentThread());
71 if (!is_initialized_) 70 if (!is_initialized_)
72 return; 71 return;
73 is_initialized_ = false; 72 is_initialized_ = false;
74 if (!web_track_.Source().Remote()) { 73 if (web_track_.Source().GetType() ==
75 if (web_track_.Source().GetType() == 74 blink::WebMediaStreamSource::kTypeAudio) {
76 blink::WebMediaStreamSource::kTypeAudio) { 75 if (local_track_audio_sink_)
77 DisposeLocalAudioTrack(); 76 DisposeLocalAudioTrack();
78 } else { 77 else
79 DCHECK_EQ(web_track_.Source().GetType(), 78 DisposeRemoteAudioTrack();
80 blink::WebMediaStreamSource::kTypeVideo); 79 } else {
80 DCHECK_EQ(web_track_.Source().GetType(),
81 blink::WebMediaStreamSource::kTypeVideo);
82 if (local_track_video_sink_)
81 DisposeLocalVideoTrack(); 83 DisposeLocalVideoTrack();
82 } 84 else
83 } else {
84 if (web_track_.Source().GetType() ==
85 blink::WebMediaStreamSource::kTypeAudio) {
86 DisposeRemoteAudioTrack();
87 } else {
88 DCHECK_EQ(web_track_.Source().GetType(),
89 blink::WebMediaStreamSource::kTypeVideo);
90 DisposeRemoteVideoTrack(); 85 DisposeRemoteVideoTrack();
91 }
92 } 86 }
93 } 87 }
94 88
95 bool WebRtcMediaStreamTrackAdapter::is_initialized() const { 89 bool WebRtcMediaStreamTrackAdapter::is_initialized() const {
96 return is_initialized_; 90 return is_initialized_;
97 } 91 }
98 92
99 const blink::WebMediaStreamTrack& WebRtcMediaStreamTrackAdapter::web_track() 93 const blink::WebMediaStreamTrack& WebRtcMediaStreamTrackAdapter::web_track()
100 const { 94 const {
101 DCHECK(is_initialized_); 95 DCHECK(is_initialized_);
(...skipping 12 matching lines...) Expand all
114 const blink::WebMediaStreamTrack& web_track) const { 108 const blink::WebMediaStreamTrack& web_track) const {
115 DCHECK(is_initialized_); 109 DCHECK(is_initialized_);
116 return web_track_.GetTrackData() == web_track.GetTrackData(); 110 return web_track_.GetTrackData() == web_track.GetTrackData();
117 } 111 }
118 112
119 void WebRtcMediaStreamTrackAdapter::InitializeLocalAudioTrack( 113 void WebRtcMediaStreamTrackAdapter::InitializeLocalAudioTrack(
120 const blink::WebMediaStreamTrack& web_track) { 114 const blink::WebMediaStreamTrack& web_track) {
121 DCHECK(main_thread_->BelongsToCurrentThread()); 115 DCHECK(main_thread_->BelongsToCurrentThread());
122 DCHECK(!is_initialized_); 116 DCHECK(!is_initialized_);
123 DCHECK(!web_track.IsNull()); 117 DCHECK(!web_track.IsNull());
124 DCHECK(!web_track.Source().Remote());
125 DCHECK_EQ(web_track.Source().GetType(), 118 DCHECK_EQ(web_track.Source().GetType(),
126 blink::WebMediaStreamSource::kTypeAudio); 119 blink::WebMediaStreamSource::kTypeAudio);
127 web_track_ = web_track; 120 web_track_ = web_track;
128 MediaStreamAudioTrack* native_track = MediaStreamAudioTrack::From(web_track_); 121 MediaStreamAudioTrack* native_track = MediaStreamAudioTrack::From(web_track_);
129 DCHECK(native_track); 122 DCHECK(native_track);
130 123
131 // Non-WebRtc remote sources and local sources do not provide an instance of 124 // Non-WebRtc remote sources and local sources do not provide an instance of
132 // the webrtc::AudioSourceInterface, and also do not need references to the 125 // the webrtc::AudioSourceInterface, and also do not need references to the
133 // audio level calculator or audio processor passed to the sink. 126 // audio level calculator or audio processor passed to the sink.
134 webrtc::AudioSourceInterface* source_interface = nullptr; 127 webrtc::AudioSourceInterface* source_interface = nullptr;
(...skipping 16 matching lines...) Expand all
151 webrtc_track_ = local_track_audio_sink_->webrtc_audio_track(); 144 webrtc_track_ = local_track_audio_sink_->webrtc_audio_track();
152 DCHECK(webrtc_track_); 145 DCHECK(webrtc_track_);
153 is_initialized_ = true; 146 is_initialized_ = true;
154 } 147 }
155 148
156 void WebRtcMediaStreamTrackAdapter::InitializeLocalVideoTrack( 149 void WebRtcMediaStreamTrackAdapter::InitializeLocalVideoTrack(
157 const blink::WebMediaStreamTrack& web_track) { 150 const blink::WebMediaStreamTrack& web_track) {
158 DCHECK(main_thread_->BelongsToCurrentThread()); 151 DCHECK(main_thread_->BelongsToCurrentThread());
159 DCHECK(!is_initialized_); 152 DCHECK(!is_initialized_);
160 DCHECK(!web_track.IsNull()); 153 DCHECK(!web_track.IsNull());
161 DCHECK(!web_track.Source().Remote());
162 DCHECK_EQ(web_track.Source().GetType(), 154 DCHECK_EQ(web_track.Source().GetType(),
163 blink::WebMediaStreamSource::kTypeVideo); 155 blink::WebMediaStreamSource::kTypeVideo);
164 web_track_ = web_track; 156 web_track_ = web_track;
165 local_track_video_sink_.reset( 157 local_track_video_sink_.reset(
166 new MediaStreamVideoWebRtcSink(web_track_, factory_)); 158 new MediaStreamVideoWebRtcSink(web_track_, factory_));
167 webrtc_track_ = local_track_video_sink_->webrtc_video_track(); 159 webrtc_track_ = local_track_video_sink_->webrtc_video_track();
168 DCHECK(webrtc_track_); 160 DCHECK(webrtc_track_);
169 is_initialized_ = true; 161 is_initialized_ = true;
170 } 162 }
171 163
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 } else { 203 } else {
212 remote_video_track_adapter_->Initialize(); 204 remote_video_track_adapter_->Initialize();
213 web_track_ = *remote_video_track_adapter_->web_track(); 205 web_track_ = *remote_video_track_adapter_->web_track();
214 } 206 }
215 is_initialized_ = true; 207 is_initialized_ = true;
216 } 208 }
217 209
218 void WebRtcMediaStreamTrackAdapter::DisposeLocalAudioTrack() { 210 void WebRtcMediaStreamTrackAdapter::DisposeLocalAudioTrack() {
219 DCHECK(main_thread_->BelongsToCurrentThread()); 211 DCHECK(main_thread_->BelongsToCurrentThread());
220 DCHECK(!is_initialized_); 212 DCHECK(!is_initialized_);
221 DCHECK(!web_track_.Source().Remote()); 213 DCHECK(local_track_audio_sink_);
222 DCHECK_EQ(web_track_.Source().GetType(), 214 DCHECK_EQ(web_track_.Source().GetType(),
223 blink::WebMediaStreamSource::kTypeAudio); 215 blink::WebMediaStreamSource::kTypeAudio);
224 MediaStreamAudioTrack* audio_track = MediaStreamAudioTrack::From(web_track_); 216 MediaStreamAudioTrack* audio_track = MediaStreamAudioTrack::From(web_track_);
225 DCHECK(audio_track); 217 DCHECK(audio_track);
226 DCHECK(local_track_audio_sink_);
227 audio_track->RemoveSink(local_track_audio_sink_.get()); 218 audio_track->RemoveSink(local_track_audio_sink_.get());
228 local_track_audio_sink_.reset(); 219 local_track_audio_sink_.reset();
229 webrtc_track_ = nullptr; 220 webrtc_track_ = nullptr;
230 web_track_.Reset(); 221 web_track_.Reset();
231 } 222 }
232 223
233 void WebRtcMediaStreamTrackAdapter::DisposeLocalVideoTrack() { 224 void WebRtcMediaStreamTrackAdapter::DisposeLocalVideoTrack() {
234 DCHECK(main_thread_->BelongsToCurrentThread()); 225 DCHECK(main_thread_->BelongsToCurrentThread());
235 DCHECK(!is_initialized_); 226 DCHECK(!is_initialized_);
236 DCHECK(!web_track_.Source().Remote()); 227 DCHECK(local_track_video_sink_);
237 DCHECK_EQ(web_track_.Source().GetType(), 228 DCHECK_EQ(web_track_.Source().GetType(),
238 blink::WebMediaStreamSource::kTypeVideo); 229 blink::WebMediaStreamSource::kTypeVideo);
239 local_track_video_sink_.reset(); 230 local_track_video_sink_.reset();
240 webrtc_track_ = nullptr; 231 webrtc_track_ = nullptr;
241 web_track_.Reset(); 232 web_track_.Reset();
242 } 233 }
243 234
244 void WebRtcMediaStreamTrackAdapter::DisposeRemoteAudioTrack() { 235 void WebRtcMediaStreamTrackAdapter::DisposeRemoteAudioTrack() {
245 DCHECK(main_thread_->BelongsToCurrentThread()); 236 DCHECK(main_thread_->BelongsToCurrentThread());
246 DCHECK(!is_initialized_); 237 DCHECK(!is_initialized_);
247 DCHECK(web_track_.Source().Remote()); 238 DCHECK(remote_audio_track_adapter_);
248 DCHECK_EQ(web_track_.Source().GetType(), 239 DCHECK_EQ(web_track_.Source().GetType(),
249 blink::WebMediaStreamSource::kTypeAudio); 240 blink::WebMediaStreamSource::kTypeAudio);
250 factory_->GetWebRtcSignalingThread()->PostTask( 241 factory_->GetWebRtcSignalingThread()->PostTask(
251 FROM_HERE, 242 FROM_HERE,
252 base::Bind(&WebRtcMediaStreamTrackAdapter:: 243 base::Bind(&WebRtcMediaStreamTrackAdapter::
253 UnregisterRemoteAudioTrackAdapterOnSignalingThread, 244 UnregisterRemoteAudioTrackAdapterOnSignalingThread,
254 this)); 245 this));
255 } 246 }
256 247
257 void WebRtcMediaStreamTrackAdapter::DisposeRemoteVideoTrack() { 248 void WebRtcMediaStreamTrackAdapter::DisposeRemoteVideoTrack() {
258 DCHECK(main_thread_->BelongsToCurrentThread()); 249 DCHECK(main_thread_->BelongsToCurrentThread());
259 DCHECK(!is_initialized_); 250 DCHECK(!is_initialized_);
260 DCHECK(web_track_.Source().Remote()); 251 DCHECK(remote_video_track_adapter_);
261 DCHECK_EQ(web_track_.Source().GetType(), 252 DCHECK_EQ(web_track_.Source().GetType(),
262 blink::WebMediaStreamSource::kTypeVideo); 253 blink::WebMediaStreamSource::kTypeVideo);
263 FinalizeRemoteTrackDisposingOnMainThread(); 254 FinalizeRemoteTrackDisposingOnMainThread();
264 } 255 }
265 256
266 void WebRtcMediaStreamTrackAdapter:: 257 void WebRtcMediaStreamTrackAdapter::
267 UnregisterRemoteAudioTrackAdapterOnSignalingThread() { 258 UnregisterRemoteAudioTrackAdapterOnSignalingThread() {
268 DCHECK(factory_->GetWebRtcSignalingThread()->BelongsToCurrentThread()); 259 DCHECK(factory_->GetWebRtcSignalingThread()->BelongsToCurrentThread());
269 DCHECK(!is_initialized_); 260 DCHECK(!is_initialized_);
270 DCHECK(remote_audio_track_adapter_); 261 DCHECK(remote_audio_track_adapter_);
271 remote_audio_track_adapter_->Unregister(); 262 remote_audio_track_adapter_->Unregister();
272 main_thread_->PostTask( 263 main_thread_->PostTask(
273 FROM_HERE, base::Bind(&WebRtcMediaStreamTrackAdapter:: 264 FROM_HERE, base::Bind(&WebRtcMediaStreamTrackAdapter::
274 FinalizeRemoteTrackDisposingOnMainThread, 265 FinalizeRemoteTrackDisposingOnMainThread,
275 this)); 266 this));
276 } 267 }
277 268
278 void WebRtcMediaStreamTrackAdapter::FinalizeRemoteTrackDisposingOnMainThread() { 269 void WebRtcMediaStreamTrackAdapter::FinalizeRemoteTrackDisposingOnMainThread() {
279 DCHECK(main_thread_->BelongsToCurrentThread()); 270 DCHECK(main_thread_->BelongsToCurrentThread());
280 DCHECK(!is_initialized_); 271 DCHECK(!is_initialized_);
281 remote_audio_track_adapter_ = nullptr; 272 remote_audio_track_adapter_ = nullptr;
282 remote_video_track_adapter_ = nullptr; 273 remote_video_track_adapter_ = nullptr;
283 webrtc_track_ = nullptr; 274 webrtc_track_ = nullptr;
284 web_track_.Reset(); 275 web_track_.Reset();
285 } 276 }
286 277
287 } // namespace content 278 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698