[webkit-changes] [WebKit/WebKit] 6ca154: Cherry-pick 286080 at main (da9240878292). https://bu...

Vivienne noreply at github.com
Tue Nov 26 01:25:55 PST 2024


  Branch: refs/heads/webkitglib/2.46
  Home:   https://github.com/WebKit/WebKit
  Commit: 6ca154e7038f7a1e43121bbc8c4123843d36acc7
      https://github.com/WebKit/WebKit/commit/6ca154e7038f7a1e43121bbc8c4123843d36acc7
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    A LayoutTests/platform/glib/http/wpt/mediarecorder/mimeType-expected.txt
    M Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp
    M Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.h
    M Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp
    M Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.h

  Log Message:
  -----------
  Cherry-pick 286080 at main (da9240878292). https://bugs.webkit.org/show_bug.cgi?id=281295

    [GStreamer] MediaRecorder enhancements
    https://bugs.webkit.org/show_bug.cgi?id=281295

    Reviewed by Xabier Rodriguez-Calvar.

    This patch adds WebM (for GStreamer versions >= 1.24.9) and audio bitrate configuration support to
    the GStreamer MediaRecorder backend. As we also handle vorbis encoding, add platform baselines for
    the mimeType test which expects that codec to not be supported.

    * LayoutTests/platform/glib/TestExpectations:
    * LayoutTests/platform/glib/http/wpt/mediarecorder/MediaRecorder-first-frame-expected.txt: Added.
    * LayoutTests/platform/glib/http/wpt/mediarecorder/mimeType-expected.txt: Added.
    * Source/WebCore/platform/graphics/gstreamer/GStreamerRegistryScanner.cpp:
    (WebCore::GStreamerRegistryScanner::isCodecSupported const):
    * Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp:
    (WebCore::MediaRecorderPrivateBackend::MediaRecorderPrivateBackend):
    (WebCore::MediaRecorderPrivateBackend::fetchData):
    (WebCore::MediaRecorderPrivateBackend::containerProfile):
    (WebCore::MediaRecorderPrivateBackend::configureAudioEncoder):
    (WebCore::MediaRecorderPrivateBackend::preparePipeline):
    (WebCore::MediaRecorderPrivateBackend::mimeType const): Deleted.
    * Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.h:
    (WebCore::MediaRecorderPrivateBackend::mimeType const):

    Canonical link: https://commits.webkit.org/286080@main

Canonical link: https://commits.webkit.org/282416.296@webkitglib/2.46


  Commit: b56c2a0c578029ccf93b325cf5ede884c1189ce0
      https://github.com/WebKit/WebKit/commit/b56c2a0c578029ccf93b325cf5ede884c1189ce0
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M LayoutTests/platform/glib/TestExpectations
    M LayoutTests/platform/gtk/TestExpectations
    M LayoutTests/platform/wpe/TestExpectations
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerIncomingTrackProcessor.cpp

  Log Message:
  -----------
  Cherry-pick 286322 at main (55837daba8e1). https://bugs.webkit.org/show_bug.cgi?id=276587

    [GStreamer][WebRTC] webrtc/video-av1.html is flaky
    https://bugs.webkit.org/show_bug.cgi?id=276587
    <rdar://problem/131697366>

    Reviewed by Xabier Rodriguez-Calvar.

    The test was consistently timing out since 281394 at main, due to two issues:

    - After disabling the local track, the buffers on the remote track no longer had video metas,
    because the allocation query on the incoming track was no longer active.
    - The frames-decoded stats were no set in case there was no dropped frame on the video sink.

    * LayoutTests/platform/gtk/TestExpectations:
    * LayoutTests/platform/wpe/TestExpectations:
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerIncomingTrackProcessor.cpp:
    (WebCore::GStreamerIncomingTrackProcessor::configure):
    (WebCore::GStreamerIncomingTrackProcessor::stats):

    Canonical link: https://commits.webkit.org/286322@main

Canonical link: https://commits.webkit.org/282416.297@webkitglib/2.46


  Commit: f9abcba36ec2ef2a94acdf454320327d82aef00b
      https://github.com/WebKit/WebKit/commit/f9abcba36ec2ef2a94acdf454320327d82aef00b
  Author: Théo Maillart <tmaillart at freebox.fr>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp

  Log Message:
  -----------
  Cherry-pick 286347 at main (9e9ea966373d). https://bugs.webkit.org/show_bug.cgi?id=282749

    [GStreamer] Video dimensions are wrong since GStreamer 1.24.9
    https://bugs.webkit.org/show_bug.cgi?id=282749

    Reviewed by Philippe Normand.

    With the latest version of GStreamer, if the source is not selectable,
    uridecodebin3 will drop the stream collection emitted from this element
    As we only consider stream collection from the source element, we will
    never set the stream collection internally, this will produce faulty
    behaviour such as using wrong video dimensions
    To avoid that, we reply true to the selectable query

    * Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
    (webKitMediaSrcQuery):

    Canonical link: https://commits.webkit.org/286347@main

Canonical link: https://commits.webkit.org/282416.298@webkitglib/2.46


  Commit: e07e9654fe826eed3327fb588e0b420967849cfc
      https://github.com/WebKit/WebKit/commit/e07e9654fe826eed3327fb588e0b420967849cfc
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M LayoutTests/platform/glib/TestExpectations
    A LayoutTests/platform/glib/http/wpt/mediarecorder/MediaRecorder-audio-samplingrate-change-expected.txt
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.h
    M Source/WebCore/platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.cpp
    M Source/WebCore/platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.h

  Log Message:
  -----------
  Cherry-pick 286528 at main (803a89518b4e). https://bugs.webkit.org/show_bug.cgi?id=282534

    [GStreamer] http/wpt/mediarecorder/MediaRecorder-audio-samplingrate-change.html is a permanent failure
    https://bugs.webkit.org/show_bug.cgi?id=282534

    Reviewed by Xabier Rodriguez-Calvar.

    Reconfigure the capturer when the realtime media source settings have changed. Platform baselines
    are added for this test because matroskademux fails to seek in push mode on the resulting WebM blob.
    The MP4 test is passing though.

    * LayoutTests/platform/glib/TestExpectations:
    * LayoutTests/platform/glib/http/wpt/mediarecorder/MediaRecorder-audio-samplingrate-change-expected.txt: Added.
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:
    (WebCore::GStreamerCapturer::isStopped const):
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.h:
    * Source/WebCore/platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.cpp:
    (WebCore::MockRealtimeAudioSourceGStreamer::render):
    (WebCore::MockRealtimeAudioSourceGStreamer::settingsDidChange):
    * Source/WebCore/platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.h:

    Canonical link: https://commits.webkit.org/286528@main

