From 8846e6fb9f41bd283dd754a87bb704026f0f12cf Mon Sep 17 00:00:00 2001
From: Yoann Lopes <yoann.lopes@qt.io>
Date: Sun, 28 Jan 2018 21:26:36 +0100
Subject: [PATCH] GStreamer: fix udpsrc timeout setting

The timeout's time unit has changed between 0.10 and 1.0, from
microseconds to nanoseconds, but we were always passing the value in
microseconds. This would cause an UDP stream to always timeout with
GStreamer 1.0.

Change-Id: I69786480d29854d3a030f9dbea15c69ee89f3dd5
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
---
 .../mediaplayer/qgstreamerplayersession.cpp         | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp
index cc7aef367..a96da66f8 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp
@@ -1541,10 +1541,17 @@ void QGstreamerPlayerSession::playbinNotifySource(GObject *o, GParamSpec *p, gpo
     //set timeout property to 30 seconds
     const int timeout = 30;
     if (qstrcmp(G_OBJECT_CLASS_NAME(G_OBJECT_GET_CLASS(source)), "GstUDPSrc") == 0) {
-        //udpsrc timeout unit = microsecond
-        //The udpsrc is always a live source.
-        g_object_set(G_OBJECT(source), "timeout", G_GUINT64_CONSTANT(timeout*1000000), NULL);
+        quint64 convertedTimeout = timeout;
+#if GST_CHECK_VERSION(1,0,0)
+        // Gst 1.x -> nanosecond
+        convertedTimeout *= 1000000000;
+#else
+        // Gst 0.10 -> microsecond
+        convertedTimeout *= 1000000;
+#endif
+        g_object_set(G_OBJECT(source), "timeout", convertedTimeout, NULL);
         self->m_sourceType = UDPSrc;
+        //The udpsrc is always a live source.
         self->m_isLiveSource = true;
     } else if (qstrcmp(G_OBJECT_CLASS_NAME(G_OBJECT_GET_CLASS(source)), "GstSoupHTTPSrc") == 0) {
         //souphttpsrc timeout unit = second
-- 
GitLab