diff options
author | Jan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com> | 2020-10-12 14:12:24 +0200 |
---|---|---|
committer | GStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2020-10-12 12:58:22 +0000 |
commit | ec11ad9d5557dbfe22e6b7f854c2fbe93aea9cb2 (patch) | |
tree | 5a1cdb72ff7b479a03f3a3c83667ec9f88d37c2d /ext/srt | |
parent | 6b2fcb52e5b9122d46ba2ac5a41d57133b6ca111 (diff) | |
download | gstreamer-plugins-bad-ec11ad9d5557dbfe22e6b7f854c2fbe93aea9cb2.tar.gz |
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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1674>
Diffstat (limited to 'ext/srt')
-rw-r--r-- | ext/srt/gstsrtsrc.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/ext/srt/gstsrtsrc.c b/ext/srt/gstsrtsrc.c index 5839d7efd..c5e0a93d6 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; |