Canonical link: https://commits.webkit.org/282416.299@webkitglib/2.46


  Commit: 41a49ba82f3658c9242067d11ca836ace64e7796
      https://github.com/WebKit/WebKit/commit/41a49ba82f3658c9242067d11ca836ace64e7796
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp
    M Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp
    M Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
    M Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp
    M Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp
    M Source/WebCore/platform/mediastream/RealtimeMediaSource.h
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.h
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.h
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerMockDevice.cpp
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h
    M Source/WebCore/platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.cpp
    M Source/WebCore/platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.h
    M Source/WebCore/platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp
    M Source/WebCore/platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.h

  Log Message:
  -----------
  Cherry-pick 286479 at main (a83ef3f05200). https://bugs.webkit.org/show_bug.cgi?id=282756

    [GStreamer][WebRTC] Latency improvements
    https://bugs.webkit.org/show_bug.cgi?id=282756
    <rdar://problem/139497628>

    Reviewed by Xabier Rodriguez-Calvar.

    When sharing data between pipelines it is recommended to use a shared base time of 0 and -1 start
    time on each pipeline. If appsrc is used its handle-segment-change property should be enabled as
    well. Then latency queries need to be plumbed as well, this was partly done already for incoming
    sources, but wasn't done yet for capture sources. Finally the RTP latency for incoming streams was
    reduced from 200ms to 40ms in webrtcbin.

    With this patch the end-to-end latency on the pc1 demo went from ~10 frames to 3 (or 4 frames).

    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:
    (WebCore::GStreamerMediaEndpoint::initializePipeline):
    * Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:
    (WebCore::connectSimpleBusMessageCallback):
    * Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
    (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
    (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
    * Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp:
    (WebCore::MediaRecorderPrivateBackend::preparePipeline):
    * Source/WebCore/platform/mediastream/RealtimeMediaSource.h:
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
    (WebCore::GStreamerAudioCaptureSource::GStreamerAudioCaptureSource):
    (WebCore::GStreamerAudioCaptureSource::queryCaptureLatency const):
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.h:
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.cpp:
    (WebCore::GStreamerCaptureDeviceManager::registerCapturer):
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h:
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:
    (WebCore::GStreamerCapturer::setupPipeline):
    (WebCore::GStreamerCapturer::queryLatency):
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.h:
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerMockDevice.cpp:
    (webkitMockDeviceCreateElement):
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
    (WebCore::m_deviceType):
    (WebCore::GStreamerVideoCaptureSource::queryCaptureLatency const):
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h:
    * Source/WebCore/platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.cpp:
    (WebCore::MockRealtimeAudioSourceGStreamer::queryCaptureLatency const):
    * Source/WebCore/platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.h:
    * Source/WebCore/platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.cpp:
    (WebCore::MockRealtimeVideoSourceGStreamer::queryCaptureLatency const):
    * Source/WebCore/platform/mediastream/gstreamer/MockRealtimeVideoSourceGStreamer.h:

    Canonical link: https://commits.webkit.org/286479@main

Canonical link: https://commits.webkit.org/282416.300@webkitglib/2.46


  Commit: 5046e6f857498e1aada9f739baf1a4355df00703
      https://github.com/WebKit/WebKit/commit/5046e6f857498e1aada9f739baf1a4355df00703
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    A LayoutTests/webrtc/stats-timestamp-increases-expected.txt
    A LayoutTests/webrtc/stats-timestamp-increases.html
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.h

  Log Message:
  -----------
  Cherry-pick 283693 at main (fa7d13583e7f). https://bugs.webkit.org/show_bug.cgi?id=279508

    [GStreamer][WebRTC] Rewrite stats timestamps
    https://bugs.webkit.org/show_bug.cgi?id=279508

    Reviewed by Xabier Rodriguez-Calvar.

    The stats provided by webrtcbin are timestamped using the system monotonic time, which is not
    exactly following the spec which stipulates that we should use Performance.timeOrigin +
    Performance.now(). By applying the monotonic offset to the epoch we can use
    Performance::reduceTimeResolution() and get a bit closer to spec compliance.

    Covered by a new test, inspired from
    imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-getStats.https.html that checks the
    timestamp remain close to window.performance.timeOrigin + window.performance.now().

    * LayoutTests/webrtc/stats-timestamp-increases-expected.txt: Added.
    * LayoutTests/webrtc/stats-timestamp-increases.html: Added.
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:
    (WebCore::GStreamerMediaEndpoint::preprocessStats):
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:
    (WebCore::RTCStatsReport::Stats::Stats):
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp:
    (WebCore::StatsTimestampConverter::singleton):
    (WebCore::StatsTimestampConverter::convertFromMonotonicTime const):
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.h:

    Canonical link: https://commits.webkit.org/283693@main

Canonical link: https://commits.webkit.org/282416.301@webkitglib/2.46


  Commit: 39af06eb8ff0824fb82ce4fbcc3b06f5821047a8
      https://github.com/WebKit/WebKit/commit/39af06eb8ff0824fb82ce4fbcc3b06f5821047a8
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp

  Log Message:
  -----------
  Cherry-pick 285185 at main (ea312518dd5e). https://bugs.webkit.org/show_bug.cgi?id=281308

    [GStreamer][WebRTC] Fill trackIdentifier in incoming stream stats
    https://bugs.webkit.org/show_bug.cgi?id=281308

    Reviewed by Xabier Rodriguez-Calvar.

    The MediaStreamTrack is associated at the GStreamer MediaStream source element level, so fill it in
    and plumb the value back to the stats collector.

    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:
    (WebCore::GStreamerMediaEndpoint::preprocessStats):
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:
    (WebCore::RTCStatsReport::InboundRtpStreamStats::InboundRtpStreamStats):
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:

    Canonical link: https://commits.webkit.org/285185@main

Canonical link: https://commits.webkit.org/282416.302@webkitglib/2.46


  Commit: a4d2116d57a8827f430496e273db25179469be5b
      https://github.com/WebKit/WebKit/commit/a4d2116d57a8827f430496e273db25179469be5b
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp
    M Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp
    M Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h
    M Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp
    M Source/WebCore/platform/gstreamer/GStreamerElementHarness.cpp
    M Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingVideoSourceGStreamer.cpp

  Log Message:
  -----------
  Cherry-pick 285186 at main (0cf4ab0811ed). https://bugs.webkit.org/show_bug.cgi?id=281321

    [GStreamer] Fix 1.25 deprecation warnings
    https://bugs.webkit.org/show_bug.cgi?id=281321

    Reviewed by Xabier Rodriguez-Calvar.

    The GQuark-based GStreamer APIs are going to be deprecated in GStreamer 1.26, in favor of the
    GstIdStr-based APIs, so introduce wrapper functions handling both cases in GStreamerCommon.

    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:
    (WebCore::GStreamerMediaEndpoint::preprocessStats):
    (WebCore::GStreamerMediaEndpoint::onStatsDelivered):
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:
    (WebCore::fillReportCallback):
    (WebCore::GStreamerStatsCollector::getStats):
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp:
    (WebCore::capsFromSDPMedia):
    * Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:
    (WebCore::gstStructureToJSON):
    (WebCore::gstStructureForeach):
    (WebCore::gstStructureIdSetValue):
    (WebCore::gstStructureMapInPlace):
    (WebCore::gstIdToString):
    (WebCore::gstStructureFilterAndMapInPlace):
    (WebCore::parseGstStructureValue): Deleted.
    * Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:
    * Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
    (webKitWebSrcSetExtraHeader):
    (webKitWebSrcMakeRequest):
    (webKitWebSrcProcessExtraHeaders): Deleted.
    * Source/WebCore/platform/gstreamer/GStreamerElementHarness.cpp:
    (WebCore::MermaidBuilder::describeCaps):
    * Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingVideoSourceGStreamer.cpp:
    (WebCore::RealtimeIncomingVideoSourceGStreamer::stats):

    Canonical link: https://commits.webkit.org/285186@main

Canonical link: https://commits.webkit.org/282416.303@webkitglib/2.46


  Commit: 746bc62be45860b640a4b70757dfa5888f4b9b41
      https://github.com/WebKit/WebKit/commit/746bc62be45860b640a4b70757dfa5888f4b9b41
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp

  Log Message:
  -----------
  Cherry-pick 285187 at main (e93fff94a58a). <bug>

    [GStreamer] Fix build after 285186 at main

    Unreviewed.

    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:
    (WebCore::GStreamerMediaEndpoint::preprocessStats):

    Canonical link: https://commits.webkit.org/285187@main

Canonical link: https://commits.webkit.org/282416.304@webkitglib/2.46


  Commit: eeb9c84642b1ce935c87530858c6d84d507dc37b
      https://github.com/WebKit/WebKit/commit/eeb9c84642b1ce935c87530858c6d84d507dc37b
  Author: Youenn Fablet <youenn at apple.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M LayoutTests/imported/w3c/web-platform-tests/webrtc/simulcast/negotiation-encodings.https-expected.txt
    M LayoutTests/webrtc/video-getParameters-expected.txt
    M LayoutTests/webrtc/video-getParameters.html
    M Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp
    M Source/WebCore/Modules/mediastream/RTCPeerConnection.h
    M Source/WebCore/Modules/mediastream/RTCRtpEncodingParameters.h
    M Source/WebCore/Modules/mediastream/RTCRtpEncodingParameters.idl
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp
    M Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp

  Log Message:
  -----------
  Cherry-pick 283750 at main (cbd18cef4633). https://bugs.webkit.org/show_bug.cgi?id=279193

    RTCRtpEncodingParameters has wrong default values
    https://bugs.webkit.org/show_bug.cgi?id=279193
    rdar://135345629

    Reviewed by Philippe Normand.

    We update the WebIDL according the spec.
    The default values, in particular scaleResolutionDownBy, triggered an interop issue:
    - Safari would return 1 on all layers
    - Chrome would return undefined (meaning default value 1,2, 4 is to be applied).
    - Firefox would return 1, 2, 4 as defined in the spec.

    By updating the WebIDL and binding code to libwebrtc, we align with Chrome.
    This includes aligning on failures in LayoutTests/imported/w3c/web-platform-tests/webrtc/simulcast/negotiation-encodings.https.html.
    This is probably the safest approach for now, until we reach out consensus within the WebRTC WG.

    * LayoutTests/imported/w3c/web-platform-tests/webrtc/simulcast/negotiation-encodings.https-expected.txt:
    * LayoutTests/webrtc/video-getParameters-expected.txt:
    * LayoutTests/webrtc/video-getParameters.html:
    * Source/WebCore/Modules/mediastream/RTCPeerConnection.cpp:
    (WebCore::isAudioTransceiver):
    (WebCore::validateSendEncodings):
    (WebCore::RTCPeerConnection::addTransceiver):
    * Source/WebCore/Modules/mediastream/RTCPeerConnection.h:
    * Source/WebCore/Modules/mediastream/RTCRtpEncodingParameters.h:
    * Source/WebCore/Modules/mediastream/RTCRtpEncodingParameters.idl:
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp:
    (WebCore::fromRTCEncodingParameters):
    * Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
    (WebCore::updateRTCRtpSendParameters):

    Canonical link: https://commits.webkit.org/283750@main

Canonical link: https://commits.webkit.org/282416.305@webkitglib/2.46


  Commit: 7aa3542b39ce3086749158f74a96b477af78cf5e
      https://github.com/WebKit/WebKit/commit/7aa3542b39ce3086749158f74a96b477af78cf5e
  Author: Youenn Fablet <youenn at apple.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
    M Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp
    M Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp
    M Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h
    M Tools/WebKitTestRunner/TestController.cpp

  Log Message:
  -----------
  Cherry-pick 284477 at main (20616a6e98e2). https://bugs.webkit.org/show_bug.cgi?id=280571

    Add an experimental flag for WebRTC L4S support
    rdar://136896745
    https://bugs.webkit.org/show_bug.cgi?id=280571

    Reviewed by Jean-Yves Avenard and Eric Carlson.

    We enable this flag to allow experimenting L4S support.
    We mark it as testable for now.
    We wire libwebrtc internal flag according our WebKit flag.
    We disable this flag by default on WebKitTestRunner until we have SDP negoatiation support.

    * Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
    * Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
    (WebCore::LibWebRTCMediaEndpoint::LibWebRTCMediaEndpoint):
    * Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.cpp:
    (WebCore::LibWebRTCPeerConnectionBackend::shouldEnableWebRTCL4S const):
    * Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCPeerConnectionBackend.h:
    * Tools/WebKitTestRunner/TestController.cpp:
    (WTR::TestController::resetPreferencesToConsistentValues):

    Canonical link: https://commits.webkit.org/284477@main

Canonical link: https://commits.webkit.org/282416.306@webkitglib/2.46


  Commit: ed64f58d99b0ee140039514825a6cc06ee2ea948
      https://github.com/WebKit/WebKit/commit/ed64f58d99b0ee140039514825a6cc06ee2ea948
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M LayoutTests/platform/glib/TestExpectations
    M LayoutTests/platform/glib/fast/mediastream/RTCPeerConnection-inspect-answer-expected.txt
    M LayoutTests/platform/glib/fast/mediastream/RTCPeerConnection-inspect-offer-expected.txt
    A LayoutTests/platform/glib/imported/w3c/web-platform-tests/webrtc/RTCRtpParameters-encodings-expected.txt
    M Source/WebCore/Modules/mediastream/MediaStream.cpp
    M Source/WebCore/Modules/mediastream/MediaStreamTrack.h
    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/GStreamerRtpReceiverBackend.cpp
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpReceiverBackend.h
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderBackend.cpp
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpTransceiverBackend.cpp
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp
    M Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.h
    M Source/WebCore/platform/SourcesGStreamer.txt
    A Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioRTPPacketizer.cpp
    A Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioRTPPacketizer.h
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerIncomingTrackProcessor.cpp
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp
    A Source/WebCore/platform/mediastream/gstreamer/GStreamerRTPPacketizer.cpp
    A Source/WebCore/platform/mediastream/gstreamer/GStreamerRTPPacketizer.h
    A Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoRTPPacketizer.cpp
    A Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoRTPPacketizer.h
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerWebRTCCommon.h
    M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.cpp
    M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.h
    M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp
    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 286800 at main (a5509c9f1bd7). https://bugs.webkit.org/show_bug.cgi?id=282926

    [GStreamer][WebRTC] Pipeline revamp in preparation for simulcast support
    https://bugs.webkit.org/show_bug.cgi?id=282926

    Reviewed by Xabier Rodriguez-Calvar.

    Outgoing sources can now multiplex multiple RTP streams, this is going to be required for simulcast
    support. Encoding/payloading are now done in a separate sub-bin, managed by new
    GStreamer{Audio,Video}RTPPacketizer classes. Encoding RTP parameters validation support was improved
    as well.

    * LayoutTests/platform/glib/TestExpectations:
    * LayoutTests/platform/glib/fast/mediastream/RTCPeerConnection-inspect-answer-expected.txt:
    * LayoutTests/platform/glib/fast/mediastream/RTCPeerConnection-inspect-offer-expected.txt:
    * Source/WebCore/Modules/mediastream/MediaStream.cpp:
    (WebCore::MediaStream::MediaStream):
    * Source/WebCore/Modules/mediastream/MediaStreamTrack.h:
    (WebCore::MediaStreamTrack::setMediaStreamId):
    (WebCore::MediaStreamTrack::mediaStreamId const):
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:
    (WebCore::GStreamerMediaEndpoint::initializePipeline):
    (WebCore::GStreamerMediaEndpoint::setConfiguration):
    (WebCore::getMediaStreamIdsFromSDPMedia):
    (WebCore::toGStreamerMediaEndpointTransceiverState):
    (WebCore::transceiverStatesFromWebRTCBin):
    (WebCore::GStreamerMediaEndpoint::doSetLocalDescription):
    (WebCore::GStreamerMediaEndpoint::doSetRemoteDescription):
    (WebCore::GStreamerMediaEndpoint::setDescription):
    (WebCore::GStreamerMediaEndpoint::processSDPMessage):
    (WebCore::GStreamerMediaEndpoint::configureSource):
    (WebCore::GStreamerMediaEndpoint::requestPad):
    (WebCore::GStreamerMediaEndpoint::addTrack):
    (WebCore::GStreamerMediaEndpoint::initiate):
    (WebCore::GStreamerMediaEndpoint::trackIdFromSDPMedia):
    (WebCore::GStreamerMediaEndpoint::connectIncomingTrack):
    (WebCore::GStreamerMediaEndpoint::connectPad):
    (WebCore::GStreamerMediaEndpoint::createTransceiverBackends):
    (WebCore::GStreamerMediaEndpoint::addTransceiver):
    (WebCore::GStreamerMediaEndpoint::createMutedSource):
    (WebCore::GStreamerMediaEndpoint::createSourceForTrack):
    (WebCore::GStreamerMediaEndpoint::close):
    (WebCore::GStreamerMediaEndpoint::suspend):
    (WebCore::GStreamerMediaEndpoint::onNegotiationNeeded):
    (WebCore::GStreamerMediaEndpoint::collectTransceivers):
    (WebCore::GStreamerMediaEndpoint::preprocessStats):
    (WebCore::GStreamerMediaEndpoint::configureAndLinkSource): Deleted.
    (WebCore::GStreamerMediaEndpoint::createLinkedSourceForTrack): Deleted.
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.h:
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.cpp:
    (WebCore::GStreamerPeerConnectionBackend::addTrack):
    (WebCore::GStreamerPeerConnectionBackend::createSourceForTrack):
    (WebCore::GStreamerPeerConnectionBackend::existingTransceiverForTrackId):
    (WebCore::GStreamerPeerConnectionBackend::createLinkedSourceForTrack): Deleted.
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.h:
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpReceiverBackend.cpp:
    (WebCore::GStreamerRtpReceiverBackend::GStreamerRtpReceiverBackend):
    (WebCore::GStreamerRtpReceiverBackend::getParameters):
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpReceiverBackend.h:
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderBackend.cpp:
    (WebCore::m_initData):
    (WebCore::GStreamerRtpSenderBackend::setSource):
    (WebCore::GStreamerRtpSenderBackend::replaceTrack):
    (WebCore::GStreamerRtpSenderBackend::setParameters):
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpTransceiverBackend.cpp:
    (WebCore::GStreamerRtpTransceiverBackend::GStreamerRtpTransceiverBackend):
    (WebCore::GStreamerRtpTransceiverBackend::createReceiverBackend):
    (WebCore::toRtpCodecCapability):
    (WebCore::GStreamerRtpTransceiverBackend::setCodecPreferences):
    (WebCore::getMsidFromCurrentCodecPreferences): Deleted.
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:
    (WebCore::RTCStatsReport::ReceivedRtpStreamStats::ReceivedRtpStreamStats):
    (WebCore::RTCStatsReport::OutboundRtpStreamStats::OutboundRtpStreamStats):
    (WebCore::GStreamerStatsCollector::getStats):
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp:
    (WebCore::fromRTCEncodingParameters):
    (WebCore::toRTCEncodingParameters):
    (WebCore::toRTCCodecParameters):
    (WebCore::toRTCRtpSendParameters):
    (WebCore::fromRTCCodecParameters):
    (WebCore::fromRTCSendParameters):
    (WebCore::capsFromRtpCapabilities):
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.h:
    (WebCore::webrtcKindFromCaps):
    * Source/WebCore/platform/SourcesGStreamer.txt:
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioRTPPacketizer.cpp: Added.
    (WebCore::GStreamerAudioRTPPacketizer::create):
    (WebCore::GStreamerAudioRTPPacketizer::GStreamerAudioRTPPacketizer):
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioRTPPacketizer.h: Copied from Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.h.
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerIncomingTrackProcessor.cpp:
    (WebCore::GStreamerIncomingTrackProcessor::configure):
    (WebCore::GStreamerIncomingTrackProcessor::trackReady):
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerRTPPacketizer.cpp: Added.
    (WebCore::GStreamerRTPPacketizer::GStreamerRTPPacketizer):
    (WebCore::GStreamerRTPPacketizer::configureExtensions):
    (WebCore::GStreamerRTPPacketizer::ensureMidExtension):
    (WebCore::GStreamerRTPPacketizer::rtpParameters const):
    (WebCore::GStreamerRTPPacketizer::rtpStreamId const):
    (WebCore::GStreamerRTPPacketizer::payloadType const):
    (WebCore::GStreamerRTPPacketizer::currentSequenceNumberOffset const):
    (WebCore::GStreamerRTPPacketizer::setSequenceNumberOffset):
    (WebCore::GStreamerRTPPacketizer::findLastExtensionId):
    (WebCore::GStreamerRTPPacketizer::stats const):
    (WebCore::GStreamerRTPPacketizer::startUpdatingStats):
    (WebCore::GStreamerRTPPacketizer::updateStatsFromRTPExtensions):
    (WebCore::GStreamerRTPPacketizer::stopUpdatingStats):
    (WebCore::GStreamerRTPPacketizer::applyEncodingParameters const):
    (WebCore::GStreamerRTPPacketizer::reconfigure):
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerRTPPacketizer.h: Added.
    (WebCore::GStreamerRTPPacketizer::bin const):
    (WebCore::GStreamerRTPPacketizer::payloader const):
    (WebCore::GStreamerRTPPacketizer::updateStats):
    (WebCore::GStreamerRTPPacketizer::configure const):
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoRTPPacketizer.cpp: Added.
    (WebCore::GStreamerVideoRTPPacketizer::create):
    (WebCore::GStreamerVideoRTPPacketizer::GStreamerVideoRTPPacketizer):
    (WebCore::GStreamerVideoRTPPacketizer::configure const):
    (WebCore::GStreamerVideoRTPPacketizer::updateStats):
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoRTPPacketizer.h: Copied from Source/WebCore/platform/mediastream/gstreamer/GStreamerWebRTCCommon.h.
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerWebRTCCommon.h:
    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.cpp:
    (WebCore::RealtimeOutgoingAudioSourceGStreamer::RealtimeOutgoingAudioSourceGStreamer):
    (WebCore::RealtimeOutgoingAudioSourceGStreamer::initialize):
    (WebCore::RealtimeOutgoingAudioSourceGStreamer::linkTee):
    (WebCore::RealtimeOutgoingAudioSourceGStreamer::outgoingSourcePad const):
    (WebCore::RealtimeOutgoingAudioSourceGStreamer::createPacketizer):
    (WebCore::RealtimeOutgoingAudioSourceGStreamer::setPayloadType): Deleted.
    (WebCore::RealtimeOutgoingAudioSourceGStreamer::setParameters): Deleted.
    (WebCore::RealtimeOutgoingAudioSourceGStreamer::teardown): Deleted.
    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.h:
    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp:
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::RealtimeOutgoingMediaSourceGStreamer):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::~RealtimeOutgoingMediaSourceGStreamer):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::initialize):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::allowedCaps const):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::rtpCaps const):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::start):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::stopOutgoingSource):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::sourceEnabledChanged):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::initializeSourceFromTrackPrivate):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::link):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::setSinkPad):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::checkMid):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::parameters):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::codecPreferencesChanged):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::replaceTrack):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::setInitialParameters):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::configure):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::setParameters):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::getPacketizerForRid):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::linkPacketizer):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::configurePacketizers):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::lookupRtpExtensions):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::stats):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::startUpdatingStats):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::stopUpdatingStats):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::teardown):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::flush): Deleted.
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::initializeFromTrack): Deleted.
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::unlinkPayloader): Deleted.
    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.h:
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::setPayloadType): Deleted.
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::fillEncodingParameters): Deleted.
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::setParameters): Deleted.
    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceGStreamer.cpp:
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::RealtimeOutgoingVideoSourceGStreamer):
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::initializePreProcessor):
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::teardown):
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::rtpCapabilities const):
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::linkTee):
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::outgoingSourcePad const):
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::createPacketizer):
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::updateStats): Deleted.
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::setPayloadType): Deleted.
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::startUpdatingStats): Deleted.
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::stopUpdatingStats): Deleted.
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::sourceEnabledChanged): Deleted.
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::flush): Deleted.
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::setParameters): Deleted.
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::fillEncodingParameters): Deleted.
    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceGStreamer.h:

    Canonical link: https://commits.webkit.org/286800@main

