rtpjitterbuffer: fix lost-event using dts instead of pts
authorHavard Graff <havard.graff@gmail.com>
Sun, 9 Oct 2016 13:59:05 +0000 (15:59 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 4 Nov 2016 14:51:20 +0000 (16:51 +0200)
commitfb9c75db360ff1aa61710804b08788b6c35f44df
tree72b2e5fc7d2e8fc850ea47cda2cf39c0da847ff7
parentbea35f97c8eeca4f78a99d61d4bd04a2be2124cf
rtpjitterbuffer: fix lost-event using dts instead of pts

The lost-event was using a different time-domain (dts) than the outgoing
buffers (pts). Given certain network-conditions these two would become
sufficiently different and the lost-event contained timestamp/duration
that was really wrong. As an example GstAudioDecoder could produce
a stream that jumps back and forth in time after receiving a lost-event.

The previous behavior calculated the pts (based on the rtptime) inside the
rtp_jitter_buffer_insert function, but now this functionality has been
refactored into a new function rtp_jitter_buffer_calculate_pts that is
called much earlier in the _chain function to make pts available to
various calculations that wrongly used dts previously
(like the lost-event).

There are however two calculations where using dts is the right thing to
do: calculating the receive-jitter and the rtx-round-trip-time, where the
arrival time of the buffer from the network is the right metric
(and is what dts in fact is today).

The patch also adds two tests regarding B-frames or the
“rtptime-going-backwards”-scenario, as there were some concerns that this
patch might break this behavior (which the tests shows it does not).
gst/rtpmanager/gstrtpjitterbuffer.c
gst/rtpmanager/rtpjitterbuffer.c
gst/rtpmanager/rtpjitterbuffer.h
tests/check/elements/rtpjitterbuffer.c