mpegtsmux: Explicitly resend PAT/SI/PMT on force-keyunit events

And don't randomly change the PCR stream, which would cause a new PMT
version to be generated instead and could confuse players.
diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c
index 838066e..99562fd 100644
--- a/gst/mpegtsmux/mpegtsmux.c
+++ b/gst/mpegtsmux/mpegtsmux.c
@@ -1378,16 +1378,16 @@
           GST_TIME_ARGS (running_time), count);
       gst_pad_push_event (mux->srcpad, event);
 
-      /* output PAT */
-      mux->tsmux->last_pat_ts = -1;
+      /* output PAT, SI tables */
+      tsmux_resend_pat (mux->tsmux);
+      tsmux_resend_si (mux->tsmux);
 
       /* output PMT for each program */
       for (cur = mux->tsmux->programs; cur; cur = cur->next) {
         TsMuxProgram *program = (TsMuxProgram *) cur->data;
 
-        program->last_pmt_ts = -1;
+        tsmux_resend_pmt (program);
       }
-      tsmux_program_set_pcr_stream (prog, NULL);
     }
   }
 
diff --git a/gst/mpegtsmux/tsmux/tsmux.c b/gst/mpegtsmux/tsmux/tsmux.c
index e13ee5f..cd09ac5 100644
--- a/gst/mpegtsmux/tsmux/tsmux.c
+++ b/gst/mpegtsmux/tsmux/tsmux.c
@@ -229,6 +229,20 @@
 }
 
 /**
+ * tsmux_resend_pat:
+ * @mux: a #TsMux
+ *
+ * Resends the PAT before the next stream packet.
+ */
+void
+tsmux_resend_pat (TsMux * mux)
+{
+  g_return_if_fail (mux != NULL);
+
+  mux->last_pat_ts = G_MININT64;
+}
+
+/**
  * tsmux_set_si_interval:
  * @mux: a #TsMux
  * @freq: a new SI table interval
@@ -261,6 +275,21 @@
 }
 
 /**
+ * tsmux_resend_si:
+ * @mux: a #TsMux
+ *
+ * Resends the SI tables before the next stream packet.
+ *
+ */
+void
+tsmux_resend_si (TsMux * mux)
+{
+  g_return_if_fail (mux != NULL);
+
+  mux->last_si_ts = G_MININT64;
+}
+
+/**
  * tsmux_add_mpegts_si_section:
  * @mux: a #TsMux
  * @section: (transfer full): a #GstMpegtsSection to add
@@ -428,6 +457,20 @@
 }
 
 /**
+ * tsmux_resend_pmt:
+ * @program: a #TsMuxProgram
+ *
+ * Resends the PMT before the next stream packet.
+ */
+void
+tsmux_resend_pmt (TsMuxProgram * program)
+{
+  g_return_if_fail (program != NULL);
+
+  program->last_pmt_ts = G_MININT64;
+}
+
+/**
  * tsmux_program_add_stream:
  * @program: a #TsMuxProgram
  * @stream: a #TsMuxStream
diff --git a/gst/mpegtsmux/tsmux/tsmux.h b/gst/mpegtsmux/tsmux/tsmux.h
index dd1185a..11a1480 100644
--- a/gst/mpegtsmux/tsmux/tsmux.h
+++ b/gst/mpegtsmux/tsmux/tsmux.h
@@ -189,6 +189,7 @@
 void 		tsmux_set_alloc_func 		(TsMux *mux, TsMuxAllocFunc func, void *user_data);
 void 		tsmux_set_pat_interval          (TsMux *mux, guint interval);
 guint 		tsmux_get_pat_interval          (TsMux *mux);
+void 		tsmux_resend_pat                (TsMux *mux);
 guint16		tsmux_get_new_pid 		(TsMux *mux);
 
 /* pid/program management */
@@ -196,10 +197,12 @@
 void 		tsmux_program_free 		(TsMuxProgram *program);
 void 		tsmux_set_pmt_interval          (TsMuxProgram *program, guint interval);
 guint 		tsmux_get_pmt_interval   	(TsMuxProgram *program);
+void 		tsmux_resend_pmt                (TsMuxProgram *program);
 
 /* SI table management */
 void            tsmux_set_si_interval           (TsMux *mux, guint interval);
 guint           tsmux_get_si_interval           (TsMux *mux);
+void            tsmux_resend_si                 (TsMux *mux);
 gboolean        tsmux_add_mpegts_si_section     (TsMux * mux, GstMpegtsSection * section);
 
 /* stream management */