Canonical link: https://commits.webkit.org/282416.307@webkitglib/2.46


  Commit: 74ed13858f1bfe02c0d69e422592e13250ed88e3
      https://github.com/WebKit/WebKit/commit/74ed13858f1bfe02c0d69e422592e13250ed88e3
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M LayoutTests/platform/glib/TestExpectations
    M Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp
    M Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.h

  Log Message:
  -----------
  Cherry-pick 286587 at main (237403719d8f). https://bugs.webkit.org/show_bug.cgi?id=282911

    [GStreamer] imported/w3c/web-platform-tests/mediacapture-record/MediaRecorder-blob-timecode.https.html is a permanent failure
    https://bugs.webkit.org/show_bug.cgi?id=282911

    Reviewed by Xabier Rodriguez-Calvar.

    Ensure the first blob event has a time code set to 0. Following ones use the position reported by
    the transcoder.

    * LayoutTests/platform/glib/TestExpectations:
    * Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp:
    (WebCore::MediaRecorderPrivateBackend::stopRecording):
    (WebCore::MediaRecorderPrivateBackend::fetchData):
    (WebCore::MediaRecorderPrivateBackend::notifyPosition):
    * Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.h:
    (WebCore::MediaRecorderPrivateBackend::WTF_GUARDED_BY_LOCK):
    (WebCore::MediaRecorderPrivateBackend::notifyPosition): Deleted.

    Canonical link: https://commits.webkit.org/286587@main

