Chromium Code Reviews| 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 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" | 5 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 44 #include "content/renderer/p2p/empty_network_manager.h" | 44 #include "content/renderer/p2p/empty_network_manager.h" |
| 45 #include "content/renderer/p2p/filtering_network_manager.h" | 45 #include "content/renderer/p2p/filtering_network_manager.h" |
| 46 #include "content/renderer/p2p/ipc_network_manager.h" | 46 #include "content/renderer/p2p/ipc_network_manager.h" |
| 47 #include "content/renderer/p2p/ipc_socket_factory.h" | 47 #include "content/renderer/p2p/ipc_socket_factory.h" |
| 48 #include "content/renderer/p2p/port_allocator.h" | 48 #include "content/renderer/p2p/port_allocator.h" |
| 49 #include "content/renderer/render_frame_impl.h" | 49 #include "content/renderer/render_frame_impl.h" |
| 50 #include "content/renderer/render_thread_impl.h" | 50 #include "content/renderer/render_thread_impl.h" |
| 51 #include "content/renderer/render_view_impl.h" | 51 #include "content/renderer/render_view_impl.h" |
| 52 #include "crypto/openssl_util.h" | 52 #include "crypto/openssl_util.h" |
| 53 #include "jingle/glue/thread_wrapper.h" | 53 #include "jingle/glue/thread_wrapper.h" |
| 54 #include "media/base/media_log.h" | |
| 54 #include "media/base/media_permission.h" | 55 #include "media/base/media_permission.h" |
| 55 #include "media/filters/ffmpeg_glue.h" | 56 #include "media/filters/ffmpeg_glue.h" |
| 57 #include "media/filters/gpu_video_decoder.h" | |
| 56 #include "media/renderers/gpu_video_accelerator_factories.h" | 58 #include "media/renderers/gpu_video_accelerator_factories.h" |
| 57 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" | 59 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
| 58 #include "third_party/WebKit/public/platform/WebMediaStream.h" | 60 #include "third_party/WebKit/public/platform/WebMediaStream.h" |
| 59 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" | 61 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" |
| 60 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" | 62 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
| 61 #include "third_party/WebKit/public/platform/WebURL.h" | 63 #include "third_party/WebKit/public/platform/WebURL.h" |
| 62 #include "third_party/WebKit/public/web/WebDocument.h" | 64 #include "third_party/WebKit/public/web/WebDocument.h" |
| 63 #include "third_party/WebKit/public/web/WebFrame.h" | 65 #include "third_party/WebKit/public/web/WebFrame.h" |
| 64 #include "third_party/webrtc/api/mediaconstraintsinterface.h" | 66 #include "third_party/webrtc/api/mediaconstraintsinterface.h" |
| 65 #include "third_party/webrtc/api/videosourceproxy.h" | 67 #include "third_party/webrtc/api/videosourceproxy.h" |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 90 if (preference == kWebRTCIPHandlingDisableNonProxiedUdp) | 92 if (preference == kWebRTCIPHandlingDisableNonProxiedUdp) |
| 91 return DISABLE_NON_PROXIED_UDP; | 93 return DISABLE_NON_PROXIED_UDP; |
| 92 return DEFAULT; | 94 return DEFAULT; |
| 93 } | 95 } |
| 94 | 96 |
| 95 bool IsValidPortRange(uint16_t min_port, uint16_t max_port) { | 97 bool IsValidPortRange(uint16_t min_port, uint16_t max_port) { |
| 96 DCHECK(min_port <= max_port); | 98 DCHECK(min_port <= max_port); |
| 97 return min_port != 0 && max_port != 0; | 99 return min_port != 0 && max_port != 0; |
| 98 } | 100 } |
| 99 | 101 |
| 102 std::unique_ptr<media::VideoDecoder> CreateGpuVideoDecoder( | |
| 103 media::GpuVideoAcceleratorFactories* gpu_factories) { | |
| 104 return std::unique_ptr<media::VideoDecoder>(new media::GpuVideoDecoder( | |
| 105 gpu_factories, media::RequestSurfaceCB(), new media::MediaLog())); | |
| 106 } | |
| 107 | |
| 100 } // namespace | 108 } // namespace |
| 101 | 109 |
| 102 PeerConnectionDependencyFactory::PeerConnectionDependencyFactory( | 110 PeerConnectionDependencyFactory::PeerConnectionDependencyFactory( |
| 103 P2PSocketDispatcher* p2p_socket_dispatcher) | 111 P2PSocketDispatcher* p2p_socket_dispatcher) |
| 104 : network_manager_(NULL), | 112 : network_manager_(NULL), |
| 105 p2p_socket_dispatcher_(p2p_socket_dispatcher), | 113 p2p_socket_dispatcher_(p2p_socket_dispatcher), |
| 106 signaling_thread_(NULL), | 114 signaling_thread_(NULL), |
| 107 worker_thread_(NULL), | 115 worker_thread_(NULL), |
| 108 chrome_signaling_thread_("Chrome_libJingle_Signaling"), | 116 chrome_signaling_thread_("Chrome_libJingle_Signaling"), |
| 109 chrome_worker_thread_("Chrome_libJingle_WorkerThread") { | 117 chrome_worker_thread_("Chrome_libJingle_WorkerThread") { |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 198 // Init SSL, which will be needed by PeerConnection. | 206 // Init SSL, which will be needed by PeerConnection. |
| 199 if (!rtc::InitializeSSL()) { | 207 if (!rtc::InitializeSSL()) { |
| 200 LOG(ERROR) << "Failed on InitializeSSL."; | 208 LOG(ERROR) << "Failed on InitializeSSL."; |
| 201 NOTREACHED(); | 209 NOTREACHED(); |
| 202 return; | 210 return; |
| 203 } | 211 } |
| 204 | 212 |
| 205 base::WaitableEvent start_signaling_event( | 213 base::WaitableEvent start_signaling_event( |
| 206 base::WaitableEvent::ResetPolicy::MANUAL, | 214 base::WaitableEvent::ResetPolicy::MANUAL, |
| 207 base::WaitableEvent::InitialState::NOT_SIGNALED); | 215 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 216 | |
| 217 media::GpuVideoAcceleratorFactories* gpu_factories = | |
|
emircan
2016/10/20 17:52:25
media::GpuVideoAcceleratorFactories* const
Also, c
slan
2016/10/25 21:25:32
Done.
| |
| 218 RenderThreadImpl::current()->GetGpuFactories(); | |
| 219 auto create_video_decoder_cb = | |
| 220 base::Bind(&CreateGpuVideoDecoder, gpu_factories); | |
| 221 auto decoder_task_runner = gpu_factories->GetTaskRunner(); | |
| 222 | |
| 208 chrome_signaling_thread_.task_runner()->PostTask( | 223 chrome_signaling_thread_.task_runner()->PostTask( |
| 209 FROM_HERE, | 224 FROM_HERE, |
| 210 base::Bind(&PeerConnectionDependencyFactory::InitializeSignalingThread, | 225 base::Bind(&PeerConnectionDependencyFactory::InitializeSignalingThread, |
| 211 base::Unretained(this), | 226 base::Unretained(this), gpu_factories, create_video_decoder_cb, |
| 212 RenderThreadImpl::current()->GetGpuFactories(), | 227 decoder_task_runner, &start_signaling_event)); |
| 213 &start_signaling_event)); | |
| 214 | 228 |
| 215 start_signaling_event.Wait(); | 229 start_signaling_event.Wait(); |
| 216 CHECK(signaling_thread_); | 230 CHECK(signaling_thread_); |
| 217 } | 231 } |
| 218 | 232 |
| 219 void PeerConnectionDependencyFactory::InitializeSignalingThread( | 233 void PeerConnectionDependencyFactory::InitializeSignalingThread( |
| 220 media::GpuVideoAcceleratorFactories* gpu_factories, | 234 media::GpuVideoAcceleratorFactories* gpu_factories, |
| 235 const CreateVideoDecoderCB& create_video_decoder_cb, | |
| 236 const scoped_refptr<base::SingleThreadTaskRunner>& decoder_task_runner, | |
| 221 base::WaitableEvent* event) { | 237 base::WaitableEvent* event) { |
| 222 DCHECK(chrome_signaling_thread_.task_runner()->BelongsToCurrentThread()); | 238 DCHECK(chrome_signaling_thread_.task_runner()->BelongsToCurrentThread()); |
| 223 DCHECK(worker_thread_); | 239 DCHECK(worker_thread_); |
| 224 DCHECK(p2p_socket_dispatcher_.get()); | 240 DCHECK(p2p_socket_dispatcher_.get()); |
| 225 | 241 |
| 226 jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); | 242 jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); |
| 227 jingle_glue::JingleThreadWrapper::current()->set_send_allowed(true); | 243 jingle_glue::JingleThreadWrapper::current()->set_send_allowed(true); |
| 228 signaling_thread_ = jingle_glue::JingleThreadWrapper::current(); | 244 signaling_thread_ = jingle_glue::JingleThreadWrapper::current(); |
| 229 | 245 |
| 230 socket_factory_.reset( | 246 socket_factory_.reset( |
| 231 new IpcPacketSocketFactory(p2p_socket_dispatcher_.get())); | 247 new IpcPacketSocketFactory(p2p_socket_dispatcher_.get())); |
| 232 | 248 |
| 233 std::unique_ptr<cricket::WebRtcVideoDecoderFactory> decoder_factory; | 249 std::unique_ptr<cricket::WebRtcVideoDecoderFactory> decoder_factory; |
| 234 std::unique_ptr<cricket::WebRtcVideoEncoderFactory> encoder_factory; | 250 std::unique_ptr<cricket::WebRtcVideoEncoderFactory> encoder_factory; |
| 235 | 251 |
| 236 const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); | 252 const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); |
| 237 if (gpu_factories && gpu_factories->IsGpuVideoAcceleratorEnabled()) { | 253 if (gpu_factories && gpu_factories->IsGpuVideoAcceleratorEnabled()) { |
| 238 if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWDecoding)) | 254 if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWDecoding)) |
| 239 decoder_factory.reset(new RTCVideoDecoderFactory(gpu_factories)); | 255 decoder_factory.reset(new RTCVideoDecoderFactory(create_video_decoder_cb, |
| 256 decoder_task_runner)); | |
| 240 | 257 |
| 241 if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding)) | 258 if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding)) |
| 242 encoder_factory.reset(new RTCVideoEncoderFactory(gpu_factories)); | 259 encoder_factory.reset(new RTCVideoEncoderFactory(gpu_factories)); |
| 243 } | 260 } |
| 244 | 261 |
| 245 #if defined(OS_ANDROID) | 262 #if defined(OS_ANDROID) |
| 246 if (!media::MediaCodecUtil::SupportsSetParameters()) | 263 if (!media::MediaCodecUtil::SupportsSetParameters()) |
| 247 encoder_factory.reset(); | 264 encoder_factory.reset(); |
| 248 #endif | 265 #endif |
| 249 | 266 |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 548 | 565 |
| 549 void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() { | 566 void PeerConnectionDependencyFactory::EnsureWebRtcAudioDeviceImpl() { |
| 550 DCHECK(CalledOnValidThread()); | 567 DCHECK(CalledOnValidThread()); |
| 551 if (audio_device_.get()) | 568 if (audio_device_.get()) |
| 552 return; | 569 return; |
| 553 | 570 |
| 554 audio_device_ = new WebRtcAudioDeviceImpl(); | 571 audio_device_ = new WebRtcAudioDeviceImpl(); |
| 555 } | 572 } |
| 556 | 573 |
| 557 } // namespace content | 574 } // namespace content |
| OLD | NEW |