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 https://gitlab.freedesktop.org/gstreamer/gst-libav/issues/51
for details.
This commit is contained in:
Guillaume Desmottes 2019-02-21 08:48:31 +01:00
parent 1e01f2764b
commit 1d293764e5

View file

@ -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)