WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
257035
[MSE][GStreamer] Actually do flushes, unify m_hasAllTracks
https://bugs.webkit.org/show_bug.cgi?id=257035
Summary
[MSE][GStreamer] Actually do flushes, unify m_hasAllTracks
Alicia Boya García
Reported
2023-05-19 08:50:46 PDT
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
Attachments
Add attachment
proposed patch, testcase, etc.
Alicia Boya García
Comment 1
2023-05-19 08:53:18 PDT
Pull request:
https://github.com/WebKit/WebKit/pull/3966
EWS
Comment 2
2023-05-25 03:48:30 PDT
Committed
264510@main
(3e5ad5ea060b): <
https://commits.webkit.org/264510@main
> Reviewed commits have been landed. Closing PR #3966 and removing active labels.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug