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

Unified Diff: content/renderer/media/media_stream_video_renderer_sink.cc

Issue 1407703003: Reland: Use GpuMemoryBufferVideoFramePool for WebMediaPlayerMS and MediaStreamVideoRendererSink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
Index: content/renderer/media/media_stream_video_renderer_sink.cc
diff --git a/content/renderer/media/media_stream_video_renderer_sink.cc b/content/renderer/media/media_stream_video_renderer_sink.cc
index 723b733df25d0502dfe8a5ae282f28beac1b8fe2..68f51b014d124f9a4aee9a64764d085f946a28c6 100644
--- a/content/renderer/media/media_stream_video_renderer_sink.cc
+++ b/content/renderer/media/media_stream_video_renderer_sink.cc
@@ -4,11 +4,13 @@
#include "content/renderer/media/media_stream_video_renderer_sink.h"
+#include "base/single_thread_task_runner.h"
#include "base/thread_task_runner_handle.h"
#include "base/trace_event/trace_event.h"
#include "media/base/bind_to_current_loop.h"
#include "media/base/video_frame.h"
#include "media/base/video_util.h"
+#include "media/renderers/gpu_video_accelerator_factories.h"
const int kMinFrameSize = 2;
@@ -17,14 +19,23 @@ namespace content {
MediaStreamVideoRendererSink::MediaStreamVideoRendererSink(
const blink::WebMediaStreamTrack& video_track,
const base::Closure& error_cb,
- const RepaintCB& repaint_cb)
+ const RepaintCB& repaint_cb,
+ const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
+ const scoped_refptr<base::TaskRunner>& worker_task_runner,
+ const scoped_refptr<media::GpuVideoAcceleratorFactories>& gpu_factories)
: error_cb_(error_cb),
repaint_cb_(repaint_cb),
task_runner_(base::ThreadTaskRunnerHandle::Get()),
state_(STOPPED),
frame_size_(kMinFrameSize, kMinFrameSize),
video_track_(video_track),
+ media_task_runner_(media_task_runner),
weak_factory_(this) {
+ if (gpu_factories &&
+ gpu_factories->ShouldUseGpuMemoryBuffersForVideoFrames()) {
+ gpu_memory_buffer_pool_.reset(new media::GpuMemoryBufferVideoFramePool(
+ media_task_runner, worker_task_runner, gpu_factories));
+ }
}
MediaStreamVideoRendererSink::~MediaStreamVideoRendererSink() {
@@ -72,6 +83,11 @@ void MediaStreamVideoRendererSink::Pause() {
state_ = PAUSED;
}
+void MediaStreamVideoRendererSink::SetGpuMemoryBufferVideoForTesting(
+ scoped_ptr<media::GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool) {
+ gpu_memory_buffer_pool_.swap(gpu_memory_buffer_pool);
+}
+
void MediaStreamVideoRendererSink::OnReadyStateChanged(
blink::WebMediaStreamSource::ReadyState state) {
DCHECK(task_runner_->BelongsToCurrentThread());
@@ -83,15 +99,32 @@ void MediaStreamVideoRendererSink::OnVideoFrame(
const scoped_refptr<media::VideoFrame>& frame,
base::TimeTicks estimated_capture_time) {
DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(frame);
if (state_ != STARTED)
return;
- frame_size_ = frame->natural_size();
+ if (!gpu_memory_buffer_pool_) {
+ FrameReady(frame);
+ return;
+ }
- TRACE_EVENT_INSTANT1("media_stream_video_renderer_sink",
- "OnVideoFrame",
- TRACE_EVENT_SCOPE_THREAD,
- "timestamp",
+ media_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(
+ &media::GpuMemoryBufferVideoFramePool::MaybeCreateHardwareFrame,
+ base::Unretained(gpu_memory_buffer_pool_.get()), frame,
+ media::BindToCurrentLoop(
+ base::Bind(&MediaStreamVideoRendererSink::FrameReady, this))));
+}
+
+void MediaStreamVideoRendererSink::FrameReady(
+ const scoped_refptr<media::VideoFrame>& frame) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(frame);
+
+ frame_size_ = frame->natural_size();
+ TRACE_EVENT_INSTANT1("media_stream_video_renderer_sink", "FrameReady",
+ TRACE_EVENT_SCOPE_THREAD, "timestamp",
frame->timestamp().InMilliseconds());
repaint_cb_.Run(frame);
}

Powered by Google App Engine
This is Rietveld 408576698