videomixer: fix up QoS handling for live sources
authorMatthew Waters <matthew@centricular.com>
Mon, 17 Nov 2014 12:16:03 +0000 (23:16 +1100)
committerMatthew Waters <matthew@centricular.com>
Mon, 17 Nov 2014 12:16:03 +0000 (23:16 +1100)
Only attempt adaptive drop when we are not live

https://bugzilla.gnome.org/show_bug.cgi?id=739996

gst/videomixer/videomixer2.c
gst/videomixer/videomixer2.h

index ec6e2a8..abb18f8 100644 (file)
@@ -808,7 +808,7 @@ gst_videomixer2_update_qos (GstVideoMixer2 * mix, gdouble proportion,
   GST_OBJECT_LOCK (mix);
   mix->proportion = proportion;
   if (G_LIKELY (timestamp != GST_CLOCK_TIME_NONE)) {
-    if (G_UNLIKELY (diff > 0))
+    if (!mix->live && G_UNLIKELY (diff > 0))
       mix->earliest_time =
           timestamp + 2 * diff + gst_util_uint64_scale_int_round (GST_SECOND,
           GST_VIDEO_INFO_FPS_D (&mix->info), GST_VIDEO_INFO_FPS_N (&mix->info));
@@ -1503,6 +1503,8 @@ gst_videomixer2_query_latency (GstVideoMixer2 * mix, GstQuery * query)
   g_value_unset (&item);
   gst_iterator_free (it);
 
+  mix->live = live;
+
   if (res) {
     /* store the results */
     GST_DEBUG_OBJECT (mix, "Calculated total latency: live %s, min %"
index 5097d1d..8c6a65f 100644 (file)
@@ -116,6 +116,9 @@ struct _GstVideoMixer2
 
   gboolean send_stream_start;
 
+  /* latency */
+  gboolean live;
+
   GstTagList *pending_tags;
 };