diff options
| -rw-r--r-- | ext/soup/gstsouphttpsrc.c | 33 | 
1 files changed, 33 insertions, 0 deletions
| diff --git a/ext/soup/gstsouphttpsrc.c b/ext/soup/gstsouphttpsrc.c index 12cd8fb1..ac2007a0 100644 --- a/ext/soup/gstsouphttpsrc.c +++ b/ext/soup/gstsouphttpsrc.c @@ -744,6 +744,8 @@ gst_soup_http_src_got_headers_cb (SoupMessage * msg, GstSoupHTTPSrc * src)    guint64 newsize; +  GHashTable *params = NULL; +    GST_DEBUG_OBJECT (src, "got headers");    if (src->automatic_redirect && SOUP_STATUS_IS_REDIRECTION (msg->status_code)) { @@ -792,8 +794,39 @@ gst_soup_http_src_got_headers_cb (SoupMessage * msg, GstSoupHTTPSrc * src)        src->src_caps = gst_caps_new_simple ("application/x-icy",            "metadata-interval", G_TYPE_INT, icy_metaint, NULL);      } +  } else if ((value = +          soup_message_headers_get_content_type (msg->response_headers, +              ¶ms)) != NULL) { +    GST_DEBUG_OBJECT (src, "Content-Type: %s", value); +    if (g_ascii_strcasecmp (value, "audio/L16") == 0) { +      gint channels = 2; +      gint rate = 44100; +      char *param; + +      if (src->src_caps) +        gst_caps_unref (src->src_caps); + +      param = g_hash_table_lookup (params, "channels"); +      if (param != NULL) +        channels = atol (param); + +      param = g_hash_table_lookup (params, "rate"); +      if (param != NULL) +        rate = atol (param); + +      src->src_caps = gst_caps_new_simple ("audio/x-raw-int", +          "channels", G_TYPE_INT, channels, +          "rate", G_TYPE_INT, rate, +          "width", G_TYPE_INT, 16, +          "depth", G_TYPE_INT, 16, +          "signed", G_TYPE_BOOLEAN, TRUE, +          "endianness", G_TYPE_INT, G_BIG_ENDIAN, NULL); +    }    } +  if (params != NULL) +    g_hash_table_destroy (params); +    if ((value =            soup_message_headers_get (msg->response_headers,                "icy-name")) != NULL) { | 
