Index: content/renderer/media/media_stream_dependency_factory.cc |
diff --git a/content/renderer/media/media_stream_dependency_factory.cc b/content/renderer/media/media_stream_dependency_factory.cc |
index 867915413f6bd60983c5e3857416e688fb370f11..f15f1036fbd1830f86fdd17e2544e55cc306aff6 100644 |
--- a/content/renderer/media/media_stream_dependency_factory.cc |
+++ b/content/renderer/media/media_stream_dependency_factory.cc |
@@ -14,6 +14,7 @@ |
#include "content/renderer/media/rtc_media_constraints.h" |
#include "content/renderer/media/rtc_peer_connection_handler.h" |
#include "content/renderer/media/rtc_video_capturer.h" |
+#include "content/renderer/media/rtc_video_decoder_factory.h" |
#include "content/renderer/media/video_capture_impl_manager.h" |
#include "content/renderer/media/webaudio_capturer_source.h" |
#include "content/renderer/media/webrtc_audio_device_impl.h" |
@@ -25,6 +26,7 @@ |
#include "content/renderer/p2p/port_allocator.h" |
#include "content/renderer/render_thread_impl.h" |
#include "jingle/glue/thread_wrapper.h" |
+#include "media/filters/gpu_video_decoder.h" |
#include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
#include "third_party/WebKit/public/platform/WebMediaStream.h" |
#include "third_party/WebKit/public/platform/WebMediaStreamSource.h" |
@@ -490,13 +492,20 @@ bool MediaStreamDependencyFactory::CreatePeerConnectionFactory() { |
DCHECK(!audio_device_.get()); |
audio_device_ = new WebRtcAudioDeviceImpl(); |
- cricket::WebRtcVideoDecoderFactory* decoder_factory = NULL; |
- cricket::WebRtcVideoEncoderFactory* encoder_factory = NULL; |
+ scoped_ptr<cricket::WebRtcVideoDecoderFactory> decoder_factory; |
+ scoped_ptr<cricket::WebRtcVideoEncoderFactory> encoder_factory; |
+ const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); |
+ if (cmd_line->HasSwitch(switches::kEnableWebRtcHWDecoding)) { |
+ scoped_refptr<media::GpuVideoDecoder::Factories> gpu_factories = |
+ RenderThreadImpl::current()->GetGpuFactories(); |
+ if (gpu_factories.get() != NULL) |
+ decoder_factory.reset(new RTCVideoDecoderFactory(gpu_factories)); |
+ } |
#if defined(GOOGLE_TV) |
// PeerConnectionFactory will hold the ownership of this |
// VideoDecoderFactory. |
- decoder_factory = decoder_factory_tv_ = new RTCVideoDecoderFactoryTv; |
+ decoder_factory.reset(decoder_factory_tv_ = new RTCVideoDecoderFactoryTv); |
#endif |
#if defined(ENABLE_WEBRTC) && defined(OS_CHROMEOS) |
@@ -506,7 +515,7 @@ bool MediaStreamDependencyFactory::CreatePeerConnectionFactory() { |
// encoder factory to |vc_manager_| because the manager outlives it. |
RtcEncodingVideoCapturerFactory* rtc_encoding_capturer_factory = |
new RtcEncodingVideoCapturerFactory(); |
- encoder_factory = rtc_encoding_capturer_factory; |
+ encoder_factory.reset(rtc_encoding_capturer_factory); |
vc_manager_->set_encoding_capturer_factory( |
rtc_encoding_capturer_factory->AsWeakPtr()); |
} |
@@ -516,8 +525,8 @@ bool MediaStreamDependencyFactory::CreatePeerConnectionFactory() { |
webrtc::CreatePeerConnectionFactory(worker_thread_, |
signaling_thread_, |
audio_device_.get(), |
- encoder_factory, |
- decoder_factory)); |
+ encoder_factory.release(), |
+ decoder_factory.release())); |
if (factory.get()) |
pc_factory_ = factory; |
else |