diff --git a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp index 1522ed79c0b5..4cf6a140f80f 100644 --- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp +++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp @@ -2104,6 +2104,8 @@ void MediaPlayerPrivateGStreamer::handleMessage(GstMessage* message) if (!messageSourceIsPlaybin || m_isDelayingLoad) break; + updateBufferingStatus(); + // The MediaPlayerPrivateGStreamer superclass now processes what it needs by calling updateStates() in handleMessage() for // GST_MESSAGE_STATE_CHANGED. However, subclasses still need to override asyncStateChangeDone() to do their own stuff. didPreroll(); @@ -2404,6 +2406,17 @@ void MediaPlayerPrivateGStreamer::updateBufferingStatus(GstBufferingMode mode, d boolForPrinting(m_wasBuffering), boolForPrinting(m_isBuffering), m_previousBufferingPercentage, m_bufferingPercentage); } +void MediaPlayerPrivateGStreamer::updateBufferingStatus() +{ + std::optional percentage = queryBufferingPercentage(); + + if (!percentage.has_value()) { + GST_DEBUG_OBJECT(pipeline(), "[Buffering] Unable to determine buffering status"); + return; + } + updateBufferingStatus(GST_BUFFERING_DOWNLOAD, percentage.value(), false, false); +} + #if USE(GSTREAMER_MPEGTS) void MediaPlayerPrivateGStreamer::processMpegTsSection(GstMpegtsSection* section) { diff --git a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h index 2f701ca943d3..896a2670f5b8 100644 --- a/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h +++ b/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h @@ -558,6 +558,7 @@ class MediaPlayerPrivateGStreamer virtual void updateDownloadBufferingFlag(); void processBufferingStats(GstMessage*); void updateBufferingStatus(GstBufferingMode, double percentage, bool resetHistory = false, bool shouldUpdateStates = true); + void updateBufferingStatus(); void updateMaxTimeLoaded(double percentage); #if USE(GSTREAMER_MPEGTS)