Title: [291326] trunk/Source
Revision
291326
Author
eric.carl...@apple.com
Date
2022-03-15 20:21:32 -0700 (Tue, 15 Mar 2022)

Log Message

Video poster disappears prematurely on play, leaving transparent video element.
https://bugs.webkit.org/show_bug.cgi?id=226960
<rdar://problem/79315114>

Reviewed by Jer Noble.

Source/WebCore:

If a media file has an enabled video track, don't advance readyState to
HAVE_ENOUGH_DATA until we have the first frame so we won't hide the poster image
until AVFoundation has something to render.

Tested manually.

* html/HTMLVideoElement.cpp:
(WebCore::HTMLVideoElement::mediaPlayerFirstVideoFrameAvailable): Always log.

* platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
(WebCore::MediaPlayerPrivateAVFoundation::updateStates): Move the test for the
first video frame above the player item status check. If a file has a video track,
don't advance to HAVE_ENOUGH_DATA unless we have the first video frame.

* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Clear m_cachedHasEnabledVideo.
(WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer): Remove unneeded
local variable.
(WebCore::MediaPlayerPrivateAVFoundationObjC::platformSetVisible): Minro cleanup.
(WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Set `hasVideo` if
AVPlayerItem.hasEnabledVideo is true, because it remains stable while AVAssetTracks
sometimes disappear and reappear.
(WebCore::MediaPlayerPrivateAVFoundationObjC::firstFrameAvailableDidChange): Add logging.
(WebCore::MediaPlayerPrivateAVFoundationObjC::hasEnabledAudioDidChange): Ditto
(WebCore::MediaPlayerPrivateAVFoundationObjC::hasEnabledVideoDidChange): New, cache
AVPlayerItem.hasEnabledVideo.
(WebCore::itemKVOProperties):
(-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Respond
to @"hasEnabledVideo".
* platform/graphics/avfoundation/objc/VideoLayerManagerObjC.h:

Source/WebKit:

* WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
(WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote): Always log.
(WebKit::MediaPlayerPrivateRemote::~MediaPlayerPrivateRemote): Ditto.
(WebKit::MediaPlayerPrivateRemote::prepareForPlayback): Pass the player's content
rect box to createVideoLayerRemote so it can be sized correctly even before it
becomes visible.
(WebKit::MediaPlayerPrivateRemote::firstVideoFrameAvailable): Always log.
(WebKit::MediaPlayerPrivateRemote::renderingModeChanged): Ditto.
* WebProcess/GPU/media/VideoLayerRemote.h:

* WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.mm:
(WebKit::createVideoLayerRemote): Set the new layer's frame so its children will
be positioned correctly when the are made visible.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (291325 => 291326)


--- trunk/Source/WebCore/ChangeLog	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebCore/ChangeLog	2022-03-16 03:21:32 UTC (rev 291326)
@@ -1,3 +1,43 @@
+2022-03-15  Eric Carlson  <eric.carl...@apple.com>
+
+        Video poster disappears prematurely on play, leaving transparent video element.
+        https://bugs.webkit.org/show_bug.cgi?id=226960
+        <rdar://problem/79315114>
+
+        Reviewed by Jer Noble.
+
+        If a media file has an enabled video track, don't advance readyState to
+        HAVE_ENOUGH_DATA until we have the first frame so we won't hide the poster image
+        until AVFoundation has something to render.
+
+        Tested manually.
+
+        * html/HTMLVideoElement.cpp:
+        (WebCore::HTMLVideoElement::mediaPlayerFirstVideoFrameAvailable): Always log.
+
+        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
+        (WebCore::MediaPlayerPrivateAVFoundation::updateStates): Move the test for the
+        first video frame above the player item status check. If a file has a video track,
+        don't advance to HAVE_ENOUGH_DATA unless we have the first video frame.
+
+        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
+        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
+        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Clear m_cachedHasEnabledVideo.
+        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer): Remove unneeded
+        local variable.
+        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformSetVisible): Minro cleanup.
+        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Set `hasVideo` if
+        AVPlayerItem.hasEnabledVideo is true, because it remains stable while AVAssetTracks
+        sometimes disappear and reappear.
+        (WebCore::MediaPlayerPrivateAVFoundationObjC::firstFrameAvailableDidChange): Add logging.
+        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasEnabledAudioDidChange): Ditto
+        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasEnabledVideoDidChange): New, cache
+        AVPlayerItem.hasEnabledVideo.
+        (WebCore::itemKVOProperties):
+        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): Respond
+        to @"hasEnabledVideo".
+        * platform/graphics/avfoundation/objc/VideoLayerManagerObjC.h:
+
 2022-03-15  Per Arne Vollan  <pvol...@apple.com>
 
         Crash under HTMLDocumentParser::didBeginYieldingParser()

Modified: trunk/Source/WebCore/html/HTMLVideoElement.cpp (291325 => 291326)


--- trunk/Source/WebCore/html/HTMLVideoElement.cpp	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebCore/html/HTMLVideoElement.cpp	2022-03-16 03:21:32 UTC (rev 291326)
@@ -271,7 +271,7 @@
 
 void HTMLVideoElement::mediaPlayerFirstVideoFrameAvailable()
 {
-    INFO_LOG(LOGIDENTIFIER, "m_showPoster = ", showPosterFlag());
+    ALWAYS_LOG(LOGIDENTIFIER, "m_showPoster = ", showPosterFlag());
 
     if (showPosterFlag())
         return;

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp (291325 => 291326)


--- trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp	2022-03-16 03:21:32 UTC (rev 291326)
@@ -505,6 +505,7 @@
 
     MediaPlayer::NetworkState newNetworkState = m_networkState;
     MediaPlayer::ReadyState newReadyState = m_readyState;
+    bool firstVideoFrameBecomeAvailable = false;
 
     if (m_loadingMetadata)
         newNetworkState = MediaPlayer::NetworkState::Loading;
@@ -533,7 +534,14 @@
                 newNetworkState = MediaPlayer::NetworkState::FormatError;
             }
         }
-        
+
+        if (!hasAvailableVideoFrame())
+            m_haveReportedFirstVideoFrame = false;
+        else if (!m_haveReportedFirstVideoFrame && m_cachedHasVideo) {
+            m_haveReportedFirstVideoFrame = true;
+            firstVideoFrameBecomeAvailable = true;
+        }
+
         if (assetStatus >= MediaPlayerAVAssetStatusLoaded && itemStatus > MediaPlayerAVPlayerItemStatusUnknown) {
             switch (itemStatus) {
             case MediaPlayerAVPlayerItemStatusDoesNotExist:
@@ -544,13 +552,13 @@
             case MediaPlayerAVPlayerItemStatusPlaybackLikelyToKeepUp:
             case MediaPlayerAVPlayerItemStatusPlaybackBufferFull:
                 // If the status becomes PlaybackBufferFull, loading stops and the status will not
-                // progress to LikelyToKeepUp. Set the readyState to  HAVE_ENOUGH_DATA, on the
+                // progress to LikelyToKeepUp. Set the readyState to HAVE_ENOUGH_DATA, on the
                 // presumption that if the playback buffer is full, playback will probably not stall.
                 newReadyState = MediaPlayer::ReadyState::HaveEnoughData;
                 break;
 
             case MediaPlayerAVPlayerItemStatusReadyToPlay:
-                if (m_readyState != MediaPlayer::ReadyState::HaveEnoughData && maxTimeLoaded() > currentMediaTime())
+                if (m_readyState != MediaPlayer::ReadyState::HaveEnoughData && (!m_cachedHasVideo || m_haveReportedFirstVideoFrame) && maxTimeLoaded() > currentMediaTime())
                     newReadyState = MediaPlayer::ReadyState::HaveFutureData;
                 break;
 
@@ -571,13 +579,11 @@
     if (isReadyForVideoSetup() && currentRenderingMode() != preferredRenderingMode())
         setUpVideoRendering();
 
-    if (!m_haveReportedFirstVideoFrame && m_cachedHasVideo && hasAvailableVideoFrame()) {
+    if (firstVideoFrameBecomeAvailable) {
         if (m_readyState < MediaPlayer::ReadyState::HaveCurrentData)
             newReadyState = MediaPlayer::ReadyState::HaveCurrentData;
-        m_haveReportedFirstVideoFrame = true;
         m_player->firstVideoFrameAvailable();
-    } else if (!hasAvailableVideoFrame())
-        m_haveReportedFirstVideoFrame = false;
+    }
 
     if (m_networkState != newNetworkState)
         ALWAYS_LOG(LOGIDENTIFIER, "entered with networkState ", m_networkState, ", exiting with ", newNetworkState);

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h (291325 => 291326)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h	2022-03-16 03:21:32 UTC (rev 291326)
@@ -107,6 +107,7 @@
     void seekableTimeRangesDidChange(RetainPtr<NSArray>&&, NSTimeInterval, NSTimeInterval);
     void tracksDidChange(const RetainPtr<NSArray>&);
     void hasEnabledAudioDidChange(bool);
+    void hasEnabledVideoDidChange(bool);
     void presentationSizeDidChange(FloatSize);
     void durationDidChange(const MediaTime&);
     void rateDidChange(double);
@@ -448,6 +449,7 @@
     bool m_cachedBufferEmpty { false };
     bool m_cachedBufferFull { false };
     bool m_cachedHasEnabledAudio { false };
+    bool m_cachedHasEnabledVideo { false };
     bool m_cachedIsReadyForDisplay { false };
     bool m_haveBeenAskedToCreateLayer { false };
     bool m_cachedCanPlayFastForward { false };

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (291325 => 291326)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm	2022-03-16 03:21:32 UTC (rev 291326)
@@ -540,6 +540,7 @@
     m_cachedSeekableRanges = nullptr;
     m_cachedLoadedRanges = nullptr;
     m_cachedHasEnabledAudio = false;
+    m_cachedHasEnabledVideo = false;
     m_cachedPresentationSize = FloatSize();
     m_cachedDuration = MediaTime::zeroTime();
 
@@ -639,11 +640,8 @@
     [m_videoLayer addObserver:m_objcObserver.get() forKeyPath:@"readyForDisplay" options:NSKeyValueObservingOptionNew context:(void *)MediaPlayerAVFoundationObservationContextAVPlayerLayer];
     updateVideoLayerGravity();
     [m_videoLayer setContentsScale:player()->playerContentsScale()];
-    IntSize defaultSize = snappedIntRect(player()->playerContentBoxRect()).size();
-    ALWAYS_LOG(LOGIDENTIFIER);
+    m_videoLayerManager->setVideoLayer(m_videoLayer.get(), snappedIntRect(player()->playerContentBoxRect()).size());
 
-    m_videoLayerManager->setVideoLayer(m_videoLayer.get(), defaultSize);
-
 #if PLATFORM(IOS_FAMILY) && !PLATFORM(WATCHOS) && !PLATFORM(APPLETV)
     if ([m_videoLayer respondsToSelector:@selector(setPIPModeEnabled:)])
         [m_videoLayer setPIPModeEnabled:(player()->fullscreenMode() & MediaPlayer::VideoFullscreenModePictureInPicture)];
@@ -1411,10 +1409,12 @@
 
 void MediaPlayerPrivateAVFoundationObjC::platformSetVisible(bool isVisible)
 {
+    if (!m_videoLayer)
+        return;
+
     [CATransaction begin];
     [CATransaction setDisableActions:YES];    
-    if (m_videoLayer)
-        [m_videoLayer setHidden:!isVisible];
+    [m_videoLayer setHidden:!isVisible];
     [CATransaction commit];
 }
     
@@ -2323,10 +2323,12 @@
         // whethere there is any audio present.
         hasAudio |= m_cachedHasEnabledAudio;
 
-        // Always says we have video if the AVPlayerLayer is ready for diaplay to work around
+        // Always says we have video if the AVPlayerLayer is ready for display to work around
         // an AVFoundation bug which causes it to sometimes claim a track is disabled even
-        // when it is not.
-        setHasVideo(hasVideo || m_cachedIsReadyForDisplay);
+        // when it is not. Also say we have video if AVPlayerItem's `hasEnabledVideo` is true,
+        // as an AVAssetTrack will sometimes disappear briefly and reappear when `hasEnabledVideo`
+        // doesn't change.
+        setHasVideo(hasVideo || m_cachedIsReadyForDisplay || m_cachedHasEnabledVideo);
 
         setHasAudio(hasAudio);
 #if ENABLE(DATACUE_VALUE)
@@ -3459,6 +3461,8 @@
 
 void MediaPlayerPrivateAVFoundationObjC::firstFrameAvailableDidChange(bool isReady)
 {
+    ALWAYS_LOG(LOGIDENTIFIER);
+
     m_cachedIsReadyForDisplay = isReady;
     if (!hasVideo() && isReady)
         tracksChanged();
@@ -3653,6 +3657,7 @@
 
 void MediaPlayerPrivateAVFoundationObjC::hasEnabledAudioDidChange(bool hasEnabledAudio)
 {
+    ALWAYS_LOG(LOGIDENTIFIER, hasEnabledAudio);
     m_cachedHasEnabledAudio = hasEnabledAudio;
 
     tracksChanged();
@@ -3659,6 +3664,15 @@
     updateStates();
 }
 
+void MediaPlayerPrivateAVFoundationObjC::hasEnabledVideoDidChange(bool hasEnabledVideo)
+{
+    ALWAYS_LOG(LOGIDENTIFIER, hasEnabledVideo);
+    m_cachedHasEnabledVideo = hasEnabledVideo;
+
+    tracksChanged();
+    updateStates();
+}
+
 void MediaPlayerPrivateAVFoundationObjC::presentationSizeDidChange(FloatSize size)
 {
     m_cachedPresentationSize = size;
@@ -3856,6 +3870,7 @@
         @"playbackBufferEmpty",
         @"duration",
         @"hasEnabledAudio",
+        @"hasEnabledVideo",
         @"canPlayFastForward",
         @"canPlayFastReverse",
     nil];
@@ -4018,6 +4033,8 @@
                 shouldLogValue = false;
             } else if ([keyPath isEqualToString:@"hasEnabledAudio"])
                 player.hasEnabledAudioDidChange([newValue boolValue]);
+            else if ([keyPath isEqualToString:@"hasEnabledVideo"])
+                player.hasEnabledVideoDidChange([newValue boolValue]);
             else if ([keyPath isEqualToString:@"presentationSize"])
                 player.presentationSizeDidChange(FloatSize([newValue sizeValue]));
             else if ([keyPath isEqualToString:@"duration"])

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/VideoLayerManagerObjC.h (291325 => 291326)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/VideoLayerManagerObjC.h	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/VideoLayerManagerObjC.h	2022-03-16 03:21:32 UTC (rev 291326)
@@ -59,7 +59,7 @@
 
     WEBCORE_EXPORT PlatformLayer* videoInlineLayer() const final;
 
-    WEBCORE_EXPORT void setVideoLayer(PlatformLayer*, IntSize contentSize) final;
+    WEBCORE_EXPORT void setVideoLayer(PlatformLayer*, IntSize) final;
     WEBCORE_EXPORT void didDestroyVideoLayer() final;
 
 #if ENABLE(VIDEO_PRESENTATION_MODE)

Modified: trunk/Source/WebKit/ChangeLog (291325 => 291326)


--- trunk/Source/WebKit/ChangeLog	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebKit/ChangeLog	2022-03-16 03:21:32 UTC (rev 291326)
@@ -1,3 +1,25 @@
+2022-03-15  Eric Carlson  <eric.carl...@apple.com>
+
+        Video poster disappears prematurely on play, leaving transparent video element.
+        https://bugs.webkit.org/show_bug.cgi?id=226960
+        <rdar://problem/79315114>
+
+        Reviewed by Jer Noble.
+
+        * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
+        (WebKit::MediaPlayerPrivateRemote::MediaPlayerPrivateRemote): Always log.
+        (WebKit::MediaPlayerPrivateRemote::~MediaPlayerPrivateRemote): Ditto.
+        (WebKit::MediaPlayerPrivateRemote::prepareForPlayback): Pass the player's content
+        rect box to createVideoLayerRemote so it can be sized correctly even before it
+        becomes visible.
+        (WebKit::MediaPlayerPrivateRemote::firstVideoFrameAvailable): Always log.
+        (WebKit::MediaPlayerPrivateRemote::renderingModeChanged): Ditto.
+        * WebProcess/GPU/media/VideoLayerRemote.h:
+
+        * WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.mm:
+        (WebKit::createVideoLayerRemote): Set the new layer's frame so its children will
+        be positioned correctly when the are made visible.
+
 2022-03-15  Myles C. Maxfield  <mmaxfi...@apple.com>
 
         [WebGPU] Migrate from WTF::Function to WTF::CompletionHandler

Modified: trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp (291325 => 291326)


--- trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp	2022-03-16 03:21:32 UTC (rev 291326)
@@ -122,7 +122,7 @@
     , m_id(playerIdentifier)
     , m_documentSecurityOrigin(player->documentSecurityOrigin())
 {
-    INFO_LOG(LOGIDENTIFIER);
+    ALWAYS_LOG(LOGIDENTIFIER);
 
     acceleratedRenderingStateChanged();
 }
@@ -129,7 +129,7 @@
 
 MediaPlayerPrivateRemote::~MediaPlayerPrivateRemote()
 {
-    INFO_LOG(LOGIDENTIFIER);
+    ALWAYS_LOG(LOGIDENTIFIER);
 #if PLATFORM(COCOA)
     m_videoLayerManager->didDestroyVideoLayer();
 #endif
@@ -161,9 +161,10 @@
         if (!player)
             return;
 
-        m_videoLayer = createVideoLayerRemote(this, inlineLayerHostingContextId.value(), m_videoFullscreenGravity);
+        auto contentBox = snappedIntRect(player->playerContentBoxRect()).size();
+        m_videoLayer = createVideoLayerRemote(this, inlineLayerHostingContextId.value(), m_videoFullscreenGravity, contentBox);
 #if PLATFORM(COCOA)
-        m_videoLayerManager->setVideoLayer(m_videoLayer.get(), snappedIntRect(player->playerContentBoxRect()).size());
+        m_videoLayerManager->setVideoLayer(m_videoLayer.get(), contentBox);
 #endif
     }, m_id);
 }
