diff --git a/images/wkdev_sdk/jhbuild/patches/0001-webrtcbin-create-and-associate-transceivers-earlier-.patch b/images/wkdev_sdk/jhbuild/patches/0001-webrtcbin-create-and-associate-transceivers-earlier-.patch index ed87b7f..ed452ab 100644 --- a/images/wkdev_sdk/jhbuild/patches/0001-webrtcbin-create-and-associate-transceivers-earlier-.patch +++ b/images/wkdev_sdk/jhbuild/patches/0001-webrtcbin-create-and-associate-transceivers-earlier-.patch @@ -1,7 +1,7 @@ -From 8edcb3957601ba1237d3f60bbfc0f115a614aa75 Mon Sep 17 00:00:00 2001 +From e194b6bb173a95dcfb84c328fff426e60e6ab8f9 Mon Sep 17 00:00:00 2001 From: Carlos Bentzen Date: Wed, 10 Jul 2024 10:34:19 +0200 -Subject: [PATCH 1/9] webrtcbin: create and associate transceivers earlier in +Subject: [PATCH 1/8] webrtcbin: create and associate transceivers earlier in negotation According to https://w3c.github.io/webrtc-pc/#set-the-session-description @@ -24,14 +24,14 @@ associated after every session description is set. Part-of: --- - .../gst-plugins-bad/ext/webrtc/gstwebrtcbin.c | 495 ++++++++++-------- + .../gst-plugins-bad/ext/webrtc/gstwebrtcbin.c | 477 +++++++++++------- .../gst-plugins-bad/ext/webrtc/webrtcsdp.c | 11 + .../gst-plugins-bad/ext/webrtc/webrtcsdp.h | 2 + .../tests/check/elements/webrtcbin.c | 120 ++++- - 4 files changed, 388 insertions(+), 240 deletions(-) + 4 files changed, 388 insertions(+), 222 deletions(-) diff --git a/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c b/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c -index f170f512bf..b4196e3435 100644 +index dce4820a6d..225d246576 100644 --- a/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c +++ b/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c @@ -748,6 +748,13 @@ transceiver_match_for_mid (GstWebRTCRTPTransceiver * trans, const gchar * mid) @@ -169,8 +169,8 @@ index f170f512bf..b4196e3435 100644 - } - rtp_trans = NULL; - } - } - +- } +- - if (rtp_trans) { - answer_dir = rtp_trans->direction; - g_assert (answer_caps != NULL); @@ -180,8 +180,8 @@ index f170f512bf..b4196e3435 100644 - answer_dir = GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_RECVONLY; - GST_WARNING_OBJECT (webrtc, "did not find compatible transceiver for " - "offer caps %" GST_PTR_FORMAT ", will only receive", offer_caps); -- } -- + } + - if (!rtp_trans) { - GstCaps *trans_caps; - GstWebRTCKind kind = GST_WEBRTC_KIND_UNKNOWN; @@ -253,32 +253,7 @@ index f170f512bf..b4196e3435 100644 } } -@@ -6079,24 +6006,6 @@ _update_data_channel_from_sdp_media (GstWebRTCBin * webrtc, - transport_receive_bin_set_receive_state (receive, RECEIVE_STATE_PASS); - } - --static gboolean --_find_compatible_unassociated_transceiver (GstWebRTCRTPTransceiver * p1, -- gconstpointer data) --{ -- GstWebRTCKind kind = GPOINTER_TO_INT (data); -- -- if (p1->mid) -- return FALSE; -- if (p1->mline != -1) -- return FALSE; -- if (p1->stopped) -- return FALSE; -- if (p1->kind != GST_WEBRTC_KIND_UNKNOWN && p1->kind != kind) -- return FALSE; -- -- return TRUE; --} -- - static void - _connect_rtpfunnel (GstWebRTCBin * webrtc, guint session_id) - { -@@ -6179,7 +6088,6 @@ _update_transceivers_from_sdp (GstWebRTCBin * webrtc, SDPSource source, +@@ -6185,7 +6112,6 @@ _update_transceivers_from_sdp (GstWebRTCBin * webrtc, SDPSource source, for (i = 0; i < gst_sdp_message_medias_len (sdp->sdp); i++) { const GstSDPMedia *media = gst_sdp_message_get_media (sdp->sdp, i); TransportStream *stream; @@ -286,7 +261,7 @@ index f170f512bf..b4196e3435 100644 guint transport_idx; /* skip rejected media */ -@@ -6191,8 +6099,6 @@ _update_transceivers_from_sdp (GstWebRTCBin * webrtc, SDPSource source, +@@ -6197,8 +6123,6 @@ _update_transceivers_from_sdp (GstWebRTCBin * webrtc, SDPSource source, else transport_idx = i; @@ -295,7 +270,7 @@ index f170f512bf..b4196e3435 100644 stream = _get_or_create_transport_stream (webrtc, transport_idx, _message_media_is_datachannel (sdp->sdp, transport_idx)); if (!bundled) { -@@ -6203,60 +6109,28 @@ _update_transceivers_from_sdp (GstWebRTCBin * webrtc, SDPSource source, +@@ -6209,60 +6133,28 @@ _update_transceivers_from_sdp (GstWebRTCBin * webrtc, SDPSource source, ensure_rtx_hdr_ext (stream); } @@ -310,10 +285,7 @@ index f170f512bf..b4196e3435 100644 - if (g_strcmp0 (gst_sdp_media_get_media (media), "audio") == 0 || - g_strcmp0 (gst_sdp_media_get_media (media), "video") == 0) { - GstWebRTCKind kind = GST_WEBRTC_KIND_UNKNOWN; -+ if (g_strcmp0 (gst_sdp_media_get_media (media), "audio") == 0 || -+ g_strcmp0 (gst_sdp_media_get_media (media), "video") == 0) { -+ GstWebRTCRTPTransceiver *trans; - +- - /* No existing transceiver, find an unused one */ - if (!trans) { - if (g_strcmp0 (gst_sdp_media_get_media (media), "audio") == 0) @@ -343,7 +315,10 @@ index f170f512bf..b4196e3435 100644 - gst_webrtc_bin_signals[ON_NEW_TRANSCEIVER_SIGNAL], 0, trans); - PC_LOCK (webrtc); - } -- ++ if (g_strcmp0 (gst_sdp_media_get_media (media), "audio") == 0 || ++ g_strcmp0 (gst_sdp_media_get_media (media), "video") == 0) { ++ GstWebRTCRTPTransceiver *trans; + - _update_transceiver_from_sdp_media (webrtc, sdp->sdp, i, stream, - trans, bundled, bundle_idx, error); - if (error && *error) @@ -376,7 +351,7 @@ index f170f512bf..b4196e3435 100644 } } -@@ -6406,6 +6280,210 @@ get_last_generated_description (GstWebRTCBin * webrtc, SDPSource source, +@@ -6412,6 +6304,210 @@ get_last_generated_description (GstWebRTCBin * webrtc, SDPSource source, return NULL; } @@ -587,7 +562,7 @@ index f170f512bf..b4196e3435 100644 /* http://w3c.github.io/webrtc-pc/#set-description */ static GstStructure * -@@ -6568,21 +6646,8 @@ _set_description_task (GstWebRTCBin * webrtc, struct set_description *sd) +@@ -6574,21 +6670,8 @@ _set_description_task (GstWebRTCBin * webrtc, struct set_description *sd) } } @@ -611,7 +586,7 @@ index f170f512bf..b4196e3435 100644 if (webrtc->signaling_state != new_signaling_state) { webrtc->signaling_state = new_signaling_state; -@@ -6642,6 +6707,12 @@ _set_description_task (GstWebRTCBin * webrtc, struct set_description *sd) +@@ -6648,6 +6731,12 @@ _set_description_task (GstWebRTCBin * webrtc, struct set_description *sd) continue; } diff --git a/images/wkdev_sdk/jhbuild/patches/0002-webrtcbin-reverse-direction-from-remote-media.patch b/images/wkdev_sdk/jhbuild/patches/0002-webrtcbin-reverse-direction-from-remote-media.patch index b65e003..cd00e5a 100644 --- a/images/wkdev_sdk/jhbuild/patches/0002-webrtcbin-reverse-direction-from-remote-media.patch +++ b/images/wkdev_sdk/jhbuild/patches/0002-webrtcbin-reverse-direction-from-remote-media.patch @@ -1,7 +1,7 @@ -From 8615a8ac712bc173c0c3585392683053b7b8ee94 Mon Sep 17 00:00:00 2001 +From 2e69c18ecb12a66ce92f7e3c591343916856c1b1 Mon Sep 17 00:00:00 2001 From: Carlos Bentzen Date: Fri, 2 Aug 2024 11:19:56 +0200 -Subject: [PATCH 2/9] webrtcbin: reverse direction from remote media +Subject: [PATCH 2/8] webrtcbin: reverse direction from remote media This had been overlooked from the spec. We need to reverse the remote media direction when setting the transceiver direction. @@ -12,10 +12,10 @@ Part-of: Date: Fri, 2 Aug 2024 11:21:13 +0200 -Subject: [PATCH 3/9] webrtcbin: connect output stream on recv transceivers +Subject: [PATCH 3/8] webrtcbin: connect output stream on recv transceivers With MR 7156, transceivers and transports are created earlier, but for sendrecv media we could get `not-linked` errors due to @@ -19,10 +19,10 @@ Part-of: -Date: Wed, 9 Oct 2024 13:35:33 -0400 -Subject: [PATCH] pad: Never push sticky events in response to a FLUSH_STOP - -FLUSH_STOP is meant to clear the flushing state of pads and elements -downstream, not to process data. Hence, a FLUSH_STOP should not -propagate sticky events. This is also consistent with how flushes are a -special case for probes. - -Currently this is almost always the case, since a FLUSH_STOP is -__usually__ preceded by a FLUSH_START, and events (sticky or not) are -discarded while a pad has the FLUSHING flag active (set by FLUSH_START). - -However, it is currently assumed that a FLUSH_STOP not preceded by a -FLUSH_START is correct behavior, and this will occur while autoplugging -pipelines are constructed. This leaves us with an unhandled edge case! - -This patch explicitly disables sending sticky events when pushing a -FLUSH_STOP, instead of relying on the flushing flag of the pad, which -will break in the edge case of a FLUSH_STOP not preceded by a -FLUSH_START. - -If sticky events are propagated in response to a FLUSH_STOP, the -flushing thread can end up deadlocked in blocking code of a downstream -pad, such as a blocking probe. Instead, those events should be -propagated from the streaming thread of the pad when handling a -non-flushing synchronized event or buffer. - -This fixes a deadlock found in WebKit with playbin3 when seeks occur -before preroll, where the seeking thread ended up stuck in the blocking -probe of playsink: -https://github.com/WebPlatformForEmbedded/WPEWebKit/issues/1367 - -Part-of: ---- - subprojects/gstreamer/gst/gstpad.c | 17 ++++++++++++++--- - 1 file changed, 14 insertions(+), 3 deletions(-) - -diff --git a/subprojects/gstreamer/gst/gstpad.c b/subprojects/gstreamer/gst/gstpad.c -index d8bda692b2..7c159d2816 100644 ---- a/subprojects/gstreamer/gst/gstpad.c -+++ b/subprojects/gstreamer/gst/gstpad.c -@@ -5580,8 +5580,12 @@ gst_pad_push_event_unchecked (GstPad * pad, GstEvent * event, - PROBE_PUSH (pad, type | GST_PAD_PROBE_TYPE_PUSH, event, probe_stopped); - - /* recheck sticky events because the probe might have cause a relink */ -+ /* Note: FLUSH_STOP is a serialized event, but must not propagate sticky -+ * events. FLUSH_STOP is only targeted at removing the flushing state from -+ * pads and elements, and not actually pushing data/events. */ - if (GST_PAD_HAS_PENDING_EVENTS (pad) && GST_PAD_IS_SRC (pad) -- && (GST_EVENT_IS_SERIALIZED (event))) { -+ && (GST_EVENT_IS_SERIALIZED (event)) -+ && GST_EVENT_TYPE (event) != GST_EVENT_FLUSH_STOP) { - PushStickyData data = { GST_FLOW_OK, FALSE, event }; - GST_OBJECT_FLAG_UNSET (pad, GST_PAD_FLAG_PENDING_EVENTS); - -@@ -5740,11 +5744,18 @@ gst_pad_push_event (GstPad * pad, GstEvent * event) - break; - } - } -- if (GST_PAD_IS_SRC (pad) && serialized) { -+ if (GST_PAD_IS_SRC (pad) && serialized -+ && GST_EVENT_TYPE (event) != GST_EVENT_FLUSH_STOP) { - /* All serialized events on the srcpad trigger push of sticky events. - * - * Note that we do not do this for non-serialized sticky events since it -- * could potentially block. */ -+ * could potentially block. -+ * -+ * We must NOT propagate sticky events in response to FLUSH_STOP either, as -+ * FLUSH_STOP is only targeted at removing the flushing state from pads and -+ * elements, and not actually pushing data/events. This also makes it -+ * consistent with the way flush events are handled in "blocking" pad -+ * probes. */ - res = (check_sticky (pad, event) == GST_FLOW_OK); - } - if (!serialized || !sticky) { --- -2.47.0 - diff --git a/images/wkdev_sdk/jhbuild/patches/0004-webrtc-Fixes-for-matching-pads-to-unassociated-trans.patch b/images/wkdev_sdk/jhbuild/patches/0004-webrtc-Fixes-for-matching-pads-to-unassociated-trans.patch index 51a5c6d..118d506 100644 --- a/images/wkdev_sdk/jhbuild/patches/0004-webrtc-Fixes-for-matching-pads-to-unassociated-trans.patch +++ b/images/wkdev_sdk/jhbuild/patches/0004-webrtc-Fixes-for-matching-pads-to-unassociated-trans.patch @@ -1,7 +1,7 @@ -From aaf06f221975d4ef771e81438da7179b4b3bdd00 Mon Sep 17 00:00:00 2001 +From 11d381a3d77848e62189df20ba4e7fe8c9dadd45 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Wed, 24 Jul 2024 20:59:51 +1000 -Subject: [PATCH 4/9] webrtc: Fixes for matching pads to unassociated +Subject: [PATCH 4/8] webrtc: Fixes for matching pads to unassociated transceivers Fix an inverted condition when checking if sink pad caps match @@ -17,10 +17,10 @@ Part-of: codec_preferences && diff --git a/images/wkdev_sdk/jhbuild/patches/0005-webrtcbin-Fix-renegotiation-checks.patch b/images/wkdev_sdk/jhbuild/patches/0005-webrtcbin-Fix-renegotiation-checks.patch index 0d9748e..d044f8d 100644 --- a/images/wkdev_sdk/jhbuild/patches/0005-webrtcbin-Fix-renegotiation-checks.patch +++ b/images/wkdev_sdk/jhbuild/patches/0005-webrtcbin-Fix-renegotiation-checks.patch @@ -1,7 +1,7 @@ -From 22e49d68ab4095379df2f0e3fa09ee61f3fb5624 Mon Sep 17 00:00:00 2001 +From 8be67d014ff50275ad0dd0a70f81bb93b24033c6 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Thu, 1 Aug 2024 13:42:52 +1000 -Subject: [PATCH 5/9] webrtcbin: Fix renegotiation checks +Subject: [PATCH 5/8] webrtcbin: Fix renegotiation checks When checking for renegotiation against a local offer, reverse the remote direction in the corresponding answer @@ -27,7 +27,7 @@ Part-of: Date: Thu, 7 Mar 2024 17:36:33 +0100 -Subject: [PATCH 6/9] webrtc: add all SSRC attributes getting CAPS for a PT +Subject: [PATCH 6/8] webrtc: add all SSRC attributes getting CAPS for a PT The transport stream only returned the CAPS for the first matching PT entry from the `ptmap`. Other SSRC with the same PT where not included. For a stream @@ -24,7 +24,7 @@ Part-of: Date: Fri, 23 Aug 2024 20:01:32 +1000 -Subject: [PATCH 7/9] rtpfunnel: also fallback to pad default handling for +Subject: [PATCH 7/8] rtpfunnel: also fallback to pad default handling for unknown ssrcs If two (or more) rtpfunnel elements are cascaded, then only one will @@ -20,7 +20,7 @@ Part-of: ssrc_to_pad, GUINT_TO_POINTER (ssrc)); if (fpad) gst_object_ref (fpad); -@@ -542,8 +546,10 @@ gst_rtp_funnel_src_event (GstPad * pad, GstObject * parent, GstEvent * event) +@@ -549,8 +553,10 @@ gst_rtp_funnel_src_event (GstPad * pad, GstObject * parent, GstEvent * event) event, fpad); ret = gst_pad_push_event (fpad, event); gst_object_unref (fpad); @@ -90,7 +90,7 @@ index d403015e14..0e33d05b24 100644 } } } -@@ -600,6 +606,11 @@ gst_rtp_funnel_set_property (GObject * object, guint prop_id, +@@ -607,6 +613,11 @@ gst_rtp_funnel_set_property (GObject * object, guint prop_id, case PROP_COMMON_TS_OFFSET: funnel->common_ts_offset = g_value_get_int (value); break; @@ -102,7 +102,7 @@ index d403015e14..0e33d05b24 100644 default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; -@@ -616,6 +627,11 @@ gst_rtp_funnel_get_property (GObject * object, guint prop_id, GValue * value, +@@ -623,6 +634,11 @@ gst_rtp_funnel_get_property (GObject * object, guint prop_id, GValue * value, case PROP_COMMON_TS_OFFSET: g_value_set_int (value, funnel->common_ts_offset); break; @@ -114,7 +114,7 @@ index d403015e14..0e33d05b24 100644 default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; -@@ -706,6 +722,19 @@ gst_rtp_funnel_class_init (GstRtpFunnelClass * klass) +@@ -717,6 +733,19 @@ gst_rtp_funnel_class_init (GstRtpFunnelClass * klass) -1, G_MAXINT32, DEFAULT_COMMON_TS_OFFSET, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); @@ -134,14 +134,14 @@ index d403015e14..0e33d05b24 100644 GST_DEBUG_CATEGORY_INIT (gst_rtp_funnel_debug, "gstrtpfunnel", 0, "funnel element"); } -@@ -723,4 +752,5 @@ gst_rtp_funnel_init (GstRtpFunnel * funnel) +@@ -734,4 +763,5 @@ gst_rtp_funnel_init (GstRtpFunnel * funnel) funnel->srccaps = gst_caps_new_empty_simple (RTP_CAPS); funnel->ssrc_to_pad = g_hash_table_new (NULL, NULL); funnel->current_pad = NULL; + funnel->forward_unknown_ssrcs = DEFAULT_FORWARD_UNKNOWN_SSRC; } diff --git a/subprojects/gst-plugins-good/tests/check/elements/rtpfunnel.c b/subprojects/gst-plugins-good/tests/check/elements/rtpfunnel.c -index 676127ca18..1bb6be2a3d 100644 +index a7da56ad00..e755ea8500 100644 --- a/subprojects/gst-plugins-good/tests/check/elements/rtpfunnel.c +++ b/subprojects/gst-plugins-good/tests/check/elements/rtpfunnel.c @@ -55,7 +55,7 @@ GST_START_TEST (rtpfunnel_ssrc_demuxing) diff --git a/images/wkdev_sdk/jhbuild/patches/0008-webrtcbin-enable-forward-unknown-ssrc-on-rtpfunnel.patch b/images/wkdev_sdk/jhbuild/patches/0008-webrtcbin-enable-forward-unknown-ssrc-on-rtpfunnel.patch index 9b76b3b..c48a6ee 100644 --- a/images/wkdev_sdk/jhbuild/patches/0008-webrtcbin-enable-forward-unknown-ssrc-on-rtpfunnel.patch +++ b/images/wkdev_sdk/jhbuild/patches/0008-webrtcbin-enable-forward-unknown-ssrc-on-rtpfunnel.patch @@ -1,7 +1,7 @@ -From aae237495054cd49d7183f43d694736b9d71d64c Mon Sep 17 00:00:00 2001 +From 90484041b738b81efeea7df13a00af82b7153f52 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Mon, 26 Aug 2024 14:46:59 +1000 -Subject: [PATCH 8/9] webrtcbin: enable forward-unknown-ssrc on rtpfunnel +Subject: [PATCH 8/8] webrtcbin: enable forward-unknown-ssrc on rtpfunnel See also: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7405 @@ -11,10 +11,10 @@ Part-of: rtpfunnel = gst_element_factory_make ("rtpfunnel", NULL); diff --git a/images/wkdev_sdk/jhbuild/patches/0009-rtpfunnel-Ensure-segment-events-are-forwarded-after-.patch b/images/wkdev_sdk/jhbuild/patches/0009-rtpfunnel-Ensure-segment-events-are-forwarded-after-.patch deleted file mode 100644 index 7a0649d..0000000 --- a/images/wkdev_sdk/jhbuild/patches/0009-rtpfunnel-Ensure-segment-events-are-forwarded-after-.patch +++ /dev/null @@ -1,112 +0,0 @@ -From c2ab41b878dfaf9a83e94cc3fd5fc77e86272fd7 Mon Sep 17 00:00:00 2001 -From: Philippe Normand -Date: Tue, 5 Nov 2024 11:49:32 +0000 -Subject: [PATCH 9/9] rtpfunnel: Ensure segment events are forwarded after - flushs - -gst_rtp_funnel_forward_segment() returns early when the current_pad is set. -Without clearing current_pad a critical warning would be emitted when -attempting to chain a buffer following a flush. ---- - .../gst/rtpmanager/gstrtpfunnel.c | 11 +++++ - .../tests/check/elements/rtpfunnel.c | 41 +++++++++++++++++++ - 2 files changed, 52 insertions(+) - -diff --git a/subprojects/gst-plugins-good/gst/rtpmanager/gstrtpfunnel.c b/subprojects/gst-plugins-good/gst/rtpmanager/gstrtpfunnel.c -index 0e33d05b24..ee819676ec 100644 ---- a/subprojects/gst-plugins-good/gst/rtpmanager/gstrtpfunnel.c -+++ b/subprojects/gst-plugins-good/gst/rtpmanager/gstrtpfunnel.c -@@ -443,6 +443,13 @@ gst_rtp_funnel_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) - forward = FALSE; - break; - } -+ case GST_EVENT_FLUSH_START: -+ /* By resetting current_pad here the segment will be forwarded next time a -+ buffer is received. */ -+ GST_OBJECT_LOCK (funnel); -+ funnel->current_pad = NULL; -+ GST_OBJECT_UNLOCK (funnel); -+ break; - default: - break; - } -@@ -649,6 +656,7 @@ gst_rtp_funnel_change_state (GstElement * element, GstStateChange transition) - switch (transition) { - case GST_STATE_CHANGE_PAUSED_TO_READY: - funnel->send_sticky_events = TRUE; -+ funnel->current_pad = NULL; - break; - default: - break; -@@ -673,6 +681,9 @@ gst_rtp_funnel_release_pad (GstElement * element, GstPad * pad) - - GST_DEBUG_OBJECT (funnel, "releasing pad %s:%s", GST_DEBUG_PAD_NAME (pad)); - -+ if (pad == funnel->current_pad) -+ funnel->current_pad = NULL; -+ - g_hash_table_foreach_remove (funnel->ssrc_to_pad, _remove_pad_func, pad); - - gst_pad_set_active (pad, FALSE); -diff --git a/subprojects/gst-plugins-good/tests/check/elements/rtpfunnel.c b/subprojects/gst-plugins-good/tests/check/elements/rtpfunnel.c -index 1bb6be2a3d..e755ea8500 100644 ---- a/subprojects/gst-plugins-good/tests/check/elements/rtpfunnel.c -+++ b/subprojects/gst-plugins-good/tests/check/elements/rtpfunnel.c -@@ -501,6 +501,45 @@ GST_START_TEST (rtpfunnel_twcc_passthrough_then_mux) - - GST_END_TEST; - -+GST_START_TEST (rtpfunnel_flush) -+{ -+ GstHarness *h = gst_harness_new_with_padnames ("rtpfunnel", NULL, "src"); -+ GstHarness *h0 = gst_harness_new_with_element (h->element, "sink_0", NULL); -+ GstEvent *event; -+ GstBuffer *buffer; -+ -+ gst_harness_set_src_caps_str (h0, "application/x-rtp, ssrc=(uint)123"); -+ -+ /* Push a buffer */ -+ fail_unless_equals_int (GST_FLOW_OK, gst_harness_push (h0, -+ generate_test_buffer (0, 123, 0))); -+ -+ buffer = gst_harness_try_pull (h); -+ gst_buffer_unref (buffer); -+ -+ /* Flush */ -+ fail_unless (gst_harness_push_event (h0, gst_event_new_flush_start ())); -+ fail_unless (gst_harness_push_event (h0, gst_event_new_flush_stop (TRUE))); -+ -+ while ((event = gst_harness_try_pull_event (h))) -+ gst_event_unref (event); -+ -+ /* Reset caps and segment */ -+ gst_harness_set_src_caps_str (h0, "application/x-rtp, ssrc=(uint)123"); -+ -+ /* Push another buffer, this shouldn't generate "got data flow before segment event" criticals */ -+ fail_unless_equals_int (GST_FLOW_OK, gst_harness_push (h0, -+ generate_test_buffer (1, 123, 0))); -+ -+ buffer = gst_harness_try_pull (h); -+ gst_buffer_unref (buffer); -+ -+ gst_harness_teardown (h0); -+ gst_harness_teardown (h); -+} -+ -+GST_END_TEST; -+ - static Suite * - rtpfunnel_suite (void) - { -@@ -521,6 +560,8 @@ rtpfunnel_suite (void) - tcase_add_test (tc_chain, rtpfunnel_twcc_mux); - tcase_add_test (tc_chain, rtpfunnel_twcc_passthrough_then_mux); - -+ tcase_add_test (tc_chain, rtpfunnel_flush); -+ - return s; - } - --- -2.47.0 - diff --git a/images/wkdev_sdk/jhbuild/patches/0009-sdp-accept-empty-attribute-value-represented-as-a-NU.patch b/images/wkdev_sdk/jhbuild/patches/0009-sdp-accept-empty-attribute-value-represented-as-a-NU.patch new file mode 100644 index 0000000..0e93d4d --- /dev/null +++ b/images/wkdev_sdk/jhbuild/patches/0009-sdp-accept-empty-attribute-value-represented-as-a-NU.patch @@ -0,0 +1,31 @@ +From 8c829fdc37486abd0dac2729020bcdeb33f25e77 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fran=C3=A7ois=20Laignel?= +Date: Fri, 23 Feb 2024 15:20:41 +0100 +Subject: [PATCH] sdp: accept empty attribute value represented as a NULL + pointer + +Some empty media attribute values are set to an empty string, others as a NULL +pointer. It seems that code is able to deal with both, except for the UTF8 +validation. + +Part-of: +--- + subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c b/subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c +index a08bbc96d1..96ed5fd5a2 100644 +--- a/subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c ++++ b/subprojects/gst-plugins-base/gst-libs/gst/sdp/gstsdpmessage.c +@@ -4278,7 +4278,7 @@ sdp_add_attributes_to_caps (GArray * attributes, GstCaps * caps) + continue; + + /* string must be valid UTF8 */ +- if (!g_utf8_validate (attr->value, -1, NULL)) ++ if (attr->value != NULL && !g_utf8_validate (attr->value, -1, NULL)) + continue; + + if (!g_str_has_prefix (key, "x-")) +-- +2.47.1 + diff --git a/images/wkdev_sdk/jhbuild/webkit-sdk-deps.modules b/images/wkdev_sdk/jhbuild/webkit-sdk-deps.modules index 23f58ca..6abf6c2 100644 --- a/images/wkdev_sdk/jhbuild/webkit-sdk-deps.modules +++ b/images/wkdev_sdk/jhbuild/webkit-sdk-deps.modules @@ -109,17 +109,15 @@ - + tag="1.24.11"> - - +