demux->downloader = NULL;
}
+ g_static_mutex_free (&demux->streams_lock);
+
G_OBJECT_CLASS (parent_class)->dispose (obj);
}
if (demux->downloader)
gst_uri_downloader_reset (demux->downloader);
+ if (demux->next_periods) {
+ g_assert (demux->next_periods == demux->streams);
+ demux->next_periods =
+ g_slist_delete_link (demux->next_periods, demux->next_periods);
+ }
+
for (iter = demux->streams; iter; iter = g_slist_next (iter)) {
GstDashDemuxStream *stream = iter->data;
if (stream->pad) {
g_slist_free (demux->streams);
demux->streams = NULL;
+ for (iter = demux->next_periods; iter; iter = g_slist_next (iter)) {
+ GSList *streams = iter->data;
+ g_slist_free_full (streams, (GDestroyNotify) gst_dash_demux_stream_free);
+ }
+ g_slist_free (demux->next_periods);
+ demux->next_periods = NULL;
+
if (demux->manifest) {
gst_buffer_unref (demux->manifest);
demux->manifest = NULL;
static GstFragment *
gst_dash_demux_get_next_header (GstDashDemux * demux, guint stream_idx)
{
- const gchar *initializationURL;
+ gchar *initializationURL;
gchar *next_header_uri;
GstFragment *fragment;
next_header_uri =
g_strconcat (gst_mpdparser_get_baseURL (demux->client, stream_idx),
initializationURL, NULL);
+ g_free (initializationURL);
} else {
- next_header_uri = g_strdup (initializationURL);
+ next_header_uri = initializationURL;
}
GST_INFO_OBJECT (demux, "Fetching header %s", next_header_uri);
active_stream =
gst_mpdparser_get_active_stream_by_index (demux->client, stream_idx);
- if (active_stream == NULL) /* TODO unref fragments */
+ if (active_stream == NULL) {
+ g_object_unref (download);
return FALSE;
+ }
buffer = gst_fragment_get_buffer (download);
+ g_object_unref (download);
if (selected_stream->need_header) {
/* We need to fetch a new header */
header_buffer = gst_fragment_get_buffer (header);
buffer = gst_buffer_join (header_buffer, buffer);
+ g_object_unref (header);
}
selected_stream->need_header = FALSE;
}
GstClockTime gst_mpd_client_get_media_presentation_duration (GstMpdClient *client);
gboolean gst_mpd_client_get_next_fragment_timestamp (GstMpdClient * client, guint stream_idx, GstClockTime * ts);
gboolean gst_mpd_client_get_next_fragment (GstMpdClient *client, guint indexStream, gboolean *discontinuity, gchar **uri, GstClockTime *duration, GstClockTime *timestamp);
-gboolean gst_mpd_client_get_next_header (GstMpdClient *client, const gchar **uri, guint stream_idx);
+gboolean gst_mpd_client_get_next_header (GstMpdClient *client, gchar **uri, guint stream_idx);
gboolean gst_mpd_client_is_live (GstMpdClient * client);
/* Period selection */