@@ -442,7 +443,7 @@
 
 void MediaPlayerPrivateRemote::firstVideoFrameAvailable()
 {
-    INFO_LOG(LOGIDENTIFIER);
+    ALWAYS_LOG(LOGIDENTIFIER);
     if (RefPtr player = m_player.get())
         player->firstVideoFrameAvailable();
 }
@@ -449,7 +450,7 @@
 
 void MediaPlayerPrivateRemote::renderingModeChanged()
 {
-    INFO_LOG(LOGIDENTIFIER);
+    ALWAYS_LOG(LOGIDENTIFIER);
     if (RefPtr player = m_player.get())
         player->renderingModeChanged();
 }

Modified: trunk/Source/WebKit/WebProcess/GPU/media/VideoLayerRemote.h (291325 => 291326)


--- trunk/Source/WebKit/WebProcess/GPU/media/VideoLayerRemote.h	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebKit/WebProcess/GPU/media/VideoLayerRemote.h	2022-03-16 03:21:32 UTC (rev 291326)
@@ -28,6 +28,7 @@
 #if ENABLE(GPU_PROCESS)
 
 #include "LayerHostingContext.h"
+#include <WebCore/IntSize.h>
 #include <WebCore/MediaPlayerEnums.h>
 #include <WebCore/PlatformLayer.h>
 
