Title: [246261] releases/WebKitGTK/webkit-2.24
Revision
246261
Author
[email protected]
Date
2019-06-10 07:39:18 -0700 (Mon, 10 Jun 2019)

Log Message

Merged r245848 - [MSE][GStreamer] update the readyState correctly in MediaPlayerPrivateGStreamerMSE
https://bugs.webkit.org/show_bug.cgi?id=197834

Patch by Yacine Bandou <[email protected]> on 2019-05-28
Reviewed by Xabier Rodriguez-Calvar.

Source/WebCore:

The buffering state and the m_downloadFinished boolean aren't supported in the MSE case.
When the readyState is already "HaveEnoughData", we don't want to revert it to "HaveFutureData",
or else the MediaPlayer would send a "canplay" event instead of a "canplaythrough".

Test: media/media-source/media-source-canplaythrough-event.html

* platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
(WebCore::MediaPlayerPrivateGStreamerMSE::updateStates):

LayoutTests:

Add a new test that checks if the MediaElement receives the "canplaythrough"
event when the media content is entirely injected to MSE sourceBuffer.

* media/media-source/media-source-canplaythrough-event-expected.txt: Added.
* media/media-source/media-source-canplaythrough-event.html: Added.

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.24/LayoutTests/ChangeLog (246260 => 246261)


--- releases/WebKitGTK/webkit-2.24/LayoutTests/ChangeLog	2019-06-10 14:39:10 UTC (rev 246260)
+++ releases/WebKitGTK/webkit-2.24/LayoutTests/ChangeLog	2019-06-10 14:39:18 UTC (rev 246261)
@@ -1,3 +1,16 @@
+2019-05-28  Yacine Bandou  <[email protected]>
+
+        [MSE][GStreamer] update the readyState correctly in MediaPlayerPrivateGStreamerMSE
+        https://bugs.webkit.org/show_bug.cgi?id=197834
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        Add a new test that checks if the MediaElement receives the "canplaythrough"
+        event when the media content is entirely injected to MSE sourceBuffer.
+
+        * media/media-source/media-source-canplaythrough-event-expected.txt: Added.
+        * media/media-source/media-source-canplaythrough-event.html: Added.
+
 2019-05-15  Zalan Bujtas  <[email protected]>
 
         Do not create a shape object outside of the layout context

Added: releases/WebKitGTK/webkit-2.24/LayoutTests/media/media-source/media-source-canplaythrough-event-expected.txt (0 => 246261)


--- releases/WebKitGTK/webkit-2.24/LayoutTests/media/media-source/media-source-canplaythrough-event-expected.txt	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.24/LayoutTests/media/media-source/media-source-canplaythrough-event-expected.txt	2019-06-10 14:39:18 UTC (rev 246261)
@@ -0,0 +1,5 @@
+
+EVENT(sourceopen)
+EVENT(canplaythrough)
+END OF TEST
+

Added: releases/WebKitGTK/webkit-2.24/LayoutTests/media/media-source/media-source-canplaythrough-event.html (0 => 246261)


--- releases/WebKitGTK/webkit-2.24/LayoutTests/media/media-source/media-source-canplaythrough-event.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.24/LayoutTests/media/media-source/media-source-canplaythrough-event.html	2019-06-10 14:39:18 UTC (rev 246261)
@@ -0,0 +1,28 @@
+<html>
+<head>
+    <title>media-source-wait-canplaythrough-event</title>
+    <script src=""
+    <script>
+    var source;
+    var sourceBufferVideo;
+
+    function runTest() {
+        findMediaElement();
+        source = new MediaSource();
+        waitForEvent('sourceopen', sourceOpen, false, false, source);
+        video.src = ""
+    }
+
+    async function sourceOpen() {
+        sourceBufferVideo = source.addSourceBuffer('video/mp4; codecs="avc1.4d401f"');
+        waitForEventAndEnd('canplaythrough', null);
+        sourceBufferVideo.appendBuffer(await (await fetch("content/test-red-3s-480x360.mp4")).arrayBuffer());
+        failTestIn(2000);
+    }
+
+    </script>
+</head>
+<body _onload_="runTest()">
+<video></video>
+</body>
+</html>

