mpegtspacketizer: Look harder for next sync position
authorEdward Hervey <edward@collabora.com>
Thu, 1 Aug 2013 09:01:03 +0000 (11:01 +0200)
committerEdward Hervey <edward@collabora.com>
Fri, 2 Aug 2013 08:41:25 +0000 (10:41 +0200)
If ever we lose sync, we were just checking for the next 0x47 marker ...
which might actually happen within a mpeg-ts packet.

Instead check for 3 repeating 0x47 at the expected packet size interval,
which the same logic we use when we initially look for the packet size.

gst/mpegtsdemux/mpegtspacketizer.c

index 449547a..6f21bb5 100644 (file)
@@ -799,9 +799,11 @@ mpegts_packetizer_next_packet (MpegTSPacketizer2 * packetizer,
 
     GST_LOG ("Lost sync %d", packet_size);
 
-    /* Find the 0x47 in the buffer */
-    for (; sync_offset < priv->mapped_size; sync_offset++)
-      if (priv->mapped[sync_offset] == 0x47)
+    /* Find the 0x47 in the buffer (and require at least 2 checks) */
+    for (; sync_offset < priv->mapped_size + 2 * packet_size; sync_offset++)
+      if (priv->mapped[sync_offset] == 0x47 &&
+          priv->mapped[sync_offset + packet_size] == 0x47 &&
+          priv->mapped[sync_offset + 2 * packet_size] == 0x47)
         break;
 
     /* Pop out the remaining data... */