mpegtsbase: Split up whether we saw a PAT and its offset
authorEdward Hervey <bilboed@bilboed.com>
Thu, 14 Jul 2011 20:08:56 +0000 (22:08 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Thu, 14 Jul 2011 20:10:27 +0000 (22:10 +0200)
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
gst/mpegtsdemux/mpegtsbase.h

index 866f0d4ccdf8e1969ad84222387b36d139cf455c..a2e7cbaeaad9a69df562003e2bc92f6f2a560f29 100644 (file)
@@ -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,
index a8e66721a13570dacc833274071ed984fcbd5095..44ea90a11ac62c4e3874f50e7ee71d8e3785c1fd 100644 (file)
@@ -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;
 };