* <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.
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 =
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 :
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))
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;
}
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;
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);
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),
/* 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);
}
done:
+ icy_caps = FALSE;
gst_element_set_state (pipe, GST_STATE_NULL);
gst_object_unref (pipe);