Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 9cc81c236089a08e268a9b6e6778766744cb3606
      
https://github.com/WebKit/WebKit/commit/9cc81c236089a08e268a9b6e6778766744cb3606
  Author: Jean-Yves Avenard <[email protected]>
  Date:   2025-10-17 (Fri, 17 Oct 2025)

  Changed paths:
    M Source/WebCore/platform/graphics/AudioVideoRenderer.h
    M Source/WebCore/platform/graphics/avfoundation/AudioVideoRendererAVFObjC.h
    M Source/WebCore/platform/graphics/avfoundation/AudioVideoRendererAVFObjC.mm
    M 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm
    M Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.mm
    M Source/WebKit/GPUProcess/media/RemoteAudioVideoRendererProxyManager.cpp
    M Source/WebKit/GPUProcess/media/RemoteAudioVideoRendererProxyManager.h
    M 
Source/WebKit/GPUProcess/media/RemoteAudioVideoRendererProxyManager.messages.in
    M Source/WebKit/WebProcess/GPU/media/AudioVideoRendererRemote.cpp
    M Source/WebKit/WebProcess/GPU/media/AudioVideoRendererRemote.h

  Log Message:
  -----------
  REGRESSION(301011@main): YouTube vidoes start black, or are black after an ad
https://bugs.webkit.org/show_bug.cgi?id=300949
rdar://162654138

Reviewed by Youenn Fablet.

The AudioVideoRendererAVFObjC was using the original MediaPlayerPrivateWebM
logic to determine when a video layer had to be created: which occured when
both presentationSize was not empty and renderingCanBeAccelerated set to true.
The original MediaPlayerPrivateMediaSourceAVFObjC however only relied on
renderingCanBeAccelerated becoming true.
YouTube when displaying an ad re-use the existing HTMLMediaElement as change
the source attribute, only once the video resume to set the same 
HTMLMediaElement's
src to a new MediaSource. When this happened MediaPlayer::setPresentationSize
isn't always called (it's racy and depends in the order in which the layer
code has rendered elements).
If setPresentationSize wasn't called on the new MediaPlayer, we would not
create the AVSBDL.
Resizing the page or going into fullscreen would force setPresentationSize
to be called and the AVSBDL would then be created. This explained the behaviour
described.
That same issue would have existed with the MediaPlayerPrivateWebM for years
but luckily it was never used that way.

We revert to the original MediaPlayerPrivateMediaSourceAVFObjC logic on
creating the AVSBDL as soon as the renderingCanBeAccelerated returns true.

We rename AudioVideoRenderer::acceleratedRenderingStateChanged method to
renderingCanBeAcceleratedChanged as it's more indicative on when that method
is called.

Manually tested. Couldn't reproduce the issue through a simple test page.
Test will be added in webkit.org/b/300973

* Source/WebCore/platform/graphics/AudioVideoRenderer.h:
(WebCore::VideoInterface::renderingCanBeAcceleratedChanged):
(WebCore::VideoInterface::acceleratedRenderingStateChanged): Deleted.
* Source/WebCore/platform/graphics/avfoundation/AudioVideoRendererAVFObjC.h:
* Source/WebCore/platform/graphics/avfoundation/AudioVideoRendererAVFObjC.mm:
(WebCore::AudioVideoRendererAVFObjC::renderingCanBeAcceleratedChanged):
(WebCore::AudioVideoRendererAVFObjC::shouldEnsureLayerOrVideoRenderer const):
(WebCore::AudioVideoRendererAVFObjC::acceleratedRenderingStateChanged): Deleted.
* 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load):
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::acceleratedRenderingStateChanged):
* Source/WebCore/platform/graphics/cocoa/MediaPlayerPrivateWebM.mm:
(WebCore::MediaPlayerPrivateWebM::MediaPlayerPrivateWebM):
(WebCore::MediaPlayerPrivateWebM::acceleratedRenderingStateChanged):
* Source/WebKit/GPUProcess/media/RemoteAudioVideoRendererProxyManager.cpp:
(WebKit::RemoteAudioVideoRendererProxyManager::renderingCanBeAcceleratedChanged):
(WebKit::RemoteAudioVideoRendererProxyManager::acceleratedRenderingStateChanged):
 Deleted.
* Source/WebKit/GPUProcess/media/RemoteAudioVideoRendererProxyManager.h:
* 
Source/WebKit/GPUProcess/media/RemoteAudioVideoRendererProxyManager.messages.in:
* Source/WebKit/WebProcess/GPU/media/AudioVideoRendererRemote.cpp:
(WebKit::AudioVideoRendererRemote::renderingCanBeAcceleratedChanged):
(WebKit::AudioVideoRendererRemote::acceleratedRenderingStateChanged): Deleted.
* Source/WebKit/WebProcess/GPU/media/AudioVideoRendererRemote.h:

Canonical link: https://commits.webkit.org/301743@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to