From e1a7d71184917c6c68847c655f55d989856af2fc Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Wed, 18 May 2011 19:33:45 +0200 Subject: [PATCH] tsdemux: More fixes to handle non-188 byte packets --- gst/mpegtsdemux/mpegtspacketizer.c | 8 ++++++++ gst/mpegtsdemux/tsdemux.c | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c index 4616906428..87a57c6a56 100644 --- a/gst/mpegtsdemux/mpegtspacketizer.c +++ b/gst/mpegtsdemux/mpegtspacketizer.c @@ -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; diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c index 27a20fc917..e001e8b312 100644 --- a/gst/mpegtsdemux/tsdemux.c +++ b/gst/mpegtsdemux/tsdemux.c @@ -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 =