rtpsession: Also report internal sources in on-new-ssrc and on-ssrc-active
authorSebastian Dröge <sebastian@centricular.com>
Wed, 25 Mar 2015 14:27:34 +0000 (15:27 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 6 May 2015 09:21:22 +0000 (11:21 +0200)
Without this it seems impossible for an application to easily get notified
about the internal ssrcs that are created, e.g. sender sources, and also
to know when they are active and produce RTCP packets.

https://bugzilla.gnome.org/show_bug.cgi?id=746747

gst/rtpmanager/rtpsession.c

index 0acac153aef78dd373a12438994add29cddff943..9bee269ff4bc9a268580e813f6e6c4d480fadd0a 100644 (file)
@@ -2699,6 +2699,9 @@ rtp_session_update_send_caps (RTPSession * sess, GstCaps * caps)
     if (source) {
       rtp_source_update_caps (source, caps);
       g_object_unref (source);
+
+      if (created)
+        on_new_ssrc (sess, source);
     }
 
     if (gst_structure_get_uint (s, "rtx-ssrc", &ssrc)) {
@@ -2749,6 +2752,9 @@ rtp_session_send_rtp (RTPSession * sess, gpointer data, gboolean is_list,
 
   source = obtain_internal_source (sess, pinfo.ssrc, &created, current_time);
 
+  if (created)
+    on_new_ssrc (sess, source);
+
   prevsender = RTP_SOURCE_IS_SENDER (source);
   oldrate = source->bitrate;
 
@@ -3739,6 +3745,9 @@ rtp_session_on_timeout (RTPSession * sess, GstClockTime current_time,
 
     source = obtain_internal_source (sess, sess->suggested_ssrc, &created,
         current_time);
+
+    if (created)
+      on_new_ssrc (sess, source);
     g_object_unref (source);
   }
 
@@ -3817,6 +3826,10 @@ done:
           sess->callbacks.send_rtcp (sess, source, buffer, output->is_bye,
           sess->send_rtcp_user_data);
       sess->stats.nacks_sent += data.nacked_seqnums;
+
+      RTP_SESSION_LOCK (sess);
+      on_ssrc_active (sess, source);
+      RTP_SESSION_UNLOCK (sess);
     } else {
       GST_DEBUG ("freeing packet callback: %p"
           " do_not_suppress: %d may_suppress: %d",