Index: media/blink/skcanvas_video_renderer.cc |
diff --git a/media/blink/skcanvas_video_renderer.cc b/media/blink/skcanvas_video_renderer.cc |
index 132e0da7c6e521257c605cbeadb1adfd03a2ef8a..5766dd3fc0b50816ab1b335a603ce8ccbb884b51 100644 |
--- a/media/blink/skcanvas_video_renderer.cc |
+++ b/media/blink/skcanvas_video_renderer.cc |
@@ -161,8 +161,11 @@ skia::RefPtr<SkImage> NewSkImageFromVideoFrameNative( |
DCHECK(source_texture); |
gl->BindTexture(GL_TEXTURE_2D, source_texture); |
SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture( |
- gl, video_frame, source_texture, GL_RGBA, GL_UNSIGNED_BYTE, true, |
- false); |
+ gl, video_frame, |
+ SkCanvasVideoRenderer::CopyFrameSingleTextureParams( |
+ SkCanvasVideoRenderer::CopyFrameSingleTextureParams::FullCopy, |
+ GL_TEXTURE_2D, source_texture, GL_RGBA, GL_UNSIGNED_BYTE, 0, 0, 0, |
+ true, false)); |
} else { |
gl->WaitSyncPointCHROMIUM(mailbox_holder.sync_point); |
source_texture = gl->CreateAndConsumeTextureCHROMIUM( |
@@ -546,11 +549,7 @@ void SkCanvasVideoRenderer::ConvertVideoFrameToRGBPixels( |
void SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture( |
gpu::gles2::GLES2Interface* gl, |
VideoFrame* video_frame, |
- unsigned int texture, |
- unsigned int internal_format, |
- unsigned int type, |
- bool premultiply_alpha, |
- bool flip_y) { |
+ const CopyFrameSingleTextureParams& params) { |
DCHECK(video_frame); |
DCHECK(video_frame->HasTextures()); |
DCHECK_EQ(1u, VideoFrame::NumPlanes(video_frame->format())); |
@@ -571,9 +570,20 @@ void SkCanvasVideoRenderer::CopyVideoFrameSingleTextureToGLTexture( |
// value down to get the expected result. |
// "flip_y == true" means to reverse the video orientation while |
// "flip_y == false" means to keep the intrinsic orientation. |
- gl->CopyTextureCHROMIUM(GL_TEXTURE_2D, source_texture, texture, |
- internal_format, type, |
- flip_y, premultiply_alpha, false); |
+ if (params.copy_type == CopyFrameSingleTextureParams::FullCopy) { |
+ DCHECK(!params.xoffset && !params.yoffset); |
+ gl->CopyTextureCHROMIUM(params.target, source_texture, params.texture, |
+ params.internal_format, params.type, params.flip_y, |
+ params.premultiply_alpha, false); |
+ } else { |
+ DCHECK_EQ(static_cast<unsigned int>(GL_FALSE), params.internal_format); |
+ DCHECK_EQ(static_cast<unsigned int>(GL_FALSE), params.type); |
+ gl->CopySubTextureCHROMIUM(params.target, source_texture, params.texture, |
+ params.xoffset, params.yoffset, 0, 0, |
+ video_frame->natural_size().width(), |
+ video_frame->natural_size().height(), |
+ params.flip_y, params.premultiply_alpha, false); |
+ } |
gl->DeleteTextures(1, &source_texture); |
gl->Flush(); |