mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 03:35:21 +00:00
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
This commit is contained in:
parent
f144d1795d
commit
417e3e0346
1 changed files with 9 additions and 2 deletions
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue