summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Alexander Steffens (heftig) <jan.steffens@ltnglobal.com>2020-10-12 14:12:24 +0200
committerTim-Philipp Müller <tim@centricular.com>2020-10-12 23:50:12 +0100
commit10bb429a087a1c4cbc9f9375cd4f92d566ff98b7 (patch)
tree7467e6b90221822e323685f861e0b81a0a79d368
parent41a818dff545ed55fb45a4fcc04f69713525a6b2 (diff)
downloadgstreamer-plugins-bad-10bb429a087a1c4cbc9f9375cd4f92d566ff98b7.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/1690>
-rw-r--r--ext/srt/gstsrtsrc.c11
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;