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

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

Issue 2902733003: RemoteMediaStreamImpl using WebRtcMediaStreamTrackMap. (Closed)
Patch Set: "Must be invoked on the main thread." 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(factory);
20 DCHECK(main_thread->BelongsToCurrentThread()); 21 DCHECK(main_thread->BelongsToCurrentThread());
22 DCHECK(!web_track.IsNull());
21 scoped_refptr<WebRtcMediaStreamTrackAdapter> local_track_adapter( 23 scoped_refptr<WebRtcMediaStreamTrackAdapter> local_track_adapter(
22 new WebRtcMediaStreamTrackAdapter(factory, main_thread)); 24 new WebRtcMediaStreamTrackAdapter(factory, main_thread));
23 if (web_track.Source().GetType() == blink::WebMediaStreamSource::kTypeAudio) { 25 if (web_track.Source().GetType() == blink::WebMediaStreamSource::kTypeAudio) {
24 local_track_adapter->InitializeLocalAudioTrack(web_track); 26 local_track_adapter->InitializeLocalAudioTrack(web_track);
25 } else { 27 } else {
26 DCHECK_EQ(web_track.Source().GetType(), 28 DCHECK_EQ(web_track.Source().GetType(),
27 blink::WebMediaStreamSource::kTypeVideo); 29 blink::WebMediaStreamSource::kTypeVideo);
28 local_track_adapter->InitializeLocalVideoTrack(web_track); 30 local_track_adapter->InitializeLocalVideoTrack(web_track);
29 } 31 }
30 return local_track_adapter; 32 return local_track_adapter;
31 } 33 }
32 34
33 // static 35 // static
34 scoped_refptr<WebRtcMediaStreamTrackAdapter> 36 scoped_refptr<WebRtcMediaStreamTrackAdapter>
35 WebRtcMediaStreamTrackAdapter::CreateRemoteTrackAdapter( 37 WebRtcMediaStreamTrackAdapter::CreateRemoteTrackAdapter(
36 PeerConnectionDependencyFactory* factory, 38 PeerConnectionDependencyFactory* factory,
37 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread, 39 const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
38 webrtc::MediaStreamTrackInterface* webrtc_track) { 40 webrtc::MediaStreamTrackInterface* webrtc_track) {
39 DCHECK(factory->GetWebRtcSignalingThread()->BelongsToCurrentThread()); 41 DCHECK(factory);
42 DCHECK(!main_thread->BelongsToCurrentThread());
40 DCHECK(webrtc_track); 43 DCHECK(webrtc_track);
41 scoped_refptr<WebRtcMediaStreamTrackAdapter> remote_track_adapter( 44 scoped_refptr<WebRtcMediaStreamTrackAdapter> remote_track_adapter(
42 new WebRtcMediaStreamTrackAdapter(factory, main_thread)); 45 new WebRtcMediaStreamTrackAdapter(factory, main_thread));
43 if (webrtc_track->kind() == webrtc::MediaStreamTrackInterface::kAudioKind) { 46 if (webrtc_track->kind() == webrtc::MediaStreamTrackInterface::kAudioKind) {
44 remote_track_adapter->InitializeRemoteAudioTrack( 47 remote_track_adapter->InitializeRemoteAudioTrack(
45 static_cast<webrtc::AudioTrackInterface*>(webrtc_track)); 48 static_cast<webrtc::AudioTrackInterface*>(webrtc_track));
46 } else { 49 } else {
47 DCHECK_EQ(webrtc_track->kind(), 50 DCHECK_EQ(webrtc_track->kind(),
48 webrtc::MediaStreamTrackInterface::kVideoKind); 51 webrtc::MediaStreamTrackInterface::kVideoKind);
49 remote_track_adapter->InitializeRemoteVideoTrack( 52 remote_track_adapter->InitializeRemoteVideoTrack(
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 web_track_ = web_track; 159 web_track_ = web_track;
157 local_track_video_sink_.reset( 160 local_track_video_sink_.reset(
158 new MediaStreamVideoWebRtcSink(web_track_, factory_)); 161 new MediaStreamVideoWebRtcSink(web_track_, factory_));
159 webrtc_track_ = local_track_video_sink_->webrtc_video_track(); 162 webrtc_track_ = local_track_video_sink_->webrtc_video_track();
160 DCHECK(webrtc_track_); 163 DCHECK(webrtc_track_);
161 is_initialized_ = true; 164 is_initialized_ = true;
162 } 165 }
163 166
164 void WebRtcMediaStreamTrackAdapter::InitializeRemoteAudioTrack( 167 void WebRtcMediaStreamTrackAdapter::InitializeRemoteAudioTrack(
165 webrtc::AudioTrackInterface* webrtc_audio_track) { 168 webrtc::AudioTrackInterface* webrtc_audio_track) {
166 DCHECK(factory_->GetWebRtcSignalingThread()->BelongsToCurrentThread()); 169 DCHECK(!main_thread_->BelongsToCurrentThread());
167 DCHECK(!is_initialized_); 170 DCHECK(!is_initialized_);
168 DCHECK(webrtc_audio_track); 171 DCHECK(webrtc_audio_track);
169 DCHECK_EQ(webrtc_audio_track->kind(), 172 DCHECK_EQ(webrtc_audio_track->kind(),
170 webrtc::MediaStreamTrackInterface::kAudioKind); 173 webrtc::MediaStreamTrackInterface::kAudioKind);
171 remote_audio_track_adapter_ = 174 remote_audio_track_adapter_ =
172 new RemoteAudioTrackAdapter(main_thread_, webrtc_audio_track); 175 new RemoteAudioTrackAdapter(main_thread_, webrtc_audio_track);
173 webrtc_track_ = webrtc_audio_track; 176 webrtc_track_ = webrtc_audio_track;
174 main_thread_->PostTask( 177 main_thread_->PostTask(
175 FROM_HERE, base::Bind(&WebRtcMediaStreamTrackAdapter:: 178 FROM_HERE, base::Bind(&WebRtcMediaStreamTrackAdapter::
176 FinalizeRemoteTrackInitializationOnMainThread, 179 FinalizeRemoteTrackInitializationOnMainThread,
177 this)); 180 this));
178 } 181 }
179 182
180 void WebRtcMediaStreamTrackAdapter::InitializeRemoteVideoTrack( 183 void WebRtcMediaStreamTrackAdapter::InitializeRemoteVideoTrack(
181 webrtc::VideoTrackInterface* webrtc_video_track) { 184 webrtc::VideoTrackInterface* webrtc_video_track) {
182 DCHECK(factory_->GetWebRtcSignalingThread()->BelongsToCurrentThread()); 185 DCHECK(!main_thread_->BelongsToCurrentThread());
183 DCHECK(!is_initialized_); 186 DCHECK(!is_initialized_);
184 DCHECK(webrtc_video_track); 187 DCHECK(webrtc_video_track);
185 DCHECK_EQ(webrtc_video_track->kind(), 188 DCHECK_EQ(webrtc_video_track->kind(),
186 webrtc::MediaStreamTrackInterface::kVideoKind); 189 webrtc::MediaStreamTrackInterface::kVideoKind);
187 remote_video_track_adapter_ = 190 remote_video_track_adapter_ =
188 new RemoteVideoTrackAdapter(main_thread_, webrtc_video_track); 191 new RemoteVideoTrackAdapter(main_thread_, webrtc_video_track);
189 webrtc_track_ = webrtc_video_track; 192 webrtc_track_ = webrtc_video_track;
190 main_thread_->PostTask( 193 main_thread_->PostTask(
191 FROM_HERE, base::Bind(&WebRtcMediaStreamTrackAdapter:: 194 FROM_HERE, base::Bind(&WebRtcMediaStreamTrackAdapter::
192 FinalizeRemoteTrackInitializationOnMainThread, 195 FinalizeRemoteTrackInitializationOnMainThread,
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 DCHECK(main_thread_->BelongsToCurrentThread()); 252 DCHECK(main_thread_->BelongsToCurrentThread());
250 DCHECK(!is_initialized_); 253 DCHECK(!is_initialized_);
251 DCHECK(remote_video_track_adapter_); 254 DCHECK(remote_video_track_adapter_);
252 DCHECK_EQ(web_track_.Source().GetType(), 255 DCHECK_EQ(web_track_.Source().GetType(),
253 blink::WebMediaStreamSource::kTypeVideo); 256 blink::WebMediaStreamSource::kTypeVideo);
254 FinalizeRemoteTrackDisposingOnMainThread(); 257 FinalizeRemoteTrackDisposingOnMainThread();
255 } 258 }
256 259
257 void WebRtcMediaStreamTrackAdapter:: 260 void WebRtcMediaStreamTrackAdapter::
258 UnregisterRemoteAudioTrackAdapterOnSignalingThread() { 261 UnregisterRemoteAudioTrackAdapterOnSignalingThread() {
259 DCHECK(factory_->GetWebRtcSignalingThread()->BelongsToCurrentThread()); 262 DCHECK(!main_thread_->BelongsToCurrentThread());
260 DCHECK(!is_initialized_); 263 DCHECK(!is_initialized_);
261 DCHECK(remote_audio_track_adapter_); 264 DCHECK(remote_audio_track_adapter_);
262 remote_audio_track_adapter_->Unregister(); 265 remote_audio_track_adapter_->Unregister();
263 main_thread_->PostTask( 266 main_thread_->PostTask(
264 FROM_HERE, base::Bind(&WebRtcMediaStreamTrackAdapter:: 267 FROM_HERE, base::Bind(&WebRtcMediaStreamTrackAdapter::
265 FinalizeRemoteTrackDisposingOnMainThread, 268 FinalizeRemoteTrackDisposingOnMainThread,
266 this)); 269 this));
267 } 270 }
268 271
269 void WebRtcMediaStreamTrackAdapter::FinalizeRemoteTrackDisposingOnMainThread() { 272 void WebRtcMediaStreamTrackAdapter::FinalizeRemoteTrackDisposingOnMainThread() {
270 DCHECK(main_thread_->BelongsToCurrentThread()); 273 DCHECK(main_thread_->BelongsToCurrentThread());
271 DCHECK(!is_initialized_); 274 DCHECK(!is_initialized_);
272 remote_audio_track_adapter_ = nullptr; 275 remote_audio_track_adapter_ = nullptr;
273 remote_video_track_adapter_ = nullptr; 276 remote_video_track_adapter_ = nullptr;
274 webrtc_track_ = nullptr; 277 webrtc_track_ = nullptr;
275 web_track_.Reset(); 278 web_track_.Reset();
276 } 279 }
277 280
278 } // namespace content 281 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698