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:
Sebastian Dröge 2015-01-07 18:05:18 +01:00
parent 07c5d1820a
commit 87c8c163a8

View file

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