From e15176c8611e6963ec0288a9a77ba2d12b2c513f Mon Sep 17 00:00:00 2001 From: Eugene Mutavchi Date: Mon, 5 Jan 2026 20:07:03 +0000 Subject: [PATCH 1/2] [GStreamer][LibWebRTC] Explicitly specify types fo max-buffer/max-bytes args --- .../libwebrtc/gstreamer/GStreamerVideoDecoderFactory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoDecoderFactory.cpp b/Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoDecoderFactory.cpp index 3c0f76a17efd5..e7c752f25de5b 100644 --- a/Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoDecoderFactory.cpp +++ b/Source/WebCore/platform/mediastream/libwebrtc/gstreamer/GStreamerVideoDecoderFactory.cpp @@ -86,7 +86,7 @@ class GStreamerWebRTCVideoDecoder : public webrtc::VideoDecoder { bool Configure(const webrtc::VideoDecoder::Settings& codecSettings) override { m_src = makeElement("appsrc"); - g_object_set(m_src, "is-live", TRUE, "do-timestamp", TRUE, "max-buffers", 2, "max-bytes", 0, nullptr); + g_object_set(m_src, "is-live", TRUE, "do-timestamp", TRUE, "max-buffers", static_cast(2), "max-bytes", static_cast(0), nullptr); GRefPtr caps = nullptr; auto capsfilter = CreateFilter(); From 483f1260a6d67c8307163c8851fc48da1e95a272 Mon Sep 17 00:00:00 2001 From: Eugene Mutavchi Date: Mon, 5 Jan 2026 20:08:48 +0000 Subject: [PATCH 2/2] [GStreamer][WebRTC] increase size of apps max-bytes for video tracks The default 200'000 is not enough and leads to frame drops during pipeline buildup. --- .../mediastream/gstreamer/GStreamerMediaStreamSource.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp b/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp index a804a88cbbef2..e091aa9ace5cd 100644 --- a/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp +++ b/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp @@ -166,6 +166,8 @@ class InternalSource final : public MediaStreamTrackPrivateObserver, g_object_set(m_src.get(), "is-live", TRUE, "format", GST_FORMAT_TIME, "emit-signals", TRUE, "min-percent", 100, "do-timestamp", isCaptureTrack, "handle-segment-change", TRUE, nullptr); + if (track.isVideo()) + g_object_set(m_src.get(), "max-bytes", static_cast(2 * MB), nullptr); g_signal_connect(m_src.get(), "enough-data", G_CALLBACK(+[](GstElement*, InternalSource* data) { data->m_enoughData = true; }), this);