Signed-off-by: wouterlucas <wou...@wouterlucas.com> --- ...vedemux-minimal-HTTP-context-support.patch | 145 ++++++++++++++++++ .../gstreamer1.0-plugins-bad_1.10.4.bb | 1 + 2 files changed, 146 insertions(+) create mode 100644 meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-adaptivedemux-minimal-HTTP-context-support.patch
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-adaptivedemux-minimal-HTTP-context-support.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-adaptivedemux-minimal-HTTP-context-support.patch new file mode 100644 index 0000000000..e778277fb0 --- /dev/null +++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-adaptivedemux-minimal-HTTP-context-support.patch @@ -0,0 +1,145 @@ +From 992bd23193978742029966e0a2232b1bfcc06122 Mon Sep 17 00:00:00 2001 +From: Philippe Normand <ph...@igalia.com> +Date: Wed, 28 Oct 2015 11:52:49 +0100 +Subject: [PATCH] adaptivedemux: minimal HTTP context support + +The uridownloader is now querying the source element for an HTTP +context, which stores session data (cookies only for now), and reusing +the data when fetching data over HTTP. Additionally the context is set +on adaptivedemux, which allows it to also properly use session data +when downloading fragments. + +https://bugzilla.gnome.org/show_bug.cgi?id=726314 +--- +Upstream-Status: Backport +Signed-off-by: wouterlucas <wou...@wouterlucas.com> + + gst-libs/gst/adaptivedemux/gstadaptivedemux.c | 16 ++++++++++++- + gst-libs/gst/uridownloader/gsturidownloader.c | 34 +++++++++++++++++++++++++-- + gst-libs/gst/uridownloader/gsturidownloader.h | 2 +- + 3 files changed, 48 insertions(+), 4 deletions(-) + +diff --git a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c +index 20bd839..1b5cace 100644 +--- a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c ++++ b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c +@@ -432,7 +432,7 @@ gst_adaptive_demux_init (GstAdaptiveDemux * demux, + + demux->priv = GST_ADAPTIVE_DEMUX_GET_PRIVATE (demux); + demux->priv->input_adapter = gst_adapter_new (); +- demux->downloader = gst_uri_downloader_new (); ++ demux->downloader = gst_uri_downloader_new (GST_ELEMENT (demux)); + demux->stream_struct_size = sizeof (GstAdaptiveDemuxStream); + demux->priv->segment_seqnum = gst_util_seqnum_next (); + demux->have_group_id = FALSE; +@@ -2547,6 +2547,7 @@ gst_adaptive_demux_stream_update_source (GstAdaptiveDemuxStream * stream, + GstPadLinkReturn pad_link_ret; + GObjectClass *gobject_class; + gchar *internal_name, *bin_name; ++ GstContext *context = NULL; + + /* Our src consists of a bin containing uri_handler -> queue2 . The + * purpose of the queue2 is to allow the uri_handler to download an +@@ -2598,6 +2599,19 @@ gst_adaptive_demux_stream_update_source (GstAdaptiveDemuxStream * stream, + } + } + ++ context = ++ gst_element_get_context (GST_ELEMENT_CAST (demux), "http-headers"); ++ if (context) { ++ const GstStructure *s = gst_context_get_structure (context); ++ const gchar **cookies = NULL; ++ gst_structure_get (s, "cookies", G_TYPE_STRV, &cookies, NULL); ++ if (cookies) { ++ GST_DEBUG_OBJECT (demux, "Passing cookies through"); ++ g_object_set (uri_handler, "cookies", cookies, NULL); ++ } ++ gst_context_unref (context); ++ } ++ + /* Source bin creation */ + bin_name = g_strdup_printf ("srcbin-%s", GST_PAD_NAME (stream->pad)); + stream->src = gst_bin_new (bin_name); +diff --git a/gst-libs/gst/uridownloader/gsturidownloader.c b/gst-libs/gst/uridownloader/gsturidownloader.c +index 47b6f29..1f61250 100644 +--- a/gst-libs/gst/uridownloader/gsturidownloader.c ++++ b/gst-libs/gst/uridownloader/gsturidownloader.c +@@ -33,6 +33,8 @@ GST_DEBUG_CATEGORY (uridownloader_debug); + + struct _GstUriDownloaderPrivate + { ++ GstElement *parent; ++ + /* Fragments fetcher */ + GstElement *urisrc; + GstBus *bus; +@@ -148,9 +150,11 @@ gst_uri_downloader_finalize (GObject * object) + } + + GstUriDownloader * +-gst_uri_downloader_new (void) ++gst_uri_downloader_new (GstElement * parent) + { +- return g_object_new (GST_TYPE_URI_DOWNLOADER, NULL); ++ GstUriDownloader *downloader = g_object_new (GST_TYPE_URI_DOWNLOADER, NULL); ++ downloader->priv->parent = parent; ++ return downloader; + } + + static gboolean +@@ -413,6 +417,7 @@ gst_uri_downloader_set_uri (GstUriDownloader * downloader, const gchar * uri, + { + GstPad *pad; + GObjectClass *gobject_class; ++ GstContext *context = NULL; + + if (!gst_uri_is_valid (uri)) + return FALSE; +@@ -449,6 +454,31 @@ gst_uri_downloader_set_uri (GstUriDownloader * downloader, const gchar * uri, + } + } + ++ context = gst_element_get_context (downloader->priv->parent, "http-headers"); ++ if (!context) { ++ GstQuery *context_query = gst_query_new_context ("http-headers"); ++ GstPad *parent_sink_pad = ++ gst_element_get_static_pad (downloader->priv->parent, "sink"); ++ if (gst_pad_peer_query (parent_sink_pad, context_query)) { ++ ++ gst_query_parse_context (context_query, &context); ++ gst_element_set_context (downloader->priv->parent, context); ++ } ++ gst_object_unref (parent_sink_pad); ++ gst_query_unref (context_query); ++ } ++ ++ if (context) { ++ const GstStructure *s = gst_context_get_structure (context); ++ const gchar **cookies = NULL; ++ gst_structure_get (s, "cookies", G_TYPE_STRV, &cookies, NULL); ++ if (cookies) { ++ GST_DEBUG_OBJECT (downloader, "Passing cookies through"); ++ g_object_set (downloader->priv->urisrc, "cookies", cookies, NULL); ++ } ++ gst_context_unref (context); ++ } ++ + /* add a sync handler for the bus messages to detect errors in the download */ + gst_element_set_bus (GST_ELEMENT (downloader->priv->urisrc), + downloader->priv->bus); +diff --git a/gst-libs/gst/uridownloader/gsturidownloader.h b/gst-libs/gst/uridownloader/gsturidownloader.h +index 80b8a3e..36cbf65 100644 +--- a/gst-libs/gst/uridownloader/gsturidownloader.h ++++ b/gst-libs/gst/uridownloader/gsturidownloader.h +@@ -60,7 +60,7 @@ struct _GstUriDownloaderClass + + GType gst_uri_downloader_get_type (void); + +-GstUriDownloader * gst_uri_downloader_new (void); ++GstUriDownloader * gst_uri_downloader_new (GstElement * parent); + GstFragment * gst_uri_downloader_fetch_uri (GstUriDownloader * downloader, const gchar * uri, const gchar * referer, gboolean compress, gboolean refresh, gboolean allow_cache, GError ** err); + GstFragment * gst_uri_downloader_fetch_uri_with_range (GstUriDownloader * downloader, const gchar * uri, const gchar * referer, gboolean compress, gboolean refresh, gboolean allow_cache, gint64 range_start, gint64 range_end, GError ** err); + void gst_uri_downloader_reset (GstUriDownloader *downloader); +-- +2.7.4 + diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb index d209bcf8ab..f23d60c3d6 100644 --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb +++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.10.4.bb @@ -17,6 +17,7 @@ SRC_URI = " \ file://0001-Prepend-PKG_CONFIG_SYSROOT_DIR-to-pkg-config-output.patch \ file://0001-smoothstreaming-use-the-duration-from-the-list-of-fr.patch \ file://0002-mssdemux-Handle-the-adapter-in-the-subclass-after-bu.patch \ + file://0003-adaptivedemux-minimal-HTTP-context-support.patch \ file://0001-smoothstreaming-implement-adaptivedemux-s-get_live_s.patch \ file://0009-glimagesink-Downrank-to-marginal.patch \ " -- 2.17.0 -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core