souphttpsrc: add back "iradio-mode" property to disable sending of icecast request...
authorTim-Philipp Müller <tim@centricular.net>
Sun, 14 Apr 2013 11:32:06 +0000 (12:32 +0100)
committerTim-Philipp Müller <tim@centricular.net>
Sun, 14 Apr 2013 11:39:28 +0000 (12:39 +0100)
In 1.0 we now always send the icecast request headers by default, which
makes the server send icecasts metadata inserted into the stream if it
supports that. However, there are some use cases where this is not
desirable, like when just saving a radio stream to disk, so add back
the "iradio-mode" property to allow people to disable this.

https://bugzilla.gnome.org/show_bug.cgi?id=697984

ext/soup/gstsouphttpsrc.c
ext/soup/gstsouphttpsrc.h

index 0a3b4c1e7352f15554a0e73a8f5252f311fac3a3..58210e4c50d935355daa5ff3f2f692d977627d36 100644 (file)
@@ -103,11 +103,13 @@ enum
   PROP_PROXY_ID,
   PROP_PROXY_PW,
   PROP_COOKIES,
+  PROP_IRADIO_MODE,
   PROP_TIMEOUT,
   PROP_EXTRA_HEADERS
 };
 
 #define DEFAULT_USER_AGENT           "GStreamer souphttpsrc "
+#define DEFAULT_IRADIO_MODE          TRUE
 
 static void gst_soup_http_src_uri_handler_init (gpointer g_iface,
     gpointer iface_data);
@@ -234,6 +236,11 @@ gst_soup_http_src_class_init (GstSoupHTTPSrcClass * klass)
       g_param_spec_boxed ("extra-headers", "Extra Headers",
           "Extra headers to append to the HTTP request",
           GST_TYPE_STRUCTURE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_IRADIO_MODE,
+      g_param_spec_boolean ("iradio-mode", "iradio-mode",
+          "Enable internet radio mode (ask server to send shoutcast/icecast "
+          "metadata interleaved with the actual stream data)",
+          DEFAULT_IRADIO_MODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   gst_element_class_add_pad_template (gstelement_class,
       gst_static_pad_template_get (&srctemplate));
@@ -293,6 +300,7 @@ gst_soup_http_src_init (GstSoupHTTPSrc * src)
   src->proxy_id = NULL;
   src->proxy_pw = NULL;
   src->cookies = NULL;
+  src->iradio_mode = DEFAULT_IRADIO_MODE;
   src->loop = NULL;
   src->context = NULL;
   src->session = NULL;
@@ -356,6 +364,9 @@ gst_soup_http_src_set_property (GObject * object, guint prop_id,
         g_free (src->user_agent);
       src->user_agent = g_value_dup_string (value);
       break;
+    case PROP_IRADIO_MODE:
+      src->iradio_mode = g_value_get_boolean (value);
+      break;
     case PROP_AUTOMATIC_REDIRECT:
       src->automatic_redirect = g_value_get_boolean (value);
       break;
@@ -454,6 +465,9 @@ gst_soup_http_src_get_property (GObject * object, guint prop_id,
     case PROP_IS_LIVE:
       g_value_set_boolean (value, gst_base_src_is_live (GST_BASE_SRC (src)));
       break;
+    case PROP_IRADIO_MODE:
+      g_value_set_boolean (value, src->iradio_mode);
+      break;
     case PROP_USER_ID:
       g_value_set_string (value, src->user_id);
       break;
@@ -1079,8 +1093,10 @@ gst_soup_http_src_build_message (GstSoupHTTPSrc * src)
   src->session_io_status = GST_SOUP_HTTP_SRC_SESSION_IO_STATUS_IDLE;
   soup_message_headers_append (src->msg->request_headers, "Connection",
       "close");
-  soup_message_headers_append (src->msg->request_headers, "icy-metadata", "1");
-
+  if (src->iradio_mode) {
+    soup_message_headers_append (src->msg->request_headers, "icy-metadata",
+        "1");
+  }
   if (src->cookies) {
     gchar **cookie;
 
index 186c6d0679835591a85667918283b022f9c0216c..491b69d4715ca2a04beddc942bbd70cee8b5bfe8 100644 (file)
@@ -77,6 +77,7 @@ struct _GstSoupHTTPSrc {
   guint64 request_position;    /* Seek to this position. */
 
   /* Shoutcast/icecast metadata extraction handling. */
+  gboolean iradio_mode;
   GstCaps *src_caps;
   gchar *iradio_name;
   gchar *iradio_genre;