From ec11ad9d5557dbfe22e6b7f854c2fbe93aea9cb2 Mon Sep 17 00:00:00 2001 From: "Jan Alexander Steffens (heftig)" Date: Mon, 12 Oct 2020 14:12:24 +0200 Subject: [PATCH] srtsrc: Don't calculate a delay if the srctime is 0 A zero srctime is a missing srctime. Apparently this can happen when ["the connection is not between SRT peers or if Timestamp-Based Packet Delivery mode (TSBPDMODE) is not enabled"][1] so it may not apply to us, but it's best to be defensive. [1]: https://github.com/Haivision/srt/blob/v1.4.2/docs/API.md#sending-and-receiving Part-of: --- ext/srt/gstsrtsrc.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ext/srt/gstsrtsrc.c b/ext/srt/gstsrtsrc.c index 5839d7e..c5e0a93 100644 --- a/ext/srt/gstsrtsrc.c +++ b/ext/srt/gstsrtsrc.c @@ -125,6 +125,7 @@ gst_srt_src_fill (GstPushSrc * src, GstBuffer * outbuf) GstClockTime base_time; GstClockTime capture_time; GstClockTime delay; + int64_t srt_time; SRT_MSGCTRL mctrl; if (g_cancellable_is_cancelled (self->cancellable)) { @@ -154,10 +155,10 @@ gst_srt_src_fill (GstPushSrc * src, GstBuffer * outbuf) capture_time = gst_clock_get_time (clock); #if SRT_VERSION_VALUE >= 0x10402 /* Use SRT clock value if available (SRT > 1.4.2) */ - delay = (srt_time_now () - mctrl.srctime) * GST_USECOND; + srt_time = srt_time_now (); #else /* Else use the unix epoch monotonic clock */ - delay = (g_get_real_time () - mctrl.srctime) * GST_USECOND; + srt_time = g_get_real_time (); #endif gst_object_unref (clock); @@ -191,6 +192,12 @@ gst_srt_src_fill (GstPushSrc * src, GstBuffer * outbuf) /* pktseq is a 31bit field */ self->next_pktseq = (mctrl.pktseq + 1) % G_MAXINT32; + /* 0 means we do not have a srctime */ + if (mctrl.srctime != 0) + delay = (srt_time - mctrl.srctime) * GST_USECOND; + else + delay = 0; + /* Subtract the base_time (since the pipeline started) ... */ if (capture_time > base_time) capture_time -= base_time; -- 2.7.4