Index: content/renderer/media/webmediaplayer_ms.cc |
diff --git a/content/renderer/media/webmediaplayer_ms.cc b/content/renderer/media/webmediaplayer_ms.cc |
index 53119fe3ff12be25683882e8e86a8d2b462cac81..a5de6808720033529fa1304109711af228bf0ad2 100644 |
--- a/content/renderer/media/webmediaplayer_ms.cc |
+++ b/content/renderer/media/webmediaplayer_ms.cc |
@@ -422,6 +422,23 @@ bool WebMediaPlayerMS::copyVideoTextureToPlatformTexture( |
bool premultiply_alpha, |
bool flip_y) { |
TRACE_EVENT0("media", "WebMediaPlayerMS:copyVideoTextureToPlatformTexture"); |
+ // TODO(dshwang): not include gl2.h because this method will be removed soon. |
+ const unsigned int GL_TEXTURE_2D = 0x0DE1; |
+ return copyVideoTextureToPlatformTexture(web_graphics_context, GL_TEXTURE_2D, |
+ texture, internal_format, type, 0, |
+ premultiply_alpha, flip_y); |
+} |
+ |
+bool WebMediaPlayerMS::copyVideoTextureToPlatformTexture( |
+ blink::WebGraphicsContext3D* web_graphics_context, |
+ unsigned int target, |
+ unsigned int texture, |
+ unsigned int internal_format, |
+ unsigned int type, |
+ int level, |
+ bool premultiply_alpha, |
+ bool flip_y) { |
+ TRACE_EVENT0("media", "WebMediaPlayerMS:copyVideoTextureToPlatformTexture"); |
DCHECK(thread_checker_.CalledOnValidThread()); |
scoped_refptr<media::VideoFrame> video_frame; |
@@ -441,8 +458,43 @@ bool WebMediaPlayerMS::copyVideoTextureToPlatformTexture( |
static_cast<gpu_blink::WebGraphicsContext3DImpl*>(web_graphics_context) |
->GetGLInterface(); |
media::SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture( |
- gl, video_frame.get(), texture, internal_format, type, premultiply_alpha, |
- flip_y); |
+ gl, video_frame.get(), target, texture, internal_format, type, level, |
+ premultiply_alpha, flip_y); |
+ return true; |
+} |
+ |
+bool WebMediaPlayerMS::copyVideoSubTextureToPlatformTexture( |
+ blink::WebGraphicsContext3D* web_graphics_context, |
+ unsigned int target, |
+ unsigned int texture, |
+ int level, |
+ int xoffset, |
+ int yoffset, |
+ bool premultiply_alpha, |
+ bool flip_y) { |
+ TRACE_EVENT0("media", |
+ "WebMediaPlayerMS:copyVideoSubTextureToPlatformTexture"); |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
+ scoped_refptr<media::VideoFrame> video_frame; |
+ { |
+ base::AutoLock auto_lock(current_frame_lock_); |
+ video_frame = current_frame_; |
+ } |
+ |
+ if (!video_frame.get() || video_frame->HasTextures() || |
+ media::VideoFrame::NumPlanes(video_frame->format()) != 1) { |
+ return false; |
+ } |
+ |
+ // TODO(dshwang): need more elegant way to convert WebGraphicsContext3D to |
+ // GLES2Interface. |
+ gpu::gles2::GLES2Interface* gl = |
+ static_cast<gpu_blink::WebGraphicsContext3DImpl*>(web_graphics_context) |
+ ->GetGLInterface(); |
+ media::SkCanvasVideoRenderer::CopySubVideoFrameSingleTextureToGLTexture( |
+ gl, video_frame.get(), target, texture, level, xoffset, yoffset, |
+ premultiply_alpha, flip_y); |
return true; |
} |