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 0acac15..9bee269 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",