Imported Upstream version 1.5.90
diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c
index 4751028..d46a47e 100644
--- a/gst/mpegtsdemux/mpegtsbase.c
+++ b/gst/mpegtsdemux/mpegtsbase.c
@@ -959,7 +959,7 @@
 
   /* Early exit if it's not from the present/following table_id */
   if (section->table_id != GST_MTS_TABLE_ID_EVENT_INFORMATION_ACTUAL_TS_PRESENT
-      || section->table_id !=
+      && section->table_id !=
       GST_MTS_TABLE_ID_EVENT_INFORMATION_OTHER_TS_PRESENT)
     return TRUE;
 
@@ -1110,7 +1110,14 @@
       return res;
 
     mpegts_base_flush (base, FALSE);
-    mpegts_packetizer_flush (base->packetizer, FALSE);
+    /* In the case of discontinuities in push-mode with TIME segment
+     * we want to drop all previous observations (hard:TRUE) from
+     * the packetizer */
+    if (base->mode == BASE_MODE_PUSHING
+        && base->segment.format == GST_FORMAT_TIME)
+      mpegts_packetizer_flush (base->packetizer, TRUE);
+    else
+      mpegts_packetizer_flush (base->packetizer, FALSE);
   }
 
   mpegts_packetizer_push (base->packetizer, buf);
@@ -1234,7 +1241,6 @@
   if (!gst_pad_peer_query_duration (base->sinkpad, format, &tmpval))
     goto beach;
   upstream_size = tmpval;
-  done = FALSE;
 
   /* The scanning takes place on the last 2048kB. Considering PCR should
    * be present at least every 100ms, this should cope with streams
@@ -1243,7 +1249,7 @@
 
   /* Find last PCR value, searching backwards by chunks of 300 MPEG-ts packets */
   for (seek_pos = MAX (0, upstream_size - 56400);
-      seek_pos >= reverse_limit && !done; seek_pos -= 56400) {
+      seek_pos >= reverse_limit; seek_pos -= 56400) {
     mpegts_packetizer_clear (base->packetizer);
     GST_DEBUG ("Grabbing %" G_GUINT64_FORMAT " => %" G_GUINT64_FORMAT, seek_pos,
         seek_pos + 56400);
@@ -1267,7 +1273,6 @@
       if (base->packetizer->nb_seen_offsets > initial_pcr_seen) {
         GST_DEBUG ("Got last PCR(s) (total seen:%d)",
             base->packetizer->nb_seen_offsets);
-        done = TRUE;
         break;
       }
     }