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

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

Issue 1358883003: Use GpuMemoryBufferVideoFramePool for WebMediaPlayerMS and MediaStreamVideoRendererSink (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@send-gmbs
Patch Set: Created 5 years, 3 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..a4b4f3d489c1249ddac92ab3d561d8d014aba501 100644
--- a/content/renderer/media/media_stream_video_renderer_sink.cc
+++ b/content/renderer/media/media_stream_video_renderer_sink.cc
@@ -17,14 +17,24 @@ 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) {
+ DCHECK(gpu_factories);
+ if (gpu_factories &&
mcasas 2015/10/02 19:30:46 For debugging is fine, but DCHECK(bla) + if(bla) i
emircan 2015/10/03 00:11:26 Ok. Removing DCHECK.
+ gpu_factories->ShouldUseGpuMemoryBuffersForVideoFrames()) {
+ gpu_memory_buffer_pool_.reset(new media::GpuMemoryBufferVideoFramePool(
+ media_task_runner, worker_task_runner, gpu_factories));
+ }
}
MediaStreamVideoRendererSink::~MediaStreamVideoRendererSink() {
@@ -86,12 +96,43 @@ void MediaStreamVideoRendererSink::OnVideoFrame(
if (state_ != STARTED)
return;
- frame_size_ = frame->natural_size();
+ DCHECK(frame);
mcasas 2015/10/02 19:30:46 nit: Preconditions in the beginning of the method.
emircan 2015/10/03 00:11:26 Done.
+ if (gpu_memory_buffer_pool_) {
mcasas 2015/10/02 19:30:46 if (!gpu_memory_buffer_pool_) { FrameReady(fra
emircan 2015/10/03 00:11:26 Done.
+ media_task_runner_->PostTask(
+ FROM_HERE, base::Bind(&MediaStreamVideoRendererSink::
+ MaybeCreateHardwareFrameOnMediaThread,
+ this, frame));
mcasas 2015/10/02 19:30:46 I think you can remove the two trampoline methods
emircan 2015/10/03 00:11:26 Done.
mcasas 2015/10/05 17:49:45 How so? I still see the two methods.
+ } else {
+ FrameReady(frame);
+ }
+}
+
+void MediaStreamVideoRendererSink::MaybeCreateHardwareFrameOnMediaThread(
+ const scoped_refptr<media::VideoFrame>& frame) {
+ DCHECK(media_task_runner_->BelongsToCurrentThread());
+ gpu_memory_buffer_pool_->MaybeCreateHardwareFrame(
+ frame, base::Bind(&MediaStreamVideoRendererSink::
+ MaybeCreateHardwareFrameCompletedOnMediaThread,
+ this));
+}
- TRACE_EVENT_INSTANT1("media_stream_video_renderer_sink",
- "OnVideoFrame",
- TRACE_EVENT_SCOPE_THREAD,
- "timestamp",
+void MediaStreamVideoRendererSink::
+ MaybeCreateHardwareFrameCompletedOnMediaThread(
+ const scoped_refptr<media::VideoFrame>& frame) {
+ DCHECK(media_task_runner_->BelongsToCurrentThread());
+ DCHECK(frame);
+ task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&MediaStreamVideoRendererSink::FrameReady, this, frame));
+}
+
+void MediaStreamVideoRendererSink::FrameReady(
+ const scoped_refptr<media::VideoFrame>& frame) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+
+ 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