From 55005b2f5b29b42b1d53b865eee810a12a62756f Mon Sep 17 00:00:00 2001 From: Martin Stransky Date: Thu, 30 Jul 2020 18:52:40 +0000 Subject: [PATCH] Bug 1655747 [Linux] Implement SurfaceFormat::YUV format for DMABUFTextureHostOGL, r=sotaro Differential Revision: https://phabricator.services.mozilla.com/D85270 --- gfx/layers/opengl/DMABUFTextureHostOGL.cpp | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/gfx/layers/opengl/DMABUFTextureHostOGL.cpp b/gfx/layers/opengl/DMABUFTextureHostOGL.cpp index 37b39bde2965..4466d3d03407 100644 --- a/gfx/layers/opengl/DMABUFTextureHostOGL.cpp +++ b/gfx/layers/opengl/DMABUFTextureHostOGL.cpp @@ -162,6 +162,20 @@ void DMABUFTextureHostOGL::PushResourceUpdates( (aResources.*method)(aImageKeys[1], descriptor1, aExtID, imageType, 1); break; } + case gfx::SurfaceFormat::YUV: { + MOZ_ASSERT(aImageKeys.length() == 3); + MOZ_ASSERT(mSurface->GetTextureCount() == 3); + wr::ImageDescriptor descriptor0( + gfx::IntSize(mSurface->GetWidth(0), mSurface->GetHeight(0)), + gfx::SurfaceFormat::A8); + wr::ImageDescriptor descriptor1( + gfx::IntSize(mSurface->GetWidth(1), mSurface->GetHeight(1)), + gfx::SurfaceFormat::A8); + (aResources.*method)(aImageKeys[0], descriptor0, aExtID, imageType, 0); + (aResources.*method)(aImageKeys[1], descriptor1, aExtID, imageType, 1); + (aResources.*method)(aImageKeys[2], descriptor1, aExtID, imageType, 2); + break; + } default: { MOZ_ASSERT_UNREACHABLE("unexpected to be called"); } @@ -197,6 +211,18 @@ void DMABUFTextureHostOGL::PushDisplayItems( aPreferCompositorSurface); break; } + case gfx::SurfaceFormat::YUV: { + MOZ_ASSERT(aImageKeys.length() == 3); + MOZ_ASSERT(mSurface->GetTextureCount() == 3); + // Those images can only be generated at present by the VAAPI vp8 decoder + // which only supports 8 bits color depth. + aBuilder.PushYCbCrPlanarImage( + aBounds, aClip, true, aImageKeys[0], aImageKeys[1], aImageKeys[2], + wr::ColorDepth::Color8, wr::ToWrYuvColorSpace(GetYUVColorSpace()), + wr::ToWrColorRange(GetColorRange()), aFilter, + aPreferCompositorSurface); + break; + } default: { MOZ_ASSERT_UNREACHABLE("unexpected to be called"); }