[gst-cvs] gst-plugins-good: souphttpsrc: Set caps for audio/L16 content-type

Zeeshan Ali zeenix at kemper.freedesktop.org
Thu May 21 15:01:27 PDT 2009


Module: gst-plugins-good
Branch: master
Commit: 1d6fd4b6ddb9c66ef45f74aef51a0a7a0ea0ff18
URL:    http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=1d6fd4b6ddb9c66ef45f74aef51a0a7a0ea0ff18

Author: Zeeshan Ali (Khattak) <zeeshanak at gnome.org>
Date:   Wed May 20 17:57:59 2009 +0300

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).

---

 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 12cd8fb..ac2007a 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,
+              &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,
+          "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) {





More information about the Gstreamer-commits mailing list