@@ -35,7 +36,7 @@
 
 class MediaPlayerPrivateRemote;
 
-PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote*, LayerHostingContextID, WebCore::MediaPlayerEnums::VideoGravity);
+PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote*, LayerHostingContextID, WebCore::MediaPlayerEnums::VideoGravity, WebCore::IntSize);
 
 } // namespace WebKit
 

Modified: trunk/Source/WebKit/WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.mm (291325 => 291326)


--- trunk/Source/WebKit/WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.mm	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebKit/WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.mm	2022-03-16 03:21:32 UTC (rev 291326)
@@ -178,7 +178,7 @@
 
 namespace WebKit {
 
-PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote* mediaPlayerPrivateRemote, LayerHostingContextID contextId, WebCore::MediaPlayerEnums::VideoGravity videoGravity)
+PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote* mediaPlayerPrivateRemote, LayerHostingContextID contextId, WebCore::MediaPlayerEnums::VideoGravity videoGravity, IntSize contentSize)
 {
     // Initially, all the layers will be empty (both width and height are 0) and invisible.
     // The renderer will change the sizes of WKVideoLayerRemote to trigger layout of sublayers and make them visible.
@@ -186,7 +186,9 @@
     [videoLayerRemote setName:@"WKVideoLayerRemote"];
     [videoLayerRemote setVideoGravity:videoGravity];
     [videoLayerRemote setMediaPlayerPrivateRemote:mediaPlayerPrivateRemote];
-    [videoLayerRemote addSublayer:LayerHostingContext::createPlatformLayerForHostingContext(contextId).get()];
+    auto layerForHostContext = LayerHostingContext::createPlatformLayerForHostingContext(contextId).get();
+    [layerForHostContext setFrame:CGRectMake(0, 0, contentSize.width(), contentSize.height())];
+    [videoLayerRemote addSublayer:WTFMove(layerForHostContext)];
 
     return videoLayerRemote;
 }

