Index: cc/output/gl_renderer.cc |
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc |
index 2b20d25d39f18f17a362c4b0d88c4efa9d506731..57e3f330075a1f296b92e69822869e1d36904e2a 100644 |
--- a/cc/output/gl_renderer.cc |
+++ b/cc/output/gl_renderer.cc |
@@ -2192,14 +2192,23 @@ void GLRenderer::DrawStreamVideoQuad(const DrawingFrame* frame, |
SetUseProgram(program->program()); |
ToGLMatrix(&gl_matrix[0], quad->matrix); |
- gl_->UniformMatrix4fv(program->vertex_shader().tex_matrix_location(), 1, |
- false, gl_matrix); |
ResourceProvider::ScopedReadLockGL lock(resource_provider_, |
quad->resource_id()); |
+ |
DCHECK_EQ(GL_TEXTURE0, GetActiveTextureUnit(gl_)); |
gl_->BindTexture(GL_TEXTURE_EXTERNAL_OES, lock.texture_id()); |
+ // TODO(liberato): stream_texture_android should stop sending |gl_matrix| to |
+ // the video frame provider with this change (and to us), but it should |
+ // start reporting the current matrix via |
+ // GLStreamTextureImage::GetTextureMatrix. Until then, though, this will use |
+ // the matrix that we provide to it, unless the GLStreamTextureImage |
+ // overrides it. This lets it also work with AVDACodecImage, which provides |
+ // the correct custom matrix and supplies a default one to us. |
+ gl_->UniformMatrix4fvStreamTextureMatrixCHROMIUM( |
+ program->vertex_shader().tex_matrix_location(), false, gl_matrix); |
+ |
gl_->Uniform1i(program->fragment_shader().sampler_location(), 0); |
SetShaderOpacity(quad->shared_quad_state->opacity, |