From a82483e36772467de9d00dcca52214bcf548df6a Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Thu, 14 Jul 2011 22:08:56 +0200 Subject: [PATCH] mpegtsbase: Split up whether we saw a PAT and its offset Fixes the issue with streams that don't set an offset on their buffers, like those coming from hlsdemux. Fixes #653481 --- gst/mpegtsdemux/mpegtsbase.c | 5 +++-- gst/mpegtsdemux/mpegtsbase.h | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c index 866f0d4ccd..a2e7cbaeaa 100644 --- a/gst/mpegtsdemux/mpegtsbase.c +++ b/gst/mpegtsdemux/mpegtsbase.c @@ -239,6 +239,7 @@ mpegts_base_init (MpegTSBase * base, MpegTSBaseClass * klass) base->stream_size = sizeof (MpegTSBaseStream); base->mode = BASE_MODE_STREAMING; + base->seen_pat = FALSE; base->first_pat_offset = -1; } @@ -705,7 +706,7 @@ mpegts_base_apply_pmt (MpegTSBase * base, const GValue *value; MpegTSBaseClass *klass = GST_MPEGTS_BASE_GET_CLASS (base); - if (G_UNLIKELY (base->first_pat_offset == -1)) { + if (G_UNLIKELY (base->seen_pat == FALSE)) { GST_WARNING ("Got pmt without pat first. Returning"); /* remove the stream since we won't get another PMT otherwise */ mpegts_packetizer_remove_stream (base->packetizer, pmt_pid); @@ -832,7 +833,7 @@ mpegts_base_handle_psi (MpegTSBase * base, MpegTSPacketizerSection * section) structure = mpegts_packetizer_parse_pat (base->packetizer, section); if (G_LIKELY (structure)) { mpegts_base_apply_pat (base, structure); - if (base->first_pat_offset == -1) { + if (base->seen_pat == FALSE) { base->first_pat_offset = GST_BUFFER_OFFSET (section->buffer); GST_DEBUG ("First PAT offset: %" G_GUINT64_FORMAT, diff --git a/gst/mpegtsdemux/mpegtsbase.h b/gst/mpegtsdemux/mpegtsbase.h index a8e66721a1..44ea90a11a 100644 --- a/gst/mpegtsdemux/mpegtsbase.h +++ b/gst/mpegtsdemux/mpegtsbase.h @@ -117,6 +117,9 @@ struct _MpegTSBase { * by subclasses if they have their own MpegTSBaseStream subclasses */ gsize stream_size; + /* Whether we saw a PAT yet */ + gboolean seen_pat; + /*Offset from the origin to the first PAT (pullmode) */ guint64 first_pat_offset; };