[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