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; |
| } |