mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 06:16:36 +00:00
rtpjitterbuffer: If we get a gap with a buffer without DTS, error out
We (currently?) can't really handle gaps between RTP packets if they're not properly timestamped. The current code would go into calculations with GST_CLOCK_TIME_NONE and then cause assertions everywhere. It's probably better to error out cleanly instead.
This commit is contained in:
parent
07c5d1820a
commit
87c8c163a8
1 changed files with 14 additions and 1 deletions
|
@ -2222,7 +2222,12 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent,
|
||||||
} else {
|
} else {
|
||||||
gboolean reset = FALSE;
|
gboolean reset = FALSE;
|
||||||
|
|
||||||
if (gap < 0) {
|
if (!GST_CLOCK_TIME_IS_VALID (dts)) {
|
||||||
|
/* We would run into calculations with GST_CLOCK_TIME_NONE below
|
||||||
|
* and can't compensate for anything without DTS on RTP packets
|
||||||
|
*/
|
||||||
|
goto gap_but_no_dts;
|
||||||
|
} else if (gap < 0) {
|
||||||
/* we received an old packet */
|
/* we received an old packet */
|
||||||
if (G_UNLIKELY (gap < -RTP_MAX_MISORDER)) {
|
if (G_UNLIKELY (gap < -RTP_MAX_MISORDER)) {
|
||||||
/* too old packet, reset */
|
/* too old packet, reset */
|
||||||
|
@ -2405,6 +2410,14 @@ duplicate:
|
||||||
free_item (item);
|
free_item (item);
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
|
gap_but_no_dts:
|
||||||
|
{
|
||||||
|
/* this is fatal as we can't compensate for gaps without DTS */
|
||||||
|
GST_ELEMENT_ERROR (jitterbuffer, STREAM, DECODE, (NULL),
|
||||||
|
("Received packet without DTS after a gap"));
|
||||||
|
gst_buffer_unref (buffer);
|
||||||
|
return GST_FLOW_ERROR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstClockTime
|
static GstClockTime
|
||||||
|
|
Loading…
Reference in a new issue