From 0cecb44813fe2893c592904ff60267a6c5171a9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 27 Mar 2014 19:22:03 +0100 Subject: [PATCH] mpegtsbase: Fix pull mode scanning for PCR on small files If a file does not contain 5 PCRs until it is EOS, or does not contain more than 655360 bytes the PCR scanning algorithm just aborted. --- gst/mpegtsdemux/mpegtsbase.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c index 3860cad409..a5a8ee61fd 100644 --- a/gst/mpegtsdemux/mpegtsbase.c +++ b/gst/mpegtsdemux/mpegtsbase.c @@ -1161,7 +1161,7 @@ mpegts_base_scan (MpegTSBase * base) gboolean done = FALSE; MpegTSPacketizerPacketReturn pret; gint64 tmpval; - guint64 upstream_size, seek_pos; + gint64 upstream_size, seek_pos; GstFormat format; guint initial_pcr_seen; @@ -1172,8 +1172,12 @@ mpegts_base_scan (MpegTSBase * base) GST_DEBUG ("Grabbing %d => %d", i * 65536, 65536); ret = gst_pad_pull_range (base->sinkpad, i * 65536, 65536, &buf); - if (G_UNLIKELY (ret != GST_FLOW_OK)) + if (G_UNLIKELY (ret == GST_FLOW_EOS)) { + done = TRUE; + break; + } else if (G_UNLIKELY (ret != GST_FLOW_OK)) { goto beach; + } /* Push to packetizer */ mpegts_packetizer_push (base->packetizer, buf); @@ -1221,8 +1225,12 @@ mpegts_base_scan (MpegTSBase * base) GST_DEBUG ("Grabbing %" G_GUINT64_FORMAT " => %d", seek_pos, 65536); ret = gst_pad_pull_range (base->sinkpad, seek_pos, 65536, &buf); - if (G_UNLIKELY (ret != GST_FLOW_OK)) + if (G_UNLIKELY (ret == GST_FLOW_EOS)) { + done = TRUE; + break; + } else if (G_UNLIKELY (ret != GST_FLOW_OK)) { goto beach; + } /* Push to packetizer */ mpegts_packetizer_push (base->packetizer, buf);