Canonical link: https://commits.webkit.org/282416.308@webkitglib/2.46


  Commit: 2b66d679071f5180c3a8e921f1dfd5db2f673b09
      https://github.com/WebKit/WebKit/commit/2b66d679071f5180c3a8e921f1dfd5db2f673b09
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.cpp

  Log Message:
  -----------
  Cherry-pick 286718 at main (aaf43cf52732). https://bugs.webkit.org/show_bug.cgi?id=283170

    REGRESSION(286528 at main): Triggers asserts in Mock audio source
    https://bugs.webkit.org/show_bug.cgi?id=283170

    Reviewed by Xabier Rodriguez-Calvar.

    * Source/WebCore/platform/mediastream/gstreamer/MockRealtimeAudioSourceGStreamer.cpp:
    (WebCore::MockRealtimeAudioSourceGStreamer::render): Make sure the stream format is set before
    attempting to access it. Also simplify the loop exit condition.

    Canonical link: https://commits.webkit.org/286718@main

Canonical link: https://commits.webkit.org/282416.309@webkitglib/2.46


  Commit: 7dc318887c7ca2088013c47044e81749b27267dc
      https://github.com/WebKit/WebKit/commit/7dc318887c7ca2088013c47044e81749b27267dc
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp
    M Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp

  Log Message:
  -----------
  Cherry-pick 286790 at main (34beac2e3606). https://bugs.webkit.org/show_bug.cgi?id=283298

    [GStreamer][PipeWire] getDisplayMedia() broken
    https://bugs.webkit.org/show_bug.cgi?id=283298

    Reviewed by Xabier Rodriguez-Calvar.

    Move the DMABuf caps builder utility function to GStreamerCommon and use it from the VideoCapturer,
    fixing caps negotiation issues with PipeWire.

    * Source/WebCore/platform/graphics/gstreamer/GLVideoSinkGStreamer.cpp:
    (initializeDMABufAvailability):
    (drmFourccToGstVideoFormat): Deleted.
    (buildDMABufCaps): Deleted.
    * Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:
    (WebCore::drmFourccToGstVideoFormat):
    (WebCore::buildDMABufCaps):
    * Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:
    * Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCapturer.cpp:
    (WebCore::GStreamerVideoCapturer::createConverter):

    Canonical link: https://commits.webkit.org/286790@main

