mpegtsmux: Deterministically set the PCR stream to the first stream of the program
authorSebastian Dröge <sebastian@centricular.com>
Wed, 21 Mar 2018 11:34:17 +0000 (13:34 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 21 Mar 2018 11:34:17 +0000 (13:34 +0200)
Otherwise it would be randomly set to the first stream of the program
that receives a buffer.

gst/mpegtsmux/mpegtsmux.c

index f7fbf23..838066e 100644 (file)
 GST_DEBUG_CATEGORY (mpegtsmux_debug);
 #define GST_CAT_DEFAULT mpegtsmux_debug
 
+#define COLLECT_DATA_PAD(collect_data) (((GstCollectData *)(collect_data))->pad)
+
 enum
 {
   PROP_0,
@@ -963,6 +965,13 @@ mpegtsmux_create_streams (MpegTsMux * mux)
       tsmux_set_pmt_interval (ts_data->prog, mux->pmt_interval);
       g_hash_table_insert (mux->programs,
           GINT_TO_POINTER (ts_data->prog_id), ts_data->prog);
+
+      /* Take the first stream of the program for the PCR */
+      GST_DEBUG_OBJECT (COLLECT_DATA_PAD (ts_data),
+          "Use stream (pid=%d) from pad as PCR for program (prog_id = %d)",
+          ts_data->pid, ts_data->prog_id);
+
+      tsmux_program_set_pcr_stream (ts_data->prog, ts_data->stream);
     }
 
     if (ts_data->stream == NULL) {
@@ -989,9 +998,6 @@ no_stream:
   }
 }
 
-
-#define COLLECT_DATA_PAD(collect_data) (((GstCollectData *)(collect_data))->pad)
-
 static gboolean
 mpegtsmux_sink_event (GstCollectPads * pads, GstCollectData * data,
     GstEvent * event, gpointer user_data)