rtsp-stream: Always unref return value of gst_object_get_parent()
[platform/upstream/gstreamer.git] / gst / rtsp-server / rtsp-stream.c
index d3f730a..60442ad 100644 (file)
@@ -1461,13 +1461,14 @@ gst_rtsp_stream_get_retransmission_pt (GstRTSPStream * stream)
 }
 
 /**
- * gst_rtsp_media_get_buffer_size:
- * @media: a #GstRTSPMedia
- * @size: a #guint
+ * gst_rtsp_stream_set_buffer_size:
+ * @stream: a #GstRTSPStream
+ * @size: the buffer size
  *
  * Set the size of the UDP transmission buffer (in bytes)
  * Needs to be set before the stream is joined to a bin.
  *
+ * Since: 1.6
  */
 void
 gst_rtsp_stream_set_buffer_size (GstRTSPStream * stream, guint size)
@@ -1478,12 +1479,14 @@ gst_rtsp_stream_set_buffer_size (GstRTSPStream * stream, guint size)
 }
 
 /**
- * gst_rtsp_media_get_buffer_size:
- * @media: a #GstRTSPMedia
+ * gst_rtsp_stream_get_buffer_size:
+ * @stream: a #GstRTSPStream
  *
  * Get the size of the UDP transmission buffer (in bytes)
  *
  * Returns: the size of the UDP TX buffer
+ *
+ * Since: 1.6
  */
 guint
 gst_rtsp_stream_get_buffer_size (GstRTSPStream * stream)
@@ -1680,6 +1683,38 @@ on_timeout (GObject * session, GObject * source, GstRTSPStream * stream)
 }
 
 static void
+on_new_sender_ssrc (GObject * session, GObject * source, GstRTSPStream * stream)
+{
+  GST_INFO ("%p: new sender source %p", stream, source);
+#ifndef DUMP_STATS
+  {
+    GstStructure *stats;
+    g_object_get (source, "stats", &stats, NULL);
+    if (stats) {
+      dump_structure (stats);
+      gst_structure_free (stats);
+    }
+  }
+#endif
+}
+
+static void
+on_sender_ssrc_active (GObject * session, GObject * source,
+    GstRTSPStream * stream)
+{
+#ifndef DUMP_STATS
+  {
+    GstStructure *stats;
+    g_object_get (source, "stats", &stats, NULL);
+    if (stats) {
+      dump_structure (stats);
+      gst_structure_free (stats);
+    }
+  }
+#endif
+}
+
+static void
 clear_tr_cache (GstRTSPStreamPrivate * priv, gboolean is_rtp)
 {
   if (is_rtp) {
@@ -2132,6 +2167,12 @@ gst_rtsp_stream_join_bin (GstRTSPStream * stream, GstBin * bin,
   g_signal_connect (priv->session, "on-timeout", (GCallback) on_timeout,
       stream);
 
+  /* signal for sender ssrc */
+  g_signal_connect (priv->session, "on-new-sender-ssrc",
+      (GCallback) on_new_sender_ssrc, stream);
+  g_signal_connect (priv->session, "on-sender-ssrc-active",
+      (GCallback) on_sender_ssrc_active, stream);
+
   for (i = 0; i < 2; i++) {
     GstPad *teepad, *queuepad;
     /* For the sender we create this bit of pipeline for both
@@ -2840,7 +2881,6 @@ update_transport (GstRTSPStream * stream, GstRTSPStreamTransport * trans,
           gst_object_unref (pad);
           gst_object_unref (selpad);
         }
-        gst_object_unref (bin);
 
         priv->transport_sources =
             g_list_prepend (priv->transport_sources, source);
@@ -2876,6 +2916,8 @@ update_transport (GstRTSPStream * stream, GstRTSPStreamTransport * trans,
         }
       }
 
+      gst_object_unref (bin);
+
       /* fall through for the generic case */
     }
     case GST_RTSP_LOWER_TRANS_UDP: