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;
}
}