Chromium Code Reviews| 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; | 
| } |