Chromium Code Reviews| OLD | NEW |
|---|---|
| 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()); | |
|
Guido Urdaneta
2017/06/12 14:25:29
Would a ThreadChecker/SequenceChecker (detached in
hbos_chromium
2017/06/12 15:05:21
I'd like to avoid that because then the test passe
Guido Urdaneta
2017/06/12 15:18:35
Acknowledged.
| |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |