Index: gst/auparse/gstauparse.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins/gst/auparse/gstauparse.c,v
retrieving revision 1.30
diff -u -r1.30 gstauparse.c
--- a/gst/auparse/gstauparse.c	15 Mar 2004 19:32:01 -0000	1.30
+++ b/gst/auparse/gstauparse.c	10 May 2004 22:56:08 -0000
@@ -49,9 +49,15 @@
     GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (GST_AUDIO_INT_PAD_TEMPLATE_CAPS "; "
+    GST_STATIC_CAPS (
+        GST_AUDIO_INT_PAD_TEMPLATE_CAPS "; " /* does not support 24bit without patch */
+        GST_AUDIO_FLOAT_PAD_TEMPLATE_CAPS "; "
         "audio/x-alaw, "
-        "rate = (int) [ 8000, 48000 ], " "channels = (int) [ 1, 2 ]")
+        "rate = (int) [ 8000, 48000 ], "
+        "channels = (int) [ 1, 2 ]; "
+        "audio/x-mulaw, "
+        "rate = (int) [ 8000, 48000 ], "
+        "channels = (int) [ 1, 2 ]")
     );
 
 /* AuParse signals and args */
@@ -155,8 +161,7 @@
   gchar *data;
   glong size;
   GstCaps *tempcaps;
-  gint law, depth;
-  gboolean sign;
+  gint law, depth, ieee;
 
   g_return_if_fail (pad != NULL);
   g_return_if_fail (GST_IS_PAD (pad));
@@ -193,9 +198,8 @@
       /* and of course, someone had to invent a little endian
        * version.  Used by DEC systems. */
     } else if (GUINT32_FROM_LE (*head) == 0x0064732E) {
-      auparse->le = 1;
       head++;
-      auparse->le = 0;
+      auparse->le = 1;
       auparse->offset = GUINT32_FROM_LE (*head);
       head++;
       auparse->size = GUINT32_FROM_LE (*head);
@@ -222,38 +226,81 @@
         auparse->offset, auparse->size, auparse->encoding, auparse->frequency,
         auparse->channels);
 
+/*
+Docs :
+	http://www.opengroup.org/public/pubs/external/auformat.html
+	http://astronomy.swin.edu.au/~pbourke/dataformats/au/
+Samples :
+	http://www.tsp.ece.mcgill.ca/MMSP/Documents/AudioFormats/AU/Samples.html
+*/
+
     switch (auparse->encoding) {
-      case 1:
+
+      case 1: /* 8-bit ISDN mu-law */
         law = 1;
         depth = 8;
-        sign = FALSE;
         break;
-      case 2:
+
+      case 2: /* 8-bit linear PCM */
         law = 0;
         depth = 8;
-        sign = FALSE;
         break;
-      case 3:
+      case 3: /* 16-bit linear PCM */
         law = 0;
         depth = 16;
-        sign = TRUE;
         break;
+      case 4: /* 24-bit linear PCM */
+        law = 0;
+        depth = 24;
+        break;
+      case 5: /* 32-bit linear PCM */
+        law = 0;
+        depth = 32;
+        break;
+
+      case 27: /* 8-bit ISDN a-law */
+        law = 2;
+        depth = 8;
+        break;
+
+      case 6: /* 32 bit IEEE floating point */
+        ieee = 1;
+        depth = 32;
+        break;
+      case 7: /* 64 bit IEEE floating point */
+        ieee = 1;
+        depth = 64;
+        break;
+
+      case 23: /* 4 bit CCITT G721 ADPCM */
+      case 24: /* CCITT G722 ADPCM */
+      case 25: /* CCITT G723 ADPCM */
+      case 26: /* 5 bit CCITT G723 ADPCM */
+
       default:
         g_warning ("help!, dont know how to deal with this format yet\n");
         return;
     }
 
     if (law) {
-      tempcaps = gst_caps_new_simple ("audio/x-alaw",
+      tempcaps = gst_caps_new_simple ( (law == 1 )?"audio/x-mulaw":"audio/x-alaw",
           "rate", G_TYPE_INT, auparse->frequency,
-          "channels", G_TYPE_INT, auparse->channels, NULL);
+          "channels", G_TYPE_INT, auparse->channels, 
+          NULL);
+    } else if (ieee) {
+      tempcaps = gst_caps_new_simple ("audio/x-raw-float",
+          "width", G_TYPE_INT, depth,
+          "endianness", G_TYPE_INT, auparse->le?G_LITTLE_ENDIAN:G_BIG_ENDIAN,
+          NULL);
     } else {
       tempcaps = gst_caps_new_simple ("audio/x-raw-int",
-          "endianness", G_TYPE_INT, G_BIG_ENDIAN,
+          "endianness", G_TYPE_INT, auparse->le?G_LITTLE_ENDIAN:G_BIG_ENDIAN,
           "rate", G_TYPE_INT, auparse->frequency,
           "channels", G_TYPE_INT, auparse->channels,
           "depth", G_TYPE_INT, depth,
-          "width", G_TYPE_INT, depth, "signed", G_TYPE_BOOLEAN, sign, NULL);
+          "width", G_TYPE_INT, depth,
+          "signed", G_TYPE_BOOLEAN, TRUE, 
+          NULL);
     }
 
     if (!gst_pad_set_explicit_caps (auparse->srcpad, tempcaps)) {
Index: gst-libs/gst/audio/audio.h
===================================================================
RCS file: /cvs/gstreamer/gst-plugins/gst-libs/gst/audio/audio.h,v
retrieving revision 1.14
diff -u -r1.14 audio.h
--- a/gst-libs/gst/audio/audio.h	15 Mar 2004 16:32:50 -0000	1.14
+++ b/gst-libs/gst/audio/audio.h	10 May 2004 22:56:10 -0000
@@ -58,7 +58,7 @@
   "rate = (int) [ 1, MAX ], " \
   "channels = (int) [ 1, MAX ], " \
   "endianness = (int) { LITTLE_ENDIAN, BIG_ENDIAN }, " \
-  "width = (int) { 8, 16, 32 }, " \
+  "width = (int) { 8, 16, 24, 32 }, " \
   "depth = (int) [ 1, 32 ], " \
   "signed = (boolean) { true, false }" 
 
