diff options
author | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2012-07-11 20:34:05 +0200 |
---|---|---|
committer | Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk> | 2012-07-11 20:34:05 +0200 |
commit | c80e1b14f9578dcb2e26704c0a21c28eaf35e552 (patch) | |
tree | a4f33f0a9d8d5a26ca99109896644e794b750011 | |
parent | b20de7abaa503876d08e395454d8ee96b3f145b8 (diff) |
tsdemux: correctly determine expected PES packet payload size
Avoids consistently failing to detect that a packet is complete, which
would then only be pushed upon the start of a next packet, which leads
to quite a delay in case of a sparse (subtitle) stream.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=666674
-rw-r--r-- | gst/mpegtsdemux/tsdemux.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c index c4b9d1f39..3290c24cd 100644 --- a/gst/mpegtsdemux/tsdemux.c +++ b/gst/mpegtsdemux/tsdemux.c @@ -1322,7 +1322,8 @@ gst_ts_demux_parse_pes_header (GstTSDemux * demux, TSDemuxStream * stream, /* Remove PES headers */ GST_DEBUG ("Moving data forward by %d bytes (packet_size:%d, have:%d)", header.header_size, header.packet_length, length); - stream->expected_size = header.packet_length; + g_assert (header.packet_length >= header.header_size); + stream->expected_size = header.packet_length - header.header_size; data += header.header_size; length -= header.header_size; @@ -1625,8 +1626,10 @@ gst_ts_demux_handle_packet (GstTSDemux * demux, TSDemuxStream * stream, GST_DEBUG ("current_size:%d, expected_size:%d", stream->current_size, stream->expected_size); /* Finally check if the data we queued completes a packet */ - if (stream->expected_size && stream->current_size == stream->expected_size) + if (stream->expected_size && stream->current_size == stream->expected_size) { + GST_LOG ("pushing complete packet"); res = gst_ts_demux_push_pending_data (demux, stream); + } } return res; |