haikuwebkit/LayoutTests/media/video-with-alpha-expected.html

23 lines
350 B
HTML
Raw Permalink Normal View History

[GStreamer] Incorrect rendering of VP9 with transparency https://bugs.webkit.org/show_bug.cgi?id=225961 Reviewed by Žan Doberšek. Source/WebCore: Fix the rendering of videos with transparency. This is done both AC and non AC modes and with and without GSTREAMER_GL enabled. On AC mode and using GSTREAMER_GL, a new option is added to TextureMapperGL and TextureMapperShaderProgram to support premultiplying the components of a pixel. This is required because GStreamer uses straight alpha, and we need it premultiplied in order to perform the correct blending blending of the video frames. Then we use that new option to render video frames. This new option is also used when copying the video frame into an external texture if premultiplyAlpha is requested. On non AC mode, or when GStreamer-gl is disabled, add support to ImageGStreamerCairo to premultiply the alpha of the video frame before creating the cairo surface to paint, and pass the appropriate composite operator when drawing with alpha. Test: media/video-with-alpha.html * platform/graphics/gstreamer/GStreamerVideoFrameHolder.cpp: (WebCore::GstVideoFrameHolder::GstVideoFrameHolder): * platform/graphics/gstreamer/ImageGStreamerCairo.cpp: (WebCore::ImageGStreamer::ImageGStreamer): * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: (WebCore::MediaPlayerPrivateGStreamer::pushTextureToCompositor): (WebCore::MediaPlayerPrivateGStreamer::paint): update the caps of the conversion to make them match the format expected by cairo, so we can avoid a component swap. (WebCore::MediaPlayerPrivateGStreamer::copyVideoTextureToPlatformTexture): * platform/graphics/gstreamer/VideoTextureCopierGStreamer.cpp: (WebCore::VideoTextureCopierGStreamer::copyVideoTextureToPlatformTexture): * platform/graphics/gstreamer/VideoTextureCopierGStreamer.h: * platform/graphics/texmap/TextureMapperGL.cpp: (WebCore::TextureMapperGL::drawTexture): * platform/graphics/texmap/TextureMapperGL.h: * platform/graphics/texmap/TextureMapperShaderProgram.cpp: (WebCore::TextureMapperShaderProgram::create): * platform/graphics/texmap/TextureMapperShaderProgram.h: LayoutTests: Add a test for the playback of transparent videos. This is initially skipped because it's not supported on Apple ports and won't be working on GTK and WPE until GStreamer is bumped to 1.20. * TestExpectations: * media/content/video-with-alpha.webm: Added. * media/video-with-alpha-expected.html: Added. * media/video-with-alpha.html: Added. Canonical link: https://commits.webkit.org/238313@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@278276 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-05-31 13:33:16 +00:00
<!DOCTYPE html>
<html>
<head>
<title>video-with-alpha</title>
<style>
body {
background: white;
}
#spacer {
position: absolute;
left: 200px;
top: 0px;
width: 200px;
height: 200px;
background-color: red;
}
</style>
</head>
<body>
<div id="spacer"></div>
</body>
</html>