[Webkit-unassigned] [Bug 257035] New: [MSE][GStreamer] Actually do flushes, unify m_hasAllTracks
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Fri May 19 08:50:46 PDT 2023
https://bugs.webkit.org/show_bug.cgi?id=257035
Bug ID: 257035
Summary: [MSE][GStreamer] Actually do flushes, unify
m_hasAllTracks
Product: WebKit
Version: WebKit Nightly Build
Hardware: Unspecified
OS: Unspecified
Status: NEW
Severity: Normal
Priority: P2
Component: WebKitGTK
Assignee: webkit-unassigned at lists.webkit.org
Reporter: aboya at igalia.com
CC: bugs-noreply at webkitgtk.org
Before this patch, there were two classes having a m_hasAllTracks field:
MediaSourcePrivateGStreamer and MediaPlayerPrivateGStreamerMSE.
This redundancy lead to non-synchronization, and in consequence this was
making flushes not occur on MSE, as
SourceBufferPrivateGStreamer::flush() checked for the one in
MediaPlayerPrivateGStreamerMSE which no code ever set to true.
A visible consequence of this was video was being repeated on quality
changes, due to the lack of flush of old frames.
This patch fixes the issue by keeping the `hasAllTracks` state in one
single place, in MediaSourcePrivateGStreamer.
Note:
The triggering of MSE flushes exposed several bugs on the handling of
flushes in other parts of the code. It's important these are addressed
to avoid regressions in behavior when incorporating this patch:
(1) https://github.com/WebKit/WebKit/pull/3802
[GStreamer] MediaPlayerPrivateGStreamer: Abort stale tasks on flushes
Without this patch, MSE flushes can deadlock.
(2) https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2413
appsink: Fix race condition on caps handling
appsink used to have a race condition on the handling of caps after
a flush that can cause crashes. A fix is present in GStreamer 1.20.3+.
A workaround in the WebKit side is possible and desirable to avoid
headaches in Linux distros, and has been uploaded as:
https://github.com/WebKit/WebKit/pull/3965
[GStreamer] Introduce workaround for race condition in appsink
(3) https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3471
basesink: Support position queries after non-resetting flushes
basesink doesn't answer position queries between a FLUSH_STOP with
reset_time=FALSE and a SEGMENT event until GStreamer 1.24.0, which
incorporates that patch.
For backwards-compatibility -- and present-compatibility for that matter
since GStreamer 1.24.0 has not been released yet, a workaround has been
Proposed for WebKit:
https://github.com/WebKit/WebKit/pull/14082
[MSE][GStreamer] Workaround basesink's lack of support for position queries between a non-resetting flush and a pre-roll
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20230519/b25df592/attachment.htm>
More information about the webkit-unassigned
mailing list