Chromium Code Reviews| Index: content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
| diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
| index df31b7cdbf2fa37ce47435d0d500307e256c468f..41a65ac1d2305148eb44a58d6d8310a2c9c21bca 100644 |
| --- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
| +++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc |
| @@ -51,8 +51,10 @@ |
| #include "content/renderer/render_view_impl.h" |
| #include "crypto/openssl_util.h" |
| #include "jingle/glue/thread_wrapper.h" |
| +#include "media/base/media_log.h" |
| #include "media/base/media_permission.h" |
| #include "media/filters/ffmpeg_glue.h" |
| +#include "media/filters/gpu_video_decoder.h" |
| #include "media/renderers/gpu_video_accelerator_factories.h" |
| #include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
| #include "third_party/WebKit/public/platform/WebMediaStream.h" |
| @@ -97,6 +99,12 @@ bool IsValidPortRange(uint16_t min_port, uint16_t max_port) { |
| return min_port != 0 && max_port != 0; |
| } |
| +std::unique_ptr<media::VideoDecoder> CreateGpuVideoDecoder( |
| + media::GpuVideoAcceleratorFactories* gpu_factories) { |
| + return std::unique_ptr<media::VideoDecoder>(new media::GpuVideoDecoder( |
| + gpu_factories, media::RequestSurfaceCB(), new media::MediaLog())); |
| +} |
| + |
| } // namespace |
| PeerConnectionDependencyFactory::PeerConnectionDependencyFactory( |
| @@ -205,12 +213,18 @@ void PeerConnectionDependencyFactory::CreatePeerConnectionFactory() { |
| base::WaitableEvent start_signaling_event( |
| base::WaitableEvent::ResetPolicy::MANUAL, |
| base::WaitableEvent::InitialState::NOT_SIGNALED); |
| + |
| + media::GpuVideoAcceleratorFactories* gpu_factories = |
|
emircan
2016/10/20 17:52:25
media::GpuVideoAcceleratorFactories* const
Also, c
slan
2016/10/25 21:25:32
Done.
|
| + RenderThreadImpl::current()->GetGpuFactories(); |
| + auto create_video_decoder_cb = |
| + base::Bind(&CreateGpuVideoDecoder, gpu_factories); |
| + auto decoder_task_runner = gpu_factories->GetTaskRunner(); |
| + |
| chrome_signaling_thread_.task_runner()->PostTask( |
| FROM_HERE, |
| base::Bind(&PeerConnectionDependencyFactory::InitializeSignalingThread, |
| - base::Unretained(this), |
| - RenderThreadImpl::current()->GetGpuFactories(), |
| - &start_signaling_event)); |
| + base::Unretained(this), gpu_factories, create_video_decoder_cb, |
| + decoder_task_runner, &start_signaling_event)); |
| start_signaling_event.Wait(); |
| CHECK(signaling_thread_); |
| @@ -218,6 +232,8 @@ void PeerConnectionDependencyFactory::CreatePeerConnectionFactory() { |
| void PeerConnectionDependencyFactory::InitializeSignalingThread( |
| media::GpuVideoAcceleratorFactories* gpu_factories, |
| + const CreateVideoDecoderCB& create_video_decoder_cb, |
| + const scoped_refptr<base::SingleThreadTaskRunner>& decoder_task_runner, |
| base::WaitableEvent* event) { |
| DCHECK(chrome_signaling_thread_.task_runner()->BelongsToCurrentThread()); |
| DCHECK(worker_thread_); |
| @@ -236,7 +252,8 @@ void PeerConnectionDependencyFactory::InitializeSignalingThread( |
| const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); |
| if (gpu_factories && gpu_factories->IsGpuVideoAcceleratorEnabled()) { |
| if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWDecoding)) |
| - decoder_factory.reset(new RTCVideoDecoderFactory(gpu_factories)); |
| + decoder_factory.reset(new RTCVideoDecoderFactory(create_video_decoder_cb, |
| + decoder_task_runner)); |
| if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding)) |
| encoder_factory.reset(new RTCVideoEncoderFactory(gpu_factories)); |