| 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 d98b2ac06daea95a5e831306093058b153718064..4e7890b990e01dd6dd2e4c87ed9a9efb4b32913c 100644
|
| --- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
|
| +++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc
|
| @@ -66,6 +66,11 @@
|
| #include "third_party/webrtc/base/ssladapter.h"
|
| #include "third_party/webrtc/modules/video_coding/codecs/h264/include/h264.h"
|
|
|
| +// Debug Only! Remove this!
|
| +#include "media/filters/ffmpeg_video_decoder.h"
|
| +#include "media/mojo/clients/mojo_video_decoder.h"
|
| +#include "services/shell/public/cpp/interface_provider.h"
|
| +
|
| #if defined(OS_ANDROID)
|
| #include "media/base/android/media_codec_util.h"
|
| #endif
|
| @@ -97,6 +102,24 @@ bool IsValidPortRange(uint16_t min_port, uint16_t max_port) {
|
| return min_port != 0 && max_port != 0;
|
| }
|
|
|
| +// Debug Only! Remove this!
|
| +std::unique_ptr<media::VideoDecoder> CreateFFmpegVideoDecoder() {
|
| + return base::WrapUnique(new media::FFmpegVideoDecoder());
|
| +}
|
| +
|
| +// Debug Only! (Maybe)
|
| +std::unique_ptr<media::VideoDecoder> CreateMojoVideoDecoder(
|
| + const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
|
| + media::GpuVideoAcceleratorFactories* gpu_factories,
|
| + shell::InterfaceProvider* remote_interfaces) {
|
| + DCHECK(remote_interfaces);
|
| + DCHECK(task_runner->BelongsToCurrentThread());
|
| + media::mojom::VideoDecoderPtr remote_video_decoder;
|
| + remote_interfaces->GetInterface(mojo::GetProxy(&remote_video_decoder));
|
| + return base::MakeUnique<media::MojoVideoDecoder>(
|
| + task_runner, gpu_factories, std::move(remote_video_decoder));
|
| +}
|
| +
|
| } // namespace
|
|
|
| PeerConnectionDependencyFactory::PeerConnectionDependencyFactory(
|
| @@ -106,7 +129,8 @@ PeerConnectionDependencyFactory::PeerConnectionDependencyFactory(
|
| signaling_thread_(NULL),
|
| worker_thread_(NULL),
|
| chrome_signaling_thread_("Chrome_libJingle_Signaling"),
|
| - chrome_worker_thread_("Chrome_libJingle_WorkerThread") {
|
| + chrome_worker_thread_("Chrome_libJingle_WorkerThread"),
|
| + task_runner_(base::ThreadTaskRunnerHandle::Get()) {
|
| TryScheduleStunProbeTrial();
|
| }
|
|
|
| @@ -205,11 +229,27 @@ void PeerConnectionDependencyFactory::CreatePeerConnectionFactory() {
|
| base::WaitableEvent start_signaling_event(
|
| base::WaitableEvent::ResetPolicy::MANUAL,
|
| base::WaitableEvent::InitialState::NOT_SIGNALED);
|
| +
|
| +#define USE_MOJO_VIDEO_DECODER
|
| +#if defined(USE_LOCAL_FFMPEG_DECODER)
|
| + auto create_video_decoder_cb = base::Bind(&CreateFFmpegVideoDecoder);
|
| + auto decoder_task_runner =
|
| + RenderThreadImpl::current()->GetGpuFactories()->GetTaskRunner();
|
| +#elif defined(USE_MOJO_VIDEO_DECODER)
|
| + auto create_video_decoder_cb =
|
| + base::Bind(&CreateMojoVideoDecoder, task_runner_,
|
| + RenderThreadImpl::current()->GetGpuFactories(),
|
| + RenderThreadImpl::current()->GetRemoteInterfaces());
|
| + auto decoder_task_runner = task_runner_;
|
| +#else
|
| + INTENTIONAL ERROR: MUST DEFINE ONE OF THESE
|
| +#endif
|
| chrome_signaling_thread_.task_runner()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&PeerConnectionDependencyFactory::InitializeSignalingThread,
|
| base::Unretained(this),
|
| RenderThreadImpl::current()->GetGpuFactories(),
|
| + create_video_decoder_cb, decoder_task_runner,
|
| &start_signaling_event));
|
|
|
| start_signaling_event.Wait();
|
| @@ -218,6 +258,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_);
|
| @@ -234,13 +276,15 @@ void PeerConnectionDependencyFactory::InitializeSignalingThread(
|
| std::unique_ptr<cricket::WebRtcVideoEncoderFactory> encoder_factory;
|
|
|
| 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));
|
| -
|
| - if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding))
|
| - encoder_factory.reset(new RTCVideoEncoderFactory(gpu_factories));
|
| - }
|
| + // if (gpu_factories && gpu_factories->IsGpuVideoAcceleratorEnabled()) {
|
| + // if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWDecoding))
|
| + // decoder_factory.reset(new RTCVideoDecoderFactory(gpu_factories));
|
| +
|
| + // if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding))
|
| + // encoder_factory.reset(new RTCVideoEncoderFactory(gpu_factories));
|
| + // }
|
| + decoder_factory.reset(
|
| + new RTCVideoDecoderFactory(create_video_decoder_cb, decoder_task_runner));
|
|
|
| #if defined(OS_ANDROID)
|
| if (!media::MediaCodecUtil::SupportsSetParameters())
|
|
|