mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 09:10:36 +00:00
ext/soup/gstsouphttpsrc.c: Don't autoplug souphttpsrc for dav/davs. This is better handled by
Original commit message from CVS: * ext/soup/gstsouphttpsrc.c: (gst_soup_http_src_got_headers_cb), (gst_soup_http_src_chunk_allocator), (gst_soup_http_src_got_chunk_cb), (gst_soup_http_src_uri_get_protocols): Don't autoplug souphttpsrc for dav/davs. This is better handled by GIO and GnomeVFS as they provide authentication. Don't leak the icy caps if we already set them and get a new icy-metaint header. Try harder to set the icy caps on the output buffer to have correct caps for the first buffer already. * tests/check/elements/souphttpsrc.c: (got_buffer), (GST_START_TEST): Check that we get a buffer with application/x-icy caps if iradio-mode is enabled and we have an icecast URL.
This commit is contained in:
parent
0a50373a89
commit
d86bfe1f36
2 changed files with 35 additions and 5 deletions
|
@ -20,7 +20,7 @@
|
|||
* <refsect2>
|
||||
* <para>
|
||||
* This plugin reads data from a remote location specified by a URI.
|
||||
* Supported protocols are 'http', 'https', 'dav', or 'davs'.
|
||||
* Supported protocols are 'http', 'https'.
|
||||
* </para>
|
||||
* <para>
|
||||
* An HTTP proxy must be specified by its URL.
|
||||
|
@ -577,9 +577,13 @@ gst_soup_http_src_got_headers_cb (SoupMessage * msg, GstSoupHTTPSrc * src)
|
|||
gint icy_metaint = atoi (value);
|
||||
|
||||
GST_DEBUG_OBJECT (src, "icy-metaint: %s (parsed: %d)", value, icy_metaint);
|
||||
if (icy_metaint > 0)
|
||||
if (icy_metaint > 0) {
|
||||
if (src->icy_caps)
|
||||
gst_caps_unref (src->icy_caps);
|
||||
|
||||
src->icy_caps = gst_caps_new_simple ("application/x-icy",
|
||||
"metadata-interval", G_TYPE_INT, icy_metaint, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
if ((value =
|
||||
|
@ -729,6 +733,7 @@ gst_soup_http_src_chunk_allocator (SoupMessage * msg, gsize max_len,
|
|||
GST_DEBUG_OBJECT (src, "alloc %" G_GSIZE_FORMAT " bytes <= %" G_GSIZE_FORMAT,
|
||||
length, max_len);
|
||||
|
||||
|
||||
rc = gst_pad_alloc_buffer (GST_BASE_SRC_PAD (basesrc),
|
||||
GST_BUFFER_OFFSET_NONE, length,
|
||||
src->icy_caps ? src->icy_caps :
|
||||
|
@ -772,7 +777,10 @@ gst_soup_http_src_got_chunk_cb (SoupMessage * msg, SoupBuffer * chunk,
|
|||
gst_buffer_ref (*src->outbuf);
|
||||
GST_BUFFER_SIZE (*src->outbuf) = chunk->length;
|
||||
GST_BUFFER_OFFSET (*src->outbuf) = basesrc->segment.last_stop;
|
||||
gst_buffer_set_caps (*src->outbuf, GST_PAD_CAPS (GST_BASE_SRC_PAD (basesrc)));
|
||||
|
||||
gst_buffer_set_caps (*src->outbuf,
|
||||
(src->icy_caps) ? src->
|
||||
icy_caps : GST_PAD_CAPS (GST_BASE_SRC_PAD (basesrc)));
|
||||
|
||||
new_position = src->read_position + chunk->length;
|
||||
if (G_LIKELY (src->request_position == src->read_position))
|
||||
|
@ -1130,7 +1138,7 @@ gst_soup_http_src_uri_get_type (void)
|
|||
static gchar **
|
||||
gst_soup_http_src_uri_get_protocols (void)
|
||||
{
|
||||
static gchar *protocols[] = { "http", "https", "dav", "davs", NULL };
|
||||
static gchar *protocols[] = { "http", "https", NULL };
|
||||
return protocols;
|
||||
}
|
||||
|
||||
|
|
|
@ -201,6 +201,23 @@ GST_START_TEST (test_cookies)
|
|||
|
||||
GST_END_TEST;
|
||||
|
||||
static gboolean icy_caps = FALSE;
|
||||
|
||||
static void
|
||||
got_buffer (GstElement * fakesink, GstBuffer * buf, GstPad * pad,
|
||||
gpointer user_data)
|
||||
{
|
||||
GstStructure *s;
|
||||
|
||||
/* Caps can be anything if we don't except icy caps */
|
||||
if (!icy_caps)
|
||||
return;
|
||||
|
||||
/* Otherwise they _must_ be "application/x-icy" */
|
||||
s = gst_caps_get_structure (GST_BUFFER_CAPS (buf), 0);
|
||||
assert_equals_string (gst_structure_get_name (s), "application/x-icy");
|
||||
}
|
||||
|
||||
GST_START_TEST (test_icy_stream)
|
||||
{
|
||||
GstElement *pipe, *src, *sink;
|
||||
|
@ -210,9 +227,12 @@ GST_START_TEST (test_icy_stream)
|
|||
|
||||
src = gst_element_factory_make ("souphttpsrc", NULL);
|
||||
fail_unless (src != NULL);
|
||||
g_object_set (src, "iradio-mode", TRUE, NULL);
|
||||
|
||||
sink = gst_element_factory_make ("fakesink", NULL);
|
||||
fail_unless (sink != NULL);
|
||||
g_object_set (sink, "signal-handoffs", TRUE, NULL);
|
||||
g_signal_connect (sink, "handoff", G_CALLBACK (got_buffer), NULL);
|
||||
|
||||
gst_bin_add (GST_BIN (pipe), src);
|
||||
gst_bin_add (GST_BIN (pipe), sink);
|
||||
|
@ -224,6 +244,7 @@ GST_START_TEST (test_icy_stream)
|
|||
|
||||
g_object_set (src, "location", "http://ogg2.smgradio.com/vr32.ogg", NULL);
|
||||
g_object_set (src, "num-buffers", 1, NULL);
|
||||
icy_caps = FALSE;
|
||||
gst_element_set_state (pipe, GST_STATE_PLAYING);
|
||||
|
||||
msg = gst_bus_poll (GST_ELEMENT_BUS (pipe),
|
||||
|
@ -247,7 +268,7 @@ GST_START_TEST (test_icy_stream)
|
|||
|
||||
/* EOS after the first buffer */
|
||||
g_object_set (src, "num-buffers", 1, NULL);
|
||||
|
||||
icy_caps = TRUE;
|
||||
gst_element_set_state (pipe, GST_STATE_PLAYING);
|
||||
msg = gst_bus_poll (GST_ELEMENT_BUS (pipe),
|
||||
GST_MESSAGE_EOS | GST_MESSAGE_ERROR, -1);
|
||||
|
@ -268,6 +289,7 @@ GST_START_TEST (test_icy_stream)
|
|||
}
|
||||
|
||||
done:
|
||||
icy_caps = FALSE;
|
||||
|
||||
gst_element_set_state (pipe, GST_STATE_NULL);
|
||||
gst_object_unref (pipe);
|
||||
|
|
Loading…
Reference in a new issue