[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