summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2012-07-11 20:34:05 +0200
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2012-07-11 20:34:05 +0200
commitc80e1b14f9578dcb2e26704c0a21c28eaf35e552 (patch)
treea4f33f0a9d8d5a26ca99109896644e794b750011
parentb20de7abaa503876d08e395454d8ee96b3f145b8 (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.c7
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;