Canonical link: https://commits.webkit.org/282416.310@webkitglib/2.46


  Commit: a4fa68a3f7fd944ebc0ecec51d5ecb42ed71522b
      https://github.com/WebKit/WebKit/commit/a4fa68a3f7fd944ebc0ecec51d5ecb42ed71522b
  Author: Carlos Bentzen <cadubentzen at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoDecoderFactory.cpp

  Log Message:
  -----------
  Cherry-pick 286848 at main (20f5df0feb7d). https://bugs.webkit.org/show_bug.cgi?id=283359

    [GStreamer][LibWebRTC] No H.264 decoder found when using broadcom and westeros quirks and no FFmpeg installed
    https://bugs.webkit.org/show_bug.cgi?id=283359

    Reviewed by Philippe Normand.

    Use GStreamerRegistryScanner::isCodecSupport() instead of the
    hand-written implementation of GstDecoderFactory(), because this is more
    robust to detect decoders in hardware-accelerated scenarios with custom
    elements and GStreamer quirks.

    This is cherry-pick of https://github.com/WebPlatformForEmbedded/WPEWebKit/commit/d7a7509280358127a6ac75d9ba2242aa9b88150e
    Original author: Vivek.A <Vivek_Arumugam at comcast.com>

    * Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoDecoderFactory.cpp:
    (WebCore::GStreamerWebRTCVideoDecoder::GstDecoderFactory):

    Canonical link: https://commits.webkit.org/286848@main

Canonical link: https://commits.webkit.org/282416.311@webkitglib/2.46


  Commit: 52919c8dab086a2f784d9268fc452f236f59fc70
      https://github.com/WebKit/WebKit/commit/52919c8dab086a2f784d9268fc452f236f59fc70
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceGStreamer.cpp

  Log Message:
  -----------
  Cherry-pick 286845 at main (618f62718940). https://bugs.webkit.org/show_bug.cgi?id=283361

    [GStreamer][WebRTC] Use autovideoflip for outgoing video stream rotation handling
    https://bugs.webkit.org/show_bug.cgi?id=283361

    Reviewed by Xabier Rodriguez-Calvar.

    The autovideoflip element provides more flexibility regarding input formats and underlying memory.

    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceGStreamer.cpp:
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::initializePreProcessor):

    Canonical link: https://commits.webkit.org/286845@main

