summaryrefslogtreecommitdiff
path: root/gst/mpegtsdemux
diff options
context:
space:
mode:
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2012-07-12 10:13:50 +0200
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>2012-07-12 10:17:57 +0200
commit76aedf56412f709896f5c60d83e4f2a66e7e9a3d (patch)
treead6db658939f93ff0ae521bb79151c19d02fd4fb /gst/mpegtsdemux
parent7b5340f3be3e0d03b3e9c87ee2c7829c6c21b64b (diff)
downloadgstreamer-plugins-bad-76aedf56412f709896f5c60d83e4f2a66e7e9a3d.tar.gz
tsdemux: more correctly determine expected PES packet payload size
... particularly considering that packet_length == 0 is possible.
Diffstat (limited to 'gst/mpegtsdemux')
-rw-r--r--gst/mpegtsdemux/tsdemux.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c
index bc516a7dd..2deb37296 100644
--- a/gst/mpegtsdemux/tsdemux.c
+++ b/gst/mpegtsdemux/tsdemux.c
@@ -1300,8 +1300,16 @@ 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);
- g_assert (header.packet_length >= header.header_size);
- stream->expected_size = header.packet_length - header.header_size;
+ stream->expected_size = header.packet_length;
+ if (stream->expected_size) {
+ if (G_LIKELY (stream->expected_size > header.header_size)) {
+ stream->expected_size -= header.header_size;
+ } else {
+ /* next packet will have to complete this one */
+ GST_ERROR ("invalid header and packet size combination");
+ stream->expected_size = 0;
+ }
+ }
data += header.header_size;
length -= header.header_size;