| Index: cc/output/gl_renderer.cc
|
| diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
|
| index 0bb2d6966970448c181df25965fdef3e3753383f..0a3e68ed655f89354e73efeefb2ff8fd6966ff88 100644
|
| --- a/cc/output/gl_renderer.cc
|
| +++ b/cc/output/gl_renderer.cc
|
| @@ -2206,24 +2206,25 @@ void GLRenderer::DrawYUVVideoQuad(const DrawingFrame* frame,
|
| base::FeatureList::IsEnabled(media::kVideoColorManagement);
|
| DCHECK(!(use_nv12 && use_alpha_plane));
|
|
|
| + // GL_LINEAR cannot be used because |u_plane| is sub-sampled.
|
| ResourceProvider::ScopedSamplerGL y_plane_lock(
|
| - resource_provider_, quad->y_plane_resource_id(), GL_TEXTURE1, GL_LINEAR);
|
| + resource_provider_, quad->y_plane_resource_id(), GL_TEXTURE1, GL_NEAREST);
|
| ResourceProvider::ScopedSamplerGL u_plane_lock(
|
| - resource_provider_, quad->u_plane_resource_id(), GL_TEXTURE2, GL_LINEAR);
|
| + resource_provider_, quad->u_plane_resource_id(), GL_TEXTURE2, GL_NEAREST);
|
| DCHECK_EQ(y_plane_lock.target(), u_plane_lock.target());
|
| // TODO(jbauman): Use base::Optional when available.
|
| std::unique_ptr<ResourceProvider::ScopedSamplerGL> v_plane_lock;
|
| if (!use_nv12) {
|
| v_plane_lock.reset(new ResourceProvider::ScopedSamplerGL(
|
| resource_provider_, quad->v_plane_resource_id(), GL_TEXTURE3,
|
| - GL_LINEAR));
|
| + GL_NEAREST));
|
| DCHECK_EQ(y_plane_lock.target(), v_plane_lock->target());
|
| }
|
| std::unique_ptr<ResourceProvider::ScopedSamplerGL> a_plane_lock;
|
| if (use_alpha_plane) {
|
| a_plane_lock.reset(new ResourceProvider::ScopedSamplerGL(
|
| resource_provider_, quad->a_plane_resource_id(), GL_TEXTURE4,
|
| - GL_LINEAR));
|
| + GL_NEAREST));
|
| DCHECK_EQ(y_plane_lock.target(), a_plane_lock->target());
|
| }
|
|
|
| @@ -2235,6 +2236,8 @@ void GLRenderer::DrawYUVVideoQuad(const DrawingFrame* frame,
|
| int ya_tex_offset_location = -1;
|
| int uv_tex_scale_location = -1;
|
| int uv_tex_offset_location = -1;
|
| + int ya_size_location = -1;
|
| + int uv_subsampling_factor_location = -1;
|
| int ya_clamp_rect_location = -1;
|
| int uv_clamp_rect_location = -1;
|
| int y_texture_location = -1;
|
| @@ -2265,6 +2268,9 @@ void GLRenderer::DrawYUVVideoQuad(const DrawingFrame* frame,
|
| lut_texture_location = program->fragment_shader().lut_texture_location();
|
| yuv_matrix_location = program->fragment_shader().yuv_matrix_location();
|
| yuv_adj_location = program->fragment_shader().yuv_adj_location();
|
| + ya_size_location = program->fragment_shader().ya_size_location();
|
| + uv_subsampling_factor_location =
|
| + program->fragment_shader().uv_subsampling_factor_location();
|
| ya_clamp_rect_location = program->fragment_shader().ya_clamp_rect_location();
|
| uv_clamp_rect_location = program->fragment_shader().uv_clamp_rect_location();
|
| alpha_location = program->fragment_shader().alpha_location();
|
| @@ -2276,12 +2282,21 @@ void GLRenderer::DrawYUVVideoQuad(const DrawingFrame* frame,
|
| gfx::SizeF ya_tex_scale(1.0f, 1.0f);
|
| gfx::SizeF uv_tex_scale(1.0f, 1.0f);
|
| if (sampler != SAMPLER_TYPE_2D_RECT) {
|
| + DCHECK_NE(-1, ya_size_location);
|
| + gl_->Uniform2f(ya_size_location, quad->ya_tex_size.width(),
|
| + quad->ya_tex_size.height());
|
| +
|
| DCHECK(!quad->ya_tex_size.IsEmpty());
|
| DCHECK(!quad->uv_tex_size.IsEmpty());
|
| ya_tex_scale = gfx::SizeF(1.0f / quad->ya_tex_size.width(),
|
| 1.0f / quad->ya_tex_size.height());
|
| uv_tex_scale = gfx::SizeF(1.0f / quad->uv_tex_size.width(),
|
| 1.0f / quad->uv_tex_size.height());
|
| + } else {
|
| + DCHECK_NE(-1, uv_subsampling_factor_location);
|
| + gl_->Uniform2f(uv_subsampling_factor_location,
|
| + quad->uv_tex_size.width() / quad->ya_tex_size.width(),
|
| + quad->uv_tex_size.height() / quad->ya_tex_size.height());
|
| }
|
|
|
| float ya_vertex_tex_translate_x =
|
| @@ -3632,8 +3647,8 @@ const GLRenderer::VideoYUVProgram* GLRenderer::GetVideoYUVProgram(
|
| [use_color_lut];
|
| if (!program->initialized()) {
|
| TRACE_EVENT0("cc", "GLRenderer::videoYUVProgram::initialize");
|
| - program->mutable_fragment_shader()->SetFeatures(use_alpha_plane, use_nv12,
|
| - use_color_lut);
|
| + program->mutable_fragment_shader()->SetFeatures(sampler, use_alpha_plane,
|
| + use_nv12, use_color_lut);
|
| program->Initialize(output_surface_->context_provider(), precision,
|
| sampler);
|
| }
|
|
|