Modified: trunk/Source/WebKit/WebProcess/GPU/media/gstreamer/VideoLayerRemoteGStreamer.cpp (291325 => 291326)


--- trunk/Source/WebKit/WebProcess/GPU/media/gstreamer/VideoLayerRemoteGStreamer.cpp	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebKit/WebProcess/GPU/media/gstreamer/VideoLayerRemoteGStreamer.cpp	2022-03-16 03:21:32 UTC (rev 291326)
@@ -41,7 +41,7 @@
 
 namespace WebKit {
 
-PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote*, LayerHostingContextID, WebCore::MediaPlayerEnums::VideoGravity)
+PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote*, LayerHostingContextID, WebCore::MediaPlayerEnums::VideoGravity, WebCore::IntSize)
 {
     notImplemented();
     return nullptr;

Modified: trunk/Source/WebKit/WebProcess/GPU/media/playstation/VideoLayerRemotePlayStation.cpp (291325 => 291326)


--- trunk/Source/WebKit/WebProcess/GPU/media/playstation/VideoLayerRemotePlayStation.cpp	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebKit/WebProcess/GPU/media/playstation/VideoLayerRemotePlayStation.cpp	2022-03-16 03:21:32 UTC (rev 291326)
@@ -32,7 +32,7 @@
 
 namespace WebKit {
 
-PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote*, LayerHostingContextID, WebCore::MediaPlayerEnums::VideoGravity)
+PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote*, LayerHostingContextID, WebCore::MediaPlayerEnums::VideoGravity, WebCore::IntSize)
 {
     notImplemented();
     return nullptr;

Modified: trunk/Source/WebKit/WebProcess/GPU/media/win/VideoLayerRemoteWin.cpp (291325 => 291326)


--- trunk/Source/WebKit/WebProcess/GPU/media/win/VideoLayerRemoteWin.cpp	2022-03-16 02:35:33 UTC (rev 291325)
+++ trunk/Source/WebKit/WebProcess/GPU/media/win/VideoLayerRemoteWin.cpp	2022-03-16 03:21:32 UTC (rev 291326)
@@ -33,7 +33,7 @@
 
 namespace WebKit {
 
-PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote*, LayerHostingContextID, WebCore::MediaPlayerEnums::VideoGravity)
+PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote*, LayerHostingContextID, WebCore::MediaPlayerEnums::VideoGravity, WebCore::IntSize)
 {
     notImplemented();
     return nullptr;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to