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

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

Issue 850993002: gpu video: optimize HW video to SW canvas and implement it for WebRTC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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/webmediaplayer_ms.cc
diff --git a/content/renderer/media/webmediaplayer_ms.cc b/content/renderer/media/webmediaplayer_ms.cc
index 11a162ff859402eec3e16e4c578dc15684a85bc3..ce207b67bcfd1af0300c0916d8f01e0d6070014c 100644
--- a/content/renderer/media/webmediaplayer_ms.cc
+++ b/content/renderer/media/webmediaplayer_ms.cc
@@ -38,12 +38,15 @@ using blink::WebMediaPlayer;
using blink::WebRect;
using blink::WebSize;
+namespace content {
+
namespace {
// This function copies a YV12 or NATIVE_TEXTURE to a new YV12
// media::VideoFrame.
scoped_refptr<media::VideoFrame> CopyFrameToYV12(
- const scoped_refptr<media::VideoFrame>& frame) {
+ const scoped_refptr<media::VideoFrame>& frame,
+ media::SkCanvasVideoRenderer* video_renderer) {
DCHECK(frame->format() == media::VideoFrame::YV12 ||
frame->format() == media::VideoFrame::I420 ||
frame->format() == media::VideoFrame::NATIVE_TEXTURE);
@@ -58,8 +61,19 @@ scoped_refptr<media::VideoFrame> CopyFrameToYV12(
SkBitmap bitmap;
bitmap.allocN32Pixels(frame->visible_rect().width(),
frame->visible_rect().height());
- frame->ReadPixelsFromNativeTexture(bitmap);
+ SkCanvas canvas(bitmap);
+ cc::ContextProvider* provider =
+ RenderThreadImpl::current()->SharedMainThreadContextProvider().get();
+ if (provider) {
+ media::Context3D context_3d =
+ media::Context3D(provider->ContextGL(), provider->GrContext());
+ DCHECK(context_3d.gl);
+ video_renderer->Copy(frame.get(), &canvas, context_3d);
+ } else {
+ // GPU Process crashed.
+ bitmap.eraseColor(SK_ColorTRANSPARENT);
dshwang 2015/01/14 20:41:20 This CL removes VideoFrame::ReadPixelsFromNativeTe
+ }
media::CopyRGBToVideoFrame(
reinterpret_cast<uint8*>(bitmap.getPixels()),
bitmap.rowBytes(),
@@ -78,8 +92,6 @@ scoped_refptr<media::VideoFrame> CopyFrameToYV12(
} // anonymous namespace
-namespace content {
-
WebMediaPlayerMS::WebMediaPlayerMS(
blink::WebFrame* frame,
blink::WebMediaPlayerClient* client,
@@ -219,7 +231,9 @@ void WebMediaPlayerMS::pause() {
// The original frame must not be referenced when the player is paused since
// there might be a finite number of available buffers. E.g, video that
// originates from a video camera.
- scoped_refptr<media::VideoFrame> new_frame = CopyFrameToYV12(current_frame_);
+ scoped_refptr<media::VideoFrame> new_frame =
+ CopyFrameToYV12(current_frame_, &video_renderer_);
+
base::AutoLock auto_lock(current_frame_lock_);
current_frame_ = new_frame;
}

Powered by Google App Engine
This is Rietveld 408576698