[webkit-changes] [WebKit/WebKit] 50fbea: Cherry-pick 288686 at main (38504740eae5). https://bu...
Philippe Normand
noreply at github.com
Wed Jan 29 14:13:31 PST 2025
Branch: refs/heads/webkitglib/2.46
Home: https://github.com/WebKit/WebKit
Commit: 50fbea37a7e9e0ec2818bbbf73e2a75f0a60f6b7
https://github.com/WebKit/WebKit/commit/50fbea37a7e9e0ec2818bbbf73e2a75f0a60f6b7
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M LayoutTests/platform/wpe/TestExpectations
M Source/WebCore/platform/SourcesGStreamer.txt
M Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp
M Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp
M Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h
A Source/WebCore/platform/graphics/gstreamer/GStreamerVideoFrameConverter.cpp
A Source/WebCore/platform/graphics/gstreamer/GStreamerVideoFrameConverter.h
M Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp
Log Message:
-----------
Cherry-pick 288686 at main (38504740eae5). https://bugs.webkit.org/show_bug.cgi?id=285280
[GStreamer][GL] Video frame conversion handling
https://bugs.webkit.org/show_bug.cgi?id=285280
Reviewed by Xabier Rodriguez-Calvar.
This patch introduces a GStreamerVideoFrameConverter singleton that is responsible for optionally
downloading frames from the GPU and convert them to a new format. The pipeline used for this relies
on the WebKit GL context.
* Source/WebCore/platform/SourcesGStreamer.txt:
* Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
(webKitGLVideoSinkChangeState):
(requestGLContext): Deleted.
(setGLContext): Deleted.
* Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:
(WebCore::requestGLContext):
(WebCore::setGstElementGLContext):
* Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:
* Source/WebCore/platform/graphics/gstreamer/GStreamerVideoFrameConverter.cpp: Added.
(WebCore::GStreamerVideoFrameConverter::singleton):
(WebCore::GStreamerVideoFrameConverter::GStreamerVideoFrameConverter):
(WebCore::GStreamerVideoFrameConverter::convert):
* Source/WebCore/platform/graphics/gstreamer/GStreamerVideoFrameConverter.h: Added.
* Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp:
(WebCore::convertSampleToImage):
(WebCore::VideoFrameGStreamer::createFromPixelBuffer):
(WebCore::VideoFrameGStreamer::convert):
Canonical link: https://commits.webkit.org/288686@main
Canonical link: https://commits.webkit.org/282416.418@2.46-jan-2025-multimedia
Commit: a4467e4d45c439a11b234241ca85d2ff4a206dfb
https://github.com/WebKit/WebKit/commit/a4467e4d45c439a11b234241ca85d2ff4a206dfb
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp
Log Message:
-----------
Cherry-pick 288651 at main (cac194f74a21). https://bugs.webkit.org/show_bug.cgi?id=285301
[GStreamer] Fix mock video sources observed framerate display
https://bugs.webkit.org/show_bug.cgi?id=285301
Reviewed by Xabier Rodriguez-Calvar.
The observed framerate is computed using frames PTS values, but the frames constructed by the mock
sources had invalid PTS values. Fix this by using the buffer PTS in case an invalid timestamp was
passed to the create() functions. This was done already for createWrappedSample() but not for the
create() function.
* Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp:
(WebCore::presentationTimeFromSample):
(WebCore::VideoFrameGStreamer::create):
(WebCore::VideoFrameGStreamer::createWrappedSample):
Canonical link: https://commits.webkit.org/288651@main
Canonical link: https://commits.webkit.org/282416.419@2.46-jan-2025-multimedia
Commit: d9ef0d3bab513e446411546023b59f32e144108d
https://github.com/WebKit/WebKit/commit/d9ef0d3bab513e446411546023b59f32e144108d
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp
M Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp
Log Message:
-----------
Cherry-pick 288646 at main (ca26a0851c71). https://bugs.webkit.org/show_bug.cgi?id=285335
[GStreamer] Use capture converter only when required
https://bugs.webkit.org/show_bug.cgi?id=285335
Reviewed by Xabier Rodriguez-Calvar.
In practice this is a micro-optimization, we just avoid using an identity element when capturing
desktop.
* Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:
(WebCore::GStreamerCapturer::setupPipeline):
* Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp:
(WebCore::GStreamerVideoCapturer::createConverter):
Canonical link: https://commits.webkit.org/288646@main
Canonical link: https://commits.webkit.org/282416.420@2.46-jan-2025-multimedia
Commit: 0949702ad2a299d4cd89238e16603dd416e128c6
https://github.com/WebKit/WebKit/commit/0949702ad2a299d4cd89238e16603dd416e128c6
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp
M Source/WebCore/platform/graphics/gstreamer/VideoFrameMetadataGStreamer.cpp
M Source/WebCore/platform/graphics/gstreamer/VideoFrameMetadataGStreamer.h
M Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp
M Source/WebCore/platform/mediastream/gstreamer/GStreamerIncomingTrackProcessor.cpp
M Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp
Log Message:
-----------
Cherry-pick 288658 at main (c015a4a405d1). https://bugs.webkit.org/show_bug.cgi?id=285336
[GStreamer] Video frame metadata handling fixes
https://bugs.webkit.org/show_bug.cgi?id=285336
Reviewed by Xabier Rodriguez-Calvar.
We now make sure buffers are writable before adding GstMeta on them and also if the buffers are
stored within samples, make sure the samples are writable before updating them.
These issues were detected when using getDisplayMedia with pipewire, the capturer sink was emitting
these warnings: free_priv_data: object finalizing but still has 1 parents (object:0x7fc534018ca0).
* Source/WebCore/platform/graphics/gstreamer/VideoFrameGStreamer.cpp:
(WebCore::VideoFrameGStreamer::createFromPixelBuffer):
(WebCore::VideoFrameGStreamer::VideoFrameGStreamer):
* Source/WebCore/platform/graphics/gstreamer/VideoFrameMetadataGStreamer.cpp:
(webkitGstBufferSetVideoFrameTimeMetadata):
* Source/WebCore/platform/graphics/gstreamer/VideoFrameMetadataGStreamer.h:
* Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:
(WebCore::GStreamerCapturer::createSource):
* Source/WebCore/platform/mediastream/gstreamer/GStreamerIncomingTrackProcessor.cpp:
(WebCore::GStreamerIncomingTrackProcessor::installRtpBufferPadProbe):
* Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
Canonical link: https://commits.webkit.org/288658@main
Canonical link: https://commits.webkit.org/282416.421@2.46-jan-2025-multimedia
Commit: 21f8d8c450df234b6c4afb8a3bdc541a0aab929c
https://github.com/WebKit/WebKit/commit/21f8d8c450df234b6c4afb8a3bdc541a0aab929c
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M LayoutTests/platform/glib/TestExpectations
M LayoutTests/platform/wpe/TestExpectations
M Source/WebCore/platform/gstreamer/GStreamerCodecUtilities.cpp
M Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.cpp
M Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoRTPPacketizer.cpp
Log Message:
-----------
Cherry-pick 288701 at main (85fd6a98f9ec). https://bugs.webkit.org/show_bug.cgi?id=285398
[GStreamer][WebRTC] webrtc/video-h264.html consistently times out
https://bugs.webkit.org/show_bug.cgi?id=285398
Reviewed by Xabier Rodriguez-Calvar.
To make this test pass the two main changes needed were to have support for high and
constrained-high avc codec strings in the packetizer and then let the VideoEncoderPrivate select the
underlying encoder using the output caps. Without this change x264enc was selected due to its high
rank but it doesn't support constrained-high, hence the caps negotiation error. For this test now
openh264enc is selected instead.
Driving-by, the input format handling for h264 was reworked a bit, also removing the inexistant Y420
format.
* LayoutTests/platform/glib/TestExpectations:
* LayoutTests/platform/wpe/TestExpectations:
* Source/WebCore/platform/gstreamer/GStreamerCodecUtilities.cpp:
(WebCore::h264CapsFromCodecString):
* Source/WebCore/platform/gstreamer/VideoEncoderPrivateGStreamer.cpp:
(videoEncoderSupportsCodec):
(videoEncoderSetCodec):
(webkit_video_encoder_class_init):
(videoEncoderFindForCodec): Deleted.
* Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoRTPPacketizer.cpp:
(WebCore::GStreamerVideoRTPPacketizer::create):
Canonical link: https://commits.webkit.org/288701@main
Canonical link: https://commits.webkit.org/282416.422@2.46-jan-2025-multimedia
Commit: 9716db315c071b369d49314bbe3b0d88b3cad190
https://github.com/WebKit/WebKit/commit/9716db315c071b369d49314bbe3b0d88b3cad190
Author: Carlos Bentzen <cadubentzen at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M Source/WebCore/platform/mediastream/gstreamer/GStreamerRTPPacketizer.cpp
Log Message:
-----------
Cherry-pick 288463 at main (1031e6022f7c). https://bugs.webkit.org/show_bug.cgi?id=285416
[GStreamer][WebRTC] REGRESSION(286800 at main) Crash when sending streams with GStreamer < 1.24
https://bugs.webkit.org/show_bug.cgi?id=285416
Reviewed by Philippe Normand.
Add early returns for GStreamer 1.24, and release asserts where
GstRTPBasePayload::extensions is used.
* Source/WebCore/platform/mediastream/gstreamer/GStreamerRTPPacketizer.cpp:
(WebCore::GStreamerRTPPacketizer::configureExtensions):
(WebCore::GStreamerRTPPacketizer::ensureMidExtension):
Canonical link: https://commits.webkit.org/288463@main
Canonical link: https://commits.webkit.org/282416.423@2.46-jan-2025-multimedia
Commit: b81f87b4391f8796bbc6ccfb0659d0aefb16c4d9
https://github.com/WebKit/WebKit/commit/b81f87b4391f8796bbc6ccfb0659d0aefb16c4d9
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp
Log Message:
-----------
Cherry-pick 288694 at main (c32da2cc67dd). https://bugs.webkit.org/show_bug.cgi?id=285421
[GStreamer] Fix unsafe-buffer-usage-in-container warning in GStreamerDataChannelHandler
https://bugs.webkit.org/show_bug.cgi?id=285421
Reviewed by Xabier Rodriguez-Calvar.
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:
(WebCore::GStreamerDataChannelHandler::onMessageData): Use the span method from SharedBuffer instead
of creating one ourselves.
Canonical link: https://commits.webkit.org/288694@main
Canonical link: https://commits.webkit.org/282416.424@2.46-jan-2025-multimedia
Commit: ab4f9169fc071390fc883327b90872280877ccd2
https://github.com/WebKit/WebKit/commit/ab4f9169fc071390fc883327b90872280877ccd2
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp
Log Message:
-----------
Cherry-pick 288698 at main (3ced1e0266db). https://bugs.webkit.org/show_bug.cgi?id=285684
[GStreamer] Set PTS on buffers received by video capturers
https://bugs.webkit.org/show_bug.cgi?id=285684
Reviewed by Xabier Rodriguez-Calvar.
The VideoFrame::create() function already uses the PTS from buffers since 288651 at main but it's also
good to do it directly within the capturer, for consistency purposes.
* Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp:
(WebCore::GStreamerVideoCapturer::setSinkVideoFrameCallback):
Canonical link: https://commits.webkit.org/288698@main
Canonical link: https://commits.webkit.org/282416.425@2.46-jan-2025-multimedia
Commit: f5703d22611a6e77c095d7e96ebf624b8143cf97
https://github.com/WebKit/WebKit/commit/f5703d22611a6e77c095d7e96ebf624b8143cf97
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M Source/WebCore/platform/graphics/gstreamer/GStreamerVideoFrameConverter.cpp
Log Message:
-----------
Cherry-pick 288840 at main (b9107842430e). https://bugs.webkit.org/show_bug.cgi?id=285745
REGRESSION(288686 at main): [GStreamer] Critical warning when running fast/mediastream/mediastreamtrack-video-clone.html
https://bugs.webkit.org/show_bug.cgi?id=285745
Reviewed by Xabier Rodriguez-Calvar.
Make sure the GsVideoMeta on converted video frames corresponds to the requested caps.
* Source/WebCore/platform/graphics/gstreamer/GStreamerVideoFrameConverter.cpp:
(WebCore::GStreamerVideoFrameConverter::GStreamerVideoFrameConverter):
(WebCore::GStreamerVideoFrameConverter::convert):
Canonical link: https://commits.webkit.org/288840@main
Canonical link: https://commits.webkit.org/282416.426@2.46-jan-2025-multimedia
Commit: 9c572fc1947b480a99e367ea4b31aaeade44da18
https://github.com/WebKit/WebKit/commit/9c572fc1947b480a99e367ea4b31aaeade44da18
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M LayoutTests/platform/glib/TestExpectations
M LayoutTests/platform/glib/imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-mimetype-expected.txt
M LayoutTests/platform/wpe/TestExpectations
M Source/WebCore/platform/gstreamer/GStreamerCodecUtilities.cpp
M Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp
Log Message:
-----------
Cherry-pick 288859 at main (bac54852496e). https://bugs.webkit.org/show_bug.cgi?id=285758
[GStreamer] imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-mimetype.html fails
https://bugs.webkit.org/show_bug.cgi?id=285758
Reviewed by Xabier Rodriguez-Calvar.
Set default codecs for the mp4 container and driving-by, fix a potential buffer overflow in the
GStreamer avc codec string parser.
* LayoutTests/platform/glib/TestExpectations:
* LayoutTests/platform/glib/imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-mimetype-expected.txt:
* LayoutTests/platform/wpe/TestExpectations:
* Source/WebCore/platform/gstreamer/GStreamerCodecUtilities.cpp:
* Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp:
(WebCore::MediaRecorderPrivateBackend::MediaRecorderPrivateBackend):
Canonical link: https://commits.webkit.org/288859@main
Canonical link: https://commits.webkit.org/282416.427@2.46-jan-2025-multimedia
Commit: eb722250d9e4747b70d8fc0130468fdc22d4e41e
https://github.com/WebKit/WebKit/commit/eb722250d9e4747b70d8fc0130468fdc22d4e41e
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M Source/WebCore/platform/mediastream/gstreamer/GStreamerWebRTCLogSink.cpp
Log Message:
-----------
Cherry-pick 288860 at main (b409dbbfe5a2). https://bugs.webkit.org/show_bug.cgi?id=285814
REGRESSION(288642 at main): [GStreamer][Debug] Triggers ASSERT when running http/tests/inspector/gatherWebInspectorRTCLogs.html
https://bugs.webkit.org/show_bug.cgi?id=285814
Reviewed by Xabier Rodriguez-Calvar.
The gst_debug_message_get() function returns nullptr when it fails to apply the format specifiers to
the debug message, so this needs to be accounted for and we now return early when this happens.
* Source/WebCore/platform/mediastream/gstreamer/GStreamerWebRTCLogSink.cpp:
(WebCore::GStreamerWebRTCLogSink::start):
Canonical link: https://commits.webkit.org/288860@main
Canonical link: https://commits.webkit.org/282416.428@2.46-jan-2025-multimedia
Commit: a6c71ae38ae79fce8c8ca486eb77033b86a6ec04
https://github.com/WebKit/WebKit/commit/a6c71ae38ae79fce8c8ca486eb77033b86a6ec04
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.h
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.cpp
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.h
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderBackend.cpp
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderBackend.h
M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.cpp
M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.h
M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.h
M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceGStreamer.cpp
M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceGStreamer.h
Log Message:
-----------
Cherry-pick 288696 at main (1fee803ca0a7). https://bugs.webkit.org/show_bug.cgi?id=285434
[GStreamer][WebRTC] Basic support for network conditions simulation
https://bugs.webkit.org/show_bug.cgi?id=285434
Reviewed by Xabier Rodriguez-Calvar.
This patch adds support for 2 new environment variables, WEBKIT_WEBRTC_NETSIM_SRC_OPTIONS and
WEBKIT_WEBRTC_NETSIM_SINK_OPTIONS allowing to simulate varying network conditions on incoming and
outgoing WebRTC streams, respectively. For instance setting the value of
WEBKIT_WEBRTC_NETSIM_SRC_OPTIONS to "drop-probability=0.05" would simulate 5% packets drops for
incoming streams. The options are the ones exposed by the GStreamer netsim element.
Ideally the netsim elements should be tweakable at runtime, maybe that can be done using the future
WebRTC devtools frontend.
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:
(WebCore::GStreamerMediaEndpoint::netSimOptionsFromEnvironment):
(WebCore::GStreamerMediaEndpoint::maybeInsertNetSimForElement):
(WebCore::GStreamerMediaEndpoint::initializePipeline):
(WebCore::GStreamerMediaEndpoint::createTransceiverBackends):
(WebCore::GStreamerMediaEndpoint::requestAuxiliarySender):
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.h:
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.cpp:
(WebCore::GStreamerPeerConnectionBackend::dispatchSenderBitrateRequest):
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.h:
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderBackend.cpp:
(WebCore::GStreamerRtpSenderBackend::dispatchBitrateRequest):
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderBackend.h:
* Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.cpp:
(WebCore::RealtimeOutgoingAudioSourceGStreamer::dispatchBitrateRequest):
* Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.h:
* Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.h:
* Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceGStreamer.cpp:
(WebCore::RealtimeOutgoingVideoSourceGStreamer::dispatchBitrateRequest):
* Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceGStreamer.h:
Canonical link: https://commits.webkit.org/288696@main
Canonical link: https://commits.webkit.org/282416.429@2.46-jan-2025-multimedia
Commit: be6bc94662b6ca7567b6ab715723314c3c29462d
https://github.com/WebKit/WebKit/commit/be6bc94662b6ca7567b6ab715723314c3c29462d
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp
Log Message:
-----------
Cherry-pick 288861 at main (90f7ce30e469). https://bugs.webkit.org/show_bug.cgi?id=285812
REGRESSION(288696 at main): [GStreamer][Debug] Triggers ASSERT when running webrtc/video-maxBitrate-vp8.html
https://bugs.webkit.org/show_bug.cgi?id=285812
Reviewed by Xabier Rodriguez-Calvar.
Dispatch bitrate update requests from the main thread, because the RTCPeerConnection weak ref is
only usable from that thread.
* LayoutTests/platform/glib/TestExpectations:
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:
(WebCore::GStreamerMediaEndpoint::requestAuxiliarySender):
Canonical link: https://commits.webkit.org/288861@main
Canonical link: https://commits.webkit.org/282416.430@2.46-jan-2025-multimedia
Commit: bf474e584c000fbd641a3888d5878aa3054b32f7
https://github.com/WebKit/WebKit/commit/bf474e584c000fbd641a3888d5878aa3054b32f7
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp
Log Message:
-----------
Cherry-pick 288863 at main (3cd3b2b81e21). https://bugs.webkit.org/show_bug.cgi?id=285843
[GStreamer] Re-add queues upstream of capturer sinks
https://bugs.webkit.org/show_bug.cgi?id=285843
Reviewed by Xabier Rodriguez-Calvar.
Without a queue before the sink GStreamer emits a warning. Partial revert of 288646 at main.
* Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:
(WebCore::GStreamerCapturer::setupPipeline):
Canonical link: https://commits.webkit.org/288863@main
Canonical link: https://commits.webkit.org/282416.431@2.46-jan-2025-multimedia
Commit: 38f3965758cce7f49f1d1c58760ea3a9aff0f437
https://github.com/WebKit/WebKit/commit/38f3965758cce7f49f1d1c58760ea3a9aff0f437
Author: Alicia Boya Garcia <aboya at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
A LayoutTests/media/media-source/media-source-muted-scroll-and-seek-crash-expected.txt
A LayoutTests/media/media-source/media-source-muted-scroll-and-seek-crash.html
M Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
M Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
M Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp
Log Message:
-----------
Cherry-pick 288906 at main (d65ff7e6d420). https://bugs.webkit.org/show_bug.cgi?id=285850
[GStreamer] Fix "pipeline and player states are not synchronized" assertion crash
https://bugs.webkit.org/show_bug.cgi?id=285850
Reviewed by Philippe Normand.
WebKit pauses muted videos when scrolling to save resources. However,
when running in Debug, an assertion was failing inside
MediaPlayerPrivateGStreamer::paused() in the GStreamer ports:
> ASSERTION FAILED: pipeline and player states are not synchronized
After some debugging, I found two problems that were causing the
assertion to fail:
(1) MediaPlayerPrivateGStreamerMSE::updateStates() didn't account for
this behavior, which could trigger unexpected state changes. The patch
adds it to the `shouldBePlaying` check.
(2) The assertion checks m_isPipelinePlaying against the actual state of
the pipeline. However, the code setting the pipeline to PAUSED when
scrolling away (see setVisibleInViewport()) didn't update this field.
Normally you use setPipelineState() instead which updates this field.
As drive-by fixes this patch also adds new logs and renames two fields
to have more useful names.
* m_isVisibleInViewport is negated and renamed m_isPausedByViewport,
reflecting its actual meaning (`m_isVisibleInViewport` was often true
while the HTMLMediaElement was not visible in the viewport.
* m_isVisible is renamed to m_pageIsVisible to both match other code and
to reflect its actual meaning.
This patch adds back media-source-muted-scroll-and-seek-crash.html from
276798 at main, which can be used to test the crash does not happen. Note
however the same caveat from back then applies:
> Currently, part of the code to trigger the crash isn't executed
> due to WEBKIT_GST_ALLOW_PLAYBACK_OF_INVISIBLE_VIDEOS=1 being set in the test driver in
> Tools/Scripts/webkitpy/port/glib.py (264017 at main), which needs to be commented manually.
> We should find a way to add a test preference for this code path to be enabled.
* LayoutTests/media/media-source/media-source-muted-scroll-and-seek-crash.html: Added.
* Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::paused const):
(WebCore::MediaPlayerPrivateGStreamer::changePipelineState):
(WebCore::MediaPlayerPrivateGStreamer::setVisibleInViewport):
(WebCore::MediaPlayerPrivateGStreamer::paint):
* Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
* Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
(WebCore::MediaPlayerPrivateGStreamerMSE::updateStates):
Canonical link: https://commits.webkit.org/288906@main
Canonical link: https://commits.webkit.org/282416.432@2.46-jan-2025-multimedia
Commit: ea7aff74a99194f143614349726ad8a9530e6903
https://github.com/WebKit/WebKit/commit/ea7aff74a99194f143614349726ad8a9530e6903
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M Source/WebCore/platform/graphics/gstreamer/GStreamerVideoFrameConverter.cpp
M Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
Log Message:
-----------
Cherry-pick 289000 at main (fe0e185d178c). https://bugs.webkit.org/show_bug.cgi?id=285988
[GStreamer] Deadlock when rendering frames to canvas
https://bugs.webkit.org/show_bug.cgi?id=285988
Reviewed by Xabier Rodriguez-Calvar.
Release the player sample mutex before doing a potential conversion and rendering, otherwise another
thread might attempt to lock it while the conversion is sill on-going, leading to deadlocks. The
video frame converter also now times out after waiting 200ms on the pipeline, otherwise it might get
stuck forever, leading to potential zombie WebProcesses.
This was manually tested on a Debug build, with the mediastream tests.
* Source/WebCore/platform/graphics/gstreamer/GStreamerVideoFrameConverter.cpp:
(WebCore::GStreamerVideoFrameConverter::convert):
* Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::paint):
Canonical link: https://commits.webkit.org/289000@main
Canonical link: https://commits.webkit.org/282416.433@2.46-jan-2025-multimedia
Commit: bad7af8d1eac0c527b0f41497764741d467e0c01
https://github.com/WebKit/WebKit/commit/bad7af8d1eac0c527b0f41497764741d467e0c01
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M LayoutTests/platform/glib/TestExpectations
M Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp
Log Message:
-----------
Cherry-pick 289421 at main (a4be55f451ad). https://bugs.webkit.org/show_bug.cgi?id=286530
[GStreamer] imported/w3c/web-platform-tests/webcodecs/audioDecoder-codec-specific.https.any.html?pcm* are permanent failures.
https://bugs.webkit.org/show_bug.cgi?id=286530
Reviewed by Xabier Rodriguez-Calvar.
Configure the raw audio parser to set its source pad caps based on the sink caps, otherwise it
defaults to stereo.
* LayoutTests/platform/glib/TestExpectations:
* Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:
(WebCore::configureAudioDecoderForHarnessing):
Canonical link: https://commits.webkit.org/289421@main
Canonical link: https://commits.webkit.org/282416.434@2.46-jan-2025-multimedia
Commit: 4dac59e15f9c1ed1607670c962a0a6ea7760c0ff
https://github.com/WebKit/WebKit/commit/4dac59e15f9c1ed1607670c962a0a6ea7760c0ff
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M LayoutTests/platform/glib/TestExpectations
M Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp
M Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp
M Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.h
Log Message:
-----------
Cherry-pick 289420 at main (0f278769c3b9). https://bugs.webkit.org/show_bug.cgi?id=285813
REGRESSION(287950 at main): [GStreamer] http/wpt/mediarecorder/pause-recording.html consistently times out
https://bugs.webkit.org/show_bug.cgi?id=285813
Reviewed by Xabier Rodriguez-Calvar.
The test was timing out because it was expecting an EOS event to reach the sink of an already EOS'd
pipeline. To prevent this from happening the recorder no longer does the wait if the EOS event
wasn't successfully pushed in the pipeline.
* LayoutTests/platform/glib/TestExpectations:
* Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp:
(WebCore::MediaRecorderPrivateBackend::stopRecording):
* Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
(webkitMediaStreamSrcSignalEndOfStream):
* Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.h:
Canonical link: https://commits.webkit.org/289420@main
Canonical link: https://commits.webkit.org/282416.435@2.46-jan-2025-multimedia
Commit: cad47dd1f05a58da978d24b8734a915958ea5be0
https://github.com/WebKit/WebKit/commit/cad47dd1f05a58da978d24b8734a915958ea5be0
Author: Philippe Normand <philn at igalia.com>
Date: 2025-01-29 (Wed, 29 Jan 2025)
Changed paths:
M LayoutTests/platform/glib/TestExpectations
M LayoutTests/platform/glib/fast/mediastream/RTCPeerConnection-inspect-offer-expected.txt
M LayoutTests/platform/ios/TestExpectations
M LayoutTests/platform/wpe/TestExpectations
A LayoutTests/webrtc/getDisplayMedia-pc-expected.txt
A LayoutTests/webrtc/getDisplayMedia-pc.html
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.h
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.cpp
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.h
M Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpTransceiverBackend.h
M Source/WebCore/platform/mediastream/gstreamer/GStreamerRTPPacketizer.cpp
M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp
M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.h
Log Message:
-----------
Cherry-pick 289427 at main (952a0889f8b3). https://bugs.webkit.org/show_bug.cgi?id=285433
[GStreamer][WebRTC] Improved support for incoming PeerConnection with at least one inactive transceiver
https://bugs.webkit.org/show_bug.cgi?id=285433
Reviewed by Xabier Rodriguez-Calvar.
Do not account for inactive transceivers when handling incoming tracks. Our peerconnection backend
is also now able to detect unused transceivers and re-use them instead of creating a new one when
requested from addTrack().
Test: webrtc/getDisplayMedia-pc.html
* LayoutTests/platform/glib/TestExpectations:
* LayoutTests/platform/glib/fast/mediastream/RTCPeerConnection-inspect-offer-expected.txt:
* LayoutTests/platform/ios/TestExpectations:
* LayoutTests/webrtc/getDisplayMedia-pc-expected.txt: Added.
* LayoutTests/webrtc/getDisplayMedia-pc.html: Added.
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:
(WebCore::toGStreamerMediaEndpointTransceiverState):
(WebCore::transceiverStatesFromWebRTCBin):
(WebCore::GStreamerMediaEndpoint::linkOutgoingSources):
(WebCore::GStreamerMediaEndpoint::doSetLocalDescription):
(WebCore::GStreamerMediaEndpoint::doSetRemoteDescription):
(WebCore::GStreamerMediaEndpoint::recycleTransceiverForSenderTrack):
(WebCore::GStreamerMediaEndpoint::connectIncomingTrack):
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.h:
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.cpp:
(WebCore::GStreamerPeerConnectionBackend::addTrack):
(WebCore::GStreamerPeerConnectionBackend::findExistingSender): Deleted.
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.h:
* Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpTransceiverBackend.h:
* Source/WebCore/platform/mediastream/gstreamer/GStreamerRTPPacketizer.cpp:
(WebCore::GStreamerRTPPacketizer::applyEncodingParameters const):
* Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp:
(WebCore::RealtimeOutgoingMediaSourceGStreamer::start):
(WebCore::RealtimeOutgoingMediaSourceGStreamer::stopOutgoingSource):
(WebCore::RealtimeOutgoingMediaSourceGStreamer::configure):
(WebCore::RealtimeOutgoingMediaSourceGStreamer::type const):
* Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.h:
Canonical link: https://commits.webkit.org/289427@main
Canonical link: https://commits.webkit.org/282416.436@2.46-jan-2025-multimedia
Compare: https://github.com/WebKit/WebKit/compare/4bbfd1c7be91...cad47dd1f05a
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