From 32281ddd3317ae3197633ee9f54720968f2afba7 Mon Sep 17 00:00:00 2001 From: Ederson de Souza Date: Fri, 3 Apr 2020 10:41:31 -0700 Subject: 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: --- ext/avtp/gstavtpsink.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'ext/avtp') 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); } -- cgit v1.2.1