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()) |