gst/mpegtsmux/: Add initial support for muxing AC3/DTS/LPCM into MPEG TS.
authorvanista <vanista@gmail.com>
Mon, 24 Nov 2008 10:46:01 +0000 (10:46 +0000)
committerSebastian Dröge <slomo@circular-chaos.org>
Mon, 24 Nov 2008 10:46:01 +0000 (10:46 +0000)
Original commit message from CVS:
Patch by: vanista <vanista at gmail dot com>
* gst/mpegtsmux/mpegtsmux.c: (mpegtsmux_create_stream):
* gst/mpegtsmux/tsmux/tsmuxstream.c: (tsmux_stream_new):
Add initial support for muxing AC3/DTS/LPCM into MPEG TS.
Fixes bug #550613.

ChangeLog
gst/mpegtsmux/mpegtsmux.c
gst/mpegtsmux/tsmux/tsmuxstream.c

index 95d6df4..6c8ec60 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2008-11-24  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
 
+       Patch by: vanista <vanista at gmail dot com>
+
+       * gst/mpegtsmux/mpegtsmux.c: (mpegtsmux_create_stream):
+       * gst/mpegtsmux/tsmux/tsmuxstream.c: (tsmux_stream_new):
+       Add initial support for muxing AC3/DTS/LPCM into MPEG TS.
+       Fixes bug #550613.
+
+2008-11-24  Sebastian Dröge  <sebastian.droege@collabora.co.uk>
+
        * gst/mxf/mxfdemux.c: (gst_mxf_demux_pull_klv_packet),
        (gst_mxf_demux_handle_klv_packet), (gst_mxf_demux_chain):
        * gst/mxf/mxfparse.c: (mxf_product_version_parse),
index 81757c6..53306c3 100644 (file)
@@ -103,11 +103,20 @@ static GstStaticPadTemplate mpegtsmux_sink_factory =
     GST_STATIC_PAD_TEMPLATE ("sink_%d",
     GST_PAD_SINK,
     GST_PAD_REQUEST,
-    GST_STATIC_CAPS ("video/mpeg, mpegversion=(int) { 1, 2, 4 }, "
+    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 +294,19 @@ mpegtsmux_create_stream (MpegTsMux * mux, MpegTsPadData * ts_data, GstPad * pad)
         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 342bb9e..0c21271 100644 (file)
@@ -143,14 +143,31 @@ tsmux_stream_new (guint16 pid, TsMuxStreamType stream_type)
       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);