| 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..fba351d5bc51c2539462eb83dfdd1599f85f671e 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* const gpu_factories =
|
| + RenderThreadImpl::current()->GetGpuFactories();
|
| + const auto create_video_decoder_cb =
|
| + base::Bind(&CreateGpuVideoDecoder, gpu_factories);
|
| + const 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));
|
|
|