Title: [294235] trunk/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm
- Revision
- 294235
- Author
- commit-qu...@webkit.org
- Date
- 2022-05-16 09:12:23 -0700 (Mon, 16 May 2022)
Log Message
Canvas generated transparent pixels are not well handled by LocalSampleBufferDisplayLayer
https://bugs.webkit.org/show_bug.cgi?id=230621
rdar://problem/83668394
Patch by Youenn Fablet <youe...@gmail.com> on 2022-05-16
Reviewed by Eric Carlson.
Remove black color for root and display layer.
When display layer is hidden but root layer is visible, set root layer background color to black to keep existing behavior.
This allows to render transparent video frames without a black background.
Covered by https://jsfiddle.net/nfu7oL60/ (make sure to switch between tabs after clicking start).
Also covered by https://webrtc.github.io/samples/src/content/peerconnection/pc1/ and muting/unmuting the camera.
* Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm:
(WebCore::LocalSampleBufferDisplayLayer::initialize):
(WebCore::LocalSampleBufferDisplayLayer::updateDisplayMode):
Canonical link: https://commits.webkit.org/250593@main
Modified Paths
Diff
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm (294234 => 294235)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm 2022-05-16 15:52:10 UTC (rev 294234)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/LocalSampleBufferDisplayLayer.mm 2022-05-16 16:12:23 UTC (rev 294235)
@@ -164,7 +164,6 @@
void LocalSampleBufferDisplayLayer::initialize(bool hideRootLayer, IntSize size, CompletionHandler<void(bool didSucceed)>&& callback)
{
- m_sampleBufferDisplayLayer.get().backgroundColor = cachedCGColor(Color::black).get();
m_sampleBufferDisplayLayer.get().anchorPoint = { .5, .5 };
m_sampleBufferDisplayLayer.get().needsDisplayOnBoundsChange = YES;
m_sampleBufferDisplayLayer.get().videoGravity = AVLayerVideoGravityResizeAspectFill;
@@ -172,7 +171,6 @@
m_rootLayer = adoptNS([[CALayer alloc] init]);
m_rootLayer.get().hidden = hideRootLayer;
- m_rootLayer.get().backgroundColor = cachedCGColor(Color::black).get();
m_rootLayer.get().needsDisplayOnBoundsChange = YES;
m_rootLayer.get().bounds = CGRectMake(0, 0, size.width(), size.height());
@@ -241,6 +239,10 @@
return;
runWithoutAnimations([&] {
+ if (hideDisplayLayer && !hideRootLayer)
+ m_rootLayer.get().backgroundColor = cachedCGColor(Color::black).get();
+ else
+ m_rootLayer.get().backgroundColor = nil;
m_sampleBufferDisplayLayer.get().hidden = hideDisplayLayer;
m_rootLayer.get().hidden = hideRootLayer;
});
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes