tsdemux: More fixes to handle non-188 byte packets
authorEdward Hervey <bilboed@bilboed.com>
Wed, 18 May 2011 17:33:45 +0000 (19:33 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Tue, 7 Jun 2011 18:50:35 +0000 (20:50 +0200)
gst/mpegtsdemux/mpegtspacketizer.c
gst/mpegtsdemux/tsdemux.c

index 4616906..87a57c6 100644 (file)
@@ -2268,6 +2268,14 @@ mpegts_packetizer_next_packet (MpegTSPacketizer2 * packetizer,
         gst_buffer_unref (packet->buffer);
         goto done;
       }
+
+      if (packetizer->packet_size == MPEGTS_M2TS_PACKETSIZE) {
+        if (i >= 4)
+          i -= 4;
+        else
+          i += 188;
+      }
+
       /* Pop out the remaining data... */
       GST_BUFFER_DATA (packet->buffer) += i;
       GST_BUFFER_SIZE (packet->buffer) -= i;
index 27a20fc..e001e8b 100644 (file)
@@ -547,6 +547,9 @@ gst_ts_demux_perform_auxiliary_seek (MpegTSBase * base, GstClockTime seektime,
 
   mpegts_packetizer_flush (base->packetizer);
 
+  if (base->packetizer->packet_size == MPEGTS_M2TS_PACKETSIZE)
+    offset -= 4;
+
   while (!done && scan_offset <= length) {
     res =
         gst_pad_pull_range (base->sinkpad, offset + scan_offset,
@@ -1519,6 +1522,8 @@ find_pcr_packet (MpegTSBase * base, guint64 offset, gint64 length,
     return GST_FLOW_ERROR;
 
   mpegts_packetizer_flush (base->packetizer);
+  if (offset >= 4 && base->packetizer->packet_size == MPEGTS_M2TS_PACKETSIZE)
+    offset -= 4;
 
   while (!done && scan_offset < length) {
     ret =