From 417e3e034649cb3cb00ea52e52d8ea8a9ef3147b Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Fri, 19 Feb 2010 10:13:34 +0100 Subject: [PATCH] asfdemux: Make sure we don't end up with negative timestamps. Some files have payload with timestamps smaller than the preroll duration. Instead of blindly substracting the preroll value (and ending up with insanely high timestamps on the outgoing buffers), we make sure we never go below 0. Fixes #610432 --- gst/asfdemux/asfpacket.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/gst/asfdemux/asfpacket.c b/gst/asfdemux/asfpacket.c index 1c0ecb0994..d2665938d4 100644 --- a/gst/asfdemux/asfpacket.c +++ b/gst/asfdemux/asfpacket.c @@ -357,7 +357,10 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet, if (payload.rep_data_len >= 8) { payload.mo_size = GST_READ_UINT32_LE (payload.rep_data); payload.ts = GST_READ_UINT32_LE (payload.rep_data + 4) * GST_MSECOND; - payload.ts -= demux->preroll; + if (G_UNLIKELY (payload.ts < demux->preroll)) + payload.ts = 0; + else + payload.ts -= demux->preroll; asf_payload_parse_replicated_data_extensions (stream, &payload); GST_LOG_OBJECT (demux, "media object size : %u", payload.mo_size); @@ -412,7 +415,11 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet, *p_data += payload_len; *p_size -= payload_len; - ts = payload.mo_offset * GST_MSECOND - demux->preroll; + ts = payload.mo_offset * GST_MSECOND; + if (G_UNLIKELY (ts < demux->preroll)) + ts = 0; + else + ts -= demux->preroll; ts_delta = payload.rep_data[0] * GST_MSECOND; for (num = 0; payload_len > 0; ++num) {