guint latency; /* protected by lock */
GstClock *clock; /* protected by lock */
GstRTSPPublishClockMode publish_clock_mode;
+
+ /* Dynamic element handling */
+ guint nb_dynamic_elements;
+ guint no_more_pads_pending;
};
#define DEFAULT_SHARED FALSE
gst_object_unref (pad);
gst_object_unref (elem);
+ priv->nb_dynamic_elements++;
+
have_elem = TRUE;
more_elem_remaining = TRUE;
mode |= GST_RTSP_TRANSPORT_MODE_RECORD;
no_more_pads_cb (GstElement * element, GstRTSPMedia * media)
{
GstRTSPMediaPrivate *priv = media->priv;
+ gboolean remaining_dynamic;
- GST_INFO ("no more pads");
- remove_fakesink (priv);
+ GST_INFO_OBJECT (element, "no more pads");
+ g_mutex_lock (&priv->lock);
+ priv->no_more_pads_pending--;
+ remaining_dynamic = priv->no_more_pads_pending;
+ g_mutex_unlock (&priv->lock);
+ if (remaining_dynamic == 0)
+ remove_fakesink (priv);
}
typedef struct _DynPaySignalHandlers DynPaySignalHandlers;
priv->is_live = FALSE;
priv->seekable = -1;
priv->buffering = FALSE;
+ priv->no_more_pads_pending = priv->nb_dynamic_elements;
/* we're preparing now */
gst_rtsp_media_set_status (media, GST_RTSP_MEDIA_STATUS_PREPARING);
pool = gst_rtsp_thread_pool_new ();
- fail_unless (gst_rtsp_media_n_streams (media) == 0);
+ fail_unless_equals_int (gst_rtsp_media_n_streams (media), 0);
thread = gst_rtsp_thread_pool_get_thread (pool,
GST_RTSP_THREAD_TYPE_MEDIA, NULL);
fail_unless (gst_rtsp_media_prepare (media, thread));
- fail_unless (gst_rtsp_media_n_streams (media) == 2);
+ fail_unless_equals_int (gst_rtsp_media_n_streams (media), 2);
fail_unless (gst_rtsp_media_unprepare (media));
- fail_unless (gst_rtsp_media_n_streams (media) == 0);
+ fail_unless_equals_int (gst_rtsp_media_n_streams (media), 0);
thread = gst_rtsp_thread_pool_get_thread (pool,
GST_RTSP_THREAD_TYPE_MEDIA, NULL);
fail_unless (gst_rtsp_media_prepare (media, thread));
- fail_unless (gst_rtsp_media_n_streams (media) == 2);
+ fail_unless_equals_int (gst_rtsp_media_n_streams (media), 2);
fail_unless (gst_rtsp_media_unprepare (media));
- fail_unless (gst_rtsp_media_n_streams (media) == 0);
+ fail_unless_equals_int (gst_rtsp_media_n_streams (media), 0);
gst_object_unref (srcpad0);
gst_object_unref (srcpad1);