Canonical link: https://commits.webkit.org/282416.312@webkitglib/2.46


  Commit: 0948ea98c0b80551e6dc1cfe415612f742644db4
      https://github.com/WebKit/WebKit/commit/0948ea98c0b80551e6dc1cfe415612f742644db4
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M LayoutTests/platform/glib/TestExpectations
    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

  Log Message:
  -----------
  Cherry-pick 286894 at main (dddc53d20d11). https://bugs.webkit.org/show_bug.cgi?id=283354

    [GStreamer][WebRTC] webrtc/video-lowercase-media-subtype.html is timing out
    https://bugs.webkit.org/show_bug.cgi?id=283354

    Reviewed by Xabier Rodriguez-Calvar.

    The test was failing because the incoming track was associated with new transceiver instead of
    reusing the one created during the addTransceiver() call. There was also a mix-up of MediaStream and
    Track IDs.

    * LayoutTests/platform/glib/TestExpectations:
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:
    (WebCore::GStreamerMediaEndpoint::connectIncomingTrack):
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.h:
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.cpp:
    (WebCore::GStreamerPeerConnectionBackend::existingTransceiverForTrackId): Deleted.
    * Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.h:

    Canonical link: https://commits.webkit.org/286894@main

Canonical link: https://commits.webkit.org/282416.313@webkitglib/2.46


  Commit: 1a55f44f87ea9c85244707dd7f742c401dac1c0a
      https://github.com/WebKit/WebKit/commit/1a55f44f87ea9c85244707dd7f742c401dac1c0a
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.cpp
    M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.h
    M Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp
    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 286895 at main (0b855998667a). https://bugs.webkit.org/show_bug.cgi?id=283411

    REGRESSION(286479 at main): [GStreamer][WebRTC] Broke webrtc/captureCanvas-webrtc.html
    https://bugs.webkit.org/show_bug.cgi?id=283411

    Reviewed by Xabier Rodriguez-Calvar.

    The outgoing tracks no longer require a livesync element since the WebRTC pipeline and playback
    pipeline share the same clock.

    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.cpp:
    (WebCore::RealtimeOutgoingAudioSourceGStreamer::linkTee): Deleted.
    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.h:
    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp:
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::RealtimeOutgoingMediaSourceGStreamer):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::start):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::stopOutgoingSource):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::linkSource):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::configurePacketizers):
    (WebCore::RealtimeOutgoingMediaSourceGStreamer::teardown):
    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.h:
    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceGStreamer.cpp:
    (WebCore::RealtimeOutgoingVideoSourceGStreamer::linkTee): Deleted.
    * Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceGStreamer.h:

    Canonical link: https://commits.webkit.org/286895@main

Canonical link: https://commits.webkit.org/282416.314@webkitglib/2.46


  Commit: 2163d0eaabc874b205fd465787b4cb6ca1a40cef
      https://github.com/WebKit/WebKit/commit/2163d0eaabc874b205fd465787b4cb6ca1a40cef
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp

  Log Message:
  -----------
  Cherry-pick 286896 at main (4b3a7f836f5a). https://bugs.webkit.org/show_bug.cgi?id=283414

    [GStreamer][WebRTC] Canvas to PeerConnection produces flipped video frames on receiving side
    https://bugs.webkit.org/show_bug.cgi?id=283414

    Reviewed by Xabier Rodriguez-Calvar.

    The issue was that the pad probe in the mediastreamsrc element was pushing a tag event without
    orientation information, after the video frame observer notified its first frame (with video
    rotation), so a tag event with rotation was pushed from the videoFrameAvailable callback and then
    another one without video rotation info was pushed from the pad probe.

    * Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp:
    (webkitMediaStreamSrcPadProbeCb):
    (webkitMediaStreamSrcAddTrack):

    Canonical link: https://commits.webkit.org/286896@main

Canonical link: https://commits.webkit.org/282416.315@webkitglib/2.46


  Commit: 3c3b9d8cc2da042017bb0ff2e00357809d075fa9
      https://github.com/WebKit/WebKit/commit/3c3b9d8cc2da042017bb0ff2e00357809d075fa9
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoRTPPacketizer.cpp

  Log Message:
  -----------
  Cherry-pick 287056 at main (6a6659e8614f). https://bugs.webkit.org/show_bug.cgi?id=283557

    [GStreamer][WebRTC] Fallback to constrained-baseline when H.264 is negotiated for outgoing video source
    https://bugs.webkit.org/show_bug.cgi?id=283557

    Reviewed by Xabier Rodriguez-Calvar.

    According to RFC 7742, endpoints MUST support Constrained Baseline Profile Level 1.2 and SHOULD
    support H.264 Constrained High Profile Level 1.3. So if no profile is specified, use
    constrained-baseline.

    The AVC constraint flags were also wrongly set for this profile, so fix that as well, by setting the
    second most significant bit to 1, corresponding to the constraint_set1_flag.

    * Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoRTPPacketizer.cpp:
    (WebCore::GStreamerVideoRTPPacketizer::create):

    Canonical link: https://commits.webkit.org/287056@main

Canonical link: https://commits.webkit.org/282416.316@webkitglib/2.46


  Commit: bf31036436930fcb03e4c118e7e749b50d9a3fc2
      https://github.com/WebKit/WebKit/commit/bf31036436930fcb03e4c118e7e749b50d9a3fc2
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp

  Log Message:
  -----------
  Cherry-pick 287055 at main (33adf31f1891). https://bugs.webkit.org/show_bug.cgi?id=283622

    REGRESSION(279943 at main): [GStreamer][MSE] Infinite recursion when pausing the player
    https://bugs.webkit.org/show_bug.cgi?id=283622

    Reviewed by Jean-Yves Avenard.

    Exit early from the pause method in case the player is already paused, in order to prevent an
    infinite recursion triggered by the call to player->playbackStateChanged() that would make the media
    element call pause() again, and so on.

    * Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
    (WebCore::MediaPlayerPrivateGStreamerMSE::pause):

    Canonical link: https://commits.webkit.org/287055@main

Canonical link: https://commits.webkit.org/282416.317@webkitglib/2.46


  Commit: 42878c03b353da5da4a7435316f4b8873de0581a
      https://github.com/WebKit/WebKit/commit/42878c03b353da5da4a7435316f4b8873de0581a
  Author: Philippe Normand <philn at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp

  Log Message:
  -----------
  Cherry-pick 287057 at main (06c5d71ff724). https://bugs.webkit.org/show_bug.cgi?id=283646

    [GStreamer][MediaRecorder] Restrict audio samplerate to original value
    https://bugs.webkit.org/show_bug.cgi?id=283646

    Reviewed by Xabier Rodriguez-Calvar.

    This effectively ignores sampleRate changes on the input audio track. See also bug 282489. Tested
    manually.

    * Source/WebCore/platform/mediarecorder/MediaRecorderPrivateGStreamer.cpp:
    (WebCore::MediaRecorderPrivateBackend::containerProfile):

    Canonical link: https://commits.webkit.org/287057@main

