[webkit-changes] [WebKit/WebKit] 45b9cb: [GStreamer][WebAudio][Quirks] Fix initial WebAudio...
E. Ocaña González
noreply at github.com
Fri Jan 10 08:52:55 PST 2025
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 45b9cba6ef32c10965a7d3330d5a78951a9b0137
https://github.com/WebKit/WebKit/commit/45b9cba6ef32c10965a7d3330d5a78951a9b0137
Author: Enrique Ocaña González <eocanha at igalia.com>
Date: 2025-01-10 (Fri, 10 Jan 2025)
Changed paths:
M Source/WebCore/platform/SourcesGStreamer.txt
M Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp
A Source/WebCore/platform/gstreamer/GStreamerQuirkOpenMAX.cpp
A Source/WebCore/platform/gstreamer/GStreamerQuirkOpenMAX.h
M Source/WebCore/platform/gstreamer/GStreamerQuirks.cpp
M Source/WebCore/platform/gstreamer/GStreamerQuirks.h
Log Message:
-----------
[GStreamer][WebAudio][Quirks] Fix initial WebAudio cut on Raspberry Pi
https://bugs.webkit.org/show_bug.cgi?id=285030
Reviewed by Philippe Normand.
WebAudio playback eats up a portion of the start of a sound after a
silence on Raspberry Pi when using OpenMAX. This is because the silence
buffers are marked with the GAP flag by WebKitWebAudioSourceGStreamer
and that causes them not to be rendered by the audio sink. This, in
turn, causes OpenMAX (the platform media framework used on Raspbery Pi
32 bit) to cool down and when the first audible buffer arrives, it takes
a fraction of a second to warm up again and play audio back.
This patch avoids marking the buffers as GAP on these platforms, fixing
the issue. Inserting non-gap buffers periodically (even with a frequency
of one non-gap per every gap) is not enough to solve the problem, so the
only alternative is to avoid gap buffers completely.
* Source/WebCore/platform/SourcesGStreamer.txt: Added new GStreamerQuirkOpenMAX.cpp file.
* Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
(webKitWebAudioSrcRenderAndPushFrames): Resort to quirks to process the buffers (marking them as gap and drop there or not). Do it in-place if quirks are disabled.
* Source/WebCore/platform/gstreamer/GStreamerQuirkOpenMAX.cpp: Added.
(WebCore::GStreamerQuirkOpenMAX::GStreamerQuirkOpenMAX): Constructor. Initialize debug category.
(WebCore::GStreamerQuirkOpenMAX::processWebAudioSilentBuffer const): Mark the buffers as no gap and no drop.
* Source/WebCore/platform/gstreamer/GStreamerQuirkOpenMAX.h: Added.
* Source/WebCore/platform/gstreamer/GStreamerQuirks.cpp:
(WebCore::GStreamerQuirksManager::GStreamerQuirksManager): Initialize OpenMAX quirk backend.
(WebCore::GStreamerQuirksManager::processWebAudioSilentBuffer const): Ask all backends to process the buffers. The backends will return true if they consider themselves as preferred, avoiding remaining backends after them to be queried.
* Source/WebCore/platform/gstreamer/GStreamerQuirks.h:
(WebCore::GStreamerQuirk::processWebAudioSilentBuffer const): Added default implementation that marks the buffers as gap and drop.
Canonical link: https://commits.webkit.org/288713@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list