Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(467)

Unified Diff: content/renderer/media/webrtc/peer_connection_dependency_factory.cc

Issue 2418613002: Proxy RtcVideoDecoder calls to a media::VideoDecoder.
Patch Set: Comments addressed and unittests updated. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/media/webrtc/peer_connection_dependency_factory.h ('k') | media/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
« no previous file with comments | « content/renderer/media/webrtc/peer_connection_dependency_factory.h ('k') | media/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698