rtpsession: send twcc struct in both directions
authorAlbert Sjolund <alberts@axis.com>
Mon, 9 Dec 2024 13:26:03 +0000 (14:26 +0100)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 1 Jan 2025 19:34:54 +0000 (19:34 +0000)
As there are signals around rtpsession in both directions,
send twcc data both upstream and downstream.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7940>

subprojects/gst-plugins-good/gst/rtpmanager/gstrtpsession.c

index 15dc2fc2d2f60eea51526430d8bd888057448ba7..e05b9a50a813547510189c3edd90eb3c618d5a7f 100644 (file)
@@ -2993,24 +2993,38 @@ gst_rtp_session_notify_twcc (RTPSession * sess,
 {
   GstRtpSession *rtpsession = GST_RTP_SESSION (user_data);
   GstEvent *event;
+  GstPad *send_rtp_src;
   GstPad *send_rtp_sink;
 
   GST_RTP_SESSION_LOCK (rtpsession);
   if ((send_rtp_sink = rtpsession->send_rtp_sink))
     gst_object_ref (send_rtp_sink);
+  if ((send_rtp_src = rtpsession->send_rtp_src))
+    gst_object_ref (send_rtp_src);
   if (rtpsession->priv->last_twcc_stats)
     gst_structure_free (rtpsession->priv->last_twcc_stats);
   rtpsession->priv->last_twcc_stats = twcc_stats;
   GST_RTP_SESSION_UNLOCK (rtpsession);
 
   if (send_rtp_sink) {
-    event = gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM, twcc_packets);
+    event =
+        gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
+        gst_structure_copy (twcc_packets));
     gst_pad_push_event (send_rtp_sink, event);
     gst_object_unref (send_rtp_sink);
   } else {
     gst_structure_free (twcc_packets);
   }
 
+  if (send_rtp_src) {
+    event =
+        gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM,
+        gst_structure_copy (twcc_packets));
+    gst_pad_push_event (send_rtp_src, event);
+    gst_object_unref (send_rtp_src);
+  }
+
+  gst_structure_free (twcc_packets);
   g_object_notify (G_OBJECT (rtpsession), "twcc-stats");
 }