Index: gst/mpegtsmux/mpegtsmux.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mpegtsmux/mpegtsmux.c,v
retrieving revision 1.4
diff -u -r1.4 mpegtsmux.c
--- gst/mpegtsmux/mpegtsmux.c	27 Oct 2008 08:52:50 -0000	1.4
+++ gst/mpegtsmux/mpegtsmux.c	20 Nov 2008 17:06:52 -0000
@@ -103,11 +103,24 @@
     GST_STATIC_PAD_TEMPLATE ("sink_%d",
     GST_PAD_SINK,
     GST_PAD_REQUEST,
-    GST_STATIC_CAPS ("video/mpeg, mpegversion=(int) { 1, 2, 4 }, "
-        "systemstream = (boolean) false; "
+    GST_STATIC_CAPS (
+        "video/mpeg, "
+          "mpegversion = (int) { 1, 2, 4 }, "
+          "systemstream = (boolean) false; "
         "video/x-dirac;"
-        "video/x-h264;" "audio/mpeg, mpegversion = (int) { 1, 2, 4 }")
-    );
+        "video/x-h264;"
+        "audio/mpeg, "
+          "mpegversion = (int) { 1, 2, 4 };"
+        "audio/x-lpcm, "
+          "width = (int) { 16, 20, 24 }, "
+          "rate = (int) { 48000, 96000 }, "
+          "channels = (int) [ 1, 8 ], "
+          "dynamic_range = (int) [ 0, 255 ], "
+          "emphasis = (boolean) { FALSE, TRUE }, "
+          "mute = (boolean) { FALSE, TRUE }; "
+        "audio/x-ac3;"
+        "audio/x-dts"
+      ) );
 
 static GstStaticPadTemplate mpegtsmux_src_factory =
 GST_STATIC_PAD_TEMPLATE ("src",
@@ -285,6 +298,21 @@
         ts_data->pid);
     ts_data->stream = tsmux_create_stream (mux->tsmux, TSMUX_ST_VIDEO_DIRAC,
         ts_data->pid);
+  } else if (gst_structure_has_name (s, "audio/x-ac3")) {
+    GST_DEBUG_OBJECT (pad, "Creating AC3 stream with PID 0x%04x",
+        ts_data->pid);
+    ts_data->stream = tsmux_create_stream (mux->tsmux, TSMUX_ST_PS_AUDIO_AC3,
+        ts_data->pid);
+  } else if (gst_structure_has_name (s, "audio/x-dts")) {
+    GST_DEBUG_OBJECT (pad, "Creating DTS stream with PID 0x%04x",
+        ts_data->pid);
+    ts_data->stream = tsmux_create_stream (mux->tsmux, TSMUX_ST_PS_AUDIO_DTS,
+        ts_data->pid);
+  } else if (gst_structure_has_name (s, "audio/x-lpcm")) {
+    GST_DEBUG_OBJECT (pad, "Creating LPCM stream with PID 0x%04x",
+        ts_data->pid);
+    ts_data->stream = tsmux_create_stream (mux->tsmux, TSMUX_ST_PS_AUDIO_LPCM,
+        ts_data->pid);
   } else if (gst_structure_has_name (s, "video/x-h264")) {
     const GValue *value;
     GST_DEBUG_OBJECT (pad, "Creating H264 stream with PID 0x%04x",
Index: gst/mpegtsmux/tsmux/tsmuxstream.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/gst/mpegtsmux/tsmux/tsmuxstream.c,v
retrieving revision 1.2
diff -u -r1.2 tsmuxstream.c
--- gst/mpegtsmux/tsmux/tsmuxstream.c	1 Sep 2008 17:49:59 -0000	1.2
+++ gst/mpegtsmux/tsmux/tsmuxstream.c	20 Nov 2008 17:06:52 -0000
@@ -143,14 +143,31 @@
       stream->pi.flags |= TSMUX_PACKET_FLAG_PES_FULL_HEADER;
       break;
     case TSMUX_ST_VIDEO_DIRAC:
+    case TSMUX_ST_PS_AUDIO_LPCM:
+    case TSMUX_ST_PS_AUDIO_AC3:
+    case TSMUX_ST_PS_AUDIO_DTS:
       stream->id = 0xFD;
       /* FIXME: assign sequential extended IDs? */
-      stream->id_extended = 0x60;
-
+      switch (stream_type) {
+        case TSMUX_ST_VIDEO_DIRAC:
+          stream->id_extended = 0x60;
+          stream->is_video_stream = TRUE;
+          break;
+        case TSMUX_ST_PS_AUDIO_LPCM:
+          stream->id_extended = 0x80;
+          break;
+        case TSMUX_ST_PS_AUDIO_AC3:
+          stream->id_extended = 0x81;
+          break;
+        case TSMUX_ST_PS_AUDIO_DTS:
+          stream->id_extended = 0x82;
+          break;
+        default:
+          break;
+      }
       stream->pi.flags |=
           TSMUX_PACKET_FLAG_PES_FULL_HEADER |
           TSMUX_PACKET_FLAG_PES_EXT_STREAMID;
-      stream->is_video_stream = TRUE;
       break;
     default:
       g_critical ("Stream type 0x%0x not yet implemented", stream_type);
