Commit 1d6fd4b6 authored by Zeeshan Ali's avatar Zeeshan Ali
Browse files

souphttpsrc: Set caps for audio/L16 content-type

When "Content-Type" header is "audio/L16", we need to set the caps on the
outgoing buffers so that downstream elements can have means to detect the
stream type and handle it appropriately. Tested with HTTP stream provided
by pulse-audio's http module (git master).
parent cd0e75ac
......@@ -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,
&params)) != 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,
"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) {
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment