[webkit-changes] [WebKit/WebKit] d0b6e8: [MediaSource] canplay event does not fire for vide...

aestes noreply at github.com
Mon Oct 23 18:57:55 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: d0b6e889f00ee859d4f9ed8f7119a3ed3f5ad7cf
      https://github.com/WebKit/WebKit/commit/d0b6e889f00ee859d4f9ed8f7119a3ed3f5ad7cf
  Author: Andy Estes <aestes at apple.com>
  Date:   2023-10-23 (Mon, 23 Oct 2023)

  Changed paths:
    M LayoutTests/TestExpectations
    A LayoutTests/fast/canvas/webgl/texImage2D-mse-in-dom-flipY-false-expected.txt
    A LayoutTests/fast/canvas/webgl/texImage2D-mse-in-dom-flipY-false.html
    A LayoutTests/fast/canvas/webgl/texImage2D-mse-in-dom-flipY-true-expected.txt
    A LayoutTests/fast/canvas/webgl/texImage2D-mse-in-dom-flipY-true.html
    A LayoutTests/media/media-source/media-source-first-sample-pts-non-zero-canplay-expected.txt
    A LayoutTests/media/media-source/media-source-first-sample-pts-non-zero-canplay-without-renderer-expected.txt
    A LayoutTests/media/media-source/media-source-first-sample-pts-non-zero-canplay-without-renderer.html
    A LayoutTests/media/media-source/media-source-first-sample-pts-non-zero-canplay.html
    A LayoutTests/media/media-source/resources/first-sample-pts-non-zero/LICENSE
    A LayoutTests/media/media-source/resources/first-sample-pts-non-zero/first-sample-pts-non-zero.mp4
    M LayoutTests/platform/ios/TestExpectations
    M LayoutTests/platform/wincairo/TestExpectations
    M Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm

  Log Message:
  -----------
  [MediaSource] canplay event does not fire for video elements with renderers when first sample has a pts greater than 0
https://bugs.webkit.org/show_bug.cgi?id=263415
rdar://105169372

Reviewed by Jer Noble.

Some MediaSource content adds a source buffer where the first decoded sample has a presentation
start time that is slightly greater than 0. This exposes a bug in WebCoreDecompressionSession where
the "canplay" event is never dispatched because a sample whose pts matches the playback
synchronizer's current time is never decoded. This bug is tracked by webkit.org/b/263413.

Instead of addressing the issue in WebCoreDecompressionSession, this commit addresses the reason
why WebCoreDecompressionSession was being used to begin with for video elements with renderers.
In 252183 at main, MediaPlayerPrivateMediaSourceAVFObjC::shouldEnsureLayer() was modified to return
false when a video element's bounds were empty to address a failure in
fast/canvas/webgl/texImage2D-mse-flipY-false.html, but this turned out to be overly restrictive.
-[AVSampleBufferDisplayLayer copyDisplayedPixelBuffer] actually does work properly when its bounds
are empty; it merely fails when the video element does not have a renderer. 266162 at main later added
a renderer check to MediaPlayerPrivateMediaSourceAVFObjC::shouldEnsureLayer(), making the
empty-bounds checks unnecessary.

This commit removes the empty-bounds checks from
MediaPlayerPrivateMediaSourceAVFObjC::shouldEnsureLayer(), ensuring we use an
AVSampleBufferDisplayLayer for decoding (which is not tripped up by the pts issue described above)
in all situations where the video element has a renderer.

Added tests to verify the following behaviors for video elements with renderers:
- video-in-canvas rendering continues to work via AVSampleBufferDisplayLayer with zero-sized video elements
- "canplay" event is dispatched for zero-sized video elements

Also added a failing test for the issue tracked in webkit.org/b/263413 and marked it as such in
TestExpectations.

* LayoutTests/TestExpectations:
* LayoutTests/fast/canvas/webgl/texImage2D-mse-in-dom-flipY-false-expected.txt: Added.
* LayoutTests/fast/canvas/webgl/texImage2D-mse-in-dom-flipY-false.html: Added.
* LayoutTests/fast/canvas/webgl/texImage2D-mse-in-dom-flipY-true-expected.txt: Added.
* LayoutTests/fast/canvas/webgl/texImage2D-mse-in-dom-flipY-true.html: Added.
* LayoutTests/media/media-source/media-source-first-sample-pts-non-zero-canplay-expected.txt: Added.
* LayoutTests/media/media-source/media-source-first-sample-pts-non-zero-canplay-without-renderer-expected.txt: Added.
* LayoutTests/media/media-source/media-source-first-sample-pts-non-zero-canplay-without-renderer.html: Added.
* LayoutTests/media/media-source/media-source-first-sample-pts-non-zero-canplay.html: Added.
* LayoutTests/media/media-source/resources/first-sample-pts-non-zero/LICENSE: Added.
* LayoutTests/media/media-source/resources/first-sample-pts-non-zero/first-sample-pts-non-zero.mp4: Added.
* LayoutTests/platform/ios/TestExpectations:
* LayoutTests/platform/wincairo/TestExpectations:
* Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::shouldEnsureLayer const):

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




More information about the webkit-changes mailing list