summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2015-08-21 12:06:07 +0300
committerSebastian Dröge <sebastian@centricular.com>2015-09-25 23:52:28 +0200
commit572e54574bb3600bb40a8b62c267c537d4b411f0 (patch)
tree2c1aebf2b5f8448fc6ac2012f86e2ae79fbd1c03 /ext
parent07ee57228b77c2c06cac232311388ef638e87721 (diff)
downloadgstreamer-plugins-bad-572e54574bb3600bb40a8b62c267c537d4b411f0.tar.gz
mpdparser: Store an URI downloader in the parser for downloading additional MPD resources if needed
https://bugzilla.gnome.org/show_bug.cgi?id=752230
Diffstat (limited to 'ext')
-rw-r--r--ext/dash/gstdashdemux.c3
-rw-r--r--ext/dash/gstmpdparser.c13
-rw-r--r--ext/dash/gstmpdparser.h5
3 files changed, 21 insertions, 0 deletions
diff --git a/ext/dash/gstdashdemux.c b/ext/dash/gstdashdemux.c
index ae349d170..5445ad4a4 100644
--- a/ext/dash/gstdashdemux.c
+++ b/ext/dash/gstdashdemux.c
@@ -724,6 +724,7 @@ gst_dash_demux_process_manifest (GstAdaptiveDemux * demux, GstBuffer * buf)
if (dashdemux->client)
gst_mpd_client_free (dashdemux->client);
dashdemux->client = gst_mpd_client_new ();
+ gst_mpd_client_set_uri_downloader (dashdemux->client, demux->downloader);
dashdemux->client->mpd_uri = g_strdup (demux->manifest_uri);
dashdemux->client->mpd_base_uri = g_strdup (demux->manifest_base_uri);
@@ -801,6 +802,7 @@ gst_dash_demux_reset (GstAdaptiveDemux * ademux)
gst_dash_demux_clock_drift_free (demux->clock_drift);
demux->clock_drift = NULL;
demux->client = gst_mpd_client_new ();
+ gst_mpd_client_set_uri_downloader (demux->client, ademux->downloader);
demux->n_audio_streams = 0;
demux->n_video_streams = 0;
@@ -1273,6 +1275,7 @@ gst_dash_demux_update_manifest_data (GstAdaptiveDemux * demux,
/* parse the manifest file */
new_client = gst_mpd_client_new ();
+ gst_mpd_client_set_uri_downloader (new_client, demux->downloader);
new_client->mpd_uri = g_strdup (demux->manifest_uri);
new_client->mpd_base_uri = g_strdup (demux->manifest_base_uri);
gst_buffer_map (buffer, &mapinfo, GST_MAP_READ);
diff --git a/ext/dash/gstmpdparser.c b/ext/dash/gstmpdparser.c
index a2d34b606..5d596425d 100644
--- a/ext/dash/gstmpdparser.c
+++ b/ext/dash/gstmpdparser.c
@@ -3051,9 +3051,22 @@ gst_mpd_client_free (GstMpdClient * client)
g_free (client->mpd_base_uri);
client->mpd_base_uri = NULL;
+ if (client->downloader)
+ gst_object_unref (client->downloader);
+ client->downloader = NULL;
+
g_free (client);
}
+void
+gst_mpd_client_set_uri_downloader (GstMpdClient * client,
+ GstUriDownloader * downloader)
+{
+ if (client->downloader)
+ gst_object_unref (client->downloader);
+ client->downloader = gst_object_ref (downloader);
+}
+
static void
gst_mpd_client_check_profiles (GstMpdClient * client)
{
diff --git a/ext/dash/gstmpdparser.h b/ext/dash/gstmpdparser.h
index c2fde5500..85ddc8476 100644
--- a/ext/dash/gstmpdparser.h
+++ b/ext/dash/gstmpdparser.h
@@ -28,6 +28,7 @@
#define __GST_MPDPARSER_H__
#include <gst/gst.h>
+#include <gst/uridownloader/gsturidownloader.h>
G_BEGIN_DECLS
@@ -514,6 +515,8 @@ struct _GstMpdClient
/* profiles */
gboolean profile_isoff_ondemand;
+
+ GstUriDownloader * downloader;
};
/* Basic initialization/deinitialization functions */
@@ -522,6 +525,8 @@ void gst_active_streams_free (GstMpdClient * client);
void gst_mpd_client_free (GstMpdClient * client);
void gst_media_fragment_info_clear (GstMediaFragmentInfo * fragment);
+void gst_mpd_client_set_uri_downloader (GstMpdClient * client, GstUriDownloader * download);
+
/* MPD file parsing */
gboolean gst_mpd_parse (GstMpdClient *client, const gchar *data, gint size);