Title: [257932] trunk
- Revision
- 257932
- Author
- [email protected]
- Date
- 2020-03-05 11:02:53 -0800 (Thu, 05 Mar 2020)
Log Message
REGRESSION: [ Mac ] fast/canvas/webgl/texImage2D-video-flipY-false.html is Timing out
https://bugs.webkit.org/show_bug.cgi?id=205734
Source/WebCore:
Fix two bugs in MediaPlayerPrivateAVFoundationObjC causing the
preferred AVPlayerItemVideoOutput code path to not be taken, in
the situation where GPU-to-GPU copies are not possible because the
video's format doesn't allow them.
Implement currentTime, fixing longstanding bug in the
AVAssetImageGenerator fallback where only the first frame of the
video would be displayed.
Covered by existing layout test.
Patch by Kenneth Russell <[email protected]> on 2020-03-05
Reviewed by Dean Jackson.
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::currentTime const):
(WebCore::MediaPlayerPrivateAVFoundationObjC::paintCurrentFrameInContext):
(WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
LayoutTests:
Reenable layout test on macOS.
Patch by Kenneth Russell <[email protected]> on 2020-03-05
Reviewed by Dean Jackson.
* platform/mac/TestExpectations:
Modified Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (257931 => 257932)
--- trunk/LayoutTests/ChangeLog 2020-03-05 18:55:52 UTC (rev 257931)
+++ trunk/LayoutTests/ChangeLog 2020-03-05 19:02:53 UTC (rev 257932)
@@ -1,3 +1,14 @@
+2020-03-05 Kenneth Russell <[email protected]>
+
+ REGRESSION: [ Mac ] fast/canvas/webgl/texImage2D-video-flipY-false.html is Timing out
+ https://bugs.webkit.org/show_bug.cgi?id=205734
+
+ Reenable layout test on macOS.
+
+ Reviewed by Dean Jackson.
+
+ * platform/mac/TestExpectations:
+
2020-03-05 Jacob Uphoff <[email protected]>
[ macOS iOS ] storage/indexeddb/modern/transactions-stop-on-navigation.html is flaky failing
Modified: trunk/LayoutTests/platform/mac/TestExpectations (257931 => 257932)
--- trunk/LayoutTests/platform/mac/TestExpectations 2020-03-05 18:55:52 UTC (rev 257931)
+++ trunk/LayoutTests/platform/mac/TestExpectations 2020-03-05 19:02:53 UTC (rev 257932)
@@ -2029,7 +2029,6 @@
webkit.org/b/207858 fast/canvas/webgl/draw-elements-out-of-bounds-uint-index.html [ Failure ]
webkit.org/b/207858 fast/canvas/webgl/simulated-vertexAttrib0-invalid-indicies.html [ Failure ]
webkit.org/b/207858 fast/canvas/webgl/webgl2-texture-upload-enums.html [ Failure ]
-webkit.org/b/207858 fast/canvas/webgl/texImage2D-video-flipY-false.html [ Skip ]
webkit.org/b/207858 webgl/1.0.3/conformance/programs/program-test.html [ Failure ]
webkit.org/b/207971 css3/selectors3/xml/css3-modsel-d1.xml [ Pass Failure ]
@@ -2057,4 +2056,4 @@
webkit.org/b/208519 [ Catalina ] webanimations/accelerated-animation-slot-invalidation.html [ Pass ImageOnlyFailure ]
-webkit.org/b/208574 mathml/scripts-removeChild.html [ Pass ImageOnlyFailure ]
\ No newline at end of file
+webkit.org/b/208574 mathml/scripts-removeChild.html [ Pass ImageOnlyFailure ]
Modified: trunk/Source/WebCore/ChangeLog (257931 => 257932)
--- trunk/Source/WebCore/ChangeLog 2020-03-05 18:55:52 UTC (rev 257931)
+++ trunk/Source/WebCore/ChangeLog 2020-03-05 19:02:53 UTC (rev 257932)
@@ -1,3 +1,27 @@
+2020-03-05 Kenneth Russell <[email protected]>
+
+ REGRESSION: [ Mac ] fast/canvas/webgl/texImage2D-video-flipY-false.html is Timing out
+ https://bugs.webkit.org/show_bug.cgi?id=205734
+
+ Fix two bugs in MediaPlayerPrivateAVFoundationObjC causing the
+ preferred AVPlayerItemVideoOutput code path to not be taken, in
+ the situation where GPU-to-GPU copies are not possible because the
+ video's format doesn't allow them.
+
+ Implement currentTime, fixing longstanding bug in the
+ AVAssetImageGenerator fallback where only the first frame of the
+ video would be displayed.
+
+ Covered by existing layout test.
+
+ Reviewed by Dean Jackson.
+
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::currentTime const):
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::paintCurrentFrameInContext):
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
+
2020-03-05 youenn fablet <[email protected]>
In case an activating service worker is terminated, it should go to activated state
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h (257931 => 257932)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h 2020-03-05 18:55:52 UTC (rev 257931)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h 2020-03-05 19:02:53 UTC (rev 257932)
@@ -153,6 +153,7 @@
bool waitingForKey() const final { return m_waitingForKey; }
#endif
+ float currentTime() const override;
MediaTime currentMediaTime() const override;
private:
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (257931 => 257932)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm 2020-03-05 18:55:52 UTC (rev 257931)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm 2020-03-05 19:02:53 UTC (rev 257932)
@@ -1222,6 +1222,11 @@
return MediaTime::invalidTime();
}
+float MediaPlayerPrivateAVFoundationObjC::currentTime() const
+{
+ return currentMediaTime().toFloat();
+}
+
MediaTime MediaPlayerPrivateAVFoundationObjC::currentMediaTime() const
{
if (!metaDataAvailable() || !m_avPlayerItem)
@@ -1498,7 +1503,16 @@
setDelayCallbacks(true);
BEGIN_BLOCK_OBJC_EXCEPTIONS;
- if (videoOutputHasAvailableFrame())
+ // Callers of this will often call copyVideoTextureToPlatformTexture first,
+ // which calls updateLastPixelBuffer, which clears m_lastImage whenever the
+ // video delivers a new frame. This breaks videoOutputHasAvailableFrame's
+ // short-circuiting when m_lastImage is non-null, but the video often
+ // doesn't have a new frame to deliver since the last time
+ // hasNewPixelBufferForItemTime was called against m_videoOutput. To avoid
+ // changing the semantics of videoOutputHasAvailableFrame in ways that might
+ // break other callers, look for production of a recent pixel buffer from
+ // the video output, too.
+ if (videoOutputHasAvailableFrame() || (m_videoOutput && m_lastPixelBuffer))
paintWithVideoOutput(context, rect);
else
paintWithImageGenerator(context, rect);
@@ -2220,7 +2234,11 @@
void MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput(GraphicsContext& context, const FloatRect& outputRect)
{
- updateLastImage(UpdateType::UpdateSynchronously);
+ // It's crucial to not wait synchronously for the next image. Videos that
+ // come down this path are performing slow-case software uploads, and such
+ // videos may not return metadata in a timely fashion. Use the most recently
+ // available pixel buffer, if any.
+ updateLastImage();
if (!m_lastImage)
return;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes