Commit 1d293764 authored by Guillaume Desmottes's avatar Guillaume Desmottes 🐐
Browse files

avdemux: fix negative pts if start_time is bigger than the ts

The start time is supposed to be the ts of the first frame.
FFmpeg uses fractions to represent timestamps and the start time may use a
different base than the frame pts. So we may end up having the start
time bigger than the pts because of rounding when converting to gst ts.

See gstreamer/gst-libav#51
for details.
parent 1e01f276
Pipeline #20427 passed with stages
in 22 minutes and 57 seconds
......@@ -1473,8 +1473,14 @@ gst_ffmpegdemux_loop (GstFFMpegDemux * demux)
goto drop;
#endif
if (GST_CLOCK_TIME_IS_VALID (timestamp))
timestamp -= demux->start_time;
if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
/* start_time should be the ts of the first frame but it may actually be
* higher because of rounding when converting to gst ts. */
if (demux->start_time >= timestamp)
timestamp = 0;
else
timestamp -= demux->start_time;
}
/* check if we ran outside of the segment */
if (demux->segment.stop != -1 && timestamp > demux->segment.stop)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment