diff options
author | Edward Hervey <edward@collabora.com> | 2013-08-01 11:01:03 +0200 |
---|---|---|
committer | Edward Hervey <edward@collabora.com> | 2013-08-02 10:40:12 +0200 |
commit | 6a2fc84d92d1d908b69bc20e3ceabefe90eeace1 (patch) | |
tree | 0347008dde19f31de785222a591fd8c68f2f31a4 | |
parent | 7cc4387120d14f31cce834697297f878de69ab6e (diff) |
mpegtspacketizer: Look harder for next sync positionpcroffset
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.
-rw-r--r-- | gst/mpegtsdemux/mpegtspacketizer.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c index 6e5c654bd..70d1e6e02 100644 --- a/gst/mpegtsdemux/mpegtspacketizer.c +++ b/gst/mpegtsdemux/mpegtspacketizer.c @@ -933,9 +933,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... */ |