Canonical link: https://commits.webkit.org/282416.318@webkitglib/2.46


  Commit: 847af600d25f5de30f0f89df506c7138d02c348e
      https://github.com/WebKit/WebKit/commit/847af600d25f5de30f0f89df506c7138d02c348e
  Author: Alicia Boya Garcia <aboya at igalia.com>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/graphics/TrackPrivateBase.h
    M Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp
    M Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp

  Log Message:
  -----------
  Cherry-pick 286324 at main (d6348a3fcc70). https://bugs.webkit.org/show_bug.cgi?id=282396

    [GStreamer] Fix invalid AtomString usage in TrackPrivateBaseGStreamer
    https://bugs.webkit.org/show_bug.cgi?id=282396

    Reviewed by Philippe Normand and Xabier Rodriguez-Calvar.

    This fixes a flaky assertion crash in imported/w3c/web-platform-tests/media-source/mediasource-sequencemode-append-buffer.html

    AtomString values must be always created, read, written and destroyed
    from the same thread, as not only they're not thread-safe, but they also
    depend on thread-local storage.

    Fortunately, this is already the case for most usages I've seen in
    TrackPrivateBaseGStreamer and derived. This patch fixes the one case of
    cross-thread access I was able to identify as the culprit behind the
    crash.

    This patch also adds a number of thread assertions and comments so that
    it is more clear what functions should be called only in main thread and
    which ones may be called from any thread.

    * Source/WebCore/platform/graphics/TrackPrivateBase.h:
    * Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
    (WebCore::InbandTextTrackPrivateGStreamer::tagsChanged):
    * Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
    (WebCore::TrackPrivateBaseGStreamer::setPad):
    (WebCore::TrackPrivateBaseGStreamer::tagsChanged):
    (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged):
    (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfStreamChanged):
    (WebCore::TrackPrivateBaseGStreamer::updateTrackIDFromTags):

    Canonical link: https://commits.webkit.org/286324@main

Canonical link: https://commits.webkit.org/282416.319@webkitglib/2.46


  Commit: dcdf85fc4f0ccd85cf3f20f7ea4fefbfcc765ca3
      https://github.com/WebKit/WebKit/commit/dcdf85fc4f0ccd85cf3f20f7ea4fefbfcc765ca3
  Author: Vivienne Watermeier <vwatermeier at igalia.com>
  Date:   2024-11-26 (Tue, 26 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp
    M Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h
    M Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp
    M Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h
    M Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp
    M Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h
    M Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
    M Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
    M Source/WebCore/platform/graphics/gstreamer/TextSinkGStreamer.cpp
    M Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp
    M Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h
    M Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp
    M Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h
    M Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp
    M Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.h
    M Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp
    M Source/WebCore/platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp
    M Source/WebCore/platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.h
    M Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp
    M Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.h
    M Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp
    M Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h
    M Source/WebCore/platform/graphics/gstreamer/mse/TrackQueue.cpp
    M Source/WebCore/platform/graphics/gstreamer/mse/TrackQueue.h
    M Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp
    M Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.h

  Log Message:
  -----------
  Cherry-pick 286527 at main (7a7367fb8f43). https://bugs.webkit.org/show_bug.cgi?id=270638

    [GStreamer] Use integers as track ID instead of AtomString
    https://bugs.webkit.org/show_bug.cgi?id=270638

    Reviewed by Philippe Normand.

    Switch to using integers for track IDs internally instead of AtomString.

    Some notable special cases:
    - as MediaStream tracks are recommended by the spec to use UUID strings,
      we just truncate it to 64 bits for the internal TrackID,
      and return the full ID as String (stored in m_gstStreamId) in `trackUID()`
    - In MSE, there is the potential for multiple SourceBuffers providing tracks
      with identical IDs. Previously, this was less of an issue since IDs were
      also based on track type, so two tracks "A0" and "V0" would still have
      distinct IDs. However, now they would both get ID 0, and one would get
      dropped in `MediaSourceTrackGStreamer::filterOutRepeatingTracks`
      To work around this, AppendPipeline will register any IDs it creates
      with `MediaSourcePrivateGStreamer::m_trackIdRegistry`, which will
      assign different IDs in case of a collision.
      There has been some consideration as to where to place this registry,
      and how to assign fallback IDs, which is both explained in comments.
      One test that produced these collisions is:
      imported/w3c/web-platform-tests/encrypted-media/clearkey-mp4-playback-temporary-waitingforkey.https.html

    * Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
    (WebCore::AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer):
    Add constructor with an explicit TrackID argument.
    (WebCore::AudioTrackPrivateGStreamer::capsChanged):
    * Source/WebCore/platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
    (WebCore::AudioTrackPrivateGStreamer::create):

    * Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:
    (WebCore::getTrackIdFromPad): wrapper around gst_pad_get_stream_id, parses stream-id into a TrackID
    (WebCore::getTrackIdFromStream): ditto, wraps around gst_stream_get_stream_id
    (WebCore::trackIdFromString): parses a stream-id.
    Can handle plain integers, the qtdemux-style ".../<ID>" format, and UUIDs.
    * Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.h:

    * Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
    (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer):
    Add constructor with an explicit TrackID argument.
    * Source/WebCore/platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
    (WebCore::InbandTextTrackPrivateGStreamer::create):

    * Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
    (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfTrack):
    (WebCore::MediaPlayerPrivateGStreamer::handleTextSample):
    (WebCore::MediaPlayerPrivateGStreamer::updateEnabledVideoTrack):
    (WebCore::MediaPlayerPrivateGStreamer::updateEnabledAudioTrack):
    (WebCore::MediaPlayerPrivateGStreamer::playbin3SendSelectStreamsIfAppropriate):
    (WebCore::MediaPlayerPrivateGStreamer::updateTracks):
    (WebCore::MediaPlayerPrivateGStreamer::setupCodecProbe):
    (WebCore::MediaPlayerPrivateGStreamer::codecForStreamId):
    * Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

    * Source/WebCore/platform/graphics/gstreamer/TextSinkGStreamer.cpp:
    (webkitTextSinkHandleSample):

    * Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
    (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer):
    Add constructor with an explicit TrackID argument.
    Sets the new m_shouldUsePadStreamId field false, to avoid the ID being changed elsewhere.
    (WebCore::TrackPrivateBaseGStreamer::setPad):
    (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfStreamChanged):
    (WebCore::TrackPrivateBaseGStreamer::installUpdateConfigurationHandlers):
    (WebCore::TrackPrivateBaseGStreamer::updateTrackIDFromTags):
    (WebCore::TrackPrivateBaseGStreamer::prefixForType): Deleted.
    (WebCore::trimStreamId): Deleted.
    (WebCore::TrackPrivateBaseGStreamer::generateUniquePlaybin2StreamID): Deleted.
    (WebCore::TrackPrivateBaseGStreamer::trackIdFromPadStreamStartOrUniqueID): Deleted.
    (WebCore::TrackPrivateBaseGStreamer::trackIdFromStringIdOrIndex): Deleted.
    * Source/WebCore/platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h:
    (WebCore::TrackPrivateBaseGStreamer::streamId const):
    Added, returns m_id. This is different to TrackPrivateBase::id(), since
    its implementations first try to return the ID derived from the
    container-specific-track-id tag if available.
    (WebCore::TrackPrivateBaseGStreamer::gstStreamId const): Added.
    (WebCore::TrackPrivateBaseGStreamer::capsChanged):
    (WebCore::TrackPrivateBaseGStreamer::stringId const): Deleted.
    - Removed m_stringId, instead using m_id everywhere.
    - Added m_gstStreamId, storing the stream-id string as reported by
      GStreamer.

    * Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
    (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer):
    (WebCore::VideoTrackPrivateGStreamer::capsChanged):
    * Source/WebCore/platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
    Added constructor with an explicit TrackID argument.

    * Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:
    (WebCore::AppendPipeline::~AppendPipeline):
    (WebCore::AppendPipeline::didReceiveInitializationSegment):
    (WebCore::createOptionalParserForFormat):
    (WebCore::AppendPipeline::recycleTrackForPad):
    (WebCore::AppendPipeline::linkPadWithTrack):
    (WebCore::AppendPipeline::makeWebKitTrack):
    Explicitly construct tracks with our IDs, as relying on
    TrackPrivateBaseGStreamer to pick one up from stream-id risks collisions.
    (WebCore::AppendPipeline::Track::emplaceOptionalParserForFormat):
    (WebCore::AppendPipeline::generateTrackId): Deleted.
    * Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.h:
    (WebCore::AppendPipeline::Track::Track):
    (WebCore::AppendPipeline::tryCreateTrackFromPad):
    Instead of generating an ID based on track type and index, parse stream-id,
    and add it to the registry so potential ID collisions can be caught and avoided.

    * Source/WebCore/platform/graphics/gstreamer/mse/MediaPlayerPrivateGStreamerMSE.cpp:
    (WebCore::filterOutRepeatingTracks):

    * Source/WebCore/platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.cpp:
    (WebCore::MediaSourcePrivateGStreamer::registerTrackId): Added.
    (WebCore::MediaSourcePrivateGStreamer::unregisterTrackId): Added.
    * Source/WebCore/platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.h:
    - Added m_trackIdRegistry, to be used by AppendPipeline.

    * Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.cpp:
    (WebCore::MediaSourceTrackGStreamer::MediaSourceTrackGStreamer):
    (WebCore::MediaSourceTrackGStreamer::create):
    * Source/WebCore/platform/graphics/gstreamer/mse/MediaSourceTrackGStreamer.h:

    * Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.cpp:
    (WebCore::SourceBufferPrivateGStreamer::flush):
    (WebCore::SourceBufferPrivateGStreamer::allSamplesInTrackEnqueued):
    (WebCore::SourceBufferPrivateGStreamer::precheckInitializationSegment):
    (WebCore::SourceBufferPrivateGStreamer::tryRegisterTrackId):
    Added, calls `MediaSourcePrivateGStreamer` to try to register an ID.
    (WebCore::SourceBufferPrivateGStreamer::tryUnregisterTrackId): ditto
    * Source/WebCore/platform/graphics/gstreamer/mse/SourceBufferPrivateGStreamer.h:

    * Source/WebCore/platform/graphics/gstreamer/mse/TrackQueue.cpp:
    (WebCore::TrackQueue::TrackQueue):
    (WebCore::TrackQueue::enqueueObject):
    (WebCore::TrackQueue::clear):
    (WebCore::TrackQueue::flush):
    (WebCore::TrackQueue::notifyWhenLowLevel):
    (WebCore::TrackQueue::pop):
    (WebCore::TrackQueue::notifyWhenNotEmpty):
    (WebCore::TrackQueue::resetNotEmptyHandler):
    (WebCore::TrackQueue::checkLowLevel):
    * Source/WebCore/platform/graphics/gstreamer/mse/TrackQueue.h:

    * Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.cpp:
    (WebKitMediaSrcPrivate::streamById): Renamed from streamByName.
    (dumpPipeline):
    (webKitMediaSrcEmitStreams):
    (webKitMediaSrcTearDownStream):
    (webKitMediaSrcLoop):
    (webKitMediaSrcStreamFlush):
    (webKitMediaSrcFlush):
    (WebKitMediaSrcPrivate::streamByName): Deleted.
    * Source/WebCore/platform/graphics/gstreamer/mse/WebKitMediaSourceGStreamer.h:

    Canonical link: https://commits.webkit.org/286527@main

Canonical link: https://commits.webkit.org/282416.320@webkitglib/2.46


  Commit: f08fb2ed07a55e64d8b071e2267c42c6b4f8b163
      https://github.com/WebKit/WebKit/commit/f08fb2ed07a55e64d8b071e2267c42c6b4f8b163
  Author: Vivienne Watermeier <vwatermeier at igalia.com>
  Date:   2024-11-26 (Tue, 26 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

  Log Message:
  -----------
  Cherry-pick 286598 at main (8330471282e8). https://bugs.webkit.org/show_bug.cgi?id=283104

    [GStreamer] Fix webrtc/utf8-sdp.html regression
    https://bugs.webkit.org/show_bug.cgi?id=283104

    Reviewed by Philippe Normand.

    getStreamIdFromStream() would sometimes returned nullopt in updateTracks(), fixed by providing a fallback value

    * Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
    (WebCore::MediaPlayerPrivateGStreamer::updateTracks):

    Canonical link: https://commits.webkit.org/286598@main

Canonical link: https://commits.webkit.org/282416.321@webkitglib/2.46


  Commit: c937f77e243f9dc2c774d69f60bc372eef48103d
      https://github.com/WebKit/WebKit/commit/c937f77e243f9dc2c774d69f60bc372eef48103d
  Author: Vivienne Watermeier <vwatermeier at igalia.com>
  Date:   2024-11-26 (Tue, 26 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.h

  Log Message:
  -----------
  Cherry-pick 286794 at main (6ecba7116c9c). https://bugs.webkit.org/show_bug.cgi?id=283352

    [GTK] ASSERTION FAILED: !isHashTraitsEmptyValue<KeyTraits>(key)
    https://bugs.webkit.org/show_bug.cgi?id=283352

    Reviewed by Philippe Normand.

    By default, HashSet disallows 0 as key, see:
    https://github.com/WebKit/WebKit/blob/3261dcc32730cb8765e216fa45401618366a5fd2/Source/WTF/wtf/HashTraits.h#L107
    Instead, use WTF::UnsignedWithZeroKeyHashTraits.

    * Source/WebCore/platform/graphics/gstreamer/mse/MediaSourcePrivateGStreamer.h:

    Canonical link: https://commits.webkit.org/286794@main

Canonical link: https://commits.webkit.org/282416.322@webkitglib/2.46


  Commit: 0c60a2686f3d429886ebb0edbee9e18658f93b68
      https://github.com/WebKit/WebKit/commit/0c60a2686f3d429886ebb0edbee9e18658f93b68
  Author: Vivienne Watermeier <vwatermeier at igalia.com>
  Date:   2024-11-26 (Tue, 26 Nov 2024)

  Changed paths:
    M Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp

  Log Message:
  -----------
  Cherry-pick 286797 at main (a127f8f44e5d). https://bugs.webkit.org/show_bug.cgi?id=283357

    [GStreamer] Fix hang in webaudio
    https://bugs.webkit.org/show_bug.cgi?id=283357

    Reviewed by Philippe Normand.

    During a PAUSED_TO_READY state change, there is a race condition between
    webKitWebAudioSrcRenderAndPushFrames setting dispatchDone true, and
    the state change resetting it to false, so that the renderer thread
    will block on dispatchCondition.

    To fix this, the state transition no longer sets dispatchDone to false,
    which is already done on every renderer thread entry.

    Original author: Marcin Mielczarczyk <marcin.mielczarczyk at redembedded.com>
    See: https://github.com/WebPlatformForEmbedded/WPEWebKit/pull/1426

    * Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
    (webKitWebAudioSrcChangeState):

    Canonical link: https://commits.webkit.org/286797@main

Canonical link: https://commits.webkit.org/282416.323@webkitglib/2.46


Compare: https://github.com/WebKit/WebKit/compare/53e7f27d2622...0c60a2686f3d

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