Branch: refs/heads/webkitglib/2.46
  Home:   https://github.com/WebKit/WebKit
  Commit: 6ca154e7038f7a1e43121bbc8c4123843d36acc7
      
https://github.com/WebKit/WebKit/commit/6ca154e7038f7a1e43121bbc8c4123843d36acc7
  Author: Philippe Normand <[email protected]>
  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@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 <[email protected]>
  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@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@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 <[email protected]>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

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

  Log Message:
  -----------
  Cherry-pick 286347@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 <[email protected]>
  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@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 <[email protected]>
  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@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 <[email protected]>
  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@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 <[email protected]>
  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@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 <[email protected]>
  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@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 <[email protected]>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

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

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

    [GStreamer] Fix build after 285186@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 <[email protected]>
  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@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 <[email protected]>
  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@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 <[email protected]>
  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@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 <[email protected]>
  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@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 <[email protected]>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

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

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

    REGRESSION(286528@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 <[email protected]>
  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@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 <[email protected]>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

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

  Log Message:
  -----------
  Cherry-pick 286848@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 <[email protected]>

    * 
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 <[email protected]>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

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

  Log Message:
  -----------
  Cherry-pick 286845@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 <[email protected]>
  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@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 <[email protected]>
  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@main (0b855998667a). 
https://bugs.webkit.org/show_bug.cgi?id=283411

    REGRESSION(286479@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 <[email protected]>
  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@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 <[email protected]>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

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

  Log Message:
  -----------
  Cherry-pick 287056@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 <[email protected]>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

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

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

    REGRESSION(279943@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 <[email protected]>
  Date:   2024-11-25 (Mon, 25 Nov 2024)

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

  Log Message:
  -----------
  Cherry-pick 287057@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 <[email protected]>
  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@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 <[email protected]>
  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@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 <[email protected]>
  Date:   2024-11-26 (Tue, 26 Nov 2024)

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

  Log Message:
  -----------
  Cherry-pick 286598@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 <[email protected]>
  Date:   2024-11-26 (Tue, 26 Nov 2024)

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

  Log Message:
  -----------
  Cherry-pick 286794@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 <[email protected]>
  Date:   2024-11-26 (Tue, 26 Nov 2024)

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

  Log Message:
  -----------
  Cherry-pick 286797@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 <[email protected]>
    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
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to