summaryrefslogtreecommitdiff
path: root/ext/avtp
diff options
context:
space:
mode:
authorEderson de Souza <ederson.desouza@intel.com>2020-04-03 10:41:31 -0700
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>2020-05-02 17:42:15 +0000
commit32281ddd3317ae3197633ee9f54720968f2afba7 (patch)
treeaac030a8aae0fe78ede870cb12e31a4734695eca /ext/avtp
parent7edaeb3fae66450759c293e411b630c6fbdfd0ba (diff)
downloadgstreamer-plugins-bad-32281ddd3317ae3197633ee9f54720968f2afba7.tar.gz
avtpsink: Accept buffers that fall out of segment
Proper calculate running time for buffers that are out of current segment and try to honor them. A typical case is for AVTP packets coming from avtpcvfpay element, as those may have DTS that falls out of segment (which is about PTS). By using gst_segment_to_running_time_full(), avtpsink can properly calculate when to transmit those buffers. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1004>
Diffstat (limited to 'ext/avtp')
-rw-r--r--ext/avtp/gstavtpsink.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/ext/avtp/gstavtpsink.c b/ext/avtp/gstavtpsink.c
index 5f469dd65..a825049d8 100644
--- a/ext/avtp/gstavtpsink.c
+++ b/ext/avtp/gstavtpsink.c
@@ -374,12 +374,17 @@ gst_avtp_sink_render (GstBaseSink * basesink, GstBuffer * buffer)
if (G_LIKELY (basesink->sync)) {
GstClockTime base_time, running_time;
struct cmsghdr *cmsg = CMSG_FIRSTHDR (avtpsink->msg);
+ gint ret;
g_assert (GST_BUFFER_DTS_OR_PTS (buffer) != GST_CLOCK_TIME_NONE);
+ ret = gst_segment_to_running_time_full (&basesink->segment,
+ basesink->segment.format, GST_BUFFER_DTS_OR_PTS (buffer),
+ &running_time);
+ if (ret == -1)
+ running_time = -running_time;
+
base_time = gst_element_get_base_time (GST_ELEMENT (avtpsink));
- running_time = gst_segment_to_running_time (&basesink->segment,
- basesink->segment.format, GST_BUFFER_DTS_OR_PTS (buffer));
running_time = gst_avtp_sink_adjust_time (basesink, running_time);
*(__u64 *) CMSG_DATA (cmsg) = UTC_TO_TAI (base_time + running_time);
}