gst/multipart/: Conform to RFC2046. audio/basic is mulaw 8000Hz mono.
authorZaheer Abbas Merali <zaheerabbas@merali.org>
Fri, 22 Aug 2008 11:29:26 +0000 (11:29 +0000)
committerZaheer Abbas Merali <zaheerabbas@merali.org>
Fri, 22 Aug 2008 11:29:26 +0000 (11:29 +0000)
Original commit message from CVS:
* gst/multipart/multipartdemux.c:
* gst/multipart/multipartmux.c:
Conform to RFC2046. audio/basic is mulaw 8000Hz mono.

ChangeLog
gst/multipart/multipartdemux.c
gst/multipart/multipartmux.c

index 01e41bd..9b2687c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-08-22  Zaheer Abbas Merali  <zaheerabbas at merali dot org>
+
+       * gst/multipart/multipartdemux.c:
+       * gst/multipart/multipartmux.c:
+       Conform to RFC2046. audio/basic is mulaw 8000Hz mono.
+
 2008-08-21  Ole André Vadla Ravnås  <ole.andre.ravnas@tandberg.com>
 
        * sys/directdraw/gstdirectdrawsink.c (gst_directdraw_sink_buffer_alloc,
index f5efda7..200f36a 100644 (file)
@@ -108,7 +108,8 @@ typedef struct
 
 /* convert from mime types to gst structure names. Add more when needed. */
 static const GstNamesMap gstnames[] = {
-  {"audio/basic", "audio/x-mulaw"},
+  /* RFC 2046 says audio/basic is mulaw, mono, 8000Hz */
+  {"audio/basic", "audio/x-mulaw, channels=1, rate=8000"},
   {NULL, NULL}
 };
 
@@ -221,6 +222,7 @@ gst_multipart_demux_get_gstname (GstMultipartDemux * demux, gchar * mimetype)
     /* no gst name mapping, use mime type */
     gstname = mimetype;
   }
+  GST_DEBUG_OBJECT (demux, "gst name for %s is %s", mimetype, gstname);
   return gstname;
 }
 
@@ -264,6 +266,7 @@ gst_multipart_find_pad_by_mime (GstMultipartDemux * demux, gchar * mime,
     /* take the mime type, convert it to the caps name */
     capsname = gst_multipart_demux_get_gstname (demux, mime);
     caps = gst_caps_from_string (capsname);
+    GST_DEBUG_OBJECT (demux, "caps for pad: %s", capsname);
     gst_pad_use_fixed_caps (pad);
     gst_pad_set_caps (pad, caps);
     gst_caps_unref (caps);
@@ -515,6 +518,8 @@ gst_multipart_demux_chain (GstPad * pad, GstBuffer * buf)
     GST_DEBUG_OBJECT (multipart,
         "pushing buffer with timestamp %" GST_TIME_FORMAT,
         GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)));
+    GST_DEBUG_OBJECT (multipart, "buffer has caps %s",
+        gst_caps_to_string (GST_BUFFER_CAPS (outbuf)));
     res = gst_pad_push (srcpad->pad, outbuf);
     if (res != GST_FLOW_OK)
       break;
index 498f825..a4a1300 100644 (file)
@@ -291,6 +291,8 @@ gst_multipart_mux_get_mime (GstMultipartMux * mux, GstStructure * s)
   GstMultipartMuxClass *klass;
   const gchar *mime;
   const gchar *name;
+  gint rate;
+  gint channels;
 
   klass = GST_MULTIPART_MUX_GET_CLASS (mux);
 
@@ -302,6 +304,17 @@ gst_multipart_mux_get_mime (GstMultipartMux * mux, GstStructure * s)
     /* no mime type mapping, use name */
     mime = name;
   }
+  /* RFC2046 requires audio/basic to be mulaw 8000Hz mono */
+  if (g_ascii_strcasecmp (mime, "audio/basic") == 0) {
+    if (gst_structure_get_int (s, "rate", &rate) &&
+        gst_structure_get_int (s, "channels", &channels)) {
+      if (rate != 8000 || channels != 1) {
+        mime = name;
+      }
+    } else {
+      mime = name;
+    }
+  }
   return mime;
 }