Modified: releases/WebKitGTK/webkit-2.24/Source/WebCore/ChangeLog (246260 => 246261)


--- releases/WebKitGTK/webkit-2.24/Source/WebCore/ChangeLog	2019-06-10 14:39:10 UTC (rev 246260)
+++ releases/WebKitGTK/webkit-2.24/Source/WebCore/ChangeLog	2019-06-10 14:39:18 UTC (rev 246261)
@@ -1,3 +1,19 @@
+2019-05-28  Yacine Bandou  <[email protected]>
+
+        [MSE][GStreamer] update the readyState correctly in MediaPlayerPrivateGStreamerMSE
+        https://bugs.webkit.org/show_bug.cgi?id=197834
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        The buffering state and the m_downloadFinished boolean aren't supported in the MSE case.
+        When the readyState is already "HaveEnoughData", we don't want to revert it to "HaveFutureData",
+        or else the MediaPlayer would send a "canplay" event instead of a "canplaythrough".
+
+        Test: media/media-source/media-source-canplaythrough-event.html
+
+        * platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
+        (WebCore::MediaPlayerPrivateGStreamerMSE::updateStates):
+
 2019-05-23  Adrian Perez de Castro  <[email protected]>
 
         Fix a few missing header inclusions often masked by by unified sources

Modified: releases/WebKitGTK/webkit-2.24/Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp (246260 => 246261)


--- releases/WebKitGTK/webkit-2.24/Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp	2019-06-10 14:39:10 UTC (rev 246260)
+++ releases/WebKitGTK/webkit-2.24/Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp	2019-06-10 14:39:18 UTC (rev 246261)
@@ -520,24 +520,9 @@
                 m_readyState = MediaPlayer::HaveMetadata;
                 // FIXME: Should we manage NetworkState too?
                 GST_DEBUG("m_readyState=%s", dumpReadyState(m_readyState));
-            } else if (m_buffering) {
-                if (m_bufferingPercentage == 100) {
-                    GST_DEBUG("[Buffering] Complete.");
-                    m_buffering = false;
-                    m_readyState = MediaPlayer::HaveEnoughData;
-                    GST_DEBUG("m_readyState=%s", dumpReadyState(m_readyState));
-                    m_networkState = m_downloadFinished ? MediaPlayer::Idle : MediaPlayer::Loading;
-                } else {
-                    m_readyState = MediaPlayer::HaveCurrentData;
-                    GST_DEBUG("m_readyState=%s", dumpReadyState(m_readyState));
-                    m_networkState = MediaPlayer::Loading;
-                }
-            } else if (m_downloadFinished) {
-                m_readyState = MediaPlayer::HaveEnoughData;
-                GST_DEBUG("m_readyState=%s", dumpReadyState(m_readyState));
-                m_networkState = MediaPlayer::Loaded;
             } else {
-                m_readyState = MediaPlayer::HaveFutureData;
+                if (m_readyState < MediaPlayer::HaveFutureData)
+                    m_readyState = MediaPlayer::HaveFutureData;
                 GST_DEBUG("m_readyState=%s", dumpReadyState(m_readyState));
                 m_networkState = MediaPlayer::Loading;
             }
@@ -559,7 +544,7 @@
                 m_volumeAndMuteInitialized = true;
             }
 
-            if (!seeking() && !m_buffering && !m_paused && m_playbackRate) {
+            if (!seeking() && !m_paused && m_playbackRate) {
                 GST_DEBUG("[Buffering] Restarting playback.");
                 changePipelineState(GST_STATE_PLAYING);
             }
@@ -566,7 +551,7 @@
         } else if (state == GST_STATE_PLAYING) {
             m_paused = false;
 
-            if ((m_buffering && !isLiveStream()) || !m_playbackRate) {
+            if (!m_playbackRate) {
                 GST_DEBUG("[Buffering] Pausing stream for buffering.");
                 changePipelineState(GST_STATE_PAUSED);
             }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to