tsdemux: Don't free unexistent PAT
authorEdward Hervey <bilboed@bilboed.com>
Sun, 12 Jun 2011 09:27:30 +0000 (11:27 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Sun, 12 Jun 2011 09:27:30 +0000 (11:27 +0200)
And cleanup find_timestamps a bit

gst/mpegtsdemux/tsdemux.c

index e001e8b3124cd2ed7a6ad87d8187ebc457f7720b..b602ab7c14eba83e6a58179931d47cbca3dee3ff 100644 (file)
@@ -1654,6 +1654,12 @@ find_timestamps (MpegTSBase * base, guint64 initoff, guint64 * offset)
 
   /* Search for the first PCRs */
   ret = process_pcr (base, base->first_pat_offset, &initial, 10, TRUE);
+
+  if (ret != GST_FLOW_OK && ret != GST_FLOW_UNEXPECTED) {
+    GST_WARNING ("Problem getting initial PCRs");
+    goto beach;
+  }
+
   mpegts_packetizer_clear (base->packetizer);
   /* Remove current program so we ensure looking for a PAT when scanning the 
    * for the final PCR */
@@ -1661,11 +1667,6 @@ find_timestamps (MpegTSBase * base, guint64 initoff, guint64 * offset)
   base->pat = NULL;
   mpegts_base_remove_program (base, demux->current_program_number);
 
-  if (ret != GST_FLOW_OK && ret != GST_FLOW_UNEXPECTED) {
-    GST_WARNING ("Problem getting initial PCRs");
-    goto beach;
-  }
-
   /* Find end position */
   if (G_UNLIKELY (!gst_pad_query_peer_duration (base->sinkpad, &format,
               &total_bytes) || format != GST_FORMAT_BYTES)) {
@@ -1718,8 +1719,10 @@ beach:
 
   mpegts_packetizer_clear (base->packetizer);
   /* Remove current program */
-  gst_structure_free (base->pat);
-  base->pat = NULL;
+  if (base->pat) {
+    gst_structure_free (base->pat);
+    base->pat = NULL;
+  }
   mpegts_base_remove_program (base, demux->current_program_